2ee, Java EE a Jakarta EE - Vývoj podnikové Javy
V minulej lekcii, Blog v JEE - Detail článku , sme upravili detailné stránku článkov.
V tomto Java tutoriálu si objasníme, k akým rámcovým zmenám došlo za posledných pár rokov v oblasti JavaEE. Urobíme si tiež prehľad, aké aplikačné servery sú nám k dispozícii. Prehľad bude všeobecný a služby (technológie) si tu nebudeme podrobne popisovať.
História JavaEE (Jakarta EE) v skratke
Skratka Java EE predstavuje Java Enterprise Edition (v preklade Java podniková edícia). História JavyEE je identická ako SE. Pôvodne JavuEE vlastnila firma Sun, ktorá bola kúpená firmou Oracle a tá nad ňou získala kontrolu. Predtým sa Java EE volala J2EE (verzia 1.2, 1.3, 1.4), potom došlo k premenovaniu na Java EE (verzia 5, 6, 7, a teraz sa technológia volá Jakarta EE (k roku 2020/21 verzie 8, 9) . JavaEE totiž zjavne pre firmu Oracle nebola tak lukratívne a dva roky späť sa jej firma rozhodla zbaviť.
K odchodu JavyEE od Oracle došlo už niekedy okolo roku 2017 alebo 2018 a došlo k presunu JavaEE pod Eclipse foundation (nadáciu). Došlo tiež k premenovaniu najskôr na JavaEE Jakarta a potom na Jakarta EE. K premenovaniu pravdepodobne muselo dôjsť kvôli tomu, že Oracle nechcel uvoľniť licencovaná pomenovanie a označenie (možno tomu rozumieť - tieto veci si Oracle vždy strážil, napr. Viz. Licenčné podmienky Javas 11 a vyššie).
Jakarta EE je pokračovaním JavaEE čiže jej nástupcom (novšia verzia Java EE). Došlo k tomu približne v tom čase, kedy prešlo NetBeans z Oracle pod Apache.
Pre záujemcov je história JavaEE podrobne vyjadrená tu na wiki.
Čo je JavaEE (Jakarta EE)?
Jedná sa o súhrn štandardov, špecifikácií, opis,
noriem a správanie pre rôzne služby, charakterom typicky
podnikové a webové. Tieto špecifikácie
vezmú do ruky programátori a vytvorí z nich knižnice (*.jar
) a
aplikačný server.
Z pohľadu programátora (developera) je JavaEE teda iba nadstavba (rozšírenia) nad jeho Java SE, ktorá dodáva len nejaké knižnice navyše (ktorý obsahujú ďalšie tisícky objektov, metód, konštánt) a aplikačný server.
Aplikačný server
Aplikačný server je program, niečo ako JVM, ale pre EE projekty, ktorý umožňuje danej služby spustiť alebo spustiť nahrané (uploadnuté) projekty, ktoré dané služby využívajú. Danému aplikačnému serveru sa potom tieto knižnice pridajú a server sa vydá. Takýto server jeho autori potom môžu nechať certifikovať od Oracle pre EE riešenie (toto však platilo len do JavaEE8). Nie všetky aplikačné servery sú certifikované.
Aplikačné servery nemajú vlastné JVM a používajú JVM z nastavenej Javas v našom OS. Nie všetky aplikačné servery obsahujú všetky služby (technológie). Niektoré sa môžu špecializovať len na niektoré služby, napr. Web, EJB, atď. Dokonca niektoré služby, knižnice a ich objekty, spustíme aj bez aplikačného servera čisto na Javas. Oracle a teraz aj Jakarta EE má svoj vlastný aplikačný server známy ako GlassFish.
Kompatibilita aplikačných serverov
Samotný zdrojový kód by mal byť úplne prenositeľný, a to aj vrátane
importov rôznych objektov. Avšak problém je u rôznych aplikačných
serverov. Rôzne objekty sú totiž uložené do rôznych knižníc
(*.jar
), takže ak budeme dávať identické alebo podobné
knižnice v rôznych aplikačných serveroch do CLASSPATH, nemusí vždy
fungovať. Čo sa týka vyexportované samotnej aplikácie (*.jar
,
*.war
, *.ear
), tak v ideálnom prípade a teoretickej
rovine by mala byť tiež prenositeľná. Väčšinou to tak ale nie je. Ak
niečo vyvíjame pre daný aplikačný server, tak je najlepšie vyvíjať
priamo na danom aplikačnom serveri v danej konkrétnej verzii.
Výpočet aplikačných serverov si uvedieme na konci článku.
Štandardy aplikačných serverov
Ďalej v EE existuje priamo štandard pre 2 typy (profily) aplikačných serverov:
- WEB Profile - Obsahuje iba technológie pre využitie pre web
- PLATFORM (Full) Profile - Obsahuje všetky technológie
Pravdepodobným dôvodom pre vznik týchto profilov bolo, aby JVM aplikačného servera nemuselo načítavať všetky knižnice a objekty, čo by zabralo zbytočnú pamäť a systémové zdroje. WEB aplikačný server by mal byť rýchlejší, než robustné PLATFORM server.
Aplikační server (AS) ├── PLATFORM profile └── WEB profile
Ako už sme spomenuli vyššie, existujú aplikačné servery, ktoré sa špecializujú na jednu službu (u niektorých sa možno stretnúť s označením webový kontajner). Jedným z príkladov sú napr. Servery rodiny Tomom (webový server Tomcat je jeden z nich, ak chceme iba EJB server, potom môžeme použiť OpenEJB, atď.)
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
Rovnako tak špecializované servery by mali byť rýchlejší ako aplikačné servery s WEB neb FULL profilom.
verzia JavaEE | rok vydania | Zoznam podporovaných technológií vr. JSR | verzia GlassFish |
---|---|---|---|
J2EE (verzia 1.2, 1.3, 1.4) | naozaj dávno | ||
Java EE5 | 2006 | podporované technológie | Sailfin 2.0, 2.1, 2.1.1 |
Java EE6 | 2009 | podporované technológie | 3.0, 3.1, 3.1.1, 3.1.2, 3.1.2.2 |
Java EE7 | 2013 | podporované technológie | 4.0, 4.1, 4.1.1, 4.1.2 |
Java EE8 | 2017 | podporované technológie | 5.0, 5.1 |
jakarta EE8 | 2019 | podporované technológie | 5.0, 5.1 |
jakarta EE9 | 2020 | podporované technológie | 6.0 |
Jakarta EE vs. Spring
Kedysi by sa dalo vyhlásiť, že framework Spring je konkurentom JavaEE, ale to už moc neplatí. Napr. v časoch J2EE, JavaEE vo verzii EJB 1.0, 2.0 mal Spring Bean oveľa lepšie a malo ho zmysel preferovať. Avšak vývojári EE sa inšpirovali Spring, a vytvorené EJB 3.0 už boli oveľa lepšie. Teraz si každý vyvíja na svojom piesočku a Spring sa s JavouEE (Jakartou EE) môžu vzájomne v niektorých projektoch dopĺňať. Spring zatiaľ nemá svoj aplikačný server a slúži prakticky iba ako knižnice tretej strany bežiacich na JVM alebo iných aplikačných serveroch.
Kompatibilita Javas a EE
Pripomeňme si, že je vhodné pred používaním aplikačného servera preštudovať dokumentáciu alebo web aplikačného servera a zistiť akú verziu Javas (malo by byť jedno, či sa jedná o Oracle JDK alebo OpenJDK), Java EE alebo Jakarty EE podporuje. Odporúča sa vždy aplikačný server z určitej doby spúšťať na Javas z danej doby. Rozhodne neskúšajte spustenie napr. JavaEE5 na Java SE15, či Jakarta EE9 na JavaSE6. V teoretickej rovine by malo byť funkčné riešenie spustiť staršiu verziu EE na novšie Javas (napr. Už citovaný JavaEE5 na JavaSE15), ale ani to nemusí fungovať, ak budeme používať novšie rozšírenia jazyka. Ďalej nezabudnime na problém chýb v Java SE, ktoré môžu viesť k chybám v EE a tiež naopak. Tieto chyby sa niekedy veľmi ťažko hľadajú či sa takmer nájsť nedajú.
Programovacie prostredie (IDE)
Čo sa týka IDE (vývojových prostredí), existujú pre Jakarta EE prakticky iba tieto hlavné IDE:
- Apache NetBeans - zadarmo pre Java SE aj EE
- Eclipse EE - zadarmo pre Java SE aj EE
- IntelliJ IDEA Ultimate - zadarmo pre Java SE, platené pre EE
- Prípadne ďalšie, napr. JDeveloper IDE - Vyvíjané priamo Oraclom
Samozrejme používanie IDE nie je povinné, vyvíjať možno projekty teoreticky aj s poznámkovým blokom, ale potom si musíme všetko manuálne sami vytvoriť (štruktúru adresárov), nastaviť konfiguračné súbory atď. Preto nepoužívať IDE prakticky nedáva zmysel. Ktoré z nich je najlepší nemožno povedať, lebo je to dosť subjektívna záležitosť a podobná diskusia by pravdepodobne len vyvolala flame war.
Aplikačné servery JavaEE a Jakarta EE
Ako sme uviedli, tak ako si môžeme vybrať akú Javas chceme (originál Oracle, či Oracle OpenJDK, či iné IBM, AutoAdaptJDK, atď ..), rovnako si môžeme vybrať tzv. EE implementáciu (aplikačný server). Tie sú:
- GlassFish Server - zadarmo a predvolený aplikačný server v JavaEE aj JakartaEE (v ére JavaEE veľmi zabugovaný)
- Payara Server - klon GlassFish s opravenými bugy, osobne odporúčam skôr Payara než GlassFish
- Red Hat JBoss Enterprise Application Platform - aplikačný server s dlhou históriou
- WildFly - WildFly vychádza z JBoss
- apache Geronimo
- Oracle WeboLogic Server
- IBM Websphere AS
- Jonáš
- Resin AS
- Apusic Server
- Primeton AppServer
- open Liberty
- Tmax Jeúša AS
- SAP NetWeaver AS
Ďalej tu máme tzv. Neúplné aplikačné servery (nie je tým myslené aplikačný server WEB profile). Jedná sa o servery sústreďujúci sa na jednu špecifickú činnosť, tzn. podporujúce jednu alebo niekoľko technológií v EE:
- apache Tomcat
- eclipse Jetty
- apache OpenEJB
- apache OpenWebBeans
- apache OpenJPA
- apache MyFaces
- apache ActiveMQ
- apache CXF
Výzva
A na koniec malá výzva. Ak niekto poznáte ešte ďalšie servery podporujúce jednu, viac alebo všetky EE technológie, ktorý nie sú v článku spomenuté, môžete na ne pod článkom navrhnúť link a ja ich do článku pridám.
V budúcej lekcii, Blog v JEE - Úprava článku a dokončenie projektu , implementujeme úpravu článku a dokončíme náš blog.