Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1_2013_2014 / java16.pptx
Скачиваний:
131
Добавлен:
16.04.2015
Размер:
506.07 Кб
Скачать

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

Соседние файлы в папке java1_2013_2014