Главная » Java, Web » Компоненты EJB-сущности

0

Поддержка транзакций: средствами контейнера и средствами компонента E-B

Компонент EJB-сущности может поддерживать транзакции. Транзакции могут поддерживаться либо средствами компонента EJB, либо средствами контейнера. При поддержании транзакций средствами контейнера задача поддержания взаимодействий с базой данных, входящих в транзакцию, возлагается на контейнер. При поддержке транзакций средствами компонента EJB, класс компонента EJB должен содержать необходимые инструкции для поддержания транзакций. Метод поддержания транзакций задается в дескрипторе размещения.

Имплементация компонента EJB-сущности

Компонент EJB-сущности состоит из домашнего интерфейса, удаленного интерфейса, класса компонента EJB и XML-файла дескриптора размещения. Все четыре компонента строятся по определенным правилам. Домашний интерфейс является наследником интерфейса javax.ejb.EjBHome, удаленный интерфейс расширяет интерфейс javax.ejb.EJBObject. Класс компонента EJB имплементирует интерфейс javax.ejb.EntityBean. Компонент EJB-сущности предназначен для работы с базами данных. В нем всегда есть свойство, которое соответствует столбцу в таблице базы данных. В табл. 5.9 приводятся свойства компонентов EJB-сущности.

Таблица 5.9. Свойства компонента EJB-сущности

SQL-Фрагменты

Соответствующие свойства

 

компонента EJB

CREATE TABLE DEMO (

нет соответствия

ID integer(8) not null,

Private long id;

STOBETS ODIN varchar(32) not

Private String stolbetsOdin;

null,

 

primary key(ID));

нет соответствия

В классе компонента EJB должны быть имплементированы все методы, которые объявлены в домашнем интерфейсе, удаленном интерфейсе и интерфейсе javax.ejb.EntityBean. Некоторые имплементируемые методы имеют несовпадающие с методами интерфейса имена, это относится к методам домашнего интерфейса. Например, метод create (параметры) домашнего интерфейса соответствует методу ejbCreate (те же параметры) в классе компонента EJB. Ниже приведены методы, которые используются в классе компонента EJB.

public interface EnterpriseBean extends j ava.io.Serializable {} public interface EntityBean extends EnterpriseBean { public abstract void ejbActivate() throws java.rmi.RemoteException; public abstract void ejbLoad() throws java.rmi.RemoteException; public abstract void ejbPassivate() throws java.rmi.RemoteException; public abstract void ejbRemove() throws java.rmi.RemoteException; public abstract void ejbStore() throws java.rmi.RemoteException; public abstract void setEntityContext(EntityContext ctx) throws j ava.rmi.RemoteException;

public abstract void unsetEntityContext() throws

j ava.rmi.RemoteException; }

Ниже в табл. 5.10—5.12 приводится описание элементов удаленного и домашнего интерфейсов, класса компонента EJB-сущности с поддержкой транзакций средствами компонента EJB и средствами контейнера.

Таблица 5.10. Удаленный интерфейс remote interface extends

javax,ejb.EJBObject

Метод

Возвращаемое значение

Описание

PrimerMethod(int Chtolibo);

Int

Все описываемые здесь методы имеют отношение к конкретному компоненту EJB. Каждый описанный метод должен быть имплементирован в классе компонента EJB. Необязателен

 

Таблица 5.11. Домашний интерфейс home interface extends

javax.ejb.EJBHome

Метод

Возвращаемое значение

Описание

create (…) throws java.rmi.RemoteException, j avax.ejb.CreateException

Экземпляр ста- ба, связанный с удаленным интерфейсом экземпляра класса компонента EJB

Создает новую строку в таблице, если ряд с указанным первичным ключом еще не существует. При получении запроса контейнер создает компонент EJB- сущности. Метод create содержит параметры. Может быть создано несколько методов create (). Обязателен

FindByPrimaryKey

(primary key type primary key) throws java.rmi.RemoteException, javax.ejb.FinderException

Экземпляр ста- ба, связанный с удаленным интерфейсом экземпляра класса компонента EJB с заданным первичным ключом primary key

Возвращает ряд в таблице с первичным ключом

primary_key. Компонент EJB должен содержать метод ejbFindByPrimaryKey. Обязателен

public void remove() throws FinderException, RemoteException

Void

Удаляет текущий рад из таблицы. Должен соответствовать методу компонента EJB EjbRemove. Необязателен

f indAll () — или подобное имя

Коллекция всех первичных ключей таблицы

