
- •JAVA-ТЕХНОЛОГИЯ
- •Java Enterprise Edition
- •Архитектура JEE
- •Архитектура JEE
- •JEE-клиенты
- •Клиентские приложения
- •Коммуникации сервера J2EE
- •Web-компоненты
- •Web-компоненты
- •Бизнес-компоненты
- •Корпоративные компоненты (Enterprise JavaBeans)
- •JEE-контейнеры
- •Типы контейнеров
- •Типы контейнеров
- •Доступ к базам данных
- •Базовые службы
- •Базовые службы
- •Базовые службы
- •Базовые службы
- •Базовые службы
- •Базовые службы
- •Servlet
- •Технология JavaServer
- •RMI - интерфейсы
- •Пример определения удалённого класса
- •Комментарии к примеру
- •Создание клиента
- •Комментарии к примеру
- •JNDI
- •Client – EJB Container
- •Роли инженеров в EJB-разработке

JNDI
• JNDI - Java Naming and Directory Interface (работа с именами и директориями)
import javax.naming.*; import java.util.*;
public class SimpleJNDI {
public static void main(String [] args) throws Exception { Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.dns.DnsContextFactory"); props.put(Context.PROVIDER_URL,
"dns://207.155.183.72");
Context context = new InitialContext(props); Enumeration names = context.list(""); while(names.hasMoreElements())
System.out.println(names.nextElement());
}
}
(C) В.О. Сафонов. 2013

EJB
enterprise java beans
Клиент |
EJB |
клиент |
|
Сервер приложений |
База данных |
|
EJB сервер |
|
|
EJB контейнер |
|
Home |
Home |
|
interface |
Object |
|
|
EJB |
СУБД |
Remote |
Remote |
|
interface |
Object |
|
. |
|
|

Client – EJB Container
Client |
|
EJB Container |
Client Application |
|
|
|
|
EJB Instance |
RMI Proxy |
RMI Stub |
EJB Object |
Network protocol
(C) В.О. Сафонов. 2013
EJB
Home and remote interfaces
Home interface:
• Create ejbCreate()
• Find ejbFind()
• Remove ejbRemove()
Remote interface:
•Бизнес-логика компоненты
•Для вызова методов используется RMI, Serializable и RemoteException
•Имена и сигнатуры методов должны соответствовать именам и сигнатурам в самой компоненте
(C) В.О. Сафонов. 2013
EJB
реализация компоненты
componentNameEJB
Общие принципы:
•В компоненте необходимо реализовать бизнес логику, заявленную в remote интерфейсе.
•Реализация home-интерфейса:
•Эта задача может быть поручена контейнеру – CMP
•Она может быть реализована самостоятельно - BMP. Лучше разделить бизнес-логику и управление устойчивостью:
•Логику работы с базой данных поместить в отдельный класс
•Наследовать от абстрактного класса componentNameEJB классы componentNameCMP и componentNameBMP
(C) В.О. Сафонов. 2013
EJB
развёртываение компоненты (deployment)
Состав приложения:
•EJB составляющая – набор компонент
•WWW составляющая – web приложения, сервлеты, JSP и т. д.
•Клиент – приложение, работающее с EJB компонентой.
(C) В.О. Сафонов. 2013
EJB
Сервисы контейнера
• EJB Container предоставляет сервисы:
Object Persistence
Сохранение компонент в базе данных
Declarative Security Control
Возможность менять права доступа без изменения кода
Declarative Transaction Control
Управление транзакциями
Concurrency Management
Синхронизированный доступ клиентов
Scalability Management
Отвечает за загрузку компонент из постоянного хранилища
(C) В.О. Сафонов. 2013
EJB
Типы компонент
•Entity Bean
•Container Managed Persistence / Bean Managed Persistence
•Компоненте соответствует первичная, однозначно определяющая данную компоненту.
•Обычно компонента связана с каким-либо полем базы данных, имеет свойство восстанавливаться после сбоев из постоянного хранилища (откат на начало транзакции)
•Session Beans
•Stateless session beans (SLSBs) / Stateful session beans (SFSBs)
•Компонента существует только во время сессии и после сбоев не восстанавливается.
•Компонента скрывает свой ключ и доступна только
создавшему ее клиенту.
(C) В.О. Сафонов.
• Message2013 -Driven Beans
работает через Java Messaging System (JMS)

EJB
Жизненный цикл компонент.
Компонент не существует |
Компонент не существует |
|
В стадии пула |
Готов к работе |
Пассивен |
Готов к работе
Клиент Контейнер
(C) В.О. Сафонов. 2013

