EJB Environment Кряжев Василий
Рассматриваемые темы JNDI Environment Naming Context EJB Dependency Injection Environment Entries 1-2
Рассматриваемые темы JNDI Environment Naming Context Кому и зачем нужен JNDI ENC? Как его использовать? EJB Dependency Injection Environment Entries 1-3
Environment Naming Context Необходима возможность настраивать логику работы компонента во время сборки и развертывания приложения без внесения изменений в исходный код На этапе разработки окружение в котором будет работать компонент не всегда известно Кому и зачем нужен JNDI ENC? 1-4
1-5 JNDI ENC Контейнер обеспечивает JNDI ENC
Использование ENC Дескриптора развертывания Environment аннотаций используемых в классе бина Контейнер заполняет ENC на основе: 1-6
Использование ENC Контейнер может инициализировать бин значениями из JNDI ENC через механизм dependency injection Контейнер делает доступным JNDI ENC во время выполнения. Для поиска в JNDI ENC можно воспользоваться: JNDI API Методом EJBContext.lookup Получение данных из ENC: 1-7
TravelAgentBean ejb/ProcessPayment Session com.titan.processpayment.ProcessPaymentLocal ProcessPaymentBean Заполнение JNDI ENC На основе дескриптора развертывания: 1-8 ejb-jar.xml
Заполнение JNDI name="ejb/ProcessPayment", beanInterface=ProcessPaymentLocal.class, beanName="ProcessPaymentBean« public class TravelAgentBean implements TravelAgentRemote { public TicketDO bookPassage(CreditCardDO card, double amount) { ProcessPaymentLocal payment = null; try { javax.naming.InitialContext ctx = new InitialContext( ); String jndiName = "java:comp/env/ejb/ProcessPayment; payment = (ProcessPaymentLocal) ctx.lookup(jndiName); } catch (javax.naming.NamingException ne) { throw new EJBException(ne); } payment.process(card, customer, amount);... } На основе environment аннотаций: 1-9 com.acme.TravelAgentBean.java
1-10 Environment Naming Context Что можно регистрировать в JNDI ENC? см. далее
1-11 Environment Naming Context Что можно регистрировать в JNDI ENC? см. далее
1-12 Environment Naming Context Что можно регистрировать в JNDI ENC?
Выводы Какие выгоды дает предоставляемый контейнером Environment Naming Context Как можно заполнять и использовать ENC В этой секции мы узнали: 1-13
Рассматриваемые темы JNDI Environment Naming Context EJB Dependency Injection Dependency injection как альтернатива поиску в JNDI Типы dependency injection Environment Entries 1-14
Поиск в JNDI ответственность bean instance Инициализация на основе DI ответственность контейнера DI как альтернатива поиска в JNDI 1-15 Dependency Injection
Типы Dependency Injection Field public class DeptServiceBean implements DeptService AuditService audit; … } Setter public class DeptServiceBean implements DeptService { private AuditService public void setAuditService(AuditService audit) { this.audit = audit; } … } 1-16
public class OrderAgentBean implements OrderAgentLocal SessionContext (name= jdbc/OrdersDB, mappedName=defaultDS) private javax.sql.DataSource (name=jms/mdbQueue, mappedName=defaultQueue) private Queue (unitName=review) private EntityManager em; … } 1-17 com.acme.OrderAgentBean.java Пример dependency injection
Рассматриваемые темы JNDI Environment Naming Context EJB Dependency Injection Environment Entries Определение в дескрипторе развертывания Использование в EJBs 1-18
Environment Entry OrderAgentBean minOrderTotal java.lang.Integer Декларирование Environment Entity в дескрипторе развертывания ejb-jar.xml
Environment Entry java.lang.String java.lang.Integer java.lang.Boolean java.lang.Character java.lang.Double java.lang.Float java.lang.Long Допустимые значения : 1-20
Пример // Через dependency int minOrderTotal; // Через dependency injection + значение по int minOrderTotal = 200; // Поиск в JNDI Context ctx = new InitialContext(); ctx = (Integer) ctx.lookup(java:comp/env/minOrderTotal); 1-21 Использование Environment Entity
Environment Entry OrderAgentBean minOrderTotal java.lang.Integer 200 com minValue 1-22 Инъекция Environment Entity через дескриптор развертывания ejb-jar.xml
Выводы Задавать и использовать environment entries Инициализировать environment entry в класс бина через дескриптор развертывания В этой секции мы узнали как: 1-23
Лабораторная Работа с Environment Entries 1-24
Выводы Получать ресурсы и ссылки на другие EJBs используя JNDI Environment Naming Context (ENC) Получать ресурсы и ссылки на другие EJBs используя механизм dependency injection Декларировать и использовать EJB environment entries В этом модуле, мы узнали как: 1-25
Недоделки Добавить про resource references и ejb references Примеры взяты из различных мест и не согласованы, желательно в конце их привести к единому виду, как будь-то они для одной и той же задачи Картинка на слайде DI как альтернатива поиска в JNDI (EJB 3.0 in Action) Примеры Заполнение ENC (Enterprise JavaBeans 5ed) Примеры Типы DI (Pro EJB 3.0) Лабораторная работа 1-26