#whatTheHeck : Czym jest JavaEE i co ma wspólnego ze Springiem?

by Patrycja
3 komentarze


Czego wymaga od nas pracodawca, kiedy w ogłoszeniu pisze, że wymagana jest znajomość Javy EE? Znam Javę, co jeszcze muszę wiedzieć?

Zwykle, kiedy mówimy, że programujemy w języku Java mamy na myśli Javę SE (Standard Edition). Jest to platforma dostarczająca podstawowych narzędzi i API, by programować w Javie. Java EE to „rozszerzenie” języka Java, które pozwala budować aplikacje biznesowe. Mówiąc dokładniej, jest to platforma zawierająca gotowe moduły i interfejsy, które ułatwiają programowanie dużych aplikacji. Wśród możliwości jakie oferuje Java EE znajdziemy między innymi standard JPA (mapowanie obiektowo-relacyjne) oraz JSP i JSF ułatwiające tworzenie dynamicznych stron WWW, czy też moduły ułatwiające komunikację sieciową.

Cytując definicję Oracle:

„Java EE to platforma bazująca na platformie Java SE. Java EE dostarcza interfejsów API i środowiska uruchomieniowego by budować i uruchamiać wielowątkowe, skalowalne, niezawodne, bezpieczne aplikacje sieciowe dużej skali.”

Wiemy już, że Java EE to zestaw „narzędzi” pozwalający na łatwe budowanie dużych aplikacji biznesowych. Z jakich elementów składa się Java EE? Poniżej dołączam schemat specyfikacji:

Czemu mówi się że Java EE jest abstrakcyjną specyfikacją? Skoro to abstrakcja, to jak mam ją zainstalować?

Powyższy schemat przestawia zestaw specyfikacji czyli zbiór dokumentów, które wskazują nam jak tworzyć aplikacje zgodnie z określonymi przez Oracle standardami. Jeżeli na przykład chcemy skorzystać z mapowania obiektowo-relacyjnego korzystamy z JPA (czytamy dokumentację JPA, czyli dokument JSR 338 dostępny na stronie Oracle). Dokumentacja mówi nam jakich adnotacji i innych fragmentów kodu należy użyć, by uzyskać dany efekt. Jednak co z implementacją użytych przez nas elementów Javy EE? Musimy chyba najpierw jakoś zainstalować Javę EE?

JDK zawiera w sobie elementy potrzebne by programować w Javie SE. Mówiąc dokładniej, Java SE posiada warstwę abstrakcji, która implementowana jest właśnie przez JDK. Gdzie w takim razie znajduje się implementacja Javy EE? Implementowana jest ona poprzez tzw. serwery aplikacyjne. Korzystając z serwera aplikacji możemy swobodnie korzystać ze wszystkiego co zostało opisane w specyfikacjach Javy EE.

Próbuję ściągnąć JDK Javy EE. Dlaczego w pobranej paczce jest tylko folder „glassfish”?

Java EE implementowana jest poprzez serwer aplikacyjny. Pobierając Javę EE ściągasz serwer GlassFish, który jest jej referencyjną implementacją (ang. reference implementation). Oznacza to, że serwer ten jest wzorcową implementacją tworzoną przez „tych samych” ludzi, którzy napisali specyfikację. By skorzystać z możliwości serwera należy go uruchomić a następnie zdeployować na nim swój kod/aplikację. W pobranej paczce znajdziesz też tutoriale, które pozwolą ci zobaczyć jak działają przykładowe aplikacje w Javie EE oraz niezbędną dokumentację.

Specyfikacje modułów Javy EE Java Platform EE Managed Beans Java EE Web Profile
32 specyfikacje technologii
Java EE 7
Web Technologies WebSocket JSON
Processing
Servlet 3.1 JSF 2.2 EL 3.0 JSP 2.3 JSTL 1.2
Enterprise Application Technologies Batch Applications Concurrency Utilities CDI 1.1 DI 1.0 Bean Validation 1.1 EJB 3.2 interceptors 1.2
JCA 1.7 JPA 2.1 Common Annotations 1.2 JMS 2.0 JTA 1.2 JavaMail 1.5
Web Services Technologies JAX-RS 2.0 JAX-WS 2.2 JAX-RCP 1.1 JAXR 1.0 Web Services 1.3 WS metadata 2.1 JAXM 1.1 & SAAJ 1.3
Management and Security Technologies JASPIC 1.1 JACC 1.5 Application Deployment 1.2 J2EE Management 1.1 Debugging Support for Other Languages 1.0
Specyfikacje z Javy SE związane z javą EE JAXB 2.2 JAXP 1.3 JDBC 4.0 JMX 2.0 JAF 1.1 StAX 1.0 JAAS

Czy muszę korzystać z serwera GlassFish?

Nie. Możesz ściągnąć inny serwer aplikacyjny i na nim deployować swoje aplikacje. Jednym z najpopularniejszych serwerów na rynku jest jBoss (lub WildFly znany jako jBoss AS). Inne dostępne na rynku produkty to np. WebLogic oraz WebSphere.


Dlaczego biblioteki Javy EE nie są częścią „standardowego” JVM/JDK?

