In Liberty-Versionen vor 20.0.0.12 wurden EJB-Beans (Enterprise JavaBeans) nur an den Namespace java:[scope] gebunden. EJB-Beans wurden nicht an einen servergebundenen JNDI-Namespace
(Java Naming and Directory Interface) gebunden, daher konnten Sie die JNDI-Bindungsnamen nicht definieren.
EJB-Bindungsattribute, die in WebSphere Application Server Traditional eine Spezifikation des JNDI-Namens erlauben, wurden in Liberty ignoriert.
Die folgenden EJB-Bindungsattribute aus der Datei ibm-ejb-jar-bnd.xml wurden in Liberty ignoriert.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameDie folgenden EJB-Bindungsattribute aus der Datei ibm-ejb-jar-bnd.xmi wurden in Liberty ignoriert.
ejbBindings jndiNameDiese Regel markiert alle JNDI-Bindungsnamen, die in Liberty-Versionen vor 20.0.0.12 ignoriert wurden. Wenn Ihre Anwendung diese Namen in direkten JNDI-Suchen verwendet anstatt EJB-Referenzen zu verwenden, müssen Sie Liberty Version 20.0.0.12 oder höher verwenden oder Ihre Anwendung ändern.
Wenn Sie EJB-Referenzen verwenden, markiert die Regel Geändertes Verhalten bei Suchfunktionen für Enterprise JavaBeans in früheren Versionen von Liberty
alle JNDI-Namen, die in den java:-Namespace konvertiert werden müssen, wenn Sie eine ältere Version von Liberty als 20.0.0.12 verwenden.
Wenn Sie keine EJB-Referenzen verwenden und eine ältere Version von Liberty als 20.0.0.12 verwenden, wird empfohlen, eine neuere Version von Liberty als 20.0.0.12 zu verwenden oder
eine EJB-Referenz mit demselben JNDI-Namen zu erstellen und die EJB-Referenz binding-name
auf den java:[scope]-JNDI-Namen zu setzen. Wenn Sie keine EJB-Referenz hinzufügen, müssen Sie Ihren Java-Code nach JNDI-Namen durchsuchen und den Suchnamen in den java:-JNDI-Namen konvertieren.
Im folgenden Beispiel wird eine EJB-Referenz für die Migration von Lookup-Problemen erstellt, wenn Sie Liberty Version 20.0.0.12 oder höher nicht verwenden.
Referenzierte EJB:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Remote-Schnittstelle:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
Im Folgenden finden Sie Beispiele für die Deklaration einer EJB-Referenz in Liberty. 1a oder 1b ist zusammen mit 2a, 2b, 3a und 3b erforderlich, um eine EJB und ihre Referenz erfolgreich zu verlinken. Die empfohlenen Optionen sind beispielsweise 1a und 2b für ein einfaches und erfolgreiches Setup, aber wenn 1b zusammen mit 3b deklariert wird, erhalten sie dieselbe Funktionalität wie beim empfohlenen Setup.
|
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> |
beanName
der Annotation @EJB hinzugefügt werden. Bei der Verwendung einer Datei ejb-jar.xml
oder web.xml muss das Element <ejb-link> dem vorhandenen Element
<ejb-ref> hinzugefügt werden. Änderungen an 1a und 1b werden im Folgenden gezeigt: |
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 zur Annotation @EJB hinzufügen. Bei der Verwendung einer Datei ejb-jar.xml
oder web.xml muss das Element <lookup-name> dem vorhandenen Element
<ejb-ref> hinzugefügt werden. Änderungen an 1a und 1b werden im Folgenden gezeigt: |
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 oder binding-name für die Referenzierung von
EJBs in derselben Anwendung verwendet werden. In diesem Fall kann als Wert jedes gültige direkte EJB-Lookup gesetzt werden, das am Ende dieser Seite beschrieben ist.
Im Folgenden sehen Sie die endgültige EJB-Referenzsuche:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
Alternativ gibt es drei direkte Lookup-Optionen für EJBs, bei denen keine EJB-Referenz verwendet wird:
|
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"); } } |
Weitere Informationen zur Verwendung von EJB-Bindungen finden Sie unter Enterprise JavaBeans mit fernen Schnittstellen in Liberty verwenden und Übersicht über EJB-3.0- und EJB-3.1-Anwendungsbindungen.