Главная » Java, JavaBeans » Ноте-интерфейс Entity-Компонента EJB

0

 

Ноте-интерфейс Entity-Компонента содержит точно такие же методы create(), как и Session-Компонент. В дополнение к ним, интерфейс определяет find-методы для поиска нужных экземпляров Компонента с целью их последующего использования. Такие операции необходимы, так как экземпляры Entity-Компонентов являются "долгоживущими" объектами и могут использоваться многими клиентами. Для большинства приложений, используемые в них Entity-Компоненты уже существуют и клиент просто должен найти нужный экземпляр для выполнения вызова.

должен обеспечивать базовый метод поиска, findByPrimaryKey (primaryKey), который служит для поиска экземпляра Компонента по значению его primary key. Метод имеет единственный аргумент, а в качестве результата возвращает remote-интерфейс Компонента. В качестве primary key может использоваться любой тип Java, производный от Object. Вы помещаете тип primary key в Дескриптор Поставки. Обратите внимание, что метод findByPrimaryKey () по определению возвращает только один объект, в то время как другие find-методы могут возвращать наборы объектов.

Пример Кода 4.5 метод find By Pri тагу Кеу()

<entity bean’s remote interface> findByPrimaryKey! <primary key type> key )

throws java.rmi.RemoteException, FinderException;

Ноте-интерфейс может объявлять и другие методы поиска. Каждый такой метод должен быть реализован в классе Компонента. Каждый finder-метод home-интерфейса Компонента должен следовать следующим соглашениям:

•         Типом результата является либо remote-интерфейс Компонента, либо, в случае соответствия сразу нескольких экземпляров Компонента указанному критерию поиска, набор (collection) таких интерфейсов. Корректными типами-наборами Java являются java.util.Enumeration (для JDK 1.1) и java.util .Collection (для Java 2).

•         Имя метода поиска всегда начинается с префикса "find". Соответствующий ему finder-метод в классе Компонента должен начинаться с "ejbFind".

•         Он должен объявлять возможность возбуждения исключения

java.rmi.remoteException.

•         Он должен объявлять возможность возбуждения исключения

j avax.еjb.FinderException.

•         Списки возможных исключений методов find () home-интерфейса и ejbFind () класса Компонента должны быть одинаковыми.

В дополнение к этому, home-интерфейс Entity-Компонента может объявлять один или несколько методов create (). Все эти методы возвращают remote-интерфейс Компонента EJB. Список их аргументов определяется разработчиком приложения.

Методы create home-интерфейса должны соответствовать следующим правилам:

•         Они должны объявлять возможность возбуждения исключения

java.rmi.remoteException.

•         Они должны объявлять возможность возбуждения исключения

j avax.rmi.CreateException.

•         Они возвращают remote-интерфейс Компонента.

•         Имя метода – всегда "create".

•         Каждому методу create () интерфейса должен соответствовать метод ejbCreate() в классе Компонента с тем же списком своих аргументов.

•         Список возможных исключений метода create () интерфейса должен включать в себя все исключения методов ejbCreate() и ejbPostCreate () класса Компонента, т.е. список исключений метода create() должен являться надмножестом объединения списков исключений методов ejbCreate() и ejbPostCreate (). Типом результата метода ejbCreate() всегда является класс Primary Key.

•         Аргументы метода create () используются при инициализации нового экземпляра Компонента.

Пример Кода 4.7 демонстрирует различные виды find- и create-методов. Требуемые фрагменты текста выделены жирным шрифтом.

Пример кода 4.7 Методы Create и find

public interface AccountHome extends javax.ejb.EJBHome {

Account create! String accountld )

throws java.rmi.RemoteException, javax.ejb.CreateException;

Account create! String accountld, float initialBalance )

throws java.rmi.RemoteException, javax.ejb.CreateException;

Account findByPrimaryKey( String key )

throws java.rmi.RemoteException, javax.ejb.FinderException;

Enumeration findBySocialSecurityNumber( String socialSecurityNumber ) throws java.rmi.RemoteException, javax.ejb.FinderException;

}

Реализация Компонента EJB

Именно на стадии реализации Компонента происходит написание кода его бизнес-методов. Реализация Компонента – прерогатива Bean Provider’a. Для Session-Компонента также необходимо реализовать методы интерфейса javax.ejb.SessionBean, для Entity-Компонента – интерфейса javax.ejb.EntityBean. Оба этих интерфейса наследуют базовый интерфейс Компонентов EJB – javax.ejb.EnterpriseBean.

Реализации Session- и Entity-Компонентов отличаются друг от друга. Обратитесь к Главе 6, "Написание Session-Компонента", для получения подробной информации о реализации Session-Компонентов. Обратитесь к Главе 7, "Написание Entity-Компонента", для получения подробной информации о реализации Entity-Компонентов.

Интерфейс EnterpriseBean

Интерфейс EnterpriseBean Компонентов EJB является общим базовым интерфейсом и, в свою очередь, он наследует интерфейс java.io.Serializable. Этот интерфейс не содержит объявлений методов. Его код показан в Примере Кода 4.8.

Пример Кода 4.8 Интерфейс EnterpriseBean

package javax.ejb;

public interface EnterpriseBean extends java.io.Serializable {}

Идентификаторы (Handles)

Идентификатор (handle) представляет собой доступную для удаленных объектов догическую ссылку на экземпляр Компонента или его home- интерфейс. Интерфейс j avax. ejb. Handle, который должен быть реализован для всех классов Идентификаторов Компонента, предоставляет хранимую (persistence) ссылку на экземпляр Компонента. Ниже приведен его код:

Пример Кода 4.9 Интерфейс Handle

public interface javax ejb Handle extends java.io.Serializable { public EJBObject getEJBObject() throws java.rmi.RemoteException;

}

Идентификатор может быть использован для долговременного хранения ссылки на экземпляр Компонента путем Java-сериализации экземпляра класса, реализующего handle-интерфейс. Это очень похоже на преобразование к строковому виду объектной ссылки CORBA. Интерфейс javax.ejb.Handle наследует интерфейс java.io.Serializable.

Существует также интерфейс javax.ejb.HomeHandle, который позволяет использовать хранимую ссылку на home-интерфейс Компонента. Этот интерфейс должен быть реализован в классах, являющихся представлением такой ссылки. Пример Кода 4.10 показывает код интерфейса:

Пример Кода 4.10 Интерфейс HomeHandle

public interface HomeHandle extends java.io.Serializable { public EJBHome getEJBHome() throws RemoteException;

}

Обычно реализацию handle-интерфейсов обеспечивает Контейнер.

Источник: Руководство программиста Enterprise JavaBeans

По теме:

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