Dans les versions Liberty antérieures à 20.0.0.12, les beans Enterprise JavaBeans (EJB) n'étaient liés qu'à l'espace de nom
java:[scope]. Les beans EJB n'étaient pas liés à un espace de nom JNDI (Java Naming and Directory Interface) principal de serveur, ce qui signifie que vous ne pouviez pas définir les noms des liaisons JNDI. Les attributs de liaison EJB qui permettent de spécifier le nom JNDI dans WebSphere Application Server Traditional étaient ignorés dans Liberty.
Liberty ignorait les attributs de liaison EJB du fichier ibm-ejb-jar-bnd.xml ci-dessous.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameLiberty ignorait les attributs de liaison EJB du fichier ibm-ejb-jar-bnd.xmi ci-dessous.
ejbBindings jndiNameCette règle marque tous les noms de liaison JNDI qui étaient ignorés dans les versions Liberty antérieures à 20.0.0.12. Si votre application utilise ces noms dans des recherches JNDI directes au lieu d'utiliser des références EJB, vous devez soit utiliser Liberty version 20.0.0.12 ou ultérieure soit modifier votre application.
Si vous utilisez des références EJB, la règle Changement de comportement pour les recherches de beans Enterprise JavaBeans dans les versions antérieures de Liberty marque les noms JNDI qui doivent être convertis dans l'espace de nom java: si vous utilisez une version Liberty antérieure à 20.0.0.12.
Si vous n'utilisez pas les références EJB et que vous utilisez une version Liberty antérieure à 20.0.0.12, il est recommandé soit d'utiliser une version plus récente de Liberty soit de créer une référence EJB qui utilise le même nom JNDI et définir la référence EJB binding-name sur le nom JNDI java:[scope]. Si vous n'ajoutez pas de référence JNDI, vous devez analyser la syntaxe de votre code Java pour utiliser ces noms JNDI et convertir le nom de la recherche en nom JNDI java:.
L'exemple suivant crée une référence EJB pour faciliter la migration des problèmes de recherche si vous utilisez une version Liberty antérieure à 20.0.0.12.
EJB référencé :
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Interface distante :
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
Vous trouverez ci-dessous des exemples de déclaration d'une référence EJB dans Liberty. 1a ou 1b est requis avec 2a, 2b, 3a ou 3b pour associer correctement un EJB à sa référence. Par exemple, les options recommandées sont 1a et 2b pour que la configuration soit aisée et aboutisse, mais si 1b est déclaré avec 3b, vous obtenez la même fonctionnalité qu'avec la configuration recommandée.
|
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
doit être ajouté à l'annotation @EJB. Si vous
utilisez un fichier ejb-jar.xml ou web.xml, l'élément <ejb-link> doit être ajouté
à l'élément <ejb-ref> existant. Les modifications apportées à 1a et 1b sont indiquées ici :|
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 à l'annotation @EJB. Si vous
utilisez un fichier ejb-jar.xml ou web.xml, l'élément <lookup-name> doit être ajouté
à l'élément <ejb-ref> existant. Les modifications apportées à 1a et 1b sont indiquées ici :
|
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 ou binding-name peut être éventuellement utilisé
pour référencer des EJB dans la même application. Dans ce cas, la valeur peut être définie sur toute recherche d'EJB directe applicable décrite à la fin de cette page.
Vous trouverez ci-dessous la recherche de référence EJB finale :
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
Trois options permettent également de rechercher directement un EJB, sans utiliser de référence 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"); } } |
Pour plus d'informations sur l'utilisation des liaisons EJB, voir Utilisation des beans Enterprise JavaBeans avec des interfaces distantes dans Liberty et Présentation des liaisons d'applications EJB 3.0 et EJB 3.1.