Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемНина Лалитина
1 Contexts and Dependency Injection in Java EE 6 Сирота Е.П.
2 Тема Архитектура распределенных систем – Серверные объекты – Контейнеры серверных объектов – Сервисы для серверных объектов Java EE platform – Чего не хватает в Java EE 5 Inversion of Control (Ioc) – В чем состоит инверсия контроля – Почему появился IoC-контейнер – Dependency Injection IoC в Java EE – Java EE CDI – IoC container – Примеры CDI plus EJB 2
3 Серверные объекты Распределенные корпоративные приложения: – Архитектура клиента должна быть простой – Все механизмы по обеспечению работы под нагрузкой находятся на серверной стороне Наиболее выдающаяся архитектура распределенных корпоративных систем - CORBA – В CORBA объект – это сущность вместе с объектной ссылкой, по которой можно вызвать операции, определенные в интерфейсе объекта – В CORBA реализации объекта находятся на серверной стороне, а клиент получает удаленную ссылку на эти объекты 3
4 Жизненный цикл серверных объектов – Жизненным циклом серверных объектов управляет контейнер 4
5 Серверные объекты Java EE 5 Java EE Server Objects – Servlet, JSF backing bean – EJB Java EE Containers – Web-container (Servlet, JSF backing bean) – EJB-container (EJB components) Как создать серверные объекты? new Servlet() new EjbComponent() Контейнер, pls, создай объект 5
6 Как Java EE выдерживает высокую нагрузку – Сервлеты Singleton – EJB Stateless Session Beans Pooling – EJB Stateful Session Beans Passivate, activate 6
7 Сервисы для серверных объектов Важной частью спецификации CORBA являются – Сервисы для распределенных объектов Сервисы для распределенных объектов: – naming service – lifecycle management – security – transactions – event notification – concurrency control – … 7
8 Java EE 5 Platform Контейнеры Сервисы Коммуникации – RMI-IIOP – HTTP – WS – Messaging «Сквозные сервисы» – Distributed transactions – Security 8
9 Java EE 5 Platform Sun Java System Application Server 9.1 9
10 Java EE tiers 10 Transactional tier Web tier
11 Вывод Все названное нужно и важно. Но… 11
12 Предопределенный набор типов серверных объектов Java EE 5: четко задан тип объектов, управляемых контейнером. Среди них нет POJO 12 Managed objects: Servlet JSF backing beans Managed objects: Servlet JSF backing beans Managed object: EJB components
13 Почему удобно, когда контейнер управляет объектами? Так как контейнер может применить механизмы для работы под высокой нагрузкой (это реализуется в EJB контейнерах) – Pooling – Activate/passivate А еще? Можно «поймать» вызов метода – Обрамление вызова транзакцией – Проверка security – Логгирование – И т.д. Можно управлять областью существования объекта – Автоматическое управление областью существования объекта в нужном контексте (session, request, …) 13
14 What is missing in Java EE 5? В Java EE не хватает контейнера для custom server objects (POJO) – Inversion of Control (IoC) container Но при этом все остальные возможности и преимущества Java EE нужны (существующие контейнеры и сервисы) 14
15 Inversion of control Инверсия контроля – При использовании контейнеров поток выполнения программы уже инвертирован, так как контейнер управляет жизненным циклом объекта Но объекты могут зависеть от контейнера: – Реализуют специфические для контейнера интерфейсы – Используют специфический для контейнера API для lookup зависимых объектов IoC помогает убрать зависимость объекта от контейнера – Не нужно реализовать специфические интерфейсы – Не нужно вызывать специфический API для lookup зависимых объектов. Для этого используется dependency injection. dependency injection убирает зависимости объекта от контейнера. Зависимости «собирает» контейнер. В этом и состоит inversion of control 15
16 То же самое другими словами Для корпоративных приложений нужны соответствующие архитектуры – Компонентная архитектура для серверных объектов 16
17 Component Architecture Microsoft Application Architecture Guide v2. p. 24: Components depend upon a mechanism within the platform that provides an environment in which they can execute, often referred to as component architecture. Examples are the component object model (COM) and the distributed component object model (DCOM) in Windows; and Common Object Request Broker Architecture (CORBA) and Enterprise JavaBeans (EJB) on other platforms. Component architectures manage the mechanics of locating components and their interfaces, passing messages or commands between components, andin some casesmaintaining state. 17
18 Инвазивные компонентные модели Традиционные компонентные фреймворки: – Базируются на инвазивных компонентных моделях – Предоставляют API для dependency lookup Инвазивные – Разработчик должен реализовать специфические интерфейсы Dependency Lookup – Разработчик должен вызвать специфический API для поиска в глобальном реестре Это приводит к – Непортабельная компонентная модель – Компоненты могут быть протестированы только в контейнере. Могут быть сложности с «поднятием» контейнера отдельно от платформы (например, EJB container). Примеры: EJB, CCM (CORBA Component Model) 18
19 Неинвазивные компонентные модели IoC фреймворки – Неинвазивные – Используют dependency injection/setting. Инвазивные – Не нужно реализовывать специфические интерфейсы Dependency injection/setting – Это «инверсивная» версия для lookup Это позволяет убрать зависимость компонента от контейнера Примеры: Spring, PicoContainer, Google Guice, Tapestry IoC, … 19
20 Dependency Injection Когда контейнер инстанцирует компонент, он «собирает» все его зависимости Dependency injection позволяет отделить код для «сборки» компонента от логики компонента 20
21 Задачи IoC контейнера Управление жизненным циклом компонентов Управление областью существования компонента «Перехват» входа в метод Конфигурация компонента – xml – annotations Сборка зависимостей компонента 21
22 Dependency Injection in Java EE 5 Ограниченный набор ресурсов, которые могут быть «инджектированы» веб- контейнером или ejb-контейнером – (Java EE ресурсы, например DataSource, JMS destination; UserTransaction) 22
23 CDI CDI (Contexts and Dependency Injection) for Java EE Platform, JSR 299 – IoC Container in Java EE 6 CDI предоставляет следующие сервисы для бинов – Управление жизненным циклом – Dependency injections – Event notification – Interceptions (business method interception, lifecycle callback interception) – Contexts (области существования объекта) – EL integration (bean names) 23
24 Goal of CDI Упростить создание приложений, которые используют технологии веб-уровня и бизнес-уровня 24 Transactional tier Web tier
25 Унификация – термин «Managed Bean» В Java EE 6 введен термин managed bean – любой объект, которым управляет контейнер Managed beans: – EJB session beans – annotated – POJO (Plain Old Java Object) 25
26 CDI Bean CDI bean – POJO. Без каких-либо аннотаций и т.д. 26
27 CDI BY EXAMPLES Примеры 27
28 Beans public class Login implements Serializable { private Credentials credentials; public boolean login() { // login using credentials … } public class Credentials implements Serializable { private String username; private String password; … } 28
29 Injection public class Login implements Serializable private Credentials credentials; public boolean login() { … // login using credentials } public class Credentials implements Serializable { private String username; private String password; … } Field, initializer method parameter (e.g. setter)
30 EL name public class Login implements Serializable private Credentials credentials; public boolean login() { … // login using credentials } Для использования на страницах
31 JSF Managed Bean public class Login implements Serializable private Credentials credentials; public boolean login() { // login using credentials … } 31
32 JSF page Username: Password: 32
33 Что может быть injected Что может быть «injected» – Beans – EJB session bean – Resources (Java EE Resources, persistence contexts, persistence units, remote EJBs, web services) А еще? – Produced beans 33
34 Пример со случайными public class RandomNumberGenerator { private Random @Random int getRandomNumber() { return random.nextInt(100); public class UserNumberBean implements Serializable int randomInt; … } 34
35 public class Login implements Serializable private Credentials credentials; private Client client; public void login() {... } public void logout() public Client getLoggedInClient() { return client; } – «квантор» (qualifier), который вводит семантическую однозначность
36 Client of public class Client client;... } 36 Контейнер подставит не любого клиента (например, new Client()), а только того, который создан тем методом-продюсером, у которого есть
37 Event public class Login implements Serializable { private private private Event userLoggedOutEvent; public void login() { client =... if (client!=null) userLoggedInEvent.fire(client); } public void logout() { if (client!=null) { userLoggedOutEvent.fire(client); } client = null; } 37
38 Event Notification (3/3) public class DoSomeLogicOnLogin { Client client) {... } Client client) {... } 38
39 Event @Target({METHOD, FIELD, PARAMETER, TYPE}) @Target({METHOD, FIELD, PARAMETER, TYPE}) LoggedOut {} 39 qualifier
40 Interceptor Transactional {} public class ShoppingCart public void checkout() {... } public class TransactionInterceptor UserTransaction public Object manageTransaction(InvocationContext ctx) throws Exception {... } } 40
41 Области существования серверных объектов Java EE-компоненты (servlets, EJBs) не имеют четко-определенной области существования 41
42 Области существования (Contexts) CDI определяет следующие встроенные контексты: Web + Transactional: – Stateful EJBs теперь могут иметь область существования из указанных выше контекстов 42 Servlet scopes JSF scope Bound to lifecycle of bean holding reference
43 Вопрос к аудитории: – Какие еще контексты вы можете придумать? 43
44 CDI PLUS EJB CDI + EJB 44
45 EJB Session Beans Когда использовать EJB Session beans? В случае, если необходимы следующие enterprise services: – EJB – это thread-safe компоненты – управление транзакциями для метода – контроль безопасности для метода – pooling (stateless EJBs), passivate/activate (stateful EJBs) – remote invocation – web service invocation – timer EJB – asynchronous EJB – JMX monitoring Если вам не нужны эти возможности, то используйте обыкновенные CDI beans 45
46 CDI vs EJB EJB предоставляют удобные enterprise services CDI – это только IoC контейнер – CDI не предоставляет ни управления транзакциями, ни мониторинга, ни потокобезопасности EJB + CDI = синергия обоих технологий 46
47 Синергия двух технологий EJB + CDI = синергия public class ShopCartBuilder {... } 47
48 Одновременный доступ к CDI beans В объекты доступны для конкурентного доступа – Для того, чтобы сделать объект thread-safe используйте возможности EJB-контейнера – Сделайте объекты в указанных контекстах public class ShopCartBuilder { … } 48
49 Области существования Stateful EJB- компонентов Stateful EJB могут быть привязаны к следующим четко определенным контекстам: – session, request, application, conversation 49
50 Реализации CDI Weld – GlassFish 3.0 – Jboss – Tomcat or later – Jetty 6.1.x Apache OpenWebBeans – IBM WebSphere 8 50
51 Bibliography ORB Basics. Ke Jin. Why and what of Inversion of Control. Martin Fowler. Inversion of Control Containers and the Dependency Injection pattern. - Dan Allen. Moving to Java EE 6 and CDI and away from the clutter JSR Web Beans 1.0 Final Release Adam Bien. Enterprise JavaBeans 3.1 with Contexts and Dependency Injection: The Perfect Synergy htmlhttp:// html Weld - JSR-299 Reference Implementation. JSR-299: The new Java standard for dependency injection and contextual lifecycle management Java EE 6 Tutorial. The guessnumber CDI Example
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.