Enterprise Java Beans For students of universities Author: Oxana Dunik.

Презентация:



Advertisements
Похожие презентации
Interceptors Василий Кряжев
Advertisements

Рассматриваемые темы Технология EJB Типы EJB Вызов EJB Сборка и развертывание EJB- приложения 2-1.
ENTERPRISE JAVABEANS 3.0 STATEFUL & STATLESS SESSION BEANS.
1 © Luxoft Training 2013 Модуль Спецификация Java Beans. Цели Правила описания Java Bean Обзор спецификации Java Beans Использование технологии в.
Java Server Pages (JSP). JSP Позволяет веб разработчикам динамически генерировать HTML, XML - и другие веб страницы. Страницы компилируются JSP- компилятором.
Рассматриваемые темы Подсистема безопасности сервера приложений Конфигурация безопасности в EJB Сервисы авторизации и аутентификации в Java 2-1.
Исключения в EJB Кряжев Василий
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – Модули HTTP, фильтры, события приложения - Global.asax.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – обработка ошибок страниц и приложения, Global.aspx.
EJB Local Interface Кряжев Василий
Рассматриваемые темы Введение в кластеринг Кластеринг Stateless session beans Кластеринг Stateful session beans Конфигурация кластеринга 2-1.
Session beans Василий Кряжев
Где хранить данные в web- приложении page –JSP страница request – HTTP запрос session – сессия пользователя application – веб-приложение Static Java class.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Рассматриваемые темы EJB Timer сервис Создание таймера Отмена и сохранение таймера Получение информации о таймере Транзакции и таймеры 11-1.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Симпозиум 2008 Сергей Шутов, ДИМАС Борис Егоров, Интерсистемс Практика использования Zen и Прототип-6.
Saint Petersburg, 2011 Java Lecture #06 Exceptions.
Web - сервисы. Веб-служба, веб-сервис (англ. web service) идентифицируемая веб-адресом программная система со стандартизированными интерфейсами.англ.веб-адресоминтерфейсами.
Транксрипт:

Enterprise Java Beans For students of universities Author: Oxana Dunik

Технологию EJB (Enterprise Java Beans) можно рассматривать с двух точек зрения: как фреймворк, и как компонент. С точки зрения компонента EJB - это всего-лишь надстройка над POJO-классом, описываемая с помощью аннотации( можно рассматривать с двух точек зрения: как фреймворк, и как компонент. С точки зрения компонента EJB - это всего-лишь надстройка над POJO-классом, описываемая с помощью аннотации( POJO это просто класс Java, который: 1. Содержит только поля, без логики их обработки; 2. Доступ ко все полям только через get/set ). POJO это просто класс Java, который: 1. Содержит только поля, без логики их обработки; 2. Доступ ко все полям только через get/set ). Существует три типа компонентов EJB: Существует три типа компонентов EJB: session beans - используется для описания бизнес-логики приложения session beans - используется для описания бизнес-логики приложения message-driven beans - так же используется для бизнес- логики message-driven beans - так же используется для бизнес- логики entities - используется для хранения данных entities - используется для хранения данных С точки зрения фреймворка EJB - это технология, предоставляющая множество готовых решений (управление транзакциями, безопасность, хранение информации и т.п.) для вашего приложения. С точки зрения фреймворка EJB - это технология, предоставляющая множество готовых решений (управление транзакциями, безопасность, хранение информации и т.п.) для вашего приложения.

Основные архитектуры EJB Существует 2 основные архитектуры при разработке enterprise-приложений: Существует 2 основные архитектуры при разработке enterprise-приложений: традиционная слоистая архитектура (traditional layered architecture) традиционная слоистая архитектура (traditional layered architecture) domain-driven design (DDD) domain-driven design (DDD)

