În Liberty înainte de versiunea 20.0.0.12, bean-urile EJB (Enterprise JavaBeans) au fost legate doar de spaţiul de nume java:[scope]. Bean-urile EJB nu au fost legate la un spaţiu de nume JNDI (Java Naming and Directory
Interface), ceea ce înseamnă că nu aţi putut defini numele de legare
JNDI. Atributele legărilor EJB care vă permit să specificaţi numele JNDI în WebSphere Application Server tradiţional au fost ignorate în Liberty.
Următoarele atribute de legare EJB din fişierul ibm-ejb-jar-bnd.xml au fost ignorate în Liberty.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameUrmătoarele atribute de legare EJB din fişierul ibm-ejb-jar-bnd.xmi au fost ignorate în Liberty.
ejbBindings jndiNameAceastă regulă semnalează toate numele de legare JNDI care au fost ignorate în Liberty înainte de 20.0.0.12. Dacă aplicaţia dumneavoastră utilizează aceste nume în căutări JNDI directe mai degrabă decât utilizarea referinţelor EJB, trebuie să utilizaţi Liberty versiunea 20.0.0.12 sau mai nouă sau să vă modificaţi aplicaţia.
Dacă utilizaţi referinţe EJB, regula
Modificare de comportament la căutările pentru Enterprise
JavaBeans în versiunile anterioare de Liberty semnalează orice nume JNDI
care trebuie să fie convertit la spaţiul de nume java: dacă se
foloseşte o versiune de Liberty mai veche de 20.0.0.12.
Dacă nu utilizaţi referinţe EJB şi utilizaţi o versiune de Liberty mai
veche de 20.0.0.12, este recomandat să utilizaţi o versiune mai nouă de Liberty
sau să creaţi o referinţă EJB folosind acelaşi nume JNDI şi să setaţi referinţa
EJB binding-name la numele JNDI :[java:scope]. Dacă nu adăugaţi o referinţă EJB,
trebuie să vă scanaţi codul Java pentru utilizarea acestor nume JNDI şi să convertiţi
numele de căutare la numele JNDI java:.
Următorul exemplu creează o referinţă EJB pentru a vă ajuta să migraţi orice probleme de căutare dacă nu utilizaţi Liberty versiunea 20..0.0.12 sau mai nouă.
EJB referit:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Interfaţă la distanţă:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
Următoarele sunt exemple de declarare a unei referinţe EJB în Liberty. Pentru a lega cu succes un EJB cu referinţa sa, este necesară fie 1a, fie 1b, împreună cu 2a, 2b, 3a sau 3b. De exemplu, opţiunile recomandate sunt 1a şi 2b pentru a realiza cu succes o setare uşoară, dar, dacă este declarată 1b împreună cu 3b, veţi obţine aceeaşi funcţionalitate ca la setarea recomandată.
|
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 la adnotarea @EJB. Dacă se utilizează un ejb-jar.xml sau
web.xml, trebuie să fie adăugat elementul <ejb-link> la elementul
<ejb-ref> existent. Modificările la 1a şi 1b sunt arătate aici:|
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 la adnotarea @EJB. Dacă se utilizează un
ejb-jar.xml sau web.xml, trebuie să fie adăugat elementul
<lookup-name> la elementul <ejb-ref> existent. Modificările la 1a şi 1b sunt arătate aici:
|
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 sau binding-name pentru referirea
EJB-urilor din aceeaşi aplicaţie. În acest caz, valoarea poate fi setată la orice căutare EJB directă aplicabilă descrisă la sfârşitul
acestei pagini.
Următoarea este căutarea de referinţă EJB finală:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
Sau, există trei opţiuni pentru a căuta un EJB direct, fără a utiliza o referinţă 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"); } } |
Pentru mai multe informaţii despre folosirea legărilor EJB, vedeţi Utilizarea bean-urilor Java enterprise cu interfeţe la distanţă pe Liberty şi Privire generală asupra legărilor aplicaţiilor EJB 3.0 şi EJB 3.1.