Jaka jest różnica we wdrażaniu aplikacji jako EAR (z 1 modułem EJB i 1 WAR) w porównaniu z oddzielnymi modułami? Chcę korzystać z profilu internetowego GlassFish 3, ale nie obsługuje on archiwum EAR. Czy mogę po prostu użyć EJB i WAR jako oddzielnych modułów? Jakieś inne opcje?EAR vs oddzielne EJB + WAR
Odpowiedz
nie wydaje się być pewne niejasności między 3 wariantach Wdrożenie:
- ucho, że zawiera moduł EJB i WEB
- Wdrażanie oddzielnego modułu EJB i oddzielnego modułu WEB
- Wdrażanie modułu WEB zawierającego klasy EJB lub słoik EJB.
W pierwszej sytuacji masz logicznie jedną aplikację, ale jedną podzieloną na dwa poziomy. Moduł WEB jest odizolowany od modułu EJB w tym sensie, że może pobierać klasy z modułu EJB, ale moduł EJB nie może pobierać klas z modułu WEB. Ponieważ jest to pojedyncza aplikacja, można użyć lokalnego dostępu do komponentów EJB, a wtrysk komponentów EJB działa zgodnie z oczekiwaniami.
W drugiej sytuacji (o której zdaje się być mowa w pytaniu) nie ma jednej logicznej aplikacji, ale naprawdę dwa oddzielne moduły. Działają one w tej samej maszynie JVM, ale oficjalnie Java EE nie zezwala na korzystanie z dostępu lokalnego, a dostęp zdalny musi być używany (chociaż praktycznie dostęp lokalny często działa tak czy inaczej). Ponadto wstrzyknięcie komponentów bean EJB w komponentach bean w module WWW nie działa bezpośrednio z prostą adnotacją @EJB
, ale zamiast tego należy użyć atrybutu lookup
, który określa globalną nazwę JNDI.
Wreszcie, trzecia sytuacja (o której nie wspominasz, ale wzmianka "domowa") jest nieco podobna do pierwszej, ale w tym przypadku nie ma poziomów i izolacji. Komponenty EJB mogą uzyskiwać dostęp do wszystkich klas bezpośrednio z reszty modułu WWW.
Profil internetowy obsługuje tylko tę ostatnią sytuację wdrożeniową. Zarówno EAR, jak i autonomiczne wdrożenia EJB nie są obsługiwane.
Jaka jest różnica w rozmieszczaniu aplikacji jako ucha (z 1 modułem ejb i 1 modułem wojennym) w porównaniu z oddzielnymi modułami?
Brak kompletnej listy: W pliku EAR można również zdefiniować 10 JARów narzędziowych, które znajdują się na przykład w: EAR/lib i mogą być ponownie użyte przez WAR i EJB JARs. Często pliki EAR zapewniają prorestacyjne funkcje wdrażania, np. w produkcie WebSphere można określić szczegóły źródła danych, aby nie trzeba było definiować źródła DataSource (i sterownika JDBC) za pomocą narzędzi zarządzania.
Ponieważ chcę używać profilu sieci Glassfish 3, ale nie obsługuje on archiwum uszu. Czy mogę po prostu użyć ejb i wojny jako oddzielnych modułów? Jakieś inne opcje?
Tak, profil WWW Spec wyraźnie pozwala wdrożyć lekką wersję EJB jako część WAR. Po prostu umieść wewnątrz obudowy EJB JAR. Ten link umożliwia porównanie cech (profil WWW vs pełnowymiarową): http://glassfish.java.net/downloads/v3-final.html
Dzięki, to bardzo mnie oczyszcza.Powinienem więc przejść do pełnego profilu, ponieważ w moim projekcie będą 3 moduły wojny połączone z 1 ejb. – mm1
W pierwszej sytuacji, czy moduł EJB mógłby uzyskać dostęp do modułu WEB przy użyciu atrybutu wyszukiwania, tak jak w drugim? – lpd
Możesz rzucić okiem na to pytanie https://stackoverflow.com/questions/49125538/is-it-possible-to-have-ejbs-in-domain1-lib-using- fisherfish –