традиционная слоистая архитектура (traditional layered architecture) EJB 4 базовых слоя: слой презентации, слой бизнес-логики, слой хранения данных и непосредственно слой самой базы данных. 4 базовых слоя: слой презентации, слой бизнес-логики, слой хранения данных и непосредственно слой самой базы данных. Обычно слой презентации реализуется через web-приложение (т.е. используя JSP, JSF, GWT и т.п.) или web-сервис. Обычно слой презентации реализуется через web-приложение (т.е. используя JSP, JSF, GWT и т.п.) или web-сервис. Слой бизнес-логики является основой для enterprise-приложения. В нем описываются бизнес-процессы, производится поиск, авторизация и множество других вещей. Слой бизнес-логики использует механизмы слоя хранения данных. Слой бизнес-логики является основой для enterprise-приложения. В нем описываются бизнес-процессы, производится поиск, авторизация и множество других вещей. Слой бизнес-логики использует механизмы слоя хранения данных. Чем отличается слой хранения данных и слой базы данных? Тем, что в первом описываются высокоуровневые объектно-ориентированные механизмы для работы с сущностями БД, в то время как второй - это и есть непосредственно база данных (Oracle, MySQL и т.п.) Чем отличается слой хранения данных и слой базы данных? Тем, что в первом описываются высокоуровневые объектно-ориентированные механизмы для работы с сущностями БД, в то время как второй - это и есть непосредственно база данных (Oracle, MySQL и т.п.)

domain-driven design (DDD) Архитектура DDD предполагает, что объекты обладают бизнес-логикой, а не являются простой репликацией объектов БД. Многие программисты не любят наделять объекты логикой и создают отдельный слой, называемый service layer или application layer. Он похож на слой бизнес-логики традиционной слоистой архитектуры за тем лишь отличием, что он намного тоньше. Архитектура DDD предполагает, что объекты обладают бизнес-логикой, а не являются простой репликацией объектов БД. Многие программисты не любят наделять объекты логикой и создают отдельный слой, называемый service layer или application layer. Он похож на слой бизнес-логики традиционной слоистой архитектуры за тем лишь отличием, что он намного тоньше.

Сервер приложений j2ee состоит из двух основных элементов: контейнер web-приложения (JSP, JSF и т.д.) и EJB-контейнер. Первый служит для создания пользовательского интерфейса и слабо подходит для описания бизнес-логики приложения. Для этого используется вторая часть J2EE - EJB. Сервер приложений j2ee состоит из двух основных элементов: контейнер web-приложения (JSP, JSF и т.д.) и EJB-контейнер. Первый служит для создания пользовательского интерфейса и слабо подходит для описания бизнес-логики приложения. Для этого используется вторая часть J2EE - EJB.

Session bean Session bean представляет собой EJB-компоненту, связанную с одним клиентом. ``Бины'' этого типа, как правило, имеют ограниченный срок жизни (хотя это и не обязательно), и редко участвуют в транзакциях. В частности, они обычно не восстанавливаются после сбоя сервера. В качестве примера session bean можно взять ``бин'', который живет в веб-сервере и динамически создает HTML-страницы клиенту, при этом следя за тем, какая именно страница загружена у клиента. Когда же пользователь покидает веб-узел, или по истечении некоторого времени, session bean уничтожается. Несмотря на то, что в процессе своей работы, session bean мог сохранять некоторую информацию в базе данных, его предназначение заключается все-таки не в отображении состояния или в работе с ``вечными объектами'', а просто в выполнении некоторых функций на стороне сервера от имени одного клиента. Session bean представляет собой EJB-компоненту, связанную с одним клиентом. ``Бины'' этого типа, как правило, имеют ограниченный срок жизни (хотя это и не обязательно), и редко участвуют в транзакциях. В частности, они обычно не восстанавливаются после сбоя сервера. В качестве примера session bean можно взять ``бин'', который живет в веб-сервере и динамически создает HTML-страницы клиенту, при этом следя за тем, какая именно страница загружена у клиента. Когда же пользователь покидает веб-узел, или по истечении некоторого времени, session bean уничтожается. Несмотря на то, что в процессе своей работы, session bean мог сохранять некоторую информацию в базе данных, его предназначение заключается все-таки не в отображении состояния или в работе с ``вечными объектами'', а просто в выполнении некоторых функций на стороне сервера от имени одного клиента.

Session bean В качестве session bean может выступать обычный класс Java удовлетворяющий следующим условиям: иметь как минимум один метод иметь как минимум один метод не должен быть абстрактным не должен быть абстрактным иметь конструктор по-умолчанию иметь конструктор по-умолчанию методы не должны начинаться с "ejb" (например ejbCreate, ejbDoSomething) методы не должны начинаться с "ejb" (например ejbCreate, ejbDoSomething) Для stateful-бинов существует еще одно условие: свойства класса должны быть объявлены примитивами или реализовывать интерфейс Serializable.

