SlideShare a Scribd company logo
1 of 39
Enterprise JavaEnterprise Java
BeansBeans
For students of universitiesFor students of universities
Author: Oxana DunikAuthor: Oxana Dunik
ТехнологиюТехнологию EJBEJB
(Enterprise Java(Enterprise Java
Beans)Beans) можно рассматривать с двух точек зрения: какможно рассматривать с двух точек зрения: как фреймворкфреймворк, и, и
каккак компоненткомпонент..
С точкиС точки зрениязрения компонентакомпонента EJBEJB - это всего-лишь- это всего-лишь
надстройканадстройка над POJO-классом, описываемая с помощьюнад POJO-классом, описываемая с помощью
аннотациианнотации((
 POJO это просто класс Java, который:POJO это просто класс Java, который:
1. Содержит только поля, без логики их обработки;1. Содержит только поля, без логики их обработки;
2. Доступ ко все полям только через get/set2. Доступ ко все полям только через get/set ))..
 Существует три типа компонентов EJB:Существует три типа компонентов EJB:
 session beanssession beans - используется для описания бизнесс-логики- используется для описания бизнесс-логики
приложенияприложения
 message-driven beansmessage-driven beans - так же используется для бизнесс-- так же используется для бизнесс-
логикилогики
 entitiesentities - используется для хранения данных- используется для хранения данных
 С точки зренияС точки зрения фреймворкафреймворка EJB - это технология,EJB - это технология,
предоставляющая множество готовых решений (управлениепредоставляющая множество готовых решений (управление
транзакциями, безопасность, хранение информации и т.п.)транзакциями, безопасность, хранение информации и т.п.)
ОсновныеОсновные
архитектуры EJBархитектуры EJB
 Существует 2 основные архитектурыСуществует 2 основные архитектуры
при разработке enterprise-приложений:при разработке enterprise-приложений:
 традиционная слоистая архитектуратрадиционная слоистая архитектура
(traditional layered architecture)(traditional layered architecture)
 domain-driven design (DDD)domain-driven design (DDD)
традиционная слоистая архитектуратрадиционная слоистая архитектура
(traditional layered architecture)(traditional layered architecture) EJBEJB
 4 базовых слоя4 базовых слоя : слой презентации, слой: слой презентации, слой
бизнесс-логики, слой хранения данных ибизнесс-логики, слой хранения данных и
непосредственно слой самой базы данных.непосредственно слой самой базы данных.
 ОбычноОбычно слойслой презентациипрезентации реализуетсяреализуется
черезчерез web-приложениеweb-приложение (т.е. используя JSP,(т.е. используя JSP,
JSF, GWT и т.п.) илиJSF, GWT и т.п.) или web-сервисweb-сервис ..
 СлойСлой бизнесс-логикибизнесс-логики является основой дляявляется основой для
enterprise-приложения. В нем описываютсяenterprise-приложения. В нем описываются
бизнесс-процессы, производится поиск,бизнесс-процессы, производится поиск,
авторизация и множество других вещей. Слойавторизация и множество других вещей. Слой
бизнесс-логики использует механизмы слоябизнесс-логики использует механизмы слоя
хранения данныххранения данных ..
 Чем отличаетсяЧем отличается слойслой хранения данныххранения данных ии
слойслой базы данныхбазы данных ? Тем, что в первом? Тем, что в первом
описываются высокоуровневые объектно-описываются высокоуровневые объектно-
ориентированные механизмы для работы сориентированные механизмы для работы с
сущностями БД, в то время как второй - это исущностями БД, в то время как второй - это и
domain-driven designdomain-driven design
(DDD)(DDD)
 АрхитектураАрхитектура DDDDDD предпологает, чтопредпологает, что
объекты обладают бизнесс-логикой, а необъекты обладают бизнесс-логикой, а не
являются простой репликацией объектовявляются простой репликацией объектов
БД. Многие программисты не любятБД. Многие программисты не любят
наделять объекты логикой и создаютнаделять объекты логикой и создают
отдельный слой, называемый service layerотдельный слой, называемый service layer
илиили application layerapplication layer. Он похож на слой. Он похож на слой
бизнесс-логики традиционной слоистойбизнесс-логики традиционной слоистой
архитектуры за тем лишь отличием, что онархитектуры за тем лишь отличием, что он
намногонамного тоньщетоньще..
 Сервер приложений j2ee состоит изСервер приложений j2ee состоит из
двух основных элементов:двух основных элементов: контейнерконтейнер
webweb-приложения (JSP, JSF и т.д.) и-приложения (JSP, JSF и т.д.) и
EJB-контейнерEJB-контейнер.. Первый служит дляПервый служит для
создания пользовательскогосоздания пользовательского
интерфейса и слабо подходит дляинтерфейса и слабо подходит для
описания бизнес-логики приложения.описания бизнес-логики приложения.
Для этого используется вторая частьДля этого используется вторая часть
J2EE - EJB.J2EE - EJB.
Session beanSession bean
 Session beanSession bean представляет собой EJB-компоненту,представляет собой EJB-компоненту,
связанную с одним клиентом. ``Бины'' этого типа, каксвязанную с одним клиентом. ``Бины'' этого типа, как
правило, имеют ограниченный срок жизни (хотя это и неправило, имеют ограниченный срок жизни (хотя это и не
обязательно), и редко участвуют в транзакциях. Вобязательно), и редко участвуют в транзакциях. В
частности, они обычно не восстанавливаются после сбоячастности, они обычно не восстанавливаются после сбоя
сервера. В качестве примера session bean можно взятьсервера. В качестве примера session bean можно взять
``бин'', который живет в веб-сервере и динамически``бин'', который живет в веб-сервере и динамически
создает HTML-страницы клиенту, при этом следя за тем,создает HTML-страницы клиенту, при этом следя за тем,
какая именно страница загружена у клиента. Когда жекакая именно страница загружена у клиента. Когда же
пользователь покидает вэб-узел, или по истечениипользователь покидает вэб-узел, или по истечении
некоторого времени, session bean уничтожается.некоторого времени, session bean уничтожается.
Несмотря на то, что в процессе своей работы, sessionНесмотря на то, что в процессе своей работы, session
bean мог сохранять некоторую информацию в базеbean мог сохранять некоторую информацию в базе
данных, его предназачение заключается все-таки не вданных, его предназачение заключается все-таки не в
отображении состояния или в работе с ``вечнымиотображении состояния или в работе с ``вечными
объектами'', а просто в выполнении некоторых функцийобъектами'', а просто в выполнении некоторых функций
на стороне сервера от имени одного клиента.на стороне сервера от имени одного клиента.
Session beanSession bean
В качестве session bean может выступать обычныйВ качестве session bean может выступать обычный
класс Java удовлетворяющий следующимкласс Java удовлетворяющий следующим
условиям:условиям:
 иметь как минимум один методиметь как минимум один метод
 не должен быть абстрактнымне должен быть абстрактным
 иметь конструктор по-умолчаниюиметь конструктор по-умолчанию
 методы не должны начинаться с "ejb" (напримерметоды не должны начинаться с "ejb" (например
ejbCreate, ejbDoSomething)ejbCreate, ejbDoSomething)
ДляДля stateful-биновstateful-бинов существует еще одно условие:существует еще одно условие:
свойства класса должны быть объявленысвойства класса должны быть объявлены
примитивами или реализовывать интерфейспримитивами или реализовывать интерфейс
Serializable.Serializable.
Особенности stateless иОсобенности stateless и
stateful биновstateful бинов
 Один bean может содержать множествоОдин bean может содержать множество
