Nelle versioni di Liberty precedenti alla 20.0.0.12, i bean Enterprise JavaBeans (EJB) erano collegati solo allo spazio dei nomi java:[scope]. I bean EJB non sono vincolati ad uno spazio dei nomi Java Naming and Directory Interface (JNDI) della root del server, il che significa che non è stato possibile definire i nomi di bind JNDI. Gli attributi di bind EJB che consentono di specificare il nome JNDI in WebSphere Application Server tradizionale sono stati ignorati in Liberty.
I seguenti attributi bind EJB del file ibm-ejb-jar-bnd.xml vengono ignorati Liberty.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameI seguenti attributi bind EJB del file ibm-ejb-jar-bnd.xmi vengono ignorati Liberty.
ejbBindings jndiNameQuesta regola contrassegna tutti i nomi di bind JNDI ignorati nelle versioni di Liberty precedenti alla 20.0.0.12. Se l'applicazione utilizza questi nomi nelle ricerche JNDI dirette piuttosto che utilizzare i riferimenti EJB, utilizzare Liberty 20.0.0.12 o versioni successive oppure modificare la propria applicazione.
Se si utilizzano riferimenti EJB, la regola Cambio di comportamento sulle ricerche JavaBeans Enterprise nelle versioni precedenti della Liberty contrassegna eventuali nomi JNDI che devono essere convertiti nello spazio dei nomi java: se si utilizza una versione di Liberty successiva alla 20.0.0.12.
Se non si utilizzano riferimenti EJB e si utilizza una versione di Liberty successiva alla 20.0.0.12, si consiglia di utilizzare una versione più recente della Liberty o di creare un riferimento EJB utilizzando lo stesso nome JNDI e impostare il riferimento dell'EJB binding-name con al nome JNDI java:[scope]. Se non si aggiunge un riferimento EJB,
è necessario eseguire la scansione del codice Java per utilizzare i nomi JNDI e convertire il nome di ricerca
nel nome JNDI java:.
Il seguente esempio crea un riferimento EJB per consentire di migrare eventuali problemi di ricerca se non si utilizza Liberty versione 20.0.0.12 o successiva.
EJB di riferimento:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Interfaccia remota:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
Di seguito sono riportati esempi che illustrano come dichiarare un riferimento EJB in Liberty. È richiesto 1a o 1b in combinazione con 2a, 2b, 3a o 3b per collegare correttamente un EJB e il suo riferimento. Ad esempio, le opzioni raccomandate sono 1a e 2b per una configurazione facile e di successo, ma se 1b è dichiarato insieme a 3b otterrai la stessa funzionalità dell'impostazione consigliata.
|
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
deve essere aggiunto all'annotazione @EJB. Se si utilizza un ejb-jar.xml
o un web.xml, l'elemento <ejb-link> deve essere aggiunto all'elemento
<ejb-ref> esistente. Le modifiche a 1a e 1b sono illustrate qui:|
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 all'annotazione @EJB. Se si utilizza un
ejb-jar.xml o web.xml, l'elemento <lookup-name>
deve essere aggiunto all'elemento <ejb-ref> esistente. Le modifiche a 1a e 1b sono illustrate qui:
|
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 può essere utilizzato facoltativamente
per referenziare EJB nella stessa applicazione. In tal caso, il valore può essere impostato su qualsiasi richiesta di EJB diretta applicabile descritta alla fine di questa pagina.
Di seguito è riportata la ricerca finale del riferimento EJB:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
In alternativa, ci sono tre opzioni per cercare direttamente un EJB, non usando un riferimento 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"); } } |
Per ulteriori informazioni sull'utilizzo di bind EJB, consultare Using enterprise JavaBeans with remote interfaces on Liberty e EJB 3.0 and EJB 3.1 application bindings overview.