Особенности stateless и stateful бинов Один bean может содержать множество клиентских методов. Этот момент является важным для производительности, так как контейнер помещает экземпляры stateless- бинов в общее хранилище и множество клиентов могут использовать один экземпляр бина. В отличии от stateless stateful бины инстанцируются для каждого пользователя отдельно. Один bean может содержать множество клиентских методов. Этот момент является важным для производительности, так как контейнер помещает экземпляры stateless- бинов в общее хранилище и множество клиентов могут использовать один экземпляр бина. В отличии от stateless stateful бины инстанцируются для каждого пользователя отдельно.

Entity bean Entity bean, наоборот, представляет собой компоненту, работающую с постоянной (persistent) информацией, хранящейся, например, в базе данных. Entity beans ассоциируются с элементами баз данных и могут быть доступны одновременно нескольким пользователям. Так как информация в базе данных является постоянной, то и entity beans живут постоянно, ``выживая'', тем самым, после сбоев сервера (когда сервер восстанавливается после сбоя, он может восстановить ``бин'' из базы данных). Entity bean, наоборот, представляет собой компоненту, работающую с постоянной (persistent) информацией, хранящейся, например, в базе данных. Entity beans ассоциируются с элементами баз данных и могут быть доступны одновременно нескольким пользователям. Так как информация в базе данных является постоянной, то и entity beans живут постоянно, ``выживая'', тем самым, после сбоев сервера (когда сервер восстанавливается после сбоя, он может восстановить ``бин'' из базы данных).

EJB-компонента (The Enterprise JavaBeans component) Отдельная EJB-компонента представляет собой компоненту в том же смысле что и традиционный JavaBeans ``bean'' (``зерно''). Компоненты EJB выполняются внутри EJB-контейнера, который, в свою очередь, выполняется внутри EJB-сервера. Любой сервер, который в состоянии поддерживать EJB-контейнеры и предоставлять им необходимые сервисы, может быть EJB-сервером (то есть многие из существующих серверов могут быть просто расширены до поддержки Enterprise JavaBeans). Отдельная EJB-компонента представляет собой компоненту в том же смысле что и традиционный JavaBeans ``bean'' (``зерно''). Компоненты EJB выполняются внутри EJB-контейнера, который, в свою очередь, выполняется внутри EJB-сервера. Любой сервер, который в состоянии поддерживать EJB-контейнеры и предоставлять им необходимые сервисы, может быть EJB-сервером (то есть многие из существующих серверов могут быть просто расширены до поддержки Enterprise JavaBeans). EJB-компонента представляет из себя Java-класс, который реализует некоторую бизнес-логику. Все остальные классы в EJB-системе либо реализуют поддержку клиент/сервер взаимодействий между компонентами, либо реализуют некоторые сервисы для компонент. EJB-компонента представляет из себя Java-класс, который реализует некоторую бизнес-логику. Все остальные классы в EJB-системе либо реализуют поддержку клиент/сервер взаимодействий между компонентами, либо реализуют некоторые сервисы для компонент.

EJB-контейнер (The Enterprise JavaBeans container) EJB-контейнер -- это то место, где ``живет'' EJB-компонент. EJB-контейнер реализует для находящихся в нем компонент такие сервисы как транзакции (transaction), управление ресурсами, управление версиями компонент, их мобильностью, настраиваемостью, мобильностью, жизненным циклом. Так как EJB-контейнер реализует все эти функции, то разработчик EJB-компонент может не реализовывать их самостоятельно, а просто вызывать соответсвующие методы у контейнера (правила вызова методов у контейнера описываются в спецификации). Как правило, в одном EJB-контейнере живет несколько однотипных EJB-компонент. EJB-контейнер -- это то место, где ``живет'' EJB-компонент. EJB-контейнер реализует для находящихся в нем компонент такие сервисы как транзакции (transaction), управление ресурсами, управление версиями компонент, их мобильностью, настраиваемостью, мобильностью, жизненным циклом. Так как EJB-контейнер реализует все эти функции, то разработчик EJB-компонент может не реализовывать их самостоятельно, а просто вызывать соответсвующие методы у контейнера (правила вызова методов у контейнера описываются в спецификации). Как правило, в одном EJB-контейнере живет несколько однотипных EJB-компонент.

