Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВероника Родина
1 Session beans Василий Кряжев
2 Рассматриваемые темы Использование session beans Создание session beans Жизненный цикл Stateless session bean Жизненный цикл Stateful session bean 1-2
3 Рассматриваемые темы Использование session beans Взгляд на архитектуру Session Bean Stateless Session Beans Stateful Session Beans Создание session beans Жизненный цикл Stateless session bean Жизненный цикл Stateful session bean 1-3
4 Local vs Remote Где расположены клиенты? Где узкое место в системе? Локальный бизнес интерфейс не решает все проблемы производительности. Использование локального бизнес интерфейса не позволяет использовать механизмы балансировки нагрузки (load balancing) и отказоустойчивости (failover). Как часто происходят удаленные вызовы RMI? Факторы влияющие на выбор: 1-4
5 1-5 Fine-grained vs Coarse-grained
6 Передача аргументов При использовании Remote Business Interface параметры передаются по значению (passed by value) используя механизм сериализации. При использовании Local Business Interface параметры передаютсяпо ссылке (passed by reference). Семантика передачи аргументов: 1-6
7 Пример // реализация не будет правильно работать для remote business interface public void changeAppointmentDate(Appointment appointment) { appointment.setDate(new Date()); } // реализация работает для обоих типов интерфейсов public Appointment changeAppointmentDate(Appointment appointment) { appointment.setDate(new Date()); return appointment; } Избегайте модификации параметров 1-7
8 1-8 What Good Is One Method Call?
9 Stateless Session Beans Потоки работ (taskflow) и бизнес процессы выполняемые за один шаг Фасады для работы сразу с множеством entities Фасады (DAO) для доступа к объектам Java EE веб сервисы Общие сценарии использования: 1-9
10 Stateless Session Beans Высокую скорость. Используется пул объектов Крупно зернистые (coarse granularity) методы. Работа выполняется за один вызов Предлагают на уровне архитектуры: 1-10
11 1-11 Пример Stateless Session Bean Stateless Session Bean как Taskflow
12 1-12 Пример Stateless Session Bean Stateless Session Bean как Entity Facade
13 1-13 Пример Stateless Session Bean Stateless Session Bean как DAO
14 1-14 Пример Stateless Session Bean Stateless Session Bean как Web Service
15 1-15 What Good Is Conversational State?
16 Stateful Session Beans Потоки работ (taskflow) и бизнес процессы выполняемые за несколько шагов Альтернатива HttpSession Общие сценарии использования: 1-16
17 Stateful Session Beans Управление состоянием (conversation state management). Крупно зернистые (coarse granularity) методы. Предлагают на уровне архитектуры: 1-17
18 1-18 Пример Stateful Session Bean Stateful Session Bean как Taskflow
19 1-19 Пример Stateful Session Bean Stateful Session Bean вместо HttpSession
20 Выводы Когда делать выбор в пользу использования session bean Общие сценарии использования stateless session beans и stateful session beans В этой секции мы узнали: 1-20
21 Рассматриваемые темы Использование session beans Создание session beans Дизайн и реализация бизнес интерфейсов (business interfaces) Аннотации сессионных бинов Доступ к окружению (environment) бина Сборка и развертывание Жизненный цикл Stateless session bean Жизненный цикл Stateful session bean 1-21
22 Создание Session Bean Создать бизнес интерфейс (business interface) Реализовать бизнес интерфейс Собрать и задеплоить приложение Шаги которые необходимо выполнить: 1-22
23 Business Interface public interface OrderAgent { String public class OrderAgentBean implements OrderAgent { public String placeOrder() { return Your order has been placed.; } Создание бизнес интерфейса 1-23
24 Аннотации Stateless public { String name() default ; String mappedName() default ; String description() default ; } public { String name() default ; String mappedName() default ; String description() default ; } javax.ejb.Stateless и javax.ejb.Stateful 1-24
25 Аннотации Local public { Class[] value() default public { Class[] value() default {}; } javax.ejb.Local и javax.ejb.Remote 1-25
26 Реализация Business Interfaces public interface OrderAgent { String @Local(OrderAgent.class) public class OrderAgentBean implements OrderAgent { public String placeOrder() { return Your order has been placed.; } Как контейнер узнает какую версию нужно использовать? Реализовать сразу Local и Remote 1-26 см. далее
27 Реализация Business Interfaces public interface OrderAgent { String placeOrder(); } public interface OrderAgentLocal extends OrderAgent { List @Remote(OrderAgentLocal.class) public class OrderAgentBean implements OrderAgentLocal { public String placeOrder() { … } public List getItems() { … } } Реализовать сразу Local и Remote 1-27 см. далее
28 Реализация Business Interfaces public interface OrderAgent { String placeOrder(); public interface OrderAgentRemote extends OrderAgent public interface OrderAgentLocal extends OrderAgent public class OrderAgentBean implements OrderAgentRemote, OrderAgentLocal { public String placeOrder() { return Your order has been placed.; } Реализовать сразу Local и Remote 1-28
29 Ограничения в EJB Использовать статические read/write поля, но можно read-only static поля. Использовать синхронизацию потоков. Использовать AWT или Swing. Использовать классы из пакета java.io для доступа к файловой системе. Enterprise beans не должны: 1-29 см. далее
30 Ограничения в EJB Использовать ServerSocket, но можно использовать клиентский Socket. Использовать Reflection API. Изменять окружение (runtime environment): Устанавливать Security Manager Изменять input, output, error streams Создавать ClassLoader Enterprise beans не должны: 1-30
31 Окружение public class OrderAgentBean implements OrderAgentRemote, OrderAgentLocal { // инжектим ссылку на SessionContext ctx; public String placeOrder() { Principal principal = ctx.getCallerPrincipal(); String salesPerson = principal.getName(); … } Доступ к Container Environment 1-31
32 Интерфейс SessionContext public interface SessionContext extends EJBContext { T getBusinessObject(Class businessInterface) throws IllegalStateException; Class getInvokedBusinessInterface() throws IllegalStateException; MessageContext getMessageContext() throws IllegalStateException; EJBLocalObject getEJBLocalObject() throws IllegalStateException; EJBObject getEJBObject() throws IllegalStateException; } getBusinessObject – для получения ссылки на этот EJB (для передачи параметра в другой EJB, аналог ссылки this) getInvokedBusinessInterface – через какой интерфейс работаем? (Local, Remote, WebService) javax.ejb.SessionContext 1-32
33 Интерфейс EJBContext public interface EJBContext { // работа с безопасностью Principal getCallerPrincipal(); boolean isCallerInRole(String roleName); // транзакционные методы UserTransaction getUserTranscation() throws IllegalStateException; void setRollbackOnly() throws IllegalStateException; boolean getRollbackOnly() throws IllegalStateException; // таймер сервис TimerService getTimerService() throws IllegalStateException; // поиск в JNDI Object lookup(String name); … } javax.ejb.EJBContext 1-33
34 1-34 Сборка ejb-jar
35 ejb-jar.xml OrderAgent com.acme.ejb.OrderAgentBean Stateless 1-35
36 sun-ejb-jar.xml OrderAgent
37 Рассматриваемые темы Использование session beans Создание session beans Жизненный цикл Stateless session bean События жизненного цикла Использование пула Аннотации PostConstruct и PreDestroy Жизненный цикл Stateful session bean 1-37
38 1-38 Stateless Session Bean Жизненный цикл
39 1-39 Контейнер не обязательно должен создавать пять EJBs. Так как EJBs идентичны для клиента, сервер может использовать любой доступный. Правило: Два клиента не могут работать с одним и тем же bean instance одновременно. Серверная оптимизация: пулирование Использование пула
40 События жизненного public class OrderAgentBean implements OrderAgentRemote, OrderAgentLocal public void init() { // получить db connection // открыть files, streams и т.п. public void cleanup() { // закрыть db connection // закрыть files, stream и т.п. } Аннотации PostConstruct и PreDestroy: 1-40
41 Выводы События жизненного цикла stateless session beans Использование пула Аннотации PostConstruct и PreDestroy В этой секции мы рассмотрели: 1-41
42 Практика Создание Stateless Session Bean Facade Упражнение 1-42
43 Рассматриваемые темы Использование session beans Создание session beans Жизненный цикл Stateless session bean Жизненный цикл Stateful session bean Активация и пассивация События жизненного цикла Использование кэша 1-43
44 Пассивация (Passivation) Для эффективного управления памятью, контейнеру может понадобиться временно выгрузить состояние stateful session bean во внешнее хранилище. Пассивация и активация это перенос состояния в/из внешнее хранилище. Важная концепция: пассивация 1-44
45 1-45 Пассивация/активация Stateless Session Bean как Entity Facade
46 1-46 Stateful Session Bean Жизненный цикл
47 Remove { // Если true, то bean не будет удален в случае исключения boolean retainIfException() default false; } // public class OrderAgentBean implements OrderAgentRemote { // Stateful Bean должен всегда иметь хотя бы один remove = true); public void done() { cleanup(); } javax.ejb.Remove 1-47
48 PrePassivate PrePassivate { } // метод вызывается прямо PostActivate { } // метод вызывается сразу после активации Аннотации событий жизненного цикла 1-48
49 Что подлежит пассивации? Примитивные значения Сериализуемые объекты Контейнер сохраняет состояние бина: 1-49
50 Что не подлежит пассивации? Поля помеченные transient Поля со значением null К состоянию бина не относятся: 1-50
51 Специальные типы javax.ejb.SessionContext javax.jta.UserTransaction javax.naming.Context javax.persistence.EntityManager javax.persistence.EntityManagerFactory Javax.ejb.Timer Ссылки на управляемые фабрики ресурсов (managed resource factories) javax.sql.DataSource Ссылки на другие EJB Также контейнер должен сохранять: 1-51
52 Другие типы ресурсов В некоторых случаях, бин может содержать открытые ресурсы (соединения с базой данных или открытые сокеты) Вы должны закрывать и переоткрывать такие ресурсы в PrePassivate и PostActivate методах Ответственность Bean Provider: 1-52
53 Практика Управление Conversational State в EJB Упражнение 1-53
54 Выводы Применять stateless и stateful session beans для решения проблем Создавать, собирать и разворачивать session beans Реализовывать local и remote бизнес интерфейс Использовать аннотации для конфигурирования session bean В этом модуле мы узнали как: 1-54
55 Недоделки Пропущена секция deploy ejb-jar (специфика web logic) Пропущена секция stateful cache management (специфика web logic) На шести часовой модуль слишком мало слайдов. Есть правда модуль про Interceptors Ничего нет про афиширование EJB как WebService 1-55
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.