EJB
Пример архитектуры приложения с EJB
Browser |
EJB контейнер |
|
|
|
|
|
userOrderEJB |
|
www |
bookEJB |
СУБД |
контейнер |
|
|
servlet |
catalogEJB |
|
|
|
BookEJB – запись в таблице книг.
CatalogEJB – предоставление структурированной информации.
userOrderEJB – проведение заказа.
(C) В.О. Сафонов. 2013
EJB
описание home interface
Public interface BookHome extends EJBHome {
public BookObject create(………………………) throws CreateException,
RemoteException;
public BookObject findByPrimaryKey(………………………) throws FinderException, RemoteException;
}
•Метод create() соответствует методу ejbCreate(………) в объекте компоненты. Метод find*** соответствует методу ejbFind***.
(C) В.О. Сафонов. 2013
EJB
описание remote interface
• Интерфейс bookObject будет содержать лишь set -и get- методы.
public String getTitle();
public void setTitle(String title); public Integer getId();
•Методы userOrderRemote
•Add|remove для вектора книг заказа.
•Получение вектора заказа.
•Формирование заказа.
…
(C) В.О. Сафонов. 2013
EJB
Реализация компоненты.
•В компоненте 2 вида методов:
•Container notifications methods ejb<Smth>, например ejbCreate()
•Business-методы, объявленные в интерфейсе Remote, но без
объявления remoteException.
•Генерируемые контейнером бизнес-методы необходимо определить как абстрактные.
(C) В.О. Сафонов. 2013
EJB
Реализация компоненты.
public abstract class BookEJB implements EntityBean { public Integer ejbCreate(Integer id, String title)
throws CreateException { if (id == null)
throw new
CreateException("Primary key cannot be null"); if (id.intValue() == 0)
throw new
CreateException("Primary key cannot be zero"); setId(id);
setTitle(title); return null;
}
...
// Business methods
public abstract void setId(Integer id); public abstract String getTitle();
public abstract void setTitle(String title); public abstract Integer getId();
}(C) В.О. Сафонов. 2013
EJB
Реализация компоненты (entity)
ejbCreate(): Сигнатура, заявленная в home интерфейсе. Вызывается до помещения объекта в постоянное хранилище. Возвращает PrimaryKey при BMP или null при CMP.
ejbPostCreate(): Создается для каждого метода create() void. Запускается после помещения в постоянное хранилище ejbRemove(): Клиент запустил remove()
ejbLoad(): Called right after the EJB object’s state has been restored from the persistent storage.
ejbStore(): Called before the EJB object’s state is copied to the persistent storage.
ejbactivate(): Retrived from pool.
ejbPassivate(): Returned to pool.
setEntityContext(EntityContext ctx ): Запускается контейнером при создании экземпляра.
unsetEntityContext(): Called to inform the EJB object that the previously passed Context is no longer valid.
(C) В.О. Сафонов. 2013
EJB
Пример deployment descriptor’а
<ejb-jar> |
|
|
|
|
<enterprise-beans> |
|
|
|
|
<entity> |
|
|
|
|
<ejb-name>Book</ejb-name> |
внутреннее имя |
|
|
|
<home>biblioteka.ejb.bookHome</home> |
имя home-интерфейса |
|||
<remote> biblioteka.ejb.Movie</remote> |
имя remote |
|
||
<ejb-class> |
имя компоненты |
|
|
|
biblioteka.ejb.implementation.BookEJB |
|
|
|
|
</ejb-class> |
|
|
|
|
<persistence-type>Container</persistence-type> |
CMP|BMP |
|
||
<prim-key-class>java.lang.Integer</prim-key-class>тип |
|
|||
PrimaryKey |
|
|
|
|
<reentrant>False</reentrant> |
|
|
|
|
<cmp-version>2.x</cmp-version> |
|
|
|
|
<abstract-schema-name>Movie</abstract-schema-name> |
|
|
||
<cmp-field><field-name>id</field-name>-</cmp-field> |
|
|||
конфигурирование полей |
|
|
|
|
<cmp-field><field-name>title</field-name>-</cmp-field> |
для |
|||
CMP |
|
|
|
|
(C) В.О. Сафонов. |
|
имя поля PrimaryKey |
||
2013 <primkey-field>id</primkey-field> |
||||
</entity> |
|
|
|
|
EJB
Разработка клиентского приложения
public class BookClient {
public static void main(String[] args) throws Exception {
javax.naming.Context initial =
new javax.naming.InitialContext();
Object objRef = initial.lookup("biblioteka/Book");
BookHome bookHome = (BookHome)
javax.rmi.PortableRemoteObject.narrow(objRef,BookHome.class);
BookObject book = bookHome.create(
new Integer(randomValue), “Think in enterprise Java");
bookHome.findByPrimaryKey(new Integer(randomValue));
System.out.println(book.getId());
System.out.println(book.getTitle());
movie.remove();
}
} (C) В.О. Сафонов. 2013