клиентских методов. Этот момент являетсяклиентских методов. Этот момент является
важным для производительности, так какважным для производительности, так как
контейнер помещает экземплярыконтейнер помещает экземпляры statelessstateless--
бинов в общее хранилище и множествобинов в общее хранилище и множество
клиентов могут использовать одинклиентов могут использовать один
экземпляр бина.экземпляр бина.
В отличии от statelessВ отличии от stateless statefulstateful биныбины
инстанцируются для каждого пользователяинстанцируются для каждого пользователя
отдельно.отдельно.
Entity beanEntity bean
 Entity beanEntity bean, наоборот, представляет собой, наоборот, представляет собой
компоненту, работающую с постояннойкомпоненту, работающую с постоянной
(persistent) информацией, хранящейся,(persistent) информацией, хранящейся,
например, в базе данных. Entity beansнапример, в базе данных. Entity beans
ассоциируются с элементами баз данных иассоциируются с элементами баз данных и
могут быть доступны одновременномогут быть доступны одновременно
нескольким пользователям. Так какнескольким пользователям. Так как
информация в базе данных являетсяинформация в базе данных является
постоянной, то и entity beans живутпостоянной, то и entity beans живут
постоянно, ``выживая'', тем самым, послепостоянно, ``выживая'', тем самым, после
сбоев сервера (когда серверсбоев сервера (когда сервер
восстанавливается после сбоя, он можетвосстанавливается после сбоя, он может
восстановить ``бин'' из базы данных).восстановить ``бин'' из базы данных).
EJB-компонента (TheEJB-компонента (The
Enterprise JavaBeansEnterprise JavaBeans
component)component)
 Отдельная EJB-компонента представляет цобойОтдельная EJB-компонента представляет цобой
компоненту в том же смысле что и традиоционныйкомпоненту в том же смысле что и традиоционный
JavaBeans ``bean'' (``зерно''). Компоненты EJB выполняютсяJavaBeans ``bean'' (``зерно''). Компоненты EJB выполняются
внутри EJB-внутри EJB-контейнераконтейнера, который, в свою очередь,, который, в свою очередь,
выполняется внутри EJB-выполняется внутри EJB-серверасервера. Любой сервер, который в. Любой сервер, который в
состоянии поддерживать EJB-контейнеры и предоставлятьсостоянии поддерживать EJB-контейнеры и предоставлять
им необходимые сервисы, может быть EJB-сервером (тоим необходимые сервисы, может быть EJB-сервером (то
есть многие из существующих серверов могут быть простоесть многие из существующих серверов могут быть просто
расширены до поддержки Enterprise JavaBeans).расширены до поддержки Enterprise JavaBeans).
 EJB-компонента представляет из себя Java-класс, которыйEJB-компонента представляет из себя Java-класс, который
реализует некоторую бизнес-логику. Все остальные классыреализует некоторую бизнес-логику. Все остальные классы
в EJB-системе либо реализуют поддержку клиент/серверв EJB-системе либо реализуют поддержку клиент/сервер
взаимодйествий между компонентами, либо реализуютвзаимодйествий между компонентами, либо реализуют
некоторые сервисы для компонент.некоторые сервисы для компонент.
EJB-контейнер (TheEJB-контейнер (The
Enterprise JavaBeansEnterprise JavaBeans
container)container)
 EJB-контейнер -- это то место, где ``живет'' EJB-компонент.EJB-контейнер -- это то место, где ``живет'' EJB-компонент.
EJB-контейнер реализует для находящихся в немEJB-контейнер реализует для находящихся в нем
компонент такие сервисы как транзакции (transaction),компонент такие сервисы как транзакции (transaction),
управление ресурсами, управление версиями компонент,управление ресурсами, управление версиями компонент,
их мобильностью, настраиваемостью, мобильностью,их мобильностью, настраиваемостью, мобильностью,
жизненным циклом. Так как EJB-контейнер реализует всежизненным циклом. Так как EJB-контейнер реализует все
эти функции, то разработчик EJB-компонент может неэти функции, то разработчик EJB-компонент может не
реализовывать их самостоятельно, а просто вызыватьреализовывать их самостоятельно, а просто вызывать
соответсвующие методы у контейнера (правила вызовасоответсвующие методы у контейнера (правила вызова
методов у контейнера описываются в спецификации). Какметодов у контейнера описываются в спецификации). Как
правило, в одном EJB-контейнере живет несколькоправило, в одном EJB-контейнере живет несколько
однотипных EJB-компонент.однотипных EJB-компонент.
EJB-объект (EJB-object)EJB-объект (EJB-object)
и удаленный интерфейси удаленный интерфейс
(remote interface)(remote interface)
 Клиентские приложения вызывают методы наКлиентские приложения вызывают методы на