Возвращает все первичные ключи таблицы. Необязателен

Таблица 5.12. Класс компонента EJB Bean class implements

javax, ejb. EntityBean


Метод

Возвращаемое значение

Описание

 

EjbCreate(…) throws j avax.ejb.CreateException

Primary key type

Вставляет строку в таблицу. Свойства компонента EJB задаются равными значениям атрибутов рядов (названиям рядов) в таблице. Должен существовать хотя бы один метод ejbCreate (или более). Обязателен

 

EjbPostCreate(…)

Void

Сообщает компоненту EJB, что контейнер прекратил вызов метода ejbCreate. Обязателен

 

EjbFindByPrimaryKey (primary key type primary key) throws

javax.ejb.FinderException

Primary key type

Возвращает ряд из таблицы базы данных по первичному ключу primary_key. Если ряд не существует, то образуется FinderException. Обязателен

 

EjbFindAll()

Collection

Возвращает все первичные ключи в таблице. Соответствует методу домашнего интерфейса findAll. Необязателен

 

ejbLoad()

Void

Загружает ряд в компонент EJB. Обязателен

 

EjbStore()

Void

Обновляет содержимое таблицы базы данных, записывая ряд в базу. Обязателен

 

EjbRemove()

Void

Контейнер вызывает этот метод перед тем, как компонент EJB будет удален из контейнера. Этот метод должен удалить строку из таблицы, которая соответствует этому компоненту EJB. Обязателен

 

EjbActivate()

Void

Контейнер вызывает метод при активации компонента EJB

 

EjbPassivate()

Void

Контейнер вызывает метод при пассивации компонента EJB. Обязателен

 

Таблица 5.12 (окончание)

Метод

Возвращаемое значение

Описание

SetEntityContext

(EntityContext ctx)

Void

Контейнер вызывает этот метод после создания компонента EJB, но перед вызовом метода компонента EJBCreate. Компонент EJB ответственен за поддержание своего состояния. Обязателен

UnsetEntityContext()

Void

Контейнер обращается к методу перед уничтожением компонента EJB. Обязателен

PrimerMethod(int Chtolibo)

Int

Этот метод следует импле- ментировать в том случае, если он определен в удаленном интерфейсе. Необязателен

Интерфейсы и классы пакета javax.ejb

Интерфейс javax.ejb. EJВ Ноте

Домашний интерфейс создается на основе интерфейса е jBHome (табл. 5.13).

public interface ЕJBHome extends java.rmi.Remote { public abstract EJBMetaData getEJBMetaData() throws j ava.rmi.RemoteException;

public abstract void remove(Object primaryKey) throws j ava.rmi.RemoteException, RemoveException; public abstract void remove(Handle handle) throws

j ava.rmi.RemoteException, RemoveException; }

Таблица 5.13. Интерфейс interface javax. ejb. EJBHome

Метод

Описание

Public abstract EJBMetaData getEJBMetaData() throws java.rmi.RemoteException;

Возвращает объект EJBMetaData, который может быть использован в утилитах разработки EJB

Таблица 5.13 (окончание)

Метод

Описание

 

Public abstract void remove(Object primaryKey) throws java.rmi.RemoteException, RemoveException;

Удаляет ссылку на компонент в контейнере компонентов EJB

EJB

Public abstract void remove(Handle handle) throws java.rmi.RemoteException, RemoveException;

Удаляет ссылку на компонент в контейнере компонентов EJB

EJB

Интерфейс javax.ejb.EJBObject

Удаленный интерфейс основан на интерфейсе EJBObject (табл.5.14—5.18)

public interface EJBObject extends java.rmi.Remote {

public abstract EJBHome getEJBHomeO throws java.rmi.RemoteException; public abstract Handle getHandle() throws java.rmi.RemoteException; public abstract void getPrimaryKey() throws java.rmi.RemoteException; public abstract boolean isldentical(EJBObject obj) throws j ava.rmi.RemoteException;

public abstract void remove() throws java.rmi.RemoteException,

RemoveExcept ion; }

Таблица 5.14. Интерфейс interface javax, ejb. EJBObject

Метод

 

Описание

public throws

abstract EJBHome getEJBHomeO java.rmi.RemoteException;

Возвращает стаб, соответствующий домашнему интерфейсу

public throws

abstract Handle getHandle() java.rmi.RemoteException;

Возвращает метку удаленного интерфейса

public throws

abstract void getPrimaryKey() java.rmi.RemoteException;

Возвращает первичный ключ компонента EJB, если это компонент EJB-сущности

