1 Мова програмування Java та технології J2EE EJB lookup Сирота О.П.
Рассмотрим на примере поиск EJB-компонентов из тех объектов, жизненным циклом которых не управляет контейнер например, из слоя «команды» веб-приложения В примере рассматриваются следующие модули: 2
EJB Module 3
EJB component source public interface TestSessionFacade { String sayHello(); public interface TestSessionFacadeLocal extends TestSessionFacade { public interface TestSessionFacadeRemote extends TestSessionFacade{ public class TestSessionFacadeBean implements TestSessionFacadeRemote, TestSessionFacadeLocal { public String sayHello() {return "Hello";} } 4
Enterprise Archive 5
Web Module 6
Lookup EJB in Web Module Как найти EJB-компонент – для объектов, жизненным циклом которых не управляет контейнер? web.xml … TestSessFacade Session epam.dao.TestSessionFacadeLocal Использование public class TestCaller { public String execute() throws NamingException { TestSessionFacadeLocal res = (TestSessionFacadeLocal) new InitialContext().lookup("java:comp/env/TestSessFacade"); return res.sayHello(); } 7 Работает в Java EE 6 Работает в Java EE 5 Для подключения по удаленному интерфейсу TestSessFacade Session epam.dao.TestSessionFacadeRemote
Lookup EJB Component (Java EE 6 Only) Как найти EJB-компонент – для объектов, жизненным циклом которых не управляет контейнер? Подсмотрите Portable JNDI names, которые получает EJB-компонент во время загрузки приложения INFO: Portable JNDI names for EJB TestSessionFacadeBean : [java:global/EnterpriseApp/EJBApp/TestSessionFacadeBean!epam.dao.TestSessionFa cadeLocal, java:global/EnterpriseApp/EJBApp/TestSessionFacadeBean!epam.dao.TestSessionFac adeRemote] Использование public class TestCaller { public String execute() throws NamingException { TestSessionFacadeLocal res = (TestSessionFacadeLocal)new InitialContext(). lookup("java:app/EJBApp/TestSessionFacadeBean!epam.dao.TestSessionFacadeLocal" ); return res.sayHello(); } 8 Работает в Java EE 6
Non-portable JNDI Names Каждый сервер приложений дает EJB-компонентам non-portable JNDI names (имена, специфичные для сервера приложений) Например, Glassfish именует ссылки на Remote EJB Interface следующим образом (по interface class name): TestSessionFacadeRemote facade =(TestSessionFacadeRemote) new InitialContext().lookup(TestSessionFacadeRemote.class.getName()); 9
Дополнительная информация try/portable_global_jndi_names try/portable_global_jndi_names Q.html#POJOLocalEJB Q.html#POJOLocalEJB 10