Главная » Java, JavaBeans » Разработка Компонента EJB

0

В этом разделе внимание уделяется тем задачам, которые в процессе создания Компонента EJB должен решать bean provider. Вот они:

•          Объявление и написание кода класса Компонента. Это и есть реализация бизнес-логики Компонента.

•                 Написание remote-интерфейса Компонента.

•                 Написание home-интерфейса Компонента.

•          Задание класса так называемого "Primary Key" Компонента. Этот класс необходим только при создании Entity-Компонента. Имя этого класса хранится в Дескрипторе Поставки Компонента.

Разработчик Компонента (Bean Provider, по терминологии спецификации EJB) определяет home- и remote-интерфейсы и собственно класс Компонента EJB. Remote-интерфейс является интерфейсом, к методам которого обращается клиент Компонента. Частью этого интерфейса являются бизнес-методы Компонента. Методы home-интерфейса предназначены для создания, поиска и уничтожения экземпляров (instance) Компонентов.

Между home- и remote-интерфейсами и классом Компонента не существует никаких формальных отношений, подобных отношению наследования. Тем не менее, спецификация определяет правила, которым должны подчиняться, например, имена методов, объявленных в этих двух интерфейсах и классе. Например, если вы объявили некоторый метод класса Компонента, реализующий часть его функциональности (бизнес-логики), то точно такой же метод – с тем же именем и такой же сигнатурой – должен быть объявлен в remote- интерфейсе. Реализация Компонента имеет как минимум один метод с именем ejbCreate (); при этом она может иметь несколько методов с таким именем, но различными аргументами. Каждому из таких методов должен быть поставлен в соответствие метод с таким же списком аргументов, но с именем create (). Еще одно отличие состоит в том, что метод ejbCreate () класса возвращает другой тип результата по

сравнению с методом create () home-интерфейса: create () возвращает тип remote-интерфейса, a ejbCreate() – либо void (в случае использования сохранения, управляемого Контейнером, СМР), либо тип Primary Key Компонента (при использовании сохранения, управляемого Компонентом, BMP).

Обратите внимание на то, что метод ejbCreate() имеет свои особенности при работе с Entity-компонентами. Реализация Entity- Компонента может вообще не реализовывать метод ejbCreate(). Обычно это происходит, если такие Компоненты создаются не по запросу клиента, а автоматически, например, при добавлении новых записей в базу данных, представлением чего являются Entity- Компоненты. Типом возвращаемого значения для метода ejbCreate() является класс Primary Key Компонента. Метод ejbCreate() для Entity- Компонента с СМР должен возвращать void, для Entity-Компонента с BMP – класс Primary Key Компонента. Эти отличия подробно обсуждаются в главе 7, "Написание Entity-Компонента".

Разработчик Компонента (Bean Provider) определяет семантику Компонента EJB. Связь между классом Компонента и его home- и remote-интерфейсами обеспечивает Контейнер. Контейнер EJB также гарантирует (либо на этапе компиляции, либо на этапе выполнения) соответствие между классом Компонента и его remote-интерфейсом.

Наследование классов Компонента EJB.

Как home- и remote-интерфейсы, так и класс Компонента должны наследовать определенные классы EJB. Ноте-интерфейс всегда наследует (extends) интерфейс javax.ejb.EJBHome, Remote-интерфейс – интерфейс javax.ejb.EJBObject. В свою очередь, эти стандартные интерфейсы наследуют интерфейс j a va.rmi .Remote.

Session-Компонент должен реализовать его базовый класс javax.ejb.SessionBean, Entity-Компонент – javax.ejb.EntityBean. Оба этих стандартных класса являются производными от javax.ejb.EnterpriseBean, который, в свою очередь, наследует класс java.io.Serializable.

Деревья наследования показаны на рис. 4.1. Компонент CartBean на этой схеме может быть как Session-Компонентом, так и Entity- Компонентом. Его home-интерфейсом является CartHome, a remote- интерфейсом – Cart.

Рис. 4.1 Схемы наследования EJB

