JavaEE (Enterprise Edition) je jednou z edícií Java platformy. Ako už názov predpovedá, je určená do enterprise prostredia. Pre tento moment si dovolím laickú definíciu, že je to prostredie informačných systémov a obchodných procesov, kde je potrebný vysoký stupeň schopnosti aplikácie integrovať sa s inými systémami. Ak je moja definícia správna, tak si myslím, že JavaEE má všetky potrebné nástroje, aby v tomto prostredí prežila. Kniha Java EE 6 Development with NetBeans 7 od Davida R. Heffelfingera je celkom dobrým prehľadom týchto nástrojov.
Ak s JavaEE začínate bez predchádzajúcich skúseností, je celkom možné, že narazíte na server Glassfish a vývojové prostredie NetBeans. To prvé predstavuje referenčnú implementáciu javovských špecifikácií priamo do Oraclu. To druhé je preferované vývojové prostredie pre Javu tiež dodávané priamo Oraclom (mimochodom, pôvodný vývoj začal v Českej republike). Nie je preto divu, že si autor vybral práve tieto prostriedky na popis vývoja pre JavaEE.
JavaEE nie je mladá edícia a po čase už naozaj obsahuje všetko, čo enterprise aplikácia potrebuje:
- Java Server Pages (JSP) a Java Server Faces (JSF) pre interakciu systému s ľudmi vo forme web stránok
- Java Persistence Api (JPA) pre komunikáciu s rôznymi databázovými backendami
- Enterprise Java Beans (EJB) pre zapúzdrenie obchodnej logiky v aplikácii do spravovateľných jednotiek
- Context and Dependency Injection (CDI) pre vytváranie väzieb v aplikácii (aj mimo nej) bez písania priamych odkazov na triedy a špagetového kódu (teda na základe princípov slabej väzby)
- Java Api for XML Web Services (JAX-WS) a Java Api for RESTful Web Services (JAX-RS) pre komunikáciu s inými systémami
- Java Message Service Api (JMS) pre asynchrónnu komunikáciu
JavaEE obsahuje aj ďalšie špecifikácie a toto je len stručný zoznam tých najdôležitejších, ktorým sa venuje kniha.
JSP predstavuje spôsob, ako pomocou tagov vkladať do HTML kódu rôznu logiku a vytvárať tak dynamické web stránky generované na serveri. Okrem základných tagov je možné použiť aj rôzne rozšírenia: definovať rozhodovanie a opakovacie programové konštrukcie (c:if, c:choose, c:forEach) alebo prácu s databázou (sql:query, sql:update). Tieto rozšírujúce tagy sú súčasťou JSP Standard Tag Library (JSTL) a tiež je možné si dodefinovať vlastné tagy.
JSF je nová generácia web rozhrania pre JavaEE. V podstate je to framework, ktorý sa dá použiť aj inde ako pri web rozhraní, ale práve to je jeho najčastejšie použitie. Používa tiež tagy, ale tiež tzv. JSF Managed Bean na runtime uchovávanie zadaných údajov. Okrem toho je možné napríklad vytvárať šablóny a tie potom aplikovať na viacero stránok naraz. Tiež existuje podpora vo forme Prime Faces, čo je množina komponentov pre JSF.
JPA je špecifikácia umožňujúca jednotný prístup k rôznym databázam. Je to v podstate štandardizované object-relation mapping (ORM) pre Javu. Dátové objekty (Java Beans) sa oanotujú a o ich ukladanie sa stará entity manažér. JPA má špeciálnu podporu v NetBeans, ktorý dokáže vygenerovať dátové oanotované objekty zo SQL dotazov na vytvorenie databázy.
EJB umožňuje zapuzdrovať logiku do samostatných komponentov, a tieto medzi sebou navzájom prepájať. S EJB úzko súvisia transakcie, pretože je možné definovať, že operácie EJB sa budú vykonávať v transakcii (a teda celý proces zahrňujúci viacero EJB by mal byť atomický – okrem iného). S transakciami súvisí aspektovo orientované programovanie, ktoré umožňuje vyvíjať rôzne aspekty programu (transakcie, logovanie) nezávisle od seba, a potom to automaticky spojiť. Aj pre aspektovo orientované programovanie ma EJB podporu.
CDI je špecifikácia implementujúca Dependency Injection (DI) vzor. Vďaka nemu môže jeden objekt získavať odkazy na objekty implementujúce rôzne rozhrania bez nejakého kódu, ktorý by napevno určoval, aké a odkiaľ presne budú tieto objekty získané. To umožňuje udržiavať v aplikácii slabé väzby a zabezpečovať tak jej flexibitlitu. DI je tiež obsiahnutý v JSF a EJB, ale v CDI je možné omnoho podrobnejšie špecifikovať vlastnosti objektu, ktorý má byť získaný.
JAX-WS a JAX-RS sú dve špecifikácie, ktoré slúžia na vytváranie sieťových služieb. JAX-WS na tvorbu starších SOAP sieťových služieb. JAX-RS na tvorbu novších REST sieťových služieb. V oboch prípadoch ide o to, že objekt aj s metódami sa správne oanotuje o ostatné sa už musí postarať JavaEE server. NetBeans tiež umožňuje generovať klientské proxy pre oba typy služieb, ktoré zjednodušuje ich používanie na strane klienta.
JMS je špecifikácia na asynchrónnu komunikáciu pomocou správ. Má dva hlavné režimy: point-to-point a publish/subscribe. Ten prvý znamená komunikáciu dvoch objektov, ten druhý zase hromadnú notifikáciu viacerých objektov pomocou správ.
Toto je stručný popis špecifikácií, ktorým sa kniha venuje hlbšie. Keďže každá z nich je dostatočne rozsiahla, aby si zaslúžila knihu vlastnú (a väčšina z nich, ak nie všetkých, aj takéto knihy majú), obsahuje Davidova kniha len úvod pre každú z nich. Tento úvod je ale vo všetkých prípadoch zakončený nejakým fungujúcim príkladom, ktorý umožní získať aspoň predstavu, ako to všetko funguje. A keďže všetky použité nástroje sú zadarmo, tak je veľmi jednoduché si JavaEE aj otestovať v praxi.