A felhasználó által megadott EJB kötési helyek korábban figyelmen kívül maradtak a Liberty rendszerben

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.

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.

  1. 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.
    1. EJB annotáció:
      < span class="Code"> < "JavaKeyword"> public class < /span> < span class="JavaType">TestServlet< /span> {
      @EJB(name="ejb/MyEJB")
      MyEJB myEjb;
      ....
      }

    2. 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>

  2. 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:

    1. 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.

    2. 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>

  3. 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:

    1. 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>

    2. 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:

  1. 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");
    }
    }

  2. 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");
    }
    }

  3. 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.