Java EE była jedną z pierwszych prób podziału już masywnego JDK na części, którymi łatwiej byłoby zarządzać. Kiedy tworzysz małą aplikację, nie potrzebujesz wszystkich komponentów. Wielu ludzi jest np. niezadowolonych z faktu, że AWT i Swing oraz przestarzałe Applety są częścią JRE (środowiska uruchomieniowego javy). Z kolejnymi wydaniami Java najprawdopodobniej będzie dzielona na mniejsze „lżejsze” moduły. Celem takiego zabiegu jest uzyskanie małego JRE z dodatkowymi, opcjonalnie instalowanymi rozszerzeniami.


Dlaczego numer wersji Javy EE nie jest zgodny z numerem wersji Javy SE?

Java EE jest oparta na platformie Java SE, więc za każdym razem, gdy ma zostać przygotowana nowa wersja Javy EE, najpierw musi zostać wydana dana wersja Javy SE. Java EE 8 wymaga Javy SE 8. Java 8 została już wydana, wersji Enterprise Edition spodziewamy się w pierwszej połowie roku 2017.


Po co mi cały „ciężki” serwer aplikacyjny do tworzenia prostej aplikacji?

Od wersji 6 Javy EE, wydzielono część API najczęściej używanych do tworzenia prostych aplikacji webowych. Zbiór ten nazwany został Web Profile . Jeżeli nie chcesz korzystać z serwera aplikacji oferującego pełną funkcjonalność Javy EE, możesz użyć lekkiego rozwiązania takiego jak np. Tomcat. Tomcat zawiera w sobie kontener serwletów, HTTP connector i silnik JSP. W połączeniu z serwerem Apache może działać jako serwer aplikacyjny. Nie spełnia on jednak standardów Javy EE. Dla tych, którzy chcą jednak skorzystać ze standardu Web Profile przygotowano specjalną wersję Tomcata TomEE (czytaj Tommy), zawiera ona w sobie implementacje poniższych elementów:

Web Profile
Specyfikacje modułów Javy EE Managed Beans
Web Technologies WebSocket JSON
Processing
Servlet 3.1 JSF 2.2 EL 3.0 JSP 2.3 JSTL 1.2
Enterprise Application Technologies CDI 1.1 DI 1.0 Bean Validation 1.1 EJB 3.2 interceptors 1.2
JPA 2.1 Common Annotations 1.2 JTA 1.2
Web Services JAX-RS 2.0
Management and Security Technologies Debugging Support for Other Languages 1.0


Dlaczego nie mogę używać poszczególnych bibliotek Javy EE bez serwera aplikacji?

Możesz to robić! Biblioteki Javy EE mogą być używane bezpośrednio w aplikacjach Javy SE. Niektóre popularne części API Javy EE jak np. JPA mają w swojej dokumentacji wydzieloną sekcję, która tłumaczy jak uruchomić je w Javie SE. Należy pamiętać o tym, że należy do projektu dołączyć odpowiednie biblioteki oraz kod który zapewni odpowiednią ich integrację. Najczęściej w takich rozwiązaniach wykorzystuje się Tomcata.


Co Java EE ma wspólnego z Frameworkiem Spring?

Trochę historii:

Kiedy powstała Java EE, nazywała się J2EE (Java EE to nowa nazwa). W dawnych czasach J2EE była trudna w utrzymaniu i nie była ulubieńcem programistów. Kiedy powstał Spring, okazał się być dużo lepszą alternatywą do EJB. Wraz z wydaniem wersji 5, Javę EE znacznie ulepszono inspirując się rozwiązaniami jakie zaprezentował framework Spring. Od czasów Javy EE 6 (Wprowadzenie CDI) nie ma już praktycznie różnic w popularności, czy wygodzie programowania pomiędzy Javą EE a Springiem. Aktualnie wybór pomiędzy tymi technologiami sprowadza się do preferencji programisty. W wyborze możemy się kierować między innymi tym, czy chcemy korzystać z ciężkiego serwera aplikacji czy może z lekkiego kontenera. Jeżeli chcemy korzystać z najnowszych nowinek technologicznych, warto wybrać Springa. Jest to projekt, który posiada wiele modułów rozwijanych jako Open Source, co pozwala na szybki rozwój frameworku. Java EE z kolei gwarantuje nam stabilność, w końcu jest to standard.

3 komentarze

Avatar
A. 13 czerwca 2016 - 13:10

Super wpis! Wreszcie zrozumiałam o co chodzi z tą Javą EE 🙂 Dzięki! Powodzenia w dalszym prowadzeniu bloga 😉

Odpowiedz
Avatar
ARR 25 sierpnia 2017 - 13:17

szkoda, że tak dobry blog ma tak niewielu widzów
Do tej pory nie spotkalem się z takim rzetelnym artykułem nt EE

Odpowiedz
Avatar
k4mil_m 21 marca 2018 - 19:18

Programuję w Javie od 10 lat, ale nigdy nie ruszałem EE i na dobrą sprawę nie wiedzialem dokładnie z czym to się je. Dzięki za super wyjaśnienie!

Odpowiedz

Zostaw komentarz