EJB-объект (EJB-object) и удаленный интерфейс (remote interface) Клиентские приложения вызывают методы на удаленных EJB-компонентах через EJB-объект (EJB-object). EJB-объект реализует ``удаленный интерфейс'' EJB-компоненты на сервере. Суть в том, что находящаяся на сервере EJB-компонента, помимо бизнес-функций, ради которых она была разработана, должна реализовывать также некоторые функции, определяемые спецификацией, которые служат для ``управления'' EJB-компонентой со стороны контейнера. EJB- объект реализует лишь бизнес-интерфейс для EJB-компоненты, являясь, в некотором смысле, ``промежуточным'' звеном между клиентом и EJB- компонентой. Клиентские приложения вызывают методы на удаленных EJB-компонентах через EJB-объект (EJB-object). EJB-объект реализует ``удаленный интерфейс'' EJB-компоненты на сервере. Суть в том, что находящаяся на сервере EJB-компонента, помимо бизнес-функций, ради которых она была разработана, должна реализовывать также некоторые функции, определяемые спецификацией, которые служат для ``управления'' EJB-компонентой со стороны контейнера. EJB- объект реализует лишь бизнес-интерфейс для EJB-компоненты, являясь, в некотором смысле, ``промежуточным'' звеном между клиентом и EJB- компонентой.

EJB-компонента выполняется на сервере, внутри EJB-контейнера и реализует бизнес-логику, в то время как EJB-объект выполняется у клиента и удаленно вызывает методы у EJB-компоненты.

Итак, приложение-клиент соединяется с EJB- сервером и посылает ему запрос на создание ``бина'' (Enterprise JavaBean) для обработки своих запросов. Сервер отвечает на такой запрос созданием объекта на стороне сервера (экземпляр EJB-компоненты) и возвращает клиенту прокси-объект (EJB-объект), чей итерфейс совпадает с интерфейсом созданной EJB-компоненты и чьи методы перенаправляют вызовы собственно экземпляру компоненты. После этого приложение-клиент работает с EJB- объектом как с локальным объектом, даже и не подозревая, что всю работу выполняет не EJB- объект, а удаленная компонента на сервере. Необходимо заметить, что созданием и удалением EJB-компонент на сервере занимается EJB-контейнер. Итак, приложение-клиент соединяется с EJB- сервером и посылает ему запрос на создание ``бина'' (Enterprise JavaBean) для обработки своих запросов. Сервер отвечает на такой запрос созданием объекта на стороне сервера (экземпляр EJB-компоненты) и возвращает клиенту прокси-объект (EJB-объект), чей итерфейс совпадает с интерфейсом созданной EJB-компоненты и чьи методы перенаправляют вызовы собственно экземпляру компоненты. После этого приложение-клиент работает с EJB- объектом как с локальным объектом, даже и не подозревая, что всю работу выполняет не EJB- объект, а удаленная компонента на сервере. Необходимо заметить, что созданием и удалением EJB-компонент на сервере занимается EJB-контейнер.

POJO, POJI, annotations Теперь рассмотрим реализацию этих сущностей. В EJB3 мы используем POJO (Plain Old Java Objects), POJI (Plain Old Java Interfaces) и аннотации. Теперь рассмотрим реализацию этих сущностей. В EJB3 мы используем POJO (Plain Old Java Objects), POJI (Plain Old Java Interfaces) и аннотации. Аннотация записывается ( ) Аннотация записывается ( )

