A Liberty 20.0.0.12 előtti változataiban az Enterprise JavaBeans (EJB)
komponensek csak a java:[scope] névtérrel voltak összerendelve. Az EJB komponensek
nem voltak kiszolgáló gyökér Java Naming and Directory Interface (JNDI)
névteréhez kötve, ami azt jelenti, hogy nem határozhatta meg a JNDI kötési
neveket. Az EJB kötési jellemzők, amelyek lehetővé teszik a JNDI név
megadását a WebSphere Application Server kiszolgálón, a Liberty kiszolgálón
figyelmen kívül maradtak.
Az ibm-ejb-jar-bnd.xml fájlban található EJB kötési jellemzők Liberty rendszerben figyelmen kívül maradtak.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameAz ibm-ejb-jar-bnd.xmi fájlban található EJB kötési jellemzők Liberty rendszerben figyelmen kívül maradtak.
ejbBindings jndiNameEz a szabály azokat a JNDI kötési neveket jelöli meg, amelyek a Liberty 20.0.0.12 előtti változataiban figyelmen kívül maradtak. Ha alkalmazása közvetlen JNDI kikeresésekben használja ezeket a neveket EJB hivatkozások használata helyett, akkor Liberty 20.0.0.12 vagy újabb változatot kell használnia vagy módosítania kell az alkalmazást.
Ha EJB hivatkozásokat használ, akkor a
Viselkedés megváltozása Enterprise JavaBeans
komponensek kikeresésekor a Liberty korábbi változataiban szabály minden olyan JNDI nevet jelez, amit át
kell alakítani a java: névtérre, ha a Liberty 20.0.0.12 előtti változatát használja.
Ha nem használ EJB hivatkozásokat és a Liberty 20.0.0.12 előtti változatát
használja, akkor ajánlatos újabb Liberty változatot használnia vagy EJB
hivatkozást létrehoznia ugyanezen JNDI név használatával és a
binding-name EJB hivatkozást a java:[scope] JNDI
névre beállítania. Ha nem ad hozzá
EJB hivatkozást, akkor meg kell keresnie a Java kódban ezeknek a JNDI neveknek
a használatát és át kell alakítania a kikeresési nevet a java:
JNDI névre.
Az alábbi példa EJB hivatkozást hoz létre, amely segít átállítani az esetleges kikeresési problémákat, ha nem Liberty 20.0.0.12 vagy újabb változatot használ.
Hivatkozott EJB:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Távoli felület:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
Az alábbi példák bemutatják, hogyan kell EJB hivatkozást deklarálni Liberty környezetben. Az EJB és hivatkozásai sikeres összekapcsolásához 1a vagy 1b és 2a, 2b, 3a vagy 3b szükséges. Ha könnyű és sikeres telepítést szeretne, akkor az ajánlott beállítások az 1a és a 2b, de ha az 1b a 3b-vel együtt van deklarálva, akkor ugyanazt a funkcionalitást kapja, mint a javasolt beállítás.
|
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 elemet hozzá kell adni a @EJB
annotációhoz. Ha ejb-jar.xml vagy
web.xml fájlt használ, akkor az
<ejb-link> elemet hozzá kell adni a meglévő
<ejb-ref> elemhez. Az 1a és 1b módosításai az alábbiakban
láthatók:|
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 elemet a @EJB annotációhoz. Ha
ejb-jar.xml vagy
web.xml fájlt használ, akkor az
<lookup-name> elemet hozzá kell adni a meglévő
<ejb-ref> elemhez. Az 1a és 1b módosításai az alábbiakban
láthatók:
|
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 vagy binding-name
használható (nem kötelező) EJB-kre való hivatkozáshoz ugyanabban az
alkalmazásban. Ebben az esetben az érték az oldal végén leírt bármely megfelelő
közvetlen EJB kikeresésre beállítható.
Az alábbiakban a végleges EJB hivatkozás kikeresés következik:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
Ennek alternatívájaként háromféleképpen lehet az EJB-t közvetlenül, EJB hivatkozás használata nélkül kikeresni:
|
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"); } } |
Az EJB kötések használatára vonatkozó további információkat a következő helyen talál: Enterprise JavaBeans használata távoli felületekkel Liberty kiszolgálón és EJB 3.0 és EJB 3.1 alkalmazáskötések áttekintése.