Jak ogarnąć możliwość wołania metod z innej aplikacji na tym samym serwerze aplikacyjnym.
Jeśli pakujemy do jednego ear'a to wystarczy zastosować Remote EJB, ale co jeśli chcemy wołać metody z aplikacji osobno umieszczanej na serwerze (jak wstrzyknąć taki bean)?
Dependency Injection of remote EJB references in not standardized więc zależy na jakim AS i w jakiej konfiguracji
W jbosss wszystko jest w JNDI, zazwyczaj app.ear#EJBName
serwer aplikacyjny wildfly :)
W jednym EARze nie musisz stosować @Remote
, wystarczy też @Local
, natomiast właśnie jak aplikacje są zdeployowane niezależnie to trzeba @Remote
.
Składnia nazw JNDI jest podana np. tutaj:
https://docs.oracle.com/javaee/7/tutorial/ejb-intro004.htm#GIRGN
Od EJB3.1 można podać nazwę jndi jako wartość parametru lookup
adnotacji @EJB
, np:
@EJB( lookup="java:global[/earname]/ejbjarname/MojaKlasaEJB[!com.ejbs.MyEJBRemoteIface]")
MyEJBRemoteIface ejb;
to w nawiasach kwadratowych to opcjonalnie.
Glassfish i Wildfly chyba wyświetlają w logach w momencie deploymentu te nazwy jndi, więc wystarczy skopiować
Dzięki temat ogarnięty ;)
Można wyszukać interfejs lokalny w rejestrze JNDI nie musi być remote, nawet jak jest w innym EAR. Wystarczy JNDI lookup. Remote służy tylko do wyszukania w innym kontenerze EJB.