Na serwerze Liberty w wersjach wcześniejszych niż 20.0.0.12 komponenty EJB (Enterprise JavaBeans) były powiązane tylko z przestrzenią nazw java:[zasięg]. Komponenty
EJB nie są powiązane z przestrzenią nazw JNDI (Java Naming and Directory Interface) katalogu głównego serwera, co oznacza, że nie można było zdefiniować nazw powiązań JNDI. Atrybuty powiązań komponentów EJB, które umożliwiają podanie nazwy JNDI na serwerze WebSphere Application Server traditional, były ignorowane na serwerze Liberty.
Na serwerze Liberty były ignorowane następujące atrybuty powiązań komponentów EJB z pliku ibm-ejb-jar-bnd.xml.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameNa serwerze Liberty były ignorowane następujące atrybuty powiązań komponentów EJB z pliku ibm-ejb-jar-bnd.xm.
ejbBindings jndiNameTa reguła powoduje oznaczenie flagą wszystkich nazw powiązań JNDI, które były zignorowane na serwerze Liberty w wersjach wcześniejszych niż 20.0.0.12. Jeśli aplikacja używa tych nazw w bezpośrednich wyszukiwaniach JNDI zamiast używać odwołań do komponentów EJB, należy użyć serwera Liberty w wersji 20.0.0.12 lub nowszej lub zmodyfikować aplikację.
Jeśli używane są odwołania do komponentów EJB,
reguła Zmiana zachowania w przypadku wyszukiwań komponentów EJB w poprzednich wersjach serwera Liberty
oznacza wszystkie nazwy JNDI, które należy przekształcić do przestrzeni nazw java:, jeśli używana jest wersja serwera Liberty starsza niż 20.0.0.12.
Jeśli odwołania do komponentów EJB nie są używane i używane są wersje serwera Liberty starsze niż 20.0.0.12, zaleca się użycie nowszej wersji serwera Liberty lub utworzenie odwołania do komponentu EJB przy użyciu tej samej nazwy JNDI i ustawienie odwołania do komponentu EJB binding-name
na nazwę JNDI java:[zasięg]. Jeśli nie dodasz odwołania do komponentu EJB, należy przeskanować kod Java pod kątem użycia tych nazw JNDI i przekształcić nazwę wyszukiwania w nazwę JNDI java:.
W poniższym przykładzie tworzone jest odwołanie do komponentu EJB ułatwiające eliminację wszystkich problemów z wyszukiwaniem, jeśli nie jest używany serwer Liberty w wersji 20.0.0.12 lub nowszej.
Przywoływany komponent EJB:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Interfejs zdalny:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
Poniżej znajdują się przykłady deklarowania odwołania do komponentu EJB na serwerze Liberty. Do pomyślnego połączenia komponentu EJB i jego odwołania wymagane jest 1a lub 1b w połączeniu z 2a, 2b, 3a lub 3b. Na przykład zalecanymi opcjami są 1a i 2b ułatwiające konfigurację, ale w przypadku zadeklarowania 1b w połączeniu z 3b dostępne będą te same funkcje, co w konfiguracji zalecanej.
|
public class TestServlet { @EJB(name="ejb/MyEJB") MyEJB myEjb; .... } |
|
<ejb-ref> <ejb-ref-name>ejb/MyEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <remote>com.test.MyEJBInterface</remote> <ejb-ref> |
@EJB należy dodać element beanName. Jeśli używany jest plik ejb-jar.xml lub web.xml, do istniejącego elementu <ejb-ref> należy dodać element <ejb-link>. Przedstawione są tu zmiany, które należy wprowadzić do 1a i 1b:|
public class TestServlet { @EJB(name="ejb/MyEJB" beanName="MyEJB") MyEJB myEjb; .... } |
|
<ejb-ref> <ejb-ref-name>ejb/MyEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <remote>com.test.MyEJBInterface</remote> <ejb-link>MyEJB</ejb-link> <ejb-ref> |
lookup do adnotacji @EJB. Jeśli używany jest plik ejb-jar.xml lub web.xml, do istniejącego elementu <ejb-ref> należy dodać element <ejb-ref>. Przedstawione są tu zmiany, które należy wprowadzić do 1a i 1b:
|
public class TestServlet { @EJB(name="ejb/MyEJB" lookup="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface") MyEJB myEjb; .... } |
|
<ejb-ref> <ejb-ref-name>ejb/MyEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <remote>com.test.MyEJBInterface</remote> <lookup-name>java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface</lookup-name> <ejb-ref> |
|
<ejb-ref name="ejb/MyEJB" binding-name="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface"/> |
lookup, lookup-name lub binding-name. W takim przypadku wartość może zostać ustawiona na dowolne możliwe do zastosowania bezpośrednie wyszukiwanie EJB, które zostało opisane na końcu tej strony.
Poniżej przedstawiono ostateczne wyszukiwanie odwołania do komponentu EJB:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
Istnieją również trzy alternatywne opcje wyszukiwania komponentu EJB bezpośrednio bez użycia odwołania do komponentu EJB:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:module/MyEJB!com.test.MyEJBInterface"); } } |
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:app/moduleA/MyEJB!com.test.MyEJBInterface"); } } |
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface"); } } |
Więcej informacji o używaniu powiązań komponentów EJB zawierają tematy Używanie komponentów EJB z interfejsami zdalnymi na serwerze Liberty i Przegląd powiązań aplikacji EJB 3.0 i EJB 3.1.