Какие аннотации могут быть? Какие аннотации могут быть? Stateless - говорит контейнеру, что класс будет stateless session bean. Для него контейнер обеспечит безопасность потоков и менеджмент транзакций. Дополнительно, вы можете добавить другие свойства, например прозрачное управление безопасностью и перехватчики событий; Stateless - говорит контейнеру, что класс будет stateless session bean. Для него контейнер обеспечит безопасность потоков и менеджмент транзакций. Дополнительно, вы можете добавить другие свойства, например прозрачное управление безопасностью и перехватчики событий; Local - относится к интерфейсу и говорит, что bean реализующий интерфейс доступен локально Local - относится к интерфейсу и говорит, что bean реализующий интерфейс доступен локально Remote - относится к интерфейсу и говорит, что bean доступен через RMI (Remote Method Invocation) Remote - относится к интерфейсу и говорит, что bean доступен через RMI (Remote Method Invocation) EJB - применятеся в коде, где мы используем bean. EJB - применятеся в коде, где мы используем bean. Stateful - говорит контейнеру, что класс будет stateful session bean. Stateful - говорит контейнеру, что класс будет stateful session bean. Remove - опциональная аннотация, которая используется с stateful бинами. Метод, помеченный как Remove говорит контейнеру, что после его исполнения нет больше смысла хранить bean, т.е. его состояние сбрасывается. Это бывает критично для производительности. Remove - опциональная аннотация, которая используется с stateful бинами. Метод, помеченный как Remove говорит контейнеру, что после его исполнения нет больше смысла хранить bean, т.е. его состояние сбрасывается. Это бывает критично для производительности. Entity - говорит контейнеру, что класс будет сущностью БД Entity - говорит контейнеру, что класс будет сущностью БД Table(name="...") - указывает таблицу для маппинга Table(name="...") - указывает таблицу для маппинга Id, Column - параметры маппинга Id, Column - параметры маппинга WebService - говорит, что интерфейс или класс будет представлять веб-сервис. WebService - говорит, что интерфейс или класс будет представлять веб-сервис. и много-много других... и много-много других...

POJO, POJI, annotations У stateless и MDB бинов существует 2 события жизненного цикла, которые мы можем перехватить: создание и удаление бина. Метод, который будет вызываться сразу после создании бина помечается аннотацией javax.annotation.PostConstruct, а перед его удалением - javax.annotation.PreDestroy. Stateful бины обладают помимо рассмотреных выше еще 2 событиями: при активации (javax.ejb.PostActivate) и при деактивации (javax.ejb.PrePassivate). У stateless и MDB бинов существует 2 события жизненного цикла, которые мы можем перехватить: создание и удаление бина. Метод, который будет вызываться сразу после создании бина помечается аннотацией javax.annotation.PostConstruct, а перед его удалением - javax.annotation.PreDestroy. Stateful бины обладают помимо рассмотреных выше еще 2 событиями: при активации (javax.ejb.PostActivate) и при деактивации (javax.ejb.PrePassivate).

import public interface BookTestBeanLocal { public void test(); } import public interface BookTestBeanLocal { public void test(); } import public interface BookTestBeanRemote { public void test(); } import public interface BookTestBeanRemote { public void test(); }

Перехватчики(interceptors) При создании enterprise-приложений часто возникает необходимость записывать лог вызываемых методов (в целях отладки или для лога безопасности), а так же контролировать доступ пользователей к отдельным частям приложения. Для этого используются перехватчики - объекты, методы которых вызываются автоматически при вызове метода EJB- бина. При создании enterprise-приложений часто возникает необходимость записывать лог вызываемых методов (в целях отладки или для лога безопасности), а так же контролировать доступ пользователей к отдельным частям приложения. Для этого используются перехватчики - объекты, методы которых вызываются автоматически при вызове метода EJB- бина.

Перехватчики(interceptors) Объект-перехватчик является POJO, за тем лишь исключением, что метод, который должен вызываться автоматически Объект-перехватчик является POJO, за тем лишь исключением, что метод, который должен вызываться автоматически

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 public Object log(InvocationContext ctx) throws Exception public 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"}); try try { { return ctx.proceed(); return ctx.proceed(); } } catch(Exception e) catch(Exception e) { { throw e; throw e; } } finally finally { { 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"); } } } }

public class SampleBean implements Sample { public class SampleBean implements Sample { public void doSomething(String param) { public void doSomething(String param) { callWebService(param); public Object log(InvocationContext ctx) throws Exception public Object log(InvocationContext ctx) throws Exception { try try { { return ctx.proceed(); return ctx.proceed(); } } catch(Exception e) catch(Exception e) { { throw e; throw e; } } } }

Literature 1. html 1. html 1. html 1. html tutorial-jboss.html tutorial-jboss.html tutorial-jboss.html tutorial-jboss.html hFhBjHI hFhBjHI hFhBjHI hFhBjHI rceptors.htm rceptors.htm rceptors.htm rceptors.htm