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

Каждый компонент-сущность должен также иметь удаленный (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;

:

:

}

Рис. 13.10. Удаленный интерфейс компонента-сущности

Класс первичного ключа

Чтобы компонент-сущность можно было найти в хранилище данных, каждый компонент должен иметь уникальный ключ, называемый первичным ключом (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.