Public abstract boolean isldentical(EJBObject obj) throws java.rmi.RemoteException;

Сравнивает два удаленных стаба, проверяя на идентичность

public abstract void remove() throws java.rmi.RemoteException, RemoveException;

Удаляет ссылку на удаленный интерфейс

Интерфейс javax.ejb.EJBContext

public interface EJBContext extends java.rmi.Remote { public abstract java.security.Identity getCallerldentity(); public abstract EJBHome getEJBHome(); public abstract java.util.Properties getEnvironment(); public abstract boolean getRollbackOnly();

public abstract javax.jts.UserTransaction getUserTransaction() throws java.lang.IllegalStateException;

public abstract boolean IsCallerlnRole(java.security.identity role);

public abstract void setRollbackOnly(); }

Таблица 5.15. Интерфейс interface javax. ejb. EJBContext

Метод

Описание

Public abstract

Позволяет идентифицировать клиента,

java.security.Identity

вызывающего компонента EJB

getCallerldentity();

 

public abstract EJBHome

Возвращает метку удаленного интер

getEJBHome();

фейса

public abstract

Возвращает список свойств, которые

java.util.Properties

доступны компоненту EJB и предостав

getEnvironment();

лены ему контейнером

Public abstract boolean

Сообщает компоненту EJB о том, рабо

getRollbackOnly();

тает ли он в контексте транзакции, кото

 

рой дан откат

Public abstract

Возвращает имплементацию (содер

javax.j ts.UserTransaction

жится в контейнере) интерфейса

getUserTransaction() throws

j avax.t ransact ion.UserTransact ion

java.lang.IllegalStateException;

 

Public abstract boolean

Проверяет, имеет ли вызывающий кли

IsCallerlnRole

ент подходящую роль

(java.security.identity role);

 

Public abstract void

Задает, что текущая транзакция (если

setRollbackOnly();

она существует) помечается для отката

Интерфейс javax.ejb. Handle

public interface Handle{

public abstract EJBObject getEJBObject() throws java.rmi.RemoteException; }

Таблица 5.16. Интерфейс interface javax. ejb. Handle

Метод

 

Описание

public abstract throws j ava.rmi.

EJBObj ect getEJBObj ect() .RemoteException;

Возвращает удаленную ссылку объекта EJBObject

Интерфейс javax.ejb.EntityContext

public interface EntityContext extends j avax.ejb.EJBContext{ public abstract EJBObject getEJBObject() throws java.lang.IllegalStateException; public abstract Object getPrimaryKey() throws

java.lang.IllegalStateException; }

Таблица5.17. Интерфейс interface javax. ejb.EntityContext

Метод

 

 

Описание

Public

abstract

EJBObject getEJBObj ect()

Возвращает стаб удаленного

throws

java.lang

. IllegalStateException;

интерфейса

public

abstract

Object getPrimaryKey()

Возвращает первичный ключ

throws

java.lang

. IllegalStateException;

строки, связанной с компо

 

 

 

нентом EJB

Интерфейс javax.ejb.SessionContext

public interface SessionContext extends javax.ejb.EJBContext { public abstract EJBObject getEJBObject() throws

java.lang.IllegalStateException; }

Таблица 5.18. Интерфейс interface javax. ejb. SessionContext

Метод

Описание

public abstract EJBObject getEJBObject() throws java.lang.IllegalStateException;

Возвращает стаб удаленного интерфейса

Интерфейс javax.ejb.EJBMetaData

 

Интерфейс может использоваться для работы компонентов EJB (табл. 5.19)

с утилитами разработки

public interface EJBMetaData {

 

public abstract EJBHome getEJBHome(); public abstract Class getHomelnterfaceClass() ; public abstract Class getPrimaryKeyClass(); public abstract Class getRemotelnterfaceClass ();

public abstract boolean isSession(); }

Таблица 5.19. Интерфейс interface j avax, ejb. EJBMetaData

Метод

Описание

public abstract EJBHome getEJBHome();

Возвращает стаб домашнего интерфейса

Public abstract Class getHomelnterfaceClass() ;

Возвращает класс домашнего интерфейса

Public abstract Class getPrimaryKeyClass();

Возвращает класс первичного ключа для компонента EJB-сущности

Public abstract Class getRemotelnterfaceClass() ;

Возвращает класс удаленного интерфейса

public abstract boolean isSession();

Возвращает информацию, является ли компонент EJB компонентом EJB-сессии

В заключение приведем пример приложения, работающего на сервере Tomcat.

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии