Компоненты-сущности. Введение в компоненты-сущности. Крупные деловые объекты. Рост популярности компонентов-сущностей, страница 8

·  ejbPostCreate<METOД>. Для каждого используемого метода ejbCreate в классе компонента должен быть соответствующий метод ejbPostCreate. Контейнер EJB вызывает этот метод после обычного метода create для того, чтобы передать в компонент какие-либо параметры, которые до выполнения метода create передать невозможно. Обычно это бывает, когда для компонента-сущности требуется дополнительные действия по инициализации, возможно, с привлечением удаленного интерфейса созданного экземпляра. Часто этот метод не содержит кода.

·  еjbRemove. Этот метод не имеет параметров и вызывается при вызове одного из методов интерфейса remove или когда контейнер EJB начинает операцию собственного удаления. Для компонентов-сущностей этот метод эквивалентен вызову еjbPassivate.

·  ejbHome<METOД>. Для каждого местного метода, вызываемого в местном интерфейсе, в классе компонента должен присутствовать метод с таким же именем, но с префиксом ejbHome, а не home. Параметры методов также должны совпадать. В версии J2EE 1.2 этот тип методов не существует.

·  еjbPassivate и еjbActivate. Эти методы вызываются при пассивации или активизации экземпляра. Часто эти методы остаются пустыми, если не требуется какая-то специальная процедура инициализации или очистки перед пассивацией или активизацией EJB.

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

·  Деловые методы. Всем деловым методам, определенным в удаленном интерфейсе, должны соответствовать в классе компонента методы с такими же именами и параметрами. Они содержат код реализации деловых методов.

Кроме перечисленных выше, при персистентности, управляемой контейнером, в версии J2EE 1.3 класс реализации должен содержать дополнительные методы. Методы ejbSelect<METOД>, называемые методами отбора, содержатся только в классе реализации и не появляются в обоих интерфейсах. Они обычно вызываются из других деловых методов компонента-сущности и всегда объявляются как абстрактные. Их код реализации генерируется на этапе развертывания при выполнении соответствующих команд EJB QL.

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

Персистентные поля

Кроме методов, в классе реализации содержатся поле EntityContextи все персистентные поля данных. Обычно вместе с персистентными полями в класс помещаются методы доступа к ним getи set. Тип персистентности для поля указывается в описателе развертывания.

При персистентности, управляемой контейнером, в версии J2EE 1.3 разработчик не создает персистентные поля непосредственно, а, как было сказано в этой главе ранее, создает для них абстрактные методы доступа и объявляет эти поля в области СМР в описателе развертывания. Вся остальная работа выполняется позже диспетчером персистентности. Подобным же образом задаются поля CMR для отношений, управляемых контейнером.

На рис. 13.12 показан пример класса реализации компонента-сущности.

import java.rmi.RemoteException;

import javax.ejb.*;

:

:

public abstract class AccountEJB implements javax.ejb.EntityBean

{

public javax.ejb.EntityContext EJB_Context;

public AccountEJB ()

{

}

public AccountPK ejbCreate () throws javax.ejb.CreateException

{

return null;

}

public void ejbPostCreate () throws javax.ejb.CreateException

{

}

public void ejbActivate ()

{

}

public void ejbPassivate ()

{

}

public void ejbLoad ()

{

}

public void ejbStore   ()