Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:JAVA. Серверные приложения
.pdf
Часть 4. Распределенные компненты EJB 211
жизненным циклом entity bean. Клиенты не имеют доступа к методам,
описанным в каждом классе. Для управления Entity bean клиент использует методы home-, и remote-интерфейсов.
Home interface. Основной интерфейс определяет методы, используемые клиентом по созданию (create), нахождению (find) и удалению
(remove) экземпляра entity bean. Как и в случае с remote-интерфейсом, все аргументы и типы результата методов, объявленных в homeинтерфейсе, должны соответствовать требованиям RMI-IIOP. Все методы должны содержать исключение java.rmi.RemoteException в своем
throw-списке исключений. В home-интерфейсе должны быть объявлены один или несколько методов create(). Имя такого метода должно
быть именно create, а его аргументы — как их число, так и типы —
должны быть такими же, как аргументы метода ejbCreate() класса реализации экземпляра EJB. Обратите внимание, что типы результата у
соответствующих методов класса экземпляра и его home-интерфейса
отличаются друг от друга. Home-интерфейс для Entity-EJB содержит
также методы поиска (find-методы). Home-интерфейс Entity-EJB содержит точно такие же методы create(), как и Session bean. В дополнение к ним интерфейс определяет find-методы для поиска нужных
экземпляров EJB с целью их последующего использования. Такие
операции необходимы, так как экземпляры Entity bean являются
«долгоживущими» объектами и могут использоваться многими клиентами. Для большинства приложений используемые в них Entity-bean
уже существуют, и клиент просто должен найти нужный экземпляр
для выполнения вызова. Home-интерфейс EJB должен обеспечивать
базовый метод поиска, findByPrimaryKey (primaryKey), который служит для поиска экземпляра EJB по значению его primary key. Метод
имеет единственный аргумент, а в качестве результата возвращает
remote-интерфейс экземпляра. В качестве primary key может использоваться любой тип Java, производный от Object. Разработчик помещает описание primary key в дескриптор. Обратите внимание, что метод findByPrimaryKey () по определению возвращает только один
объект, в то время как другие find-методы могут возвращать наборы
объектов. Home-интерфейс может объявлять и другие методы поиска.
Каждый такой метод должен быть реализован в классе экземпляра.
Каждый finder-метод home-интерфейса EJB должен соответствовать
следующим соглашениям:
1. Типом результата является либо remote-интерфейс EJB, либо, в
случае соответствия сразу нескольких экземпляров EJB указанному
критерию поиска, набор (collection) таких интерфейсов.
2. Корректными типами-наборами Java являются java.util. Enumeration (для JDK 1.1) и java.util.Collection (для Java 2).
3. Имя метода поиска всегда начинается с префикса find.
4. Соответствующий ему finder-метод в классе экземпляра должен
начинаться с ejbFind.
5. Созданный метод ejbFind() должен объявлять возможность возбуждения исключения java.rmi.RemoteException.
6. Созданный метод ejbFind() должен объявлять возможность возбуждения исключения javax.ejb.FinderException.