удаленных EJB-компонентах через EJB-объектудаленных EJB-компонентах через EJB-объект
(EJB-object). EJB-объект реализует ``удаленный(EJB-object). EJB-объект реализует ``удаленный
интерфейс'' EJB-компоненты на сервере. Суть винтерфейс'' EJB-компоненты на сервере. Суть в
том, что находящаяся на сервере EJB-компонента,том, что находящаяся на сервере EJB-компонента,
помимо бизнес-функций, ради которых она былапомимо бизнес-функций, ради которых она была
разработана, должна реализовывать такжеразработана, должна реализовывать также
некоторые функции, определяемыенекоторые функции, определяемые
спецификацией, которые служат для ``управления''спецификацией, которые служат для ``управления''
EJB-компонентой со стороны контейнера. EJB-EJB-компонентой со стороны контейнера. EJB-
объект реализует лишь бизнес-интерфейс дляобъект реализует лишь бизнес-интерфейс для
EJB-компоненты, являясь, в некотором смысле,EJB-компоненты, являясь, в некотором смысле,
``промежуточным'' звеном между клиентом и EJB-``промежуточным'' звеном между клиентом и EJB-
компонентой.компонентой.
EJB-компонентаEJB-компонента
выполняется навыполняется на
сервере, внутри EJB-сервере, внутри EJB-
контейнера и реализуетконтейнера и реализует
бизнес-логику, в тобизнес-логику, в то
время как EJB-объектвремя как EJB-объект
выполняется у клиентавыполняется у клиента
и удаленно вызываети удаленно вызывает
методы у EJB-методы у EJB-
компоненты.компоненты.
 Итак, приложение-клиент соединяется с EJB-Итак, приложение-клиент соединяется с EJB-
сервером и посылает ему запрос на созданиесервером и посылает ему запрос на создание
``бина'' (Enterprise JavaBean) для обработки``бина'' (Enterprise JavaBean) для обработки
своих запросов. Сервер отвечает на такой запроссвоих запросов. Сервер отвечает на такой запрос
созданием объекта на стороне серверасозданием объекта на стороне сервера
(экземпляр EJB-компоненты) и возвращает(экземпляр EJB-компоненты) и возвращает
клиенту прокси-объект (EJB-объект), чейклиенту прокси-объект (EJB-объект), чей
итерфейс совпадает с интерфейсом созданнойитерфейс совпадает с интерфейсом созданной
EJB-компоненты и чьи методы перенаправляютEJB-компоненты и чьи методы перенаправляют
вызовы собственно экземпляру компоненты.вызовы собственно экземпляру компоненты.
После этого приложение-клиент работает с EJB-После этого приложение-клиент работает с EJB-
объектом как с локальным объектом, даже и необъектом как с локальным объектом, даже и не
подозревая, что всю работу выполняет не EJB-подозревая, что всю работу выполняет не EJB-
объект, а удаленная компонента на сервере.объект, а удаленная компонента на сервере.
Необходимо заметить, что созданием иНеобходимо заметить, что созданием и
удалением EJB-компонент на сервереудалением EJB-компонент на сервере
занимается EJB-контейнер.занимается EJB-контейнер.
POJO, POJI,POJO, POJI,
annotationsannotations
 Теперь рассмотрим реализацию этихТеперь рассмотрим реализацию этих
сущностей. В EJB3 мы используемсущностей. В EJB3 мы используем
POJOPOJO (Plain Old Java Objects),(Plain Old Java Objects), POJIPOJI
(Plain Old Java Interfaces) и(Plain Old Java Interfaces) и
аннотациианнотации..
 Аннотация записывается так:Аннотация записывается так:
@<имя аннотации>(<список парамет-@<имя аннотации>(<список парамет-
значение>)значение>)
 Какие аннотации могут быть?Какие аннотации могут быть?
 StatelessStateless - говорит контейнеру, что класс будет stateless session- говорит контейнеру, что класс будет stateless session
bean. Для него контейнер обеспечит безопасность потоков иbean. Для него контейнер обеспечит безопасность потоков и
менеджмент транзакций. Дополнительно, вы можете добавитьменеджмент транзакций. Дополнительно, вы можете добавить
другие свойства, например прозрачное управление безопасностью идругие свойства, например прозрачное управление безопасностью и
перехватчики событий;перехватчики событий;
 LocalLocal - относится к интерфейсу и говорит, что bean реализующий- относится к интерфейсу и говорит, что bean реализующий
интерфейс доступен локальноинтерфейс доступен локально
 RemoteRemote - относится к интерфейсу и говорит, что bean доступен через- относится к интерфейсу и говорит, что bean доступен через
RMI (Remote Method Invocation)RMI (Remote Method Invocation)
 EJBEJB - применятеся в коде, где мы используем bean.- применятеся в коде, где мы используем bean.
 StatefulStateful - говорит контейнеру, что класс будет stateful session bean.- говорит контейнеру, что класс будет stateful session bean.
 RemoveRemove - опциональная аннотация, которая используется с stateful- опциональная аннотация, которая используется с stateful
бинами. Метод, помеченный как Remove говорит контейнеру, чтобинами. Метод, помеченный как Remove говорит контейнеру, что
после его исполнения нет больше смысла хранить bean, т.е. егопосле его исполнения нет больше смысла хранить bean, т.е. его
состояние сбрасывается. Это бывает критично длясостояние сбрасывается. Это бывает критично для
производительности.производительности.
 EntityEntity - говорит контейнеру, что класс будет сущностью БД- говорит контейнеру, что класс будет сущностью БД
 TableTable(name="...")(name="...") - указывает таблицу для маппинга- указывает таблицу для маппинга
 IdId,, ColumnColumn - параметры маппинга- параметры маппинга
 WebServiceWebService - говорит, что интерфейс или класс будет представлять- говорит, что интерфейс или класс будет представлять
вэб-сервис.вэб-сервис.
 и много-много других...и много-много других...
POJO, POJI,POJO, POJI,
annotationsannotations
 УУ statelessstateless ии MDBMDB бинов существуетбинов существует 22
событиясобытия жизненного цикла, которые мыжизненного цикла, которые мы
можем перехватить: создание и удалениеможем перехватить: создание и удаление
бина. Метод, который будет вызыватьсябина. Метод, который будет вызываться
сразу после создании бина помечаетсясразу после создании бина помечается
аннотацией javax.annotation.аннотацией javax.annotation.PostConstructPostConstruct, а, а
перед его удалением -перед его удалением -
javax.annotation.javax.annotation.PreDestroyPreDestroy.. StatefulStateful биныбины
обладают помимо рассмотреных вышеобладают помимо рассмотреных выше ещееще
2 событиями2 событиями: при активации: при активации
(javax.ejb.(javax.ejb.PostActivatePostActivate) и при деактивации) и при деактивации
(javax.ejb.(javax.ejb.PrePassivatePrePassivate).).
 importimport javax.ejb.Local;javax.ejb.Local;
