Каждый компонент-сущность должен также иметь удаленный (Remote) интерфейс. Через этот интерфейс клиент вызывает деловые методы, специфичные для данного экземпляра компонента. Большая часть деловых методов, нужных для компонента-сущности, определяется именно в удаленном интерфейсе. Допускаются почти любые имена методов и параметры, но следует избегать имен, которые могут иметь другое значение в классе компонента.
Логика приложения в компоненте-сущности обычно включает какие-то действия по манипуляции, проверке и подтверждении правильности хранимых данных, а также их форматированию для нужд клиента.
На рис. 13.10 показан пример удаленного интерфейса компонента-сущности.
package com.homedirect.ejb.Account;
import j ava.rmi.RemoteException;
import javax.ejb.*;
public interface Account extends javax.ejb.EJBObject
{
public String getAccountid ()
throws j ava.rmi.RemoteException;
public void setAccountid (String newAccountid)
throws Java.rmi.RemoteException;
public String getAccounttype ()
throws java.rmi.RemoteException;
public void setAccounttype (String newAccounttype)
throws j ava.rmi.RemoteException;
:
:
}
Класс первичного ключа
Чтобы компонент-сущность можно было найти в хранилище данных, каждый компонент должен иметь уникальный ключ, называемый первичным ключом (primary key). В каждом компоненте-сущности должен присутствовать класс первичного ключа, в котором содержатся методы проведения поиска по этому ключу. Метод поиска findByPrimaryKey () из местного интерфейса использует именно этот первичный ключ.
import java.io.Serializable;
public class AccountPK implements java.io.Serializable
{
public int hashCode()
{
// реализация хэш-функции
}
public boolean equals()
{
// сравнение значений
}
public String toStrin()
{
// преобразование в строку
}
public AccountPK () { }
}
Рис. 13.11. Класс первичного ключа
Класс первичного ключа может быть заранее определенным классом Java, в котором уже представлены необходимые методы для поддержки первичных ключей, например String или Integer, или же пользовательским классом, что полезно, если первичный ключ представляет собой сложный нестандартный объект. В любом случае этот класс должен как минимум содержать методы hashCode и equals. Если посмотреть на код подобных методов в классах String или Integer, легко понять, что они должны делать. Следует заметить, что один и тот же класс первичного ключа может при необходимости использоваться в нескольких компонентах-сущностях.
Класс первичного ключа — это маленький, но жизненно важный элемент компонента-сущности. Пример класса первичного ключа показан на рис. 13.11.
Класс реализации
Кроме всего перечисленного, компонент-сущность включает также класс реализации, называемый еще классом компонента. Этот класс содержит код реализации всех методов, объявленных в местном и удаленном интерфейсах, а также необходимых методов жизненного цикла компонента.
В зависимости от типа персистентности и применяемой версии J2EE класс реализации компонента может претерпевать существенные изменения. При персистентности, управляемой компонентом, во всех версиях J2EE или при персистентности, управляемой контейнером, в J2EE 1.2 класс реализации должен содержать следующие методы.
· setEntityContext и unsetEntityContext. Эти методы вызываются контейнером EJB. При вызове метода set компонент-сущность сохраняет информацию контекста в локальной переменной экземпляра. Метод unset вызывается непосредственно перед удалением компонента-сущности и позволяет освободить все нужные ресурсы.
· еjbCreate<METOД>. Каждому методу создания, вызываемому в местном интерфейсе, должен соответствовать в классе компонента метод с таким же именем, но имеющий префикс не create, a ejbCreate. Параметры методов также должны совпадать, но возвращаемые типы будут разными. Обычно такие методы выполняют простые действия по инициализации EJB.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.