ObrázokNiekedy vie byť programovanie nudné. Napríklad vtedy, ak programujete už tretí informačný systém v rade. Je to všetko podobné. Má to vedieť načítať údaje, zobraziť ich a umožniť ich zmeniť. Tie isté problémy a podobné riešenia. Niekto to ale urobiť musí. Musí napísať tú časť, ktorá vyčítava údaje, tú, ktorá ich ukladá, aj ten zložitý algoritmus na výpočet výsledku. Ale vlastne možno nie. Možno len treba nájsť nástroj, ktorý vám odbúra všetku tú opakujúcu sa prácu a nechá vás sústrediť sa na to, čo je pre danú aplikáciu jedinečné – obchodnú logiku (business logic).

Napríklad ako špecifikácia Enterprise JavaBeans.Enterprise JavaBeans (EJB) je jednou zo špecifikácií Java Enterprise Edition. Pre jej ľahké pochopenie je nutné si uvedomiť jej hlavný účel a ten je: poskytnúť všemožnú podporu pre implementáciu obchodnej logiky. Čo to asi tak znamená? Táto špecifikácia sa snaží poskytnúť všetky nástroje, aby ste sa pri programovaní obchodnej logiky mohli sústrediť len a len na to, čo je pre danú aplikáciu jedinečné. Napríklad za vás rieši transakcie, ukladanie údajov, Dependecy Injection alebo autorizáciu. To všetko sú totiž bežné problémy, ktoré potrebujete vyriešiť v bežnom informačnom systéme (a ak takéto problémy nepotrebujete riešiť, tak JavaEE možno nie je tá správna edícia Javy). A čo teda nevyrieši? No, nerozumie doméne vášho programu, teda napríklad nevie, že objektu objednávky treba pred uložením nastaviť príznak, že je objednávka finálna. Alebo pro objekt dokumentu treba skontrolovať, či jeho typ je zo zoznamu povolených typov. A tak ďalej. To všetko sú už špecifické problémy aplikácie a EJB je vytvorená na to, aby ste mali vhodné prostredie na ich čo najjednoduchšie vyriešenie.

Programovať EJB znamená tvoriť objekty s obchodnou logikou. Asi najlepšie je ich označovať ako služby, pretože bežia na strane server a poskytujú túto obchodnú logiku iným službám alebo klientským aplikáciám. Písanie takejto služby predstavuje vytvorenie objektu, ktorého metódy s modifikátorom public sú dostupné iným službám (v predchádzajúcich verziaách bolo toto komplikovanejšie, keďže každá služba musela mať osobitne definované rozhranie pre externých klientov a rozhranie pre interných klientov, ale od verzie 3 – čo je najnovšia major verzia – je to takto zjednodušené). Zároveň je táto služba automaticky dostupná v rámci Dependency Injection iným triedam. Pričom, aby sa toto udialo, stačí ju jednoducho anotovať (opäť, v predchádzajúcich verziách bolo nutné pribaliť k aplikácii definičný XML súbor. Od verzie 3 stačí len anotácia, aj keď XML sa dá stále použiť). Pomocou takýchto anotácií (alebo pomocou XML súboru ako pôvodného prístupu) viete potom službu pridať alebo jej zmeniť veľa vlastností, ako je napríklad spôsob riešenia transakcií alebo viete zo služby urobiť zároveň REST rozhranie (tu už je samozrejme zo strany servera nutná podpora pre HTTP komunikáciu). Pomocou anotácií viete zadefinovať autorizačné pravidlá na prístup k jednotlivým metódam EJB (EJB samotné nerieši autorizáciu – na to je iná JavaEE špecifikácia, ale EJB s touto špecifikáciou spolupracuje).

Čo teda všetko EJB poskytuje:

  • Dependency Injection – jednoduchý prístup a zdieľanie iných objektov
  • Session – jednotlivé služby vedia byť stavové alebo bezstavové. Pri stavových sa potom server stará o to, aby požiadavky od klienta v rámci jednej session boli smerované stále na tú istú inštanciu služby. Takto je v nej možné uchovávať stav pre server.
  • autorizáciu – pre celé služby alebo jednotlivé metódy sa dajú definovať pravidlá, kto k nim môže a kto k nim nemôže pristupovať
  • transakcie – pre každú metódu je možné definovať transakčné pravidlá. Či má napríklad bežať v rámci transakcie, v ktorej bola volaná, alebo si má vytvoriť svoju vlastnú atď.
  • lifecycle metódy – metódy, ktoré sú volané v určitých okamihoch života služby (pri vytváraní, likvidácii)
  • interceptory – tie umožňujú „zabaliť“ každú metódu služby do inej metódy, ktorá bude vykonávať niektoré rutinné úlohy (ako napríklad logovanie). Ide o implementáciu tzv. aspektovo-orientovaného programovania, kde jednotlivé aspekty (logovanie, exception handling, autorizácia) môžu byť naprogramované zvlášť a potom zložené dokopy, namiesto toho aby boli pomixované v jednej časti kódu.
  • timer service – pomocou tohto je možné naplánovať pravidelné spúšťanie vybraných metód služieb

Osobitnými kapitolami sú MessageDriven EJB a Java Persistent API (JPA). To prvé umožňuje napojiť EJB (jej metódy) na JavaEE špecifikáciu Java Message-Oriented Middleware API (JMS) čím dosiahnete, že sa EJB začnú správať ako spracovatelia alebo producenti správ. To ich umožňuje zaradiť do integračných scénarov, kde komunikácia medzi systémami prebieha na základe správ a nie priameho volania. To druhé je opäť špecifikácia, ktorá umožňuje ukladať údaje v objektoch do relačných databáz (Object-Relation Mapping). Pôvodne bola súčasťou EJB, ale v súčasnosti je oddelená do samostatnej špecifikácie, ale aj tak je s EJB veľmi dobre zaintegrovaná.

Týmto by sme prehľad EJB špecifikácie mohli aj ukončiť. Ak máte zaujem dozvedieť sa viac, kľudne môžete siahnuť po knihe Beginning EJB 3. Aj informácie, ktoré sú spísané v tomto článku sú práve z nej. Kniha má 441 strán a teda dosť priestoru, aby sa venovala špecifikácii samotnej ako aj ďalším témam, ktoré sa EJB nejako dotýkajú (CDI a JTA špecifikácie, vývoj JavaEE aplikácií celkovo a podobne). Kniha je napísaná (ako už jej názov napovedá) pre ľudí, ktorí o EJB veľa nevedia. Neučí ale programovať, preto nejaké základy (ideálne z Javy) je potrebné mať.