Když před třemi lety naše firma vznikala, stáli jsme před zásadním rozhodnutím: na jaké technologické platformě stavět. Zvažovali jsme .NET, PHP frameworky i tehdy populární Ruby on Rails. Nakonec jsme se rozhodli pro Java EE — a dnes, po desítkách úspěšných projektů, víme, že to bylo správné rozhodnutí. Tady je proč.
Proč Java EE a ne Spring?¶
Tohle je asi nejčastější otázka, kterou dostáváme od kolegů z oboru. Spring Framework je výborný nástroj a určitě má své místo. Ale pro naše klienty — většinou velké firmy s požadavky na dlouhodobou údržbu a certifikace — je standardizovaná platforma prostě bezpečnější sázka.
Java EE 6 přinesla zásadní změnu oproti předchozím verzím. Pamatujete ty obrovské XML deskriptory v J2EE 1.4? Entity beans, které nikdo nechtěl používat? To je pryč. Dnešní Java EE je překvapivě jednoduchá — anotace místo XML, CDI pro dependency injection, JPA 2.0 pro persistenci.
EJB 3.1 — konečně použitelné¶
Enterprise JavaBeans měly dlouho špatnou reputaci. Oprávněně — v éře J2EE to byl over-engineered paskvil. Ale EJB 3.1 je úplně jiný příběh. Jednoduchý POJO s pár anotacemi, automatická správa transakcí, timer service, asynchronní zpracování. A hlavně — No-Interface View, takže ani nepotřebujete psát interface, pokud ho nepotřebujete.
Na posledním projektu pro jednu českou banku (nemohu jmenovat, NDA) jsme postavili celý transakční systém na EJB 3.1. Zpracovává tisíce transakcí za minutu, běží na clusteru dvou GlassFish serverů a za poslední rok jsme neměli ani jeden výpadek. Zkuste to s PHP.
JPA 2.0 a Oracle Database¶
Náš typický stack je JPA 2.0 (implementace EclipseLink) nad Oracle Database 11g. Vím, co si teď myslíte — Oracle je drahý. A máte pravdu. Ale když váš klient má Oracle licenci a DBA tým, který ho spravuje dvacet let, nemá smysl jim cpát PostgreSQL jen proto, že je zdarma.
JPA 2.0 nám dává krásnou abstrakci nad databází. Criteria API je sice upovídanější než JPQL, ale type-safe dotazy stojí za tu trochu kódu navíc. A s Oracle-specifickými optimalizacemi (partitioning, materialized views) dosahujeme výkonu, který by nás s ORM frameworkem nad MySQL stál mnohem více úsilí.
Aplikační servery — GlassFish vs. JBoss¶
V tuhle chvíli používáme převážně GlassFish 3.1, referenční implementaci Java EE 6. Je to logická volba — Oracle za ním stojí, dokumentace je výborná a pokud narazíte na bug, máte jistotu, že to není problém implementace, ale specifikace.
JBoss AS 7 je ale zajímavá alternativa. Zkoušeli jsme ho na interním projektu a startuje řádově rychleji než GlassFish. Pro klienty, kteří preferují Red Hat stack (a mají RHEL subscription), je to jednoznačná volba. Migrace mezi servery je díky standardům relativně bezbolestná — většinou stačí upravit datasource konfiguraci a pár vendor-specifických věcí.
SOA — buzzword nebo realita?¶
Service-Oriented Architecture je pojem, který se v enterprise IT skloňuje posledních deset let. A upřímně — hodně projektů se na SOA jen odvolává, ale ve skutečnosti má monolitickou architekturu s pár SOAP web services na vrchu.
My se snažíme dělat SOA poctivě. To znamená jasně definované služby s WSDL kontraktem, ESB (používáme Oracle Service Bus) jako mediační vrstvu a governance proces pro správu služeb. Je to víc práce na začátku, ale klient, který má 50+ systémů, potřebuje pořádek v integraci.
SOAP web services jsou v enterprise světě stále standard. Vím, že v startup komunitě se mluví o RESTful API a JSONu — a ano, pro jednoduché scénáře je REST jednodušší. Ale zkuste v RESTu definovat transakční kontrakt s WS-Security a WS-ReliableMessaging. SOAP má v enterprise stále své místo.
Deployment a provoz¶
Tady je náš stack jednoduchý: RHEL na serverech, Oracle DB, GlassFish (nebo JBoss), Apache HTTP jako reverse proxy. Monitoring přes Nagios, deployment skriptem přes SSH. Žádná magie, ověřená praxe.
Continuous Integration zatím řešíme přes Hudson (ano, vím, že se to teď jmenuje Jenkins). Každý commit spustí build, unit testy a deployment na testovací server. Není to žádný bleeding edge, ale funguje to spolehlivě a naši klienti — kteří mají typicky měsíční release cykly — víc nepotřebují.
Co nás čeká¶
Java EE 7 je v přípravě a vypadá slibně. WebSocket podpora, JSON processing API, Batch API — to jsou věci, které nám teď chybí a řešíme je proprietárními knihovnami. Těšíme se hlavně na JPA 2.1 s stored procedure support a Criteria API vylepšeními.
Cloud computing je téma, které sledujeme, ale zatím ho pro naše klienty nevidíme jako reálnou možnost. Regulace v bankovním sektoru, požadavky na data residency a bezpečnostní audity — to vše zatím mluví pro on-premise řešení. Ale situace se určitě bude vyvíjet.
Závěrem¶
Java EE 6 je dospělá, standardizovaná platforma pro enterprise vývoj. Není to nejsexistější technologie — nedostanete s ní lajky na Hacker News. Ale pokud stavíte systém, který má běžet pět let v bance nebo pojišťovně, je to platforma, na kterou se můžete spolehnout. A to je přesně to, co naši klienti potřebují.