středa 11. července 2007

J2EE 6 - krok správným směrem

JSR 316 přesně to je číslo specifikace pro Javu EE 6, která otočí kormidlem dějin dopředu a ani krok zpět. A nebo tak nějak podobně by mohla znít trochu překroucená parafráze jedné hlášky z filmového zpracování románu Miloslava Švandrlíka Černí baroni.

S velkou chutí jsem si přečetl článek Java EE 6 Gets it Right od Roda Johnsona, ve kterém pochvaluje plány této specifikace. Jsem docela rád, že právě Rod Johnson a Interface 21, společnost stojící za Spring frameworkem, budou konečně stát za touto veledůležitou specifikací.

Kromě toho vkládám naděje ještě do Gavina Kinga, který tam bude kibicovat JBoss a připojí reálnou zkušenost s použitím J2EE technologií ve frameworku Seam. Gavin King už se dokonce vytasil s neskromným seznamem přání či změn, které by rád do specifikace protlačil, případně prodiskutoval.

Než se pustím do samotné specky, tak bych rád odcitoval jedno vylepšení EJB, které navrhuje Gavin King a o kterém vždy říkám, že mělo být již součástí EJB 3.0. A také to každému IoC teoretikovi s radostí omlátím o hlavu.

Optional business interface

The fifth item on my wishlist is a pure ease-of-use concern. Currently, EJB mandates that all session beans have some @Local or @Remote interface. This was not an unreasonable requirement when session beans were understood to exist in a business tier, with a well-defined API sitting between the business logic and the client. But now that we're using session beans everywhere - even for presentation logic - it's clear that defining the local interface for every bean is simply a PITA. Unfortunately, we realised this much too late in the process of writing the spec to do anything about it in EJB 3.0 (I've kicked myself many times over this, I should have known better). Especially in an environment like Seam, where the only client of a bean might be a JSF page with EL expressions, the interface looks totally redundant!

The interface should be optional, and when it is missing, the public methods of the bean class should be taken as the business methods of the session bean.

Enterprise verze 6 je zaměřen na tři oblasti.

  • rozšiřitelnost
  • profily
  • deratizace

Rozšiřitelnost

Rozšiřitelnost bere monopol technologiím poskytovaným aplikačním serverem a nahrazuje jej možností integrovat technologie podle potřeb aplikace. Aplikační server nabídne extension pointy, na kterých půjde integrovat technologie použitá aplikací se službami serveru. To znamená, že nebude například problém použít Hibernate či Spring v těsné integraci se službami aplikačního serveru. To co se muselo po různu obcházet, by mělo být transparentní.

Profily

Profily definuji nutnou množinu technologií pro danou oblast, například Web profile může definovvat JPA, Servlety a JSF. To znamená, že aplikační server může být kompatibilní se specifikací na nižším levelu (profilu). Většina aplikací totiž využívá pouze část technologií a tak je zbytečné, aby čekaly na certifikaci celého serveru, která trvá měsíce. Díky profilům se tak specifikace dostane mnohem rychleji do produkce.

Deratizace

Konečně zvítězil zdravý rozum a technologie poplatné době "pravěku" budou odstraněny, tak aby zbytečně nenafukovaly J2EE rodinu. Místo nich zůstanou jejich nástupci. Specifikace již nyní zmiňuje CMT entity beany nahrazený JPA a JAX-RPC nahrazené JAX-WS.

Počítá se s integrací následujících novinek.

Zároveň se bude sahat do stávajících specifikací.

EE 6 opravdu podle prvního nástřelu vypadá tak, že je řízena tím jak vypadá současný model vývoje aplikací a né tím jak si expertní skupina JCP myslí, že by měl vypadat. Rozšiřitelnost a profily nabízejí něco podobného, co představila Java platforma v podobě skriptovacích jazyků. Už není jenom JVM a jeden jazyk, ale JVM, která slouží jako podvozek pro další jazyky. Je na vývojáři, jaký jazyk si vybere a stejné to bude v případě technologií, které se budou moci integrovat s aplikačním serverem.

Vypadá to, že i dodavatelé aplikačních serverů si uvědomili, že je pro ně výhodnější cesta integrace než destrukce a varování před technologiemi nepocházejícími originálně z J2EE specifikace. Vývojář dostane svobodu v tom jakou technologii použije a snadná integrace se službami aplikačního serveru bude stimulovat poptávku po aplikačních serverech. Přesně podle pořekadla Vlk se nažral a koza zůstala celá.

Očekávám, že lidé jako Gavin King a Rod Johnson přinesou další zjednodušení J2EE technologií, tak aby k jejich použití nebylo potřeba nastudovat hory tutoriálů, stohy teorie a ještě tunu návrhových vzorů. Na konci roku 2008 uvidíme co se jim podařilo splnit a kde si ukousnuli příliš velký krajíc.