J2EE, Java EE a Jakarta EE - Vývoj podnikové Javy
V předchozím kvízu, Kvíz - Odkazy, převod MD do HTML, metody POST v JavaEE, jsme si ověřili nabyté zkušenosti z předchozích lekcí.
V tomto Java tutoriálu si objasníme, k jakým rámcovým změnám došlo za posledních pár let v oblasti JavaEE. Uděláme si také přehled, jaké aplikační servery jsou nám k dispozici. Přehled bude obecný a služby (technologie) si zde nebudeme podrobně popisovat.
Historie JavaEE (Jakarta EE) ve zkratce
Zkratka Java EE představuje Java Enterprise Edition (v překladu Java podniková edice). Historie JavyEE je identická jako SE. Původně JavuEE vlastnila firma Sun, která byla koupena firmou Oracle a ta nad ní získala kontrolu. Dříve se Java EE jmenovala J2EE (verze 1.2, 1.3, 1.4), pak došlo k přejmenování na Java EE (verze 5, 6, 7, 8 ) a nyní se technologie jmenuje Jakarta EE (k roku 2020/21 verze 8, 9). JavaEE totiž zjevně pro firmu Oracle nebyla tak lukrativní a dva roky zpět se jí firma rozhodla zbavit.
K odchodu JavyEE od Oracle došlo už někdy kolem roku 2017 nebo 2018 a došlo k přesunu JavaEE pod Eclipse foundation (nadaci). Došlo také k přejmenování nejdříve na JavaEE Jakarta a poté na Jakarta EE. K přejmenování pravděpodobně muselo dojít kvůli tomu, že Oracle nechtěl uvolnit licencovaná pojmenování a označení (lze tomu rozumět - tyto věci si Oracle vždy hlídal, např. viz. licenční podmínky JavaSE 11 a vyšší).
Jakarta EE je pokračováním JavaEE neboli jejím nástupcem (novější verze Java EE). Došlo k tomu přibližně v té době, kdy přešlo NetBeans z Oracle pod Apache.
Pro zájemce je historie JavaEE podrobně vyjádřena zde na wiki.
Co je JavaEE (Jakarta EE)?
Jedná se o souhrn standardů, specifikací, popis, norem a
chování pro různé služby, charakterem typicky podnikové a
webové. Tyto specifikace vezmou do ruky programátoři a
vytvoří z nich knihovny (*.jar
) a aplikační server.
Z pohledu programátora (developera) je JavaEE tedy pouze nástavba (rozšíření) nad jeho Java SE, která dodává pouze nějaké knihovny navíc (jenž obsahují další tisíce objektů, metod, konstant) a aplikační server.
Aplikační server
Aplikační server je program, něco jako JVM, ale pro EE projekty, který umožňuje dané služby spustit či spustit nahrané (uploadnuté) projekty, které dané služby využívají. Danému aplikačnímu serveru se pak tyto knihovny přidají a server se vydá. Takový server jeho autoři pak mohou nechat certifikovat od Oracle pro EE řešení (toto ovšem platilo pouze do JavaEE8). Ne všechny aplikační servery jsou certifikované.
Aplikační servery nemají vlastní JVM a používají JVM z nastavené JavaSE v našem OS. Ne všechny aplikační servery obsahují všechny služby (technologie). Některé se mohou specializovat pouze na některé služby, např. web, EJB, atd. Dokonce některé služby, knihovny a jejich objekty, spustíme i bez aplikačního serveru čistě na JavaSE. Oracle a nyní i Jakarta EE má svůj vlastní aplikační server známý jako GlassFish.
Kompatibilita aplikačních serverů
Samotný zdrojový kód by měl být naprosto přenositelný, a to i včetně
importů různých objektů. Ovšem problém je u různých aplikačních
serverů. Různé objekty jsou totiž uloženy do různých knihoven
(*.jar
), takže pokud budeme dávat identické či podobné
knihovny v různých aplikačních serverech do classpath, nemusí vždy
fungovat. Co se týče vyexportované samotné aplikace (*.jar
,
*.war
, *.ear
), tak v ideálním případě a
teoretické rovině by měla být také přenositelná. Většinou to tak ale
není. Pokud něco vyvíjíme pro daný aplikační server, tak je nejlepší
vyvíjet přímo na daném aplikačním serveru v dané konkrétní verzi.
Výčet aplikačních serverů si uvedeme na konci článku.
Standardy aplikačních serverů
Dále v EE existuje přímo standard pro 2 typy (profily) aplikačních serverů:
- WEB Profile - Obsahuje pouze technologie pro využití pro web
- PLATFORM (Full) Profile - Obsahuje všechny technologie
Pravděpodobným důvodem pro vznik těchto profilů bylo, aby JVM aplikačního serveru nemuselo načítat všechny knihovny a objekty, což by zabralo zbytečnou paměť a systémové zdroje. WEB aplikační server by měl být rychlejší, než robustní PLATFORM server.
Aplikační server (AS) ├── PLATFORM profile └── WEB profile
Jak už jsme zmínili výše, existují aplikační servery, které se specializují na jednu službu (u některých se lze setkat s označením webový kontejner). Jedním z příkladů jsou např. servery rodiny TomEE (webový server Tomcat je jeden z nich, pokud chceme pouze EJB server, pak můžeme použít OpenEJB, atd.)
SPECIALIZOVANÉ SERVERY (NEÚPLNÉ APLIKAČNÍ SERVERY - pro jednu či více služeb) ├── Tomcat (Servlet, JSP, WebSocket, Authentication Service) ├── OpenEJB (služba EJB - enterprise java beans) ├── mnoho dalších
Stejně tak specializované servery by měly být rychlejší než aplikační servery s WEB neb FULL profilem.
Verze JavaEE | Rok vydání | Seznam podporovaných technologií vč. JSR | Verze GlassFish |
---|---|---|---|
J2EE (verze 1.2, 1.3, 1.4) | opravdu dávno | ||
Java EE5 | 2006 | podporované technologie | SailFin 2.0, 2.1, 2.1.1 |
Java EE6 | 2009 | podporované technologie | 3.0, 3.1, 3.1.1, 3.1.2, 3.1.2.2 |
Java EE7 | 2013 | podporované technologie | 4.0, 4.1, 4.1.1, 4.1.2 |
Java EE8 | 2017 | podporované technologie | 5.0, 5.1 |
Jakarta EE8 | 2019 | podporované technologie | 5.0, 5.1 |
Jakarta EE9 | 2020 | podporované technologie | 6.0 |
Pozn.: JavaEE8 co se týče služeb a specifikací je identická s Jakarta EE8.
Jakarta EE vs. Spring
Kdysi by se dalo prohlásit, že framework Spring je konkurentem JavaEE, ale to už moc neplatí. Např. v dobách J2EE, JavaEE ve verzi EJB 1.0, 2.0 měl Spring beany mnohem lepší a mělo jej smysl preferovat. Nicméně vývojáři EE se inspirovali Springem, a vytvořené EJB 3.0 už byly mnohem lepší. Nyní si každý vyvíjí na svém písečku a Spring se s JavouEE (Jakartou EE) mohou vzájemně v některých projektech doplňovat. Spring zatím nemá svůj aplikační server a slouží prakticky pouze jako knihovny třetí strany bežících na JVM nebo jiných aplikačních serverech.
Kompatibilita JavaSE a EE
Připomeňme si, že je vhodné před používáním aplikačního serveru prostudovat dokumentaci nebo web aplikačního serveru a zjistit jakou verzi JavaSE (mělo by být jedno, zda se jedná o Oracle JDK nebo OpenJDK), Java EE nebo Jakartata EE podporuje. Doporučuje se vždy aplikační server z určité doby spouštět na JavaSE z dané doby. Rozhodně nezkoušejte spuštění např. JavaEE5 na Java SE15, či Jakartu EE9 na JavaSE6. V teoretické rovině by mělo být funkční řešení spustit starší verzi EE na novější JavaSE (např. již citovaný JavaEE5 na JavaSE15), ale ani to nemusí fungovat, pokud budeme používat novější rozšíření jazyka. Dále nezapomeňme na problém chyb v Java SE, které mohou vést k chybám v EE a také naopak. Tyto chyby se někdy velmi těžce hledají či se téměř najít nedají.
Programovací prostředí (IDE)
Co se týče IDE (vývojových prostředí), existují pro Jakarta EE prakticky pouze tato hlavní IDE:
- Apache NetBeans - zdarma pro Java SE i EE
- Eclipse EE - zdarma pro Java SE i EE
- IntelliJ IDEA Ultimate - zdarma pro Java SE, placené pro EE
- Případně další, např. JDeveloper IDE - Vyvíjené přímo Oraclem
Samozřejmě používání IDE není povinné, vyvíjet lze projekty teoreticky i s poznámkovým blokem, ale pak si musíme všechno manuálně sami vytvořit (strukturu adresářů), nastavit konfigurační soubory atd. Tudíž nepoužívat IDE prakticky nedává smysl. Které z nich je nejlepší nelze říci, neboť je to dost subjektivní záležitost a podobná diskuze by pravděpodobně jen vyvolala flamewar.
Aplikační servery JavaEE a Jakarta EE
Jak jsme uvedli, tak jako si můžeme vybrat jakou JavaSE chceme (originál Oracle, či Oracle OpenJDK, či jiné IBM, AutoAdaptJDK, atd..), stejně si můžeme vybrat tzv. EE implementaci (aplikační server). Ty jsou:
- GlassFish Server - zdarma a výchozí aplikační server v JavaEE i JakartaEE (v éře JavaEE velmi zabugovaný)
- Payara Server - klon GlassFishe s opravenými bugy, osobně doporučuji spíše Payara než GlassFish
- Red Hat JBoss Enterprise Application Platform - aplikační server s dlouhou historií
- WildFly - WildFly vychází z JBosse
- Apache Geronimo
- Oracle WeboLogic Server
- IBM Websphere AS
- JOnAS
- Resin AS
- Apusic Server
- Primeton AppServer
- Open Liberty
- Tmax JEUS AS
- SAP NetWeaver AS
Dále zde máme tzv. neúplné aplikační servery (není tím myšleno aplikační server WEB profile). Jedná se o servery soustřeďující se na jednu specifickou činnost, tzn. podporující jednu nebo několik technologií v EE:
- Apache Tomcat
- Eclipse Jetty
- Apache OpenEJB
- Apache OpenWebBeans
- Apache OpenJPA
- Apache MyFaces
- Apache ActiveMQ
- Apache CXF
Výzva
A na konec malá výzva. Pokud někdo znáte ještě další servery podporující jednu, více nebo všechny EE technologie, jenž nejsou v článku zmíněny, můžete na ně pod článkem navrhnout link a já je do článku přidám.