@Local@Local
public interfacepublic interface BookTestBeanLocal {BookTestBeanLocal {
public voidpublic void test();test();
}}
------------------------------------------------------------------------------------------------------------
 importimport javax.ejb.Remote;javax.ejb.Remote;
@Remote@Remote
public interfacepublic interface BookTestBeanRemote {BookTestBeanRemote {
public voidpublic void test();test();
}}
Перехватчики(Перехватчики( interceptointercepto
rsrs))
 При создании enterprise-приложений частоПри создании enterprise-приложений часто
возникает необходимость записывать логвозникает необходимость записывать лог
вызываемых методов (в целях отладки иливызываемых методов (в целях отладки или
для лога безопасности), а так жедля лога безопасности), а так же
контролировать доступ пользователей кконтролировать доступ пользователей к
отдельным частям приложения. Для этогоотдельным частям приложения. Для этого
используютсяиспользуются перехватчикиперехватчики - объекты,- объекты,
методы которых вызываютсяметоды которых вызываются
автоматическиавтоматически припри вызовевызове методаметода EJBEJB--
бина.бина.
Перехватчики(Перехватчики( interceptointercepto
rsrs))
 Объект-перехватчик является POJO,Объект-перехватчик является POJO,
за тем лишь исключением, что метод,за тем лишь исключением, что метод,
который должен вызыватьсякоторый должен вызываться
автоматически аннотируетсяавтоматически аннотируется
@AroundInvoke@AroundInvoke
 package com.sample;package com.sample;

 import javax.interceptor.AroundInvoke;import javax.interceptor.AroundInvoke;
 import javax.interceptor.InvocationContext;import javax.interceptor.InvocationContext;

 public class MyInterceptor {public class MyInterceptor {

 @AroundInvoke@AroundInvoke
 public Object log(InvocationContext ctx) throws Exceptionpublic Object log(InvocationContext ctx) throws Exception
 {{
 System.out.println("*** TracingInterceptor intercepting " + ctx.getMethod().getName());System.out.println("*** TracingInterceptor intercepting " + ctx.getMethod().getName());
 long start = System.currentTimeMillis();long start = System.currentTimeMillis();
 String param = (String)ctx.getParameters()[0];String param = (String)ctx.getParameters()[0];

 if (param == null)if (param == null)
 ctx.setParameters(new String[]{"default"});ctx.setParameters(new String[]{"default"});

 trytry
 {{
 return ctx.proceed();return ctx.proceed();
 }}
 catch(Exception e)catch(Exception e)
 {{
 throw e;throw e;
 }}
 finallyfinally
 {{
 long time = System.currentTimeMillis() - start;long time = System.currentTimeMillis() - start;
 String method = ctx.getClass().getName();String method = ctx.getClass().getName();
 System.out.println("*** TracingInterceptor invocation of " + method + " took " + time + "ms");System.out.println("*** TracingInterceptor invocation of " + method + " took " + time + "ms");
 }}
 }}
 }}
 @Stateless(name="SampleEJB")@Stateless(name="SampleEJB")
 @RemoteBinding(jndiBinding="SampleEJB")@RemoteBinding(jndiBinding="SampleEJB")
 @Interceptors(value=com.sample.MyInterceptor.class)@Interceptors(value=com.sample.MyInterceptor.class)

 public class SampleBean implements Sample {public class SampleBean implements Sample {

 public void doSomething(String param) {public void doSomething(String param) {
 callWebService(param);callWebService(param);
 }}
 @AroundInvoke@AroundInvoke
 public Object log(InvocationContext ctx) throws Exceptionpublic Object log(InvocationContext ctx) throws Exception
 {{

 trytry
 {{
 return ctx.proceed();return ctx.proceed();
 }}
 catch(Exception e)catch(Exception e)
 {{
 throw e;throw e;
 }}
 }}
 }}
LiteratureLiterature
 http://j4sq.blogspot.com/2011/10/ejb-1.htmlhttp://j4sq.blogspot.com/2011/10/ejb-1.html
 http://www.laliluna.de/articles/posts/ejb-3-tuthttp://www.laliluna.de/articles/posts/ejb-3-tut
 https://www.youtube.com/watch?v=wKwihFhhttps://www.youtube.com/watch?v=wKwihFh
 http://www.tutorialspoint.com/ejb/ejb_intercehttp://www.tutorialspoint.com/ejb/ejb_interce

More Related Content

Viewers also liked

Viewers also liked (16)

TNAPS 3 Installation
TNAPS 3 InstallationTNAPS 3 Installation
TNAPS 3 Installation
 
2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
 
Apache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate SearchApache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate Search
 
Lecture 5 JSTL, custom tags, maven
Lecture 5   JSTL, custom tags, mavenLecture 5   JSTL, custom tags, maven
Lecture 5 JSTL, custom tags, maven
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web Sockets
 
Lecture 2: Servlets
Lecture 2:  ServletsLecture 2:  Servlets
Lecture 2: Servlets
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 
Lecture 7 Web Services JAX-WS & JAX-RS
Lecture 7   Web Services JAX-WS & JAX-RSLecture 7   Web Services JAX-WS & JAX-RS
Lecture 7 Web Services JAX-WS & JAX-RS
 
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session Management
 
Tutorial 4 - Basics of Digital Photography
Tutorial 4 - Basics of Digital PhotographyTutorial 4 - Basics of Digital Photography
Tutorial 4 - Basics of Digital Photography
 
Enterprise Java Beans - EJB
Enterprise Java Beans - EJBEnterprise Java Beans - EJB
Enterprise Java Beans - EJB
 
EJB .
EJB .EJB .
EJB .
 
Lecture 1: Introduction to JEE
Lecture 1:  Introduction to JEELecture 1:  Introduction to JEE
Lecture 1: Introduction to JEE
 
Lecture 8 Enterprise Java Beans (EJB)
Lecture 8  Enterprise Java Beans (EJB)Lecture 8  Enterprise Java Beans (EJB)
Lecture 8 Enterprise Java Beans (EJB)
 

Similar to Ejb in java. part 1.

Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?
GetITAbroad
 
Web Interface
Web InterfaceWeb Interface
Web Interface
scassau
 

Similar to Ejb in java. part 1. (11)

Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny Borisov
 
Spring the ripper
Spring the ripperSpring the ripper
Spring the ripper
 
