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-name
session component-id
session local-home-binding-name
session remote-home-binding-name
interface binding-name
Az ibm-ejb-jar-bnd.xmi fájlban található EJB
kötési jellemzők Liberty rendszerben figyelmen kívül maradtak.
Ez 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.
EJB költöztetési példa:
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) {
visszatérés "Hello ott" + név + "."
}
}
Távoli felület:
@Remote
public interface MyEJBInterface {
String sayHello(String name);
}
EJB hivatkozás példák:
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.
- Magát a hivatkozást annotáció használatával kell deklarálni az EJB-re
hivatkozó osztályon belül, a ejb-jar.xml vagy a
web.xml fájlban.
- EJB annotáció:
< span class="Code"> < "JavaKeyword"> public class < /span> < span class="JavaType">TestServlet< /span> {
@EJB(name="ejb/MyEJB")
MyEJB myEjb;
....
}
- ejb-jar.xml és web.xml:
< span class="Code"> < ejb-ref>
<ejb-ref-name>ejb/MyEJB</ejb-ref-name>
<ejb-ref-type>Munkamenet</ejb-ref-type>
<remote>com.test.MyEJBInterface</remote>
Ejb-ref>
- Ha a hivatkozott EJB ugyanabban az alkalmazásban van, mint a hivatkozása,
akkor nincs szükség ibm-ejb-jar-bnd.xml vagy
ibm-web-bnd.xml bejegyzésre. Az alábbi lépések
egyike lehetővé teszi az EJB tároló számára, hogy automatikusan összekösse az
EJB-t és annak hivatkozását, ha azonos alkalmazásban vannak:
- Ha az alkalmazásban csak egy komponens valósítja meg a távoli EJB felületet,
akkor nincs szükség további beállításokra.
- Ha az alkalmazásban több komponens valósítja meg a távoli EJB felületet,
akkor a
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:
< span class="Code"> < span class= "JavaKeyword"> public class < /span> TestServlet {
@EJB(name="ejb/MyEJB" beanName="MyEJB")
MyEJB myEjb;
....
}
< span class="Code"> < ejb-ref>
<ejb-ref-name>ejb/MyEJB</ejb-ref-name>
<ejb-ref-type>Munkamenet</ejb-ref-type>
<remote>com.test.MyEJBInterface</remote>
<ejb-link>MyEJB</ejb-link>
Ejb-ref>
- Ha a hivatkozott EJB eltérő alkalmazásban van, mint a hivatkozása, akkor az
alábbi lépések valamelyikével fel kell venni egy kikeresési
karaktersorozatot.
Ezek a példák az azonos kiszolgálón futó alkalmazás
kikeresési karaktersorozataira mutatnak be példát:
- Adja hozzá a
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:
< span class="Code"> < span class= "JavaKeyword"> public class < /span> TestServlet {
@EJB(name="ejb/MyEJB" lookup="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface")
MyEJB myEjb;
....
}
< span class="Code"> < ejb-ref>
<ejb-ref-name>ejb/MyEJB</ejb-ref-name>
<ejb-ref-type>Munkamenet</ejb-ref-type>
<remote>com.test.MyEJBInterface</remote>
<lookup-name>java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface</lookup-name>
Ejb-ref>
- Deklarálja a hivatkozás összerendelést az
ibm-ejb-jar-bnd.xml vagy az
ibm-web-bnd.xml fájlban:
class="Code"> < ejb-ref name="ejb/MyEJB"
kötés-name="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface" />
A 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:
< span class="Code"> < span class= "JavaKeyword"> public class < /span> 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:
- Ha a komponens és a hivatkozás ugyanabban a modulban van:
< span class="Code"> < span class= "JavaKeyword"> public class < /span> TestEJBClient {
public static void
main(String[] args) {
....
MyEJBInterface myEjbInterface = (MyEJBInterface)
context.lookup("java:module/MyEJB!com.test.MyEJBInterface");
}
}
- Ha a komponens és a hivatkozás ugyanabban az alkalmazásban van:
< span class="Code"> < span class= "JavaKeyword"> public class < /span> TestEJBClient {
public static void
main(String[] args) {
....
MyEJBInterface myEjbInterface = (MyEJBInterface)
context.lookup("java:app/moduleA/MyEJB!com.test.MyEJBInterface");
}
}
- Ha a komponensmeghatározásokat globálisan meg kell találni ugyanazon a
kiszolgálón belül:
< span class="Code"> < span class= "JavaKeyword"> public class < /span> 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.