En Liberty anterior a la versión 20.0.0.12, los beans Enterprise JavaBeans (EJB) están enlazados solo al espacio de nombres java:[scope]. Los beans EJB no estaban enlazados a un espacio de nombres Java Naming and Directory Interface (JNDI) raíz del servidor, lo que significa que no se han podido definir los nombres de enlace JNDI. Los atributos de enlaces EJB que le permite especificar el nombre JNDI en WebSphere Application Server tradicional se han ignorado en Liberty.
Los siguientes atributos de enlaces EJB del archivo ibm-ejb-jar-bnd.xml se han ignorado en Liberty.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameLos siguientes atributos de enlace EJB del archivo ibm-ejb-jar-bnd.xmi se han ignorado en Liberty.
ejbBindings jndiNameEsta regla señala todos los nombres de enlace JNDI que se han ignorado en Liberty antes de 20.0.0.12. Si la aplicación utiliza estos nombres en búsquedas JNDI directas en lugar de utilizando referencias EJB, debe utilizar la versión de Liberty 20.0.0.12 o posterior, o modificar la aplicación.
Si utiliza referencias EJB, la regla
Cambio de comportamiento en búsquedas de Enterprise JavaBeans en versiones anteriores de Liberty señala todos los nombres JNDI que se deben convertir al espacio de nombres java: si se utiliza una versión de Liberty anterior a la versión 20.0.0.12.
Si no utiliza referencias EJB y está utilizando una versión de Liberty anterior a la versión 20.0.0.12, se recomienda utilizar una versión más reciente de Liberty o crear una referencia EJB utilizando el mismo nombre JNDI y establecer la referencia EJB binding-name en el nombre JNDI java:[scope]. Si no añade una referencia EJB, debe explorar en el código Java el uso de estos nombres JNDI y convertir el nombre de búsqueda al nombre JNDI java:.
El siguiente ejemplo crea una referencia EJB para ayudar a migrar cualquier problema de búsqueda si no está utilizando la versión de Liberty 20.0.0.12 o posterior.
EJB referenciado:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Interfaz remota:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
A continuación, se muestran ejemplos sobre cómo declarar una referencia de EJB en Liberty. 1a o 1b son necesarios en conjunción de 2a, 2b, 3a o 3b para enlazar correctamente un EJB y su referencia. Por ejemplo, las opciones recomendadas son 1a y 2b para una configuración fácil y satisfactoria, pero si 1b se declara en conjunción con 3b, obtendrá la misma funcionalidad que la configuración recomendada.
|
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 a la anotación @EJB. Si se utiliza
ejb-jar.xml o web.xml, se
debe añadir el elemento <ejb-link> al elemento
<ejb-ref>. Las modificaciones de 1a y 1b se muestran aquí:|
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 a la anotación @EJB. Si se utiliza
ejb-jar.xml o web.xml, se
debe añadir el elemento <lookup-name> al elemento
<ejb-ref>. Las modificaciones de 1a y 1b se muestran aquí:
|
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 o binding-name se
puede utilizar opcionalmente para hacer referencia a los EJB en la misma aplicación. En
ese caso, el valor se puede establecer en cualquier búsqueda de EJB directa aplicable que
se describe al final de esta página.
A continuación se muestra la búsqueda de referencia de EJB final:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
De forma alternativa, hay tres opciones para buscar un EJB directamente, sin utilizar una referencia de 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"); } } |
Para obtener más información sobre cómo utilizar enlaces EJB, consulte Utilización de Enterprise JavaBeans con interfaces remotas en Liberty y Visión general de los enlaces de aplicación EJB 3.0 y EJB 3.1.