Node JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияNode JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решения
 
Web Interface
Web InterfaceWeb Interface
Web Interface
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.
 
JS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspmJS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspm
 
Алексей Авдеев — Применение Backbone.js для рефакторинга фронтенда веб-прилож...
Алексей Авдеев — Применение Backbone.js для рефакторинга фронтенда веб-прилож...Алексей Авдеев — Применение Backbone.js для рефакторинга фронтенда веб-прилож...
Алексей Авдеев — Применение Backbone.js для рефакторинга фронтенда веб-прилож...
 
Java 9 - кратко о новом
Java 9 -  кратко о новомJava 9 -  кратко о новом
Java 9 - кратко о новом
 

More from Asya Dudnik

использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.
Asya Dudnik
 
использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.
Asya Dudnik
 

More from Asya Dudnik (20)

Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev ops
 
Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev ops
 
Work with my_sql_-_database_in_java
Work with my_sql_-_database_in_javaWork with my_sql_-_database_in_java
Work with my_sql_-_database_in_java
 
Oracle database
Oracle databaseOracle database
Oracle database
 
Work with xml in java
Work with xml in javaWork with xml in java
Work with xml in java
 
Jdbc in java
Jdbc in javaJdbc in java
Jdbc in java
 
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentals
 
Data bases in pictures
Data bases in picturesData bases in pictures
Data bases in pictures
 
использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.
 
Hibernate&ejb3 . part3.
Hibernate&ejb3 . part3.Hibernate&ejb3 . part3.
Hibernate&ejb3 . part3.
 
использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.
 
Work with my sql database in java
Work with my sql   database in javaWork with my sql   database in java
Work with my sql database in java
 
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentals
 
Web&java. gwt
Web&java. gwtWeb&java. gwt
Web&java. gwt
 
Web&java.jsf.
Web&java.jsf.Web&java.jsf.
Web&java.jsf.
 
Web&java. jsp
Web&java. jspWeb&java. jsp
Web&java. jsp
 
Web&java. jsp
Web&java. jspWeb&java. jsp
Web&java. jsp
 
Java fx for interface
Java fx for interfaceJava fx for interface
Java fx for interface
 
Java fx for interface
Java fx for interfaceJava fx for interface
Java fx for interface
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projects
 

