Definicja #
Enterprise JavaBeans (EJB) to architektura komponentów server-side wprowadzona w 1998 roku jako część platformy Java EE (Enterprise Edition), obecnie Jakarta EE. Miała uprościć tworzenie skalowalnych, transakcyjnych aplikacji enterprise poprzez dostarczenie gotowych mechanizmów zarządzania transakcjami, bezpieczeństwem i wstrzykiwaniem zależności przez kontener aplikacji.
Typy beanów:
- Stateless Session Bean — bezstanowy bean do obsługi żądań; pula instancji zarządzana przez kontener.
- Stateful Session Bean — stanowy bean utrzymujący stan konwersacji z klientem.
- Singleton Session Bean — jedna instancja na aplikację; do współdzielonego stanu.
- Message-Driven Bean (MDB) — asynchroniczne przetwarzanie wiadomości z kolejek JMS.
- Entity Beans (historyczne, EJB 2.x) — mapowanie obiektowo-relacyjne; zastąpione przez JPA (Hibernate).
EJB 3.0 (Java EE 5, 2006) drastycznie uprościło API — z XML i interfejsów do adnotacji. Jednak popularyzacja Spring Framework (prostszego i lżejszego) spowodowała marginalną pozycję EJB w nowych projektach. Nadal używane w systemach legacy na serwerach JBoss/WildFly, WebLogic i WebSphere.
Zastosowania #
- Utrzymanie systemu bankowego lub ERP na serwerze JBoss/WildFly korzystającego z EJB 3.x.
- Asynchroniczne przetwarzanie zleceń za pomocą Message-Driven Beans z kolejkami JMS (ActiveMQ).
- Zarządzanie transakcjami rozproszonymi (XA transactions) w środowiskach wielozasobowych (JTA).
- Migracja systemu EJB legacy do Spring Boot lub Quarkus.
Ścieżka nauki #
Nauka EJB jest przydatna głównie przy pracy z istniejącymi systemami enterprise:
- Zacznij od podstaw Java i Java EE/Jakarta EE — specyfikacja dostępna na jakarta.ee.
- Zainstaluj WildFly (open-source implementacja Jakarta EE) do ćwiczeń lokalnie.
- Przeczytaj "Enterprise JavaBeans 3.1" (O'Reilly) — najlepsza pozycja o EJB 3.x.
- Naucz się JTA (Java Transaction API) i JPA — nieodłączne od EJB w praktyce.
- Jeśli pracujesz z nowymi projektami — ucz się Spring Boot lub Quarkus zamiast EJB.
- Dokumentacja WildFly i Oracle Java EE Tutorial — bezpłatne, oficjalne zasoby.
FAQ #
- Czy EJB jest nadal używane?
- EJB jest używane głównie w systemach legacy na Java EE application servers (JBoss/WildFly, WebLogic, WebSphere). Nowe projekty Java rzadko sięgają po EJB — dominuje Spring Boot, Quarkus i Micronaut. Wiedza o EJB jest ceniona przy modernizacji i migracji starych systemów enterprise.
- Czym różni się EJB od Spring?
- Spring Framework oferuje podobną funkcjonalność (DI, AOP, transakcje) bez ciężkiego kontenera aplikacji — działa na prostym Tomcat/Jetty. EJB wymaga pełnego serwera aplikacji Jakarta EE. Spring jest lżejszy, bardziej elastyczny i ma znacznie większą społeczność. EJB ma lepszą integrację z JTA transakcjami rozproszonymi.
- Co to są Message-Driven Beans?
- Message-Driven Beans (MDB) to typ EJB do asynchronicznego przetwarzania wiadomości z kolejek JMS (Java Message Service). MDB automatycznie pobiera wiadomości z kolejki i przetwarza je w transakcji zarządzanej przez kontener. Podobną funkcję pełni @JmsListener w Spring.
- Jakie serwery obsługują EJB?
- Pełną specyfikację Jakarta EE (i EJB) obsługują: WildFly/JBoss (Red Hat), Oracle WebLogic, IBM WebSphere, Payara Server, GlassFish. Serwery jak Tomcat i Jetty obsługują tylko Servlet API — nie EJB (choć można dodać OpenEJB/TomEE jako rozszerzenie).