Na serveru Liberty před verzí 20.0.0.12 byly objekty Enterprise JavaBeans (EJB) vázány pouze na obor názvů java:[scope]. Objekty typu EJB bean nebyly vázány na obor názvů rozhraní JNDI (Java Naming and Directory Interface) kořenového adresáře serveru, což znamená, že nemůžete definovat názvy vazeb rozhraní JNDI. Atributy vazby EJB, které umožňují zadat název rozhraní JNDI na serveru WebSphere Application Server Traditional, byly ignorovány na serveru Liberty.
Následující atributy vazby EJB ze souboru ibm-ejb-jar-bnd.xml byly na serveru Liberty ignorovány.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameNásledující atributy vazby EJB ze souboru ibm-ejb-jar-bnd.xmi byly na serveru Liberty ignorovány.
ejbBindings jndiNameToto pravidlo označí všechny názvy vazeb rozhraní JNDI, které byly v Liberty ignorovány před 20.0.0.12. Pokud vaše aplikace používá tyto názvy v přímém vyhledávání rozhraní JNDI místo použití odkazů EJB, musíte použít Liberty verze 20.0.0.12 nebo novější nebo aplikaci upravit.
Použijete-li odkazy EJB, pravidlo Změna chování při vyhledávání objektů Enterprise JavaBean v předchozích verzí Liberty označí veškeré názvy rozhraní JNDI, které musí být převedeny na obor názvů java:, používáte-li verzi Liberty starší než 20.0.0.12.
Nepoužíváte-li odkazy EJB a používáte verzi Liberty starší než 20.0.0.12, doporučuje se použít novější verzi Liberty nebo vytvořit odkaz EJB pomocí stejného názvu rozhraní JNDI a nastavit odkaz EJB binding-name na název rozhraní JNDI java:[scope]. Nepřidáte-li odkaz EJB, musíte prohledat kód Java pro použití těchto názvů rozhraní JNDI a převést vyhledávací název na název rozhraní JNDI java:.
.
Následující příklad vytvoří odkaz EJB, který vám pomůže s migrací jakýchkoli problémů s vyhledáváním, pokud nepoužíváte Liberty verze 20.0.0.12 nebo novější.
Odkazovaný objekt EJB:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
Vzdálené rozhraní:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
Dále jsou uvedeny příklady, jak deklarovat odkaz EJB v Liberty. Je požadováno buď 1a, nebo 1b ve spojení s 2a, 2b, 3a nebo 3b, aby bylo možné úspěšně propojit EJB a jeho odkaz. Např. doporučené volby jsou 1a a 2b pro snadné a úspěšné nastavení, ale pokud je 1b deklarováno ve spojení s 3b, získáte stejnou funkčnost jako doporučené nastavení.
|
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 přidán do anotace @EJB. Používáte-li soubor ejb-jar.xml nebo web.xml, musí být prvek <ejb-link> přidán do existujícího prvku <ejb-ref>. Změny v bodech 1a a 1b jsou uvedeny zde:|
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 do anotace @EJB. Používáte-li soubor ejb-jar.xml nebo web.xml, musí být prvek <lookup-name> přidán do existujícího prvku <ejb-ref>. Změny v bodech 1a a 1b jsou uvedeny zde:
|
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 nebo binding-name lze volitelně použít k odkazování na objekty EJB ve stejné aplikaci. V takovém případě může být hodnota nastavena na libovolné vhodné přímé vyhledání EJB popsané na konci této stránky.
Dále je uvedeno konečné vyhledání odkazu EJB:
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
Volitelně jsou k dispozici tři volby pro vyhledání přímo EJB, nikoli pomocí odkazu 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"); } } |
Podrobnější informace o použití vazeb EJB viz Použití objektů enterprise JavaBeans se vzdálenými rozhraními na serveru Liberty a Přehled vazeb aplikace EJB 3.0 a EJB 3.1.