Ejb in java. part 1.

  • 1. Enterprise JavaEnterprise Java BeansBeans For students of universitiesFor students of universities Author: Oxana DunikAuthor: Oxana Dunik
  • 2. ТехнологиюТехнологию EJBEJB (Enterprise Java(Enterprise Java Beans)Beans) можно рассматривать с двух точек зрения: какможно рассматривать с двух точек зрения: как фреймворкфреймворк, и, и каккак компоненткомпонент.. С точкиС точки зрениязрения компонентакомпонента EJBEJB - это всего-лишь- это всего-лишь надстройканадстройка над POJO-классом, описываемая с помощьюнад POJO-классом, описываемая с помощью аннотациианнотации((  POJO это просто класс Java, который:POJO это просто класс Java, который: 1. Содержит только поля, без логики их обработки;1. Содержит только поля, без логики их обработки; 2. Доступ ко все полям только через get/set2. Доступ ко все полям только через get/set ))..  Существует три типа компонентов EJB:Существует три типа компонентов EJB:  session beanssession beans - используется для описания бизнесс-логики- используется для описания бизнесс-логики приложенияприложения  message-driven beansmessage-driven beans - так же используется для бизнесс-- так же используется для бизнесс- логикилогики  entitiesentities - используется для хранения данных- используется для хранения данных  С точки зренияС точки зрения фреймворкафреймворка EJB - это технология,EJB - это технология, предоставляющая множество готовых решений (управлениепредоставляющая множество готовых решений (управление транзакциями, безопасность, хранение информации и т.п.)транзакциями, безопасность, хранение информации и т.п.)
  • 3. ОсновныеОсновные архитектуры EJBархитектуры EJB  Существует 2 основные архитектурыСуществует 2 основные архитектуры при разработке enterprise-приложений:при разработке enterprise-приложений:  традиционная слоистая архитектуратрадиционная слоистая архитектура (traditional layered architecture)(traditional layered architecture)  domain-driven design (DDD)domain-driven design (DDD)
  • 4. традиционная слоистая архитектуратрадиционная слоистая архитектура (traditional layered architecture)(traditional layered architecture) EJBEJB  4 базовых слоя4 базовых слоя : слой презентации, слой: слой презентации, слой бизнесс-логики, слой хранения данных ибизнесс-логики, слой хранения данных и непосредственно слой самой базы данных.непосредственно слой самой базы данных.  ОбычноОбычно слойслой презентациипрезентации реализуетсяреализуется черезчерез web-приложениеweb-приложение (т.е. используя JSP,(т.е. используя JSP, JSF, GWT и т.п.) илиJSF, GWT и т.п.) или web-сервисweb-сервис ..  СлойСлой бизнесс-логикибизнесс-логики является основой дляявляется основой для enterprise-приложения. В нем описываютсяenterprise-приложения. В нем описываются бизнесс-процессы, производится поиск,бизнесс-процессы, производится поиск, авторизация и множество других вещей. Слойавторизация и множество других вещей. Слой бизнесс-логики использует механизмы слоябизнесс-логики использует механизмы слоя хранения данныххранения данных ..  Чем отличаетсяЧем отличается слойслой хранения данныххранения данных ии слойслой базы данныхбазы данных ? Тем, что в первом? Тем, что в первом описываются высокоуровневые объектно-описываются высокоуровневые объектно- ориентированные механизмы для работы сориентированные механизмы для работы с сущностями БД, в то время как второй - это исущностями БД, в то время как второй - это и
  • 5.
  • 6. domain-driven designdomain-driven design (DDD)(DDD)  АрхитектураАрхитектура DDDDDD предпологает, чтопредпологает, что объекты обладают бизнесс-логикой, а необъекты обладают бизнесс-логикой, а не являются простой репликацией объектовявляются простой репликацией объектов БД. Многие программисты не любятБД. Многие программисты не любят наделять объекты логикой и создаютнаделять объекты логикой и создают отдельный слой, называемый service layerотдельный слой, называемый service layer илиили application layerapplication layer. Он похож на слой. Он похож на слой бизнесс-логики традиционной слоистойбизнесс-логики традиционной слоистой архитектуры за тем лишь отличием, что онархитектуры за тем лишь отличием, что он намногонамного тоньщетоньще..
  • 7.
  • 8.
  • 9.  Сервер приложений j2ee состоит изСервер приложений j2ee состоит из двух основных элементов:двух основных элементов: контейнерконтейнер webweb-приложения (JSP, JSF и т.д.) и-приложения (JSP, JSF и т.д.) и EJB-контейнерEJB-контейнер.. Первый служит дляПервый служит для создания пользовательскогосоздания пользовательского интерфейса и слабо подходит дляинтерфейса и слабо подходит для описания бизнес-логики приложения.описания бизнес-логики приложения. Для этого используется вторая частьДля этого используется вторая часть J2EE - EJB.J2EE - EJB.
  • 10.
  • 11.
  • 12. Session beanSession bean  Session beanSession bean представляет собой EJB-компоненту,представляет собой EJB-компоненту, связанную с одним клиентом. ``Бины'' этого типа, каксвязанную с одним клиентом. ``Бины'' этого типа, как правило, имеют ограниченный срок жизни (хотя это и неправило, имеют ограниченный срок жизни (хотя это и не обязательно), и редко участвуют в транзакциях. Вобязательно), и редко участвуют в транзакциях. В частности, они обычно не восстанавливаются после сбоячастности, они обычно не восстанавливаются после сбоя сервера. В качестве примера session bean можно взятьсервера. В качестве примера session bean можно взять ``бин'', который живет в веб-сервере и динамически``бин'', который живет в веб-сервере и динамически создает HTML-страницы клиенту, при этом следя за тем,создает HTML-страницы клиенту, при этом следя за тем, какая именно страница загружена у клиента. Когда жекакая именно страница загружена у клиента. Когда же пользователь покидает вэб-узел, или по истечениипользователь покидает вэб-узел, или по истечении некоторого времени, session bean уничтожается.некоторого времени, session bean уничтожается. Несмотря на то, что в процессе своей работы, sessionНесмотря на то, что в процессе своей работы, session bean мог сохранять некоторую информацию в базеbean мог сохранять некоторую информацию в базе данных, его предназачение заключается все-таки не вданных, его предназачение заключается все-таки не в отображении состояния или в работе с ``вечнымиотображении состояния или в работе с ``вечными объектами'', а просто в выполнении некоторых функцийобъектами'', а просто в выполнении некоторых функций на стороне сервера от имени одного клиента.на стороне сервера от имени одного клиента.
  • 13. Session beanSession bean В качестве session bean может выступать обычныйВ качестве session bean может выступать обычный класс Java удовлетворяющий следующимкласс Java удовлетворяющий следующим условиям:условиям:  иметь как минимум один методиметь как минимум один метод  не должен быть абстрактнымне должен быть абстрактным  иметь конструктор по-умолчаниюиметь конструктор по-умолчанию  методы не должны начинаться с "ejb" (напримерметоды не должны начинаться с "ejb" (например ejbCreate, ejbDoSomething)ejbCreate, ejbDoSomething) ДляДля stateful-биновstateful-бинов существует еще одно условие:существует еще одно условие: свойства класса должны быть объявленысвойства класса должны быть объявлены примитивами или реализовывать интерфейспримитивами или реализовывать интерфейс Serializable.Serializable.
  • 14. Особенности stateless иОсобенности stateless и stateful биновstateful бинов  Один bean может содержать множествоОдин bean может содержать множество клиентских методов. Этот момент являетсяклиентских методов. Этот момент является важным для производительности, так какважным для производительности, так как контейнер помещает экземплярыконтейнер помещает экземпляры statelessstateless-- бинов в общее хранилище и множествобинов в общее хранилище и множество клиентов могут использовать одинклиентов могут использовать один экземпляр бина.экземпляр бина. В отличии от statelessВ отличии от stateless statefulstateful биныбины инстанцируются для каждого пользователяинстанцируются для каждого пользователя отдельно.отдельно.
  • 15. Entity beanEntity bean  Entity beanEntity bean, наоборот, представляет собой, наоборот, представляет собой компоненту, работающую с постояннойкомпоненту, работающую с постоянной (persistent) информацией, хранящейся,(persistent) информацией, хранящейся, например, в базе данных. Entity beansнапример, в базе данных. Entity beans ассоциируются с элементами баз данных иассоциируются с элементами баз данных и могут быть доступны одновременномогут быть доступны одновременно нескольким пользователям. Так какнескольким пользователям. Так как информация в базе данных являетсяинформация в базе данных является постоянной, то и entity beans живутпостоянной, то и entity beans живут постоянно, ``выживая'', тем самым, послепостоянно, ``выживая'', тем самым, после сбоев сервера (когда серверсбоев сервера (когда сервер восстанавливается после сбоя, он можетвосстанавливается после сбоя, он может восстановить ``бин'' из базы данных).восстановить ``бин'' из базы данных).
  • 16.
  • 17. EJB-компонента (TheEJB-компонента (The Enterprise JavaBeansEnterprise JavaBeans component)component)  Отдельная EJB-компонента представляет цобойОтдельная EJB-компонента представляет цобой компоненту в том же смысле что и традиоционныйкомпоненту в том же смысле что и традиоционный JavaBeans ``bean'' (``зерно''). Компоненты EJB выполняютсяJavaBeans ``bean'' (``зерно''). Компоненты EJB выполняются внутри EJB-внутри EJB-контейнераконтейнера, который, в свою очередь,, который, в свою очередь, выполняется внутри EJB-выполняется внутри EJB-серверасервера. Любой сервер, который в. Любой сервер, который в состоянии поддерживать EJB-контейнеры и предоставлятьсостоянии поддерживать EJB-контейнеры и предоставлять им необходимые сервисы, может быть EJB-сервером (тоим необходимые сервисы, может быть EJB-сервером (то есть многие из существующих серверов могут быть простоесть многие из существующих серверов могут быть просто расширены до поддержки Enterprise JavaBeans).расширены до поддержки Enterprise JavaBeans).  EJB-компонента представляет из себя Java-класс, которыйEJB-компонента представляет из себя Java-класс, который реализует некоторую бизнес-логику. Все остальные классыреализует некоторую бизнес-логику. Все остальные классы в EJB-системе либо реализуют поддержку клиент/серверв EJB-системе либо реализуют поддержку клиент/сервер взаимодйествий между компонентами, либо реализуютвзаимодйествий между компонентами, либо реализуют некоторые сервисы для компонент.некоторые сервисы для компонент.
  • 18. EJB-контейнер (TheEJB-контейнер (The Enterprise JavaBeansEnterprise JavaBeans container)container)  EJB-контейнер -- это то место, где ``живет'' EJB-компонент.EJB-контейнер -- это то место, где ``живет'' EJB-компонент. EJB-контейнер реализует для находящихся в немEJB-контейнер реализует для находящихся в нем компонент такие сервисы как транзакции (transaction),компонент такие сервисы как транзакции (transaction), управление ресурсами, управление версиями компонент,управление ресурсами, управление версиями компонент, их мобильностью, настраиваемостью, мобильностью,их мобильностью, настраиваемостью, мобильностью, жизненным циклом. Так как EJB-контейнер реализует всежизненным циклом. Так как EJB-контейнер реализует все эти функции, то разработчик EJB-компонент может неэти функции, то разработчик EJB-компонент может не реализовывать их самостоятельно, а просто вызыватьреализовывать их самостоятельно, а просто вызывать соответсвующие методы у контейнера (правила вызовасоответсвующие методы у контейнера (правила вызова методов у контейнера описываются в спецификации). Какметодов у контейнера описываются в спецификации). Как правило, в одном EJB-контейнере живет несколькоправило, в одном EJB-контейнере живет несколько однотипных EJB-компонент.однотипных EJB-компонент.
  • 19. EJB-объект (EJB-object)EJB-объект (EJB-object) и удаленный интерфейси удаленный интерфейс (remote interface)(remote interface)  Клиентские приложения вызывают методы наКлиентские приложения вызывают методы на удаленных EJB-компонентах через EJB-объектудаленных EJB-компонентах через EJB-объект (EJB-object). EJB-объект реализует ``удаленный(EJB-object). EJB-объект реализует ``удаленный интерфейс'' EJB-компоненты на сервере. Суть винтерфейс'' EJB-компоненты на сервере. Суть в том, что находящаяся на сервере EJB-компонента,том, что находящаяся на сервере EJB-компонента, помимо бизнес-функций, ради которых она былапомимо бизнес-функций, ради которых она была разработана, должна реализовывать такжеразработана, должна реализовывать также некоторые функции, определяемыенекоторые функции, определяемые спецификацией, которые служат для ``управления''спецификацией, которые служат для ``управления'' EJB-компонентой со стороны контейнера. EJB-EJB-компонентой со стороны контейнера. EJB- объект реализует лишь бизнес-интерфейс дляобъект реализует лишь бизнес-интерфейс для EJB-компоненты, являясь, в некотором смысле,EJB-компоненты, являясь, в некотором смысле, ``промежуточным'' звеном между клиентом и EJB-``промежуточным'' звеном между клиентом и EJB- компонентой.компонентой.
  • 20. EJB-компонентаEJB-компонента выполняется навыполняется на сервере, внутри EJB-сервере, внутри EJB- контейнера и реализуетконтейнера и реализует бизнес-логику, в тобизнес-логику, в то время как EJB-объектвремя как EJB-объект выполняется у клиентавыполняется у клиента и удаленно вызываети удаленно вызывает методы у EJB-методы у EJB- компоненты.компоненты.
  • 21.
  • 22.  Итак, приложение-клиент соединяется с EJB-Итак, приложение-клиент соединяется с EJB- сервером и посылает ему запрос на созданиесервером и посылает ему запрос на создание ``бина'' (Enterprise JavaBean) для обработки``бина'' (Enterprise JavaBean) для обработки своих запросов. Сервер отвечает на такой запроссвоих запросов. Сервер отвечает на такой запрос созданием объекта на стороне серверасозданием объекта на стороне сервера (экземпляр EJB-компоненты) и возвращает(экземпляр EJB-компоненты) и возвращает клиенту прокси-объект (EJB-объект), чейклиенту прокси-объект (EJB-объект), чей итерфейс совпадает с интерфейсом созданнойитерфейс совпадает с интерфейсом созданной EJB-компоненты и чьи методы перенаправляютEJB-компоненты и чьи методы перенаправляют вызовы собственно экземпляру компоненты.вызовы собственно экземпляру компоненты. После этого приложение-клиент работает с EJB-После этого приложение-клиент работает с EJB- объектом как с локальным объектом, даже и необъектом как с локальным объектом, даже и не подозревая, что всю работу выполняет не EJB-подозревая, что всю работу выполняет не EJB- объект, а удаленная компонента на сервере.объект, а удаленная компонента на сервере. Необходимо заметить, что созданием иНеобходимо заметить, что созданием и удалением EJB-компонент на сервереудалением EJB-компонент на сервере занимается EJB-контейнер.занимается EJB-контейнер.
  • 23.
  • 24. POJO, POJI,POJO, POJI, annotationsannotations  Теперь рассмотрим реализацию этихТеперь рассмотрим реализацию этих сущностей. В EJB3 мы используемсущностей. В EJB3 мы используем POJOPOJO (Plain Old Java Objects),(Plain Old Java Objects), POJIPOJI (Plain Old Java Interfaces) и(Plain Old Java Interfaces) и аннотациианнотации..  Аннотация записывается так:Аннотация записывается так: @<имя аннотации>(<список парамет-@<имя аннотации>(<список парамет- значение>)значение>)
  • 25.  Какие аннотации могут быть?Какие аннотации могут быть?  StatelessStateless - говорит контейнеру, что класс будет stateless session- говорит контейнеру, что класс будет stateless session bean. Для него контейнер обеспечит безопасность потоков иbean. Для него контейнер обеспечит безопасность потоков и менеджмент транзакций. Дополнительно, вы можете добавитьменеджмент транзакций. Дополнительно, вы можете добавить другие свойства, например прозрачное управление безопасностью идругие свойства, например прозрачное управление безопасностью и перехватчики событий;перехватчики событий;  LocalLocal - относится к интерфейсу и говорит, что bean реализующий- относится к интерфейсу и говорит, что bean реализующий интерфейс доступен локальноинтерфейс доступен локально  RemoteRemote - относится к интерфейсу и говорит, что bean доступен через- относится к интерфейсу и говорит, что bean доступен через RMI (Remote Method Invocation)RMI (Remote Method Invocation)  EJBEJB - применятеся в коде, где мы используем bean.- применятеся в коде, где мы используем bean.  StatefulStateful - говорит контейнеру, что класс будет stateful session bean.- говорит контейнеру, что класс будет stateful session bean.  RemoveRemove - опциональная аннотация, которая используется с stateful- опциональная аннотация, которая используется с stateful бинами. Метод, помеченный как Remove говорит контейнеру, чтобинами. Метод, помеченный как Remove говорит контейнеру, что после его исполнения нет больше смысла хранить bean, т.е. егопосле его исполнения нет больше смысла хранить bean, т.е. его состояние сбрасывается. Это бывает критично длясостояние сбрасывается. Это бывает критично для производительности.производительности.  EntityEntity - говорит контейнеру, что класс будет сущностью БД- говорит контейнеру, что класс будет сущностью БД  TableTable(name="...")(name="...") - указывает таблицу для маппинга- указывает таблицу для маппинга  IdId,, ColumnColumn - параметры маппинга- параметры маппинга  WebServiceWebService - говорит, что интерфейс или класс будет представлять- говорит, что интерфейс или класс будет представлять вэб-сервис.вэб-сервис.  и много-много других...и много-много других...
  • 26.
  • 27. POJO, POJI,POJO, POJI, annotationsannotations  УУ statelessstateless ии MDBMDB бинов существуетбинов существует 22 событиясобытия жизненного цикла, которые мыжизненного цикла, которые мы можем перехватить: создание и удалениеможем перехватить: создание и удаление бина. Метод, который будет вызыватьсябина. Метод, который будет вызываться сразу после создании бина помечаетсясразу после создании бина помечается аннотацией javax.annotation.аннотацией javax.annotation.PostConstructPostConstruct, а, а перед его удалением -перед его удалением - javax.annotation.javax.annotation.PreDestroyPreDestroy.. StatefulStateful биныбины обладают помимо рассмотреных вышеобладают помимо рассмотреных выше ещееще 2 событиями2 событиями: при активации: при активации (javax.ejb.(javax.ejb.PostActivatePostActivate) и при деактивации) и при деактивации (javax.ejb.(javax.ejb.PrePassivatePrePassivate).).
  • 28.  importimport javax.ejb.Local;javax.ejb.Local; @Local@Local public interfacepublic interface BookTestBeanLocal {BookTestBeanLocal { public voidpublic void test();test(); }} ------------------------------------------------------------------------------------------------------------  importimport javax.ejb.Remote;javax.ejb.Remote; @Remote@Remote public interfacepublic interface BookTestBeanRemote {BookTestBeanRemote { public voidpublic void test();test(); }}
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. Перехватчики(Перехватчики( interceptointercepto rsrs))  При создании enterprise-приложений частоПри создании enterprise-приложений часто возникает необходимость записывать логвозникает необходимость записывать лог вызываемых методов (в целях отладки иливызываемых методов (в целях отладки или для лога безопасности), а так жедля лога безопасности), а так же контролировать доступ пользователей кконтролировать доступ пользователей к отдельным частям приложения. Для этогоотдельным частям приложения. Для этого используютсяиспользуются перехватчикиперехватчики - объекты,- объекты, методы которых вызываютсяметоды которых вызываются автоматическиавтоматически припри вызовевызове методаметода EJBEJB-- бина.бина.
  • 34. Перехватчики(Перехватчики( interceptointercepto rsrs))  Объект-перехватчик является POJO,Объект-перехватчик является POJO, за тем лишь исключением, что метод,за тем лишь исключением, что метод, который должен вызыватьсякоторый должен вызываться автоматически аннотируетсяавтоматически аннотируется @AroundInvoke@AroundInvoke
  • 35.  package com.sample;package com.sample;   import javax.interceptor.AroundInvoke;import javax.interceptor.AroundInvoke;  import javax.interceptor.InvocationContext;import javax.interceptor.InvocationContext;   public class MyInterceptor {public class MyInterceptor {   @AroundInvoke@AroundInvoke  public Object log(InvocationContext ctx) throws Exceptionpublic Object log(InvocationContext ctx) throws Exception  {{  System.out.println("*** TracingInterceptor intercepting " + ctx.getMethod().getName());System.out.println("*** TracingInterceptor intercepting " + ctx.getMethod().getName());  long start = System.currentTimeMillis();long start = System.currentTimeMillis();  String param = (String)ctx.getParameters()[0];String param = (String)ctx.getParameters()[0];   if (param == null)if (param == null)  ctx.setParameters(new String[]{"default"});ctx.setParameters(new String[]{"default"});   trytry  {{  return ctx.proceed();return ctx.proceed();  }}  catch(Exception e)catch(Exception e)  {{  throw e;throw e;  }}  finallyfinally  {{  long time = System.currentTimeMillis() - start;long time = System.currentTimeMillis() - start;  String method = ctx.getClass().getName();String method = ctx.getClass().getName();  System.out.println("*** TracingInterceptor invocation of " + method + " took " + time + "ms");System.out.println("*** TracingInterceptor invocation of " + method + " took " + time + "ms");  }}  }}  }}
  • 36.  @Stateless(name="SampleEJB")@Stateless(name="SampleEJB")  @RemoteBinding(jndiBinding="SampleEJB")@RemoteBinding(jndiBinding="SampleEJB")  @Interceptors(value=com.sample.MyInterceptor.class)@Interceptors(value=com.sample.MyInterceptor.class)   public class SampleBean implements Sample {public class SampleBean implements Sample {   public void doSomething(String param) {public void doSomething(String param) {  callWebService(param);callWebService(param);  }}  @AroundInvoke@AroundInvoke  public Object log(InvocationContext ctx) throws Exceptionpublic Object log(InvocationContext ctx) throws Exception  {{   trytry  {{  return ctx.proceed();return ctx.proceed();  }}  catch(Exception e)catch(Exception e)  {{  throw e;throw e;  }}  }}  }}
  • 37.
  • 38.
  • 39. LiteratureLiterature  http://j4sq.blogspot.com/2011/10/ejb-1.htmlhttp://j4sq.blogspot.com/2011/10/ejb-1.html  http://www.laliluna.de/articles/posts/ejb-3-tuthttp://www.laliluna.de/articles/posts/ejb-3-tut  https://www.youtube.com/watch?v=wKwihFhhttps://www.youtube.com/watch?v=wKwihFh  http://www.tutorialspoint.com/ejb/ejb_intercehttp://www.tutorialspoint.com/ejb/ejb_interce