212 Часть 4. Распределенные компненты EJB
7. Списки возможных исключений методов find() home-интерфейса и
ejbFind() класса должны быть одинаковыми.
8. В дополнение к этому home-интерфейс Entity bean может объявлять один или несколько методов create(). Все эти методы возвращают
remote-интерфейс экземпляра EJB. Список их аргументов определяется
разработчиком приложения.
Методы create() home-интерфейса должны соответствовать следую-
щим правилам:
1. Все используемые методы create() должны объявлять возможность
возбуждения исключения java.rmi.RemoteException.
2. Все используемые методы create() должны объявлять возможность
возбуждения исключения javax.rmi.CreateException.
3. Все используемые методы create() возвращают remote-интерфейс
EJB.
4. Имя метода — всегда create.
5. Каждому методу create() интерфейса должен соответствовать метод ejbCreate() в основном классе EJB с тем же списком своих аргументов.
6. Список возможных исключений метода create() интерфейса должен включать в себя все исключения методов ejbCreate() и ejbPostCreate() основного класса EJB, т. е. список исключений метода.
7. Возвращаемым значением метода ejbCreate() всегда является объект класса Primary Key.
8. Аргументы метода create() используются при инициализации нового экземпляра EJB.
Remote interface. Клиент использует home interface для получения
доступа к бизнес-методам, реализованным в entity bean класс. Все методы remote-интерфейса должны быть объявлены как public и возбуждать исключение java.rmi.RemoteException. Кроме того, аргументы этих
методов и возвращаемые ими результаты должны иметь типы, соответствующие требованиям RMI. Должно быть обеспечено соответствие
между методами класса экземпляра и методами его remote-интерфейса.
Каждая пара методов должна иметь одно и то же имя, число и тип аргументов, тип результата и список возможных исключений.
Primary key class. В этом классе описаны одна или больше переменных, определяющих экземпляр EJB. Здесь также реализованы методы
для создания и манипулирования объектами primary key.
1. import java.rmi.RemoteExcepton;
2. import javax.ejb.*;
3. public class MyFirstBean implements javax.ejb.EntityBean{
4. public String name=null;
5. public int type=1;
6. public float Balance=0. 0 f;
7. public void setName(String name){sname=name;}
8. public float getBalance(){return Balance;}
9. public setBalance(float Balance) {someData=Bflanse;}// какой-то код}

Часть 4. Распределенные компненты EJB 213
Поскольку каждый EJB является распределенным объектом, то обязательно используются классы исключительных ситуаций, описывающие взаимодействие объектов. В случае с EJB большинство методов
жизненного цикла генерируют вызов объекта класса java.rmi.RemoteException. Первые две строки указывают необходимые пакеты для создания EJB. Самые интересные здесь строки2и3,гдеуказывается создание Entity bean класса MyFirstBean с использованием интерфейса EntityBean, находящегося в пакете javax.ejb. Строкис4по6определяют
бизнес-переменные. А строки 7, 8, 9 описывают бизнес-методы. Основным этапом создания Entity bean считается создание класса, реализующего интерфейс EntityBean.
Соглашение об именовании создаваемого enterprise bean поддерживает правила именования классов в Java плюс добавления в имени слова Bean, т. е. MyFirst
Каждый entity bean класс должен иметь уровень доступа public, но
не abstract и должен реализовывать интерфейс javax.ejb.EntityBean.
Реализация данного интерфейса определяет основные методы и жизненный цикл entity bean.
В Entity bean содержатся различные данные. Хранение важных данных Entity bean доверяет базе данных. При создании Entity bean разработчик должен определить, какие данные будут использоваться и где
данные буду храниться. Также на этапе проектирования описываются
методы обработки данных и способы синхронизации. Если проектировщик полностью удовлетворен способами, которые использует контейнер, то можно опустить разработку с помощью Bean Managed Persistence(BMP). Иcпользование BMP прекрасно подходит для создание Entity
bean, работающих с базой данных, не поддерживаемой EJB сервером.
Bean.
31.7. Жизненный цикл Entity bean
Как и у всякого другого bean, жизнь Entity bean состоит из нескольких этапов. Начало «жизни EJB» — этап установки экземпляра Entity
bean (рис. 4.4).
Так как Entity bean обычно является представлением информации в
базе данных, его цикл жизни совпадает с циклом жизни самих данных — Entity bean существует в течение долгого времени, обычно гораздо дольше, чем клиентское приложение, которое его создало. Такие
bean существуют не только после завершения сеанса связи или клиентского приложения, они существуют дольше, чем серверный процесс, в
контексте которого они выполняются. Подобно данным в базе данных,
Entity bean не разрушается в результате сбоя сервера с последующим
его перезапуском.
В процессе существования entity bean может находиться в трех различных состояниях:
1. Nonexistent. Экземпляр Entity bean не существует.
2. Pooled. Экземпляр Entity bean существует, но не сопоставлен ни с
какими конкретными данными (говорят, что он не имеет identity).
3. Ready. Экземпляр Entity-EJB сопоставлен с конкретными данными.

214 Часть 4. Распределенные компненты EJB
Рис. 4.4. Жизненный цикл Entity bean.
Начало началу — рознь. Entity bean начинает свою долгую жизнь, в
отличие от session bean, с момента создания контейнером экземпляра
Entity bean. Получить сведения о месте исполнения Entity bean помогает метод setEntityContext(). Этот метод извещает Entity bean о возможностях, предоставляемых заново рожденному контейнером.
После рождения Entity bean помещается в специальное место — рооl. Пока экземпляр находится в пуле, контейнер вызывает только методы find() и их аналогии.
Затем наступает состояние готовности. Используемые методы — create(). Затем контейнер вызывает метод setEntityContext() для передачи
экземпляру ссылки на интерфейс EntityContext. Этот интерфейс обеспечивает возможность доступа к сервисам контейнера и позволяет экземплярам EJB получить информацию об их клиентах.
Сейчас экземпляр Entity-bean находится в состоянии Pooled. Для
каждого типа Entity-bean создается свой собственный пул. Ни один из
экземпляров, находящихся в пуле, не сопоставлен с конкретными данными. Другими словами, они не имеют identity — ни одно из их полей
не имеет установленных значений — и, следовательно, все они эквивалентны. Контейнер может выбрать любой экземпляр для обслуживания
клиента, который решил использовать такой EJB. Реализация контейнера определяет, когда именно создавать экземпляры EJB и как много
таких экземпляров следует поместить в пул.
Когда контейнер выбрал экземпляр для обслуживания запроса клиента, этот экземпляр переходит из состояния pooled в состояние ready.
Контейнер вызывает Entity bean из пула, когда клиент нуждается в
данных, описанных в созданном Entity bean. Обычно два события способствуют перемещению Entity bean из пула в состояние готовности.
Первым событием является вызов клиентом метода ejbCreate(), описанного в home-интерфейсе Entity bean, после чего в базе данных появляется новая запись. Результатом вызова методов ejbCreate()и ejbPostCreate() будет созданный новый экземпляр Entity bean.

Часть 4. Распределенные компненты EJB 215
Другим событием является вызов у существующего экземпляра Entity bean методов find() и его аналогов. В этом случае контейнер вызывает метод ejbActivate() для активизации экземпляра, чтобы он мог обслуживать вызовы конкретных клиентов. Обычно контейнер использует
метод ejbActivate(), когда нет подходящих экземпляров в состоянии ready для обслуживания клиентских запросов.
Итак, состояние готовности (ready) достигнуто, теперь необходимо
получить данные из базы данных. Для этой операции существуют специальные методы ejbLoad() и ejbStore(), предназначенные для синхронизации данных в различных источниках. Когда экземпляр находится в
состоянии ready, он сопоставлен с конкретным Entity bean (например, с
определенной записью в базе данных). Клиент может вызвать бизнесметоды этого Entity bean. Контейнер использует методы ejbLoad() и ejbStore() для того, чтобы заставить экземпляр считывать или записывать
свои данные. Все эти методы — бизнес-методы, ejbLoad() и ejbStore() —
могут быть вызваны много раз, а могут и ни одного, в соответствии с логикой клиентского приложения. Методы ejbLoad() и ejbStore() позволяют экземпляру выполнять синхронизацию его состояния с информацией
в базе данных. Дальее клиент может вызывать бизнес-методы. После
того как контейнер определит ненужность бизнес-методов, описанных в
Entity bean, контейнер опять перемещает их в пул. Помещению в пул
способствуют два события:
1. Контейнер использует метод ejbPassivate(), чтобы отделить этот
экземпляр от данных без удаления Entity-объекта, т. е. собственно этих
данных. Обычно контейнер выполняет деактивизацию при завершении
транзакции. Тем не менее он может выполнить деактивизацию даже
тогда, когда экземпляр EJB сопоставлен с транзакцией; в этом случае
он сначала вызывает метод ejbStore(), чтобы экземпляр мог синхронизировать свое состояние с состоянием базы данных. Когда позднее происходит активизация экземпляра, контейнер автоматически вызывает
метод ejbLoad(), чтобы опять-таки выполнить синхронизацию между
экземпляром и базой данных.
2. Клиент вызывает метод remove(). При вызове вышеуказанного метода в основной базе данных удаляются данные о Entity bean. Вызов
этого метода происходит в ответ на вызов клиентским приложением метода remove() home- или remote-интерфейса EJB. Контейнер удаляет
как экземпляр EJB, так и сам Entity-объект (запись из базы данных).
Последний жизненный этап начинается с момента вызова контейнером метода UnsetEntityContext() Entity bean, находящегося в пуле.
К счастью, удаление не стирает всю информацию, в базе данных остаются все записи, чтобы их можно было использовать при создании нового экземпляра Entity bean. В отличие от Session bean, с которыми сопоставлено значение тайм-аута (и для которых контейнер удаляет экземпляр bean при завершении периода тайм-аута), к Entity bean
неприменимо понятие тайм-аута. Вне зависимости от того, как долго
они остаются неактивными, контейнер не удаляет их из хранилища.
Контейнер удаляет только экземпляры bean из самого контейнера.
Единственный способ удалить Entity-bean — сделать это явно. Это может быть сделано с помощью вызова метода remove(), который удаляет

216 Часть 4. Распределенные компненты EJB
как экземпляр EJB, так и сопоставленную с ним информацию из базы
данных, или с помощью средств DBMS (или других существующих
приложений, не имеющих отношения к EJB).
Следует обратить внимание на то, что метод ejbCreate() имеет свои
особенности при работе с Entity-EJB. Реализация Entity bean может вообще не реализовывать метод ejbCreate(). Обычно это происходит, если
Entity-bean создаются не по запросу клиента, а автоматически, например, при добавлении новых записей в базу данных. Типом возвращаемого
значения для метода ejbCreate() является класс Primary Key EJB. Метод
ejbCreate() для Entity bean c CMP должен возвращать void, для Entity
bean разработанного с помощью BMP — класс Primary Key экземпляра.
Основные методы entity bean:
ejbActivate() — метод, активирующий состояние bean, вызываемое
из контейнера. Данный метод подобен методам init() в servlet и applet,
содержит любой код, который необходимо выполнить в момент активации bean. Активация подразумевает помещение вызываемого bean в
специальную область памяти для дальнейшей обработки;
ejbLoad() — загружает поля, отображенные в базе данных, т. е. присваивает постоянным переменным их эквивалентным значения из базы
данных. Может содержать любой код, который должен быть выполнен
при синхронизации данных. При использовании клиентом бизнес-методов setXXX()/getXXX() контейнер читает данные из основной базы
данных. При вызове одного из методов find() контейнер вызывает метод
ejbLoad() для их инициализации;
ejbPassivate() — вызывается контейнером для деактивации bean. Как
и другие методы, содержит код, выполняемый перед деактивацией bean, т. е. выгрузкой bean из памяти; обычно это операции закрытия соединения с базой данных и прекращение работы с файлами. Если Entity
bean не используется долгое время, контейнер производит операцию не
используемого Entity bean во временное хранилище до того момента,
пока клиент не вызовет один из бизнес-методов данного bean;
ejbRemove() — вызывается клиентом для удаления bean из контейнера, а поля будут удалены из базы данных. Может вызывать исключение javax.ejb. RemoveException, если контейнер не может в силу различных причин удалить Entity bean;
setEntityContext() — устанавливает свойства среды выполнения bean. Контейнер вызывает этот метод один раз при получении свойств
Entity bean. Окружение Entity bean изменяется динамически, когда в
контейнере происходит какое-то событие, такое, как добавление нового
или удаление старого Entity bean и т. д.;
ejbStore() — необходим при синхронизации данных, находящихся в
базе и полей. Метод ejbStore() используется для сохранения данных в
основной базе;
unsetEntityContext() — вызывается контейнером для освобождения
ресурсов, занятых bean, метод вызываться до удаления bean. Данный
метод вызывается после вызова метода ejbRemove() по вполне объяснимым причинам.
Entity bean класс должен определять переменные, с которыми будет
работать bean. Entity bean класс должен реализовывать метод ejbCrea-

Часть 4. Распределенные компненты EJB 217
te(), для каждого метода ejbCreate() обязательно должен существовать
метод ejbPostCreate() с теми же параметрами что и существующий метод ejbCreate(). Если методов ejbCreate() несколько, то для каждого должен существовать метод-близнец ejbPostCreate(). Методы ejbcreate() и
ejbPostCreate() реализуются в home-интерфейсе Entity bean. Метод ejbCreate() применяется для создания нового EJB. Метод ejbPostCreate()
вызывается контейнером после выполнения метода ejbCreate(). Но в отличие от своего предшественника, ejbPostCreate() не возвращает никаких значений. Метод ejbPostCreate() используется после создания экземпляра bean, но перед тем, как bean станет доступен клиенту. Подобно бизнес-методам, они не могут вызываться непосредственно клиентом.
Для вызова используется объект EJBHome, посредством которого осуществляется доступ к методам ejbCreate() и ejbPostCreate(). При
успешном выполнении методов EJBHome создает постоянные поля, ассоциированные с этими объектами, и затем помещает поля в базу данных. Каждый метод ejbPostCreate() должен имеет уровень доступа public, не возвращать никакого значения, т. е. void, и иметь те же аргументы, что и метод ejbCreate(). Если необходимо, то оба метода, ejbCreate()
и ejbPostCreate(), могут вызывать исключения java.rmi.RemoteException
и javax.ejb.CreateException.
Существует два типа полей (переменных) — стандартные переменные, ничем не отличающиеся от обычных, и постоянные переменные,
которые не могут быть константами и иметь уровень доступа final. Они
также не могут иметь уровень доступа static. Все постоянные переменные должны иметь уровень доступа public, постоянные поля — храниться в базе данных. Временные поля не могут храниться в базе данных,
они должны использоваться с осторожностью и не использоваться для
взаимодействия методов. Существуют определенные правила именования временных полей entity beans, отвечающие правилам для использования в CORBA IDL. Во-первых, в имени полей допустимо использование только символов Latin-1, т. е. обычной латиницы, имя переменной
не должно начинаться с символа подчеркивания ( _ ), также оно не может содержать знак доллара ($) и не должно быть ни одним из зарезервированных слов, используемых в CORBA. Поля обязательно должны
называться по-разному, непозволительно употребление в одном классе
полей (переменных) с одинаковыми именами, myfieldsample и Myfiledsample, и подобные вариации нельзя использовать в одном классе. Подробнее об именовании CORBA-объектов можно узнать из руководств
по программированию CORBA-объектов. Поля не могут быть массивами
объектов EJBObject или EJBHome, они также не могут порождаться от
класса javax.ejb.Handle. Строковые массивы полей не должны содержать значений null в момент выполнения.
1. import java.rmi.RemoteExcepton;
2. import javax.ejb.*;
3. public class MyFirstBean implements EntityBean{
4. public String name=null;
5. public int type=1;
6. public float Balance=0. 0 f;

218 Часть 4. Распределенные компненты EJB
7. public void ejbCreate (String name){}
8. public void ejbPostCreate (String name) throws RemoteException {}
9. public void ejbCreate(somename, 2, 0. 0f)}
10. public void ejbCreate(String name, int type, float Balanse) throws Remote-
Exception{}
На то, что созданный bean является Entity bean, указывает 3-я строка примера, класс MyFirstBean реализует интерфейс Entity Bean. Далее
создаются три поля — строки 4, 5, 6. Основные методы создания Entity
bean, ejbCreate() ejbPostCreate() распределены по парам — строки 7, 8
и другая пара методов создания — строки 9, 10. Вызов методов создания ejbCreate() подобен обычным вызовам конструкторов классов.
Основная задача клиента — получить доступ к бизнес-методам и переменным. Для выполнения этой задачи контейнер должен создать экземпляр bean. Операция создания bean выполняется при помощи метода сreate().
Метод сreate() — предназначен для создания экземпляра bean и ассоцированием полей (переменных) bean с данными, хранящимися в
основной базе данных. Метод должен называться сreate(), иметь несколько аргументов, таких же, как у ejbCreate(), и вызывать исключительные ситуации java.rmi.RemoteException и javax.ejb.CreateException.
Создание метода find() предназначено для поиска объекта класса EJBHome. Каждый метод find() должен именоваться как findName, где
окончание Name описывает искомый параметр. Как минимум в каждом
home-интерфейсе должен быть хотя бы один метод findByPrimaryKey(), имеющий один аргумент класса primary key и возвращающий
значение объекта remote-интерфейс. Другие методы find() должны отвечать следующим требованиям: возвращать объекты remote interface
или коллекцию объектов java.util.Enumeration, если возвращается несколько объектов, и вызывать исключения java.rmi.RemoteException и
javax.ejb. FinderException.
Каждый entity bean должен содержать хотя бы один find() метод.
Ничто не запрещает добавить собственные поисковые методы.
Каждый EJB-сервер использует findByPrimaryKey() метод, содержащий код для поиска в базе данных. Для каждого добавочного find()
метода, определенного в home interface, должна быть реализована логика поиска элементов. Спецификация EJB не определяет логику поиска.
Entity bean класс может реализовывать remote interfase, но это не
рекомендуется. Если ситуация требует использования remote interface,
необходимо использование переменой в методе с ключевым словом this.
Home interface — описывает методы, необходимые клиенту для создания, манипулирования, удаления bean. Контейнер организует доступ
клиента ejb, используя технологию java naming and directory Interface(JNDI). Данная технология предназначена для именования объектов
по универсальным правилам, позволяя глобально идентифицировать
объект независимо от специфики именования для каждой платформы.
По принятому соглашению home interface получает имя bean, в котором
реализован с добавлением окончания Home — MyBeanHome. Каждый
home interface должен соответствовать следующим требованиям:

Часть 4. Распределенные компненты EJB 219
Реализовывать javax.ejb.EJBHome interface, наследуя его методы.
Параметры и возвращаемые значения для каждого метода определяемые в home interface, должны быть валидными для использования с
Java RMI, при этом каждый метод может генерировать вызов исключительной ситуации java.rmi.RemoteException:
1. import java.rmi.*;
2. import java.util.*;
3. import javax.ejb.*;
4. public interface AccountHome extends EJBHome{
5. Account create (int AcountId) throws CreateException, RemoteException ;{}
6. Account findByPrimaryKey(int AccountID) throws FinderException, Remo-
teException;{}
7. Enumeration findLargeAcconts(int AccountId) throws FinderException, Re-
moteException; {} }
Remote Interface — описывает бизнес-методы, доступные в bean, методы удаления экземпляра bean, обработчик объектов, primary key.
По соглашению remote interface имеет имя Name, указывающие на
ejb, для которого реализован remote interface.
Каждый remote intеrface должен отвечать следующим требованиям:
должен наследовать интерфейс javax.ejb.EJBObjects, используя
•
часть его методов;
•
должен определять взаимные методы для каждого бизнес-метода,
используемого в ejb классе;
•
параметры и возвращаемые значения каждого метода должны
быть правильными при использовании java rmi.Remote intreface и
вызывать исключения java rmi.RemoteException.
Рассмотрим Primary key класс.
В контейнере каждый entity bean имеет уникальный идентификатор,
определяющий использование комбинации имени home intrface и primary key. Если два объекта имеют одинаковый идентификатор, то они
идентичны. Primary key класс находится в EJBObject. По соглашению
имя primary key содержит приставку Name и слово Key, NameKey, где
Name — имя enterprise bean, например, MyBeanKey. Primary key класс
используется для создания и управления объектом primary key в EJB.
Этот класс должен соответствовать следующим требованиям:
•
иметь public уровень доступа, а также быть серилизованным объ-
ектом;
•
переменные должны иметь уровень доступа public;
•
обязательно должен иметься конструктор, тоже с уровнем доступа
public.
31.8. Основные EJB Session bean
Session bean подобен entity bean с некоторыми различиями: во-пер-
вых, session bean не имеет primary key класс, и в home interface не
определяется ни один метод find(). Session bean используется клиентом

220 Часть 4. Распределенные компненты EJB
только во время сессии и после уничтожается. Поскольку данные session bean не сохраняются, в нем не определены методы по загрузке и выгрузке данных. Все данные касаются только пользовательской сессии.
Основные части, из которых состоит sesion bean:
Bean class. — Этот класс содержит данные, ассоциированные с sessi-
on bean, и методы, описанные разработчиком для доступа к этим данным. Здесь также описываются методы, используемые контейнером для
управления жизненным циклом session bean. EJB-клиент — обычно
другой EJB или пользовательское приложение не имеет доступа к объектам этого класса. Для доступа к данным используются методы homeи remote-интерфейсов.
Home interface. — Основной интерфейс определяет методы, исполь-
зуемые клиентом по созданию (create), и удалению (remove) экземпляра session bean. Home-интерфейс session bean порожден от интерфейса
javax.ejb.EJBHome в виде объекта EJBHome и содержит единственный
метод create(). Метод create() не имеет аргументов и может возбуждать
два типа исключений — RemoteException и CreateException. Помните,
что клиент не вызывает методы экземпляра session bean непосредственно; вместо этого клиент вызывает методы remote-интерфейса. Statefull session bean может поддерживать определенное состояние, а это
значит, что он может предоставлять клиенту несколько методов для создания собственных экземпляров и требовать передачи некоторых параметров для выполнения инициализации экземпляра. Stateless Session
bean может иметь только один метод create(), причем без аргументов.
Метод remove(), который удаляет экземпляр из пула, унаследован от
интерфейса javax.ejb.EJBHome, и от программиста не требуется объявлять его в интерфейсе home. Home-интерфейс выступает в роли создателя экземпляров EJB, поскольку он содержит один или несколько методов create().
Спецификация EJB определяет следующие соглашения для каждого
метода create():
1. Метод create() возвращает значение remote-интерфейс для своего
экземпляра.
2. Имя метода — всегда create.
3. Каждый метод create() должен соответствовать методу ejbCreate в
основном классе созданного EJB. Эти методы должны иметь одно и то
же число аргументов одинаковых типов.
4. Метод create() должен объявлять возможность возбуждения иск-
лючения java.rmi.RemoteException, а также возможность возбуждения
исключения javax.ejb.CreateException.
5. Аргументы метода create() используются для инициализации ново-
го экземпляра EJB.
Обратите внимание, что home-интерфейс Session-EJB не содержит
методов для поиска объектов, поскольку такой объект может быть использован только создавшим его клиентом. Другие клиенты не могут
получить к нему доступ и, следовательно, не нуждаются в средствах
поиска.
Remote interface. — Клиент использует remote интерфейс для полу-
чения доступа к бизнес-методам, реализованным в bean классе. Этот
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
