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

{

}

public void ejbRemove () throws javax.ejb.RemoveException

{

}

public void setEntityContext (javax.ejb.EntityContext ctx)

{

}

public void unsetEntityContext()

{

}

public abstract String getAccountid ();

public abstract void setAccountid (String newAccountid);

public abstract String getAccounttype ();

public abstract void setAccounttype (String newAccounttype);

public abstract float getBalance ();

public abstract void setBalance (float newBalance);

public abstract int getCustomerid ();

public abstract void setCustomerid (int newCustomerid);

public abstract float getLimit ();

public abstract void setLimit (float newLimit);

:

:

}

Рис. 13.12. Класс реализации компонента-сущности в J2EE 1.2

Жизненный цикл компонента-сущности

Жизненный цикл компонента-сущности в основном базируется на тех же принципах, которые мы рассмотрели в главе 12 для жизненного цикла сеансовых компонентов, но в деталях эти циклы различаются. Наиболее значимы два следующих отличия.

Во-первых, для каждого развернутого компонента-сущности контейнер EJB с самого начала создает группу экземпляров. Размер и поведение этой группы зависят от различных настроек сервера. На этот момент местный интерфейс компонента уже существует, поэтому возможно вызывать местные методы или методы поиска. Экземпляры остаются в этом состоянии, пока клиент или контейнер EJB не выполнит их создание или активизацию.

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

Очень наглядно жизненный цикл может быть показан на диаграмме состояний UML. На рис. 13.13 изображен жизненный цикл компонента-сущности в случае персистентно-сти, управляемой компонентом (во всех версиях J2EE) или персистентности, управляемой контейнером (bJ2EE 1.2).

На рис. 13.14 изображен жизненный цикл компонента-сущности при использовании персистентности, управляемой контейнером, в J2EE 1.3. От предыдущего цикла он отличается только введением методов отбора.

Обычные сценарии компонента-сущности

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

1.  Клиент вызывает метод javax.rmi.РогtableRemoteObject.narrow(. . .) и получает ссылку на местный интерфейс.

2.  На этом этапе можно вызывать любые местные методы и методы поиска. Для доступа к уже существующим данным надо вызвать метод поиска, который даст ссылку на удаленный интерфейс нужного экземпляра EJB. Этот экземпляр создается сервером приложения автоматически, поэтому следующий этап можно пропустить.

3.  Для добавления в базу новых данных клиент вызывает через местный интерфейс нужный метод createдля компонента-сущности. При этом также выполняются методы еjbCreate и еjbPostCreate. Возвращается ссылка на удаленный интерфейс компонента.

4.  Клиент вызывает любое количество деловых методов с использованием ссылки на удаленный интерфейс.

5.  Клиент вызывает метод removeместного либо удаленного интерфейса. Код, соответствующий этому сценарию, приведен на рис. 13.15.

:

InitialContext   initCtx  =  new  Initial   Context();

Object  objRef  =  initCtx.lookup("Java:comp/env/ejb/Profile");

ProfileHomeprofileHome=(ProfileHome)PortableRemoteObject.narrow(objRef, ProfileHome.class);

Profile  profileRemote  =  profileHome.findByPrimaryKey(username);

:

Рис. 13.15. Сценарий использования компонента-сущности

Моделирование отношений компонентов-сущностей

Компоненты-сущности могут использовать при выполнении своей работы другие классы Java, например JavaBeans, и взаимодействовать с другими элементами J2EE, такими как компоненты JSP, сервлеты и сеансовые компоненты. В данном разделе рассматриваются особенности моделирования таких отношений.

Компоненты-сущности и другие классы Java