Интерфейс Remote

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

Базовый класс EJBObject

Remote-интерфейс Компонента EJB является риЬНс-интерфейсом, который наследует интерфейс javax.ejb.EJBObject. Его код показан на Примере Кода 4.1.

Пример кода 4.1 Базовый интерфейс EJBObject для удаленного интерфейса (remote interface)

package javax ejb;

public interface EJBObject extends java.rmi.Remote {

public EJBHome getEJBHome() throws java.rmi.RemoteException; public Object getPrimaryKey() throws java.rmi.RemoteException; public void removed throws java.rmi.RemoteException,

j ava.rmi.RemoveException; public Handle getHandle() throws java.rmi.RemoteException; boolean isldentical (EJBObject pO) throws java.rmi.RemoteException;

}

Метод getEJBHome () позволяет вам получить соответствующий home- интерфейс. При работе с Entity-Компонентами, вы можете использовать метод getPrimaryKey () для получения Primary Key Компонента. Метод remove () уничтожает Компонент; о нем подробно говорится в теме, посвященной рассмотрению цикла жизни различных типов Компонентов. Метод getHandle () возвращает ссылку на экземпляр Компонента. Эта ссылка имеет смысл до тех пор, пока существует экземпляр Компонента. Метод isldentical () позволяет сравнивать Компоненты на идентичность.

Требования к методам

Все методы remote-интерфейса должны быть объявлены как public и возбуждать исключение java.rmi .RemoteException. Кроме того, аргументы этих методов и возвращаемые ими результаты должны иметь типы, соответствующие требованиям RMI-IIOP. Должно быть обеспечено соответствие между методами класса Компонента и методами его remote-интерфейса. Каждая пара методов должна иметь одно и то же имя, число и тип аргументов, тип результата и список возможных исключений.

Пример Кода 4.2 показывает код remote-интерфейса Atm для Session- Компонента ATM, который определяет бизнес-метод с названием transfer. Спецификация EJB требует, чтобы для каждого метода интерфейса присутствовали фрагменты, выделенные жирным шрифтом. Remote-интерфейс должен наследовать интерфейс javax.ejb.EJBObject. Объявляйте в remote-интерфейсе каждый бизнес-метод класса Компонента, к которому вы хотите предоставить доступ для клиента. Метод transfer!) может возбуждать два исключения, одно из которых, InsufficientFundsException, является специфическим для приложения.

Пример Кода 4.2 Пример remote-интерфейса

public interface Atm extends javax.ejb.EJBObject {

public void transfer!

String source, String target, float amount)

throws java.rmi.RemoteException, InsufficientFundsException;

}

Эти правила относятся как к Session-, так и к Entity-Компонентам.

Интерфейс Ноте

Ноте-интерфейс Компонента EJB служит для управления циклом жизни Компонента. Он объявляет операции для создания, поиска и уничтожения объектов, т.е. экземпляров Компонентов EJB. Циклы жизни Session- и Entity-Компонентов отличаются друг от друга. Следовательно, их home-интерфейсы содержат различные методы.

Разработчик Компонента (Bean Provider) обязан объявить home- интерфейс, но за его реализацию отвечает Контейнер EJB.

Как и в случае с remote-интерфейсом, все аргументы и типы результата методов, объявленных в home-интерфейсе, должны соответствовать требованиям RMI-IIOP. Все методы должны содержать исключение java.rmi.RemoteException в своем throw-списке исключений.

В home-интерфейсе должны быть объявлены один или несколько методов create (). Имя такого метода должно быть именно "create", а его аргументы – как их число, так и типы – должны быть такими же, как аргументы метода ejbCreate () класса реализации Компонента EJB.

Обратите внимание, что типы результата у соответствующих методов класса Компонента и его home-интерфейса отличаются друг от друга.

Ноте-интерфейс для Entity-компонента содержит также методы поиска (find-методы). Об этом будет подробно рассказано в разделе "Ноте-интерфейс Entity-Компонента" на стр. 4-9.

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

По теме:

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