SSB компоненты Java

Август 11, 2011

Перевозки автомобильные грузовые часто недешево обходятся заказчикам. Компания Эйр Трансс знает кратчайшие пути в современных российских реалиях. Найдем обход пробкам и заторам, выберем оптимальный путь доставки вашего груза. И конечно — точно в срок! __________________________________________

С точки зрения разработчика SSB — это класс компонента и, как минимум, одно из представлений: локальное или удаленное. Допускается обеспечивать оба представления. Каждое представление состоит из бизнес-интерфейса или из пары интерфейсов: домашнего и компонентного. Спецификация предъявляет требования ко всем из них.

Требования к бизнес-интерфейсу.

1) Тип представления, обеспечивающего данный интерфейс, можно указать с помощью аннотации Remote (удаленное представление) или Local (локальное представление).

2) Интерфейс не должен расширять интерфейс javax.ejb.EJBObject или javax.ejb.EJBLocalObject.

3) Если бизнес-интерфейс является удаленным, то он не обязан расширять java.rmi.Remote, и его методы в этом случае не должны выбрасывать исключение java.rmi.RemoteException.

С практической точки зрения из возможных представлений сессионных компонентов EJB 2.1 наибольший интерес представляет удаленное, так как создание удаленного адаптированного представления для компонента EJB 3.0 позволяет находить его в удаленном EJB-контейнере по протоколу CosNaming.

Требования к удаленному интерфейсу.

1) Интерфейс должен прямо или косвенно расширять интерфейс javax.ejb.EJBObject.

2) Интерфейс должен содержать объявления бизнес-методов, реализованных в классе компонента, которые разработчик хочет предоставить для использования через удаленное представление. Объявления методов должны соответствовать их объявлениям в классе компонента, а предложение throws должно включать исключение java.rmi.RemoteException.

3) Параметры и возвращаемые значения бизнес-методов, доступных через удаленное представление, должны иметь сериализуемый тип, то есть любой простой тип или тип класса, реализующий интерфейс java.io.Serializable. Это требование связано с семантикой передачи параметров и результатов через удаленное представление.

Требования к удаленному домашнему интерфейсу.

1) Интерфейс должен прямо или косвенно расширять интерфейс javax.ejb.EJBHome.

2) Интерфейс сессионного компонента без состояния должен содержать ровно один метод с именем create без параметров, которому может соответствовать (по параметрам, модификаторам и выбрасываемым исключениям) метод ejbCreate класса компонента. Интерфейс сессионного компонента с состоянием должен содержать один или несколько методов create<METHOD>, которым в классе компонента соответствуют методы с именами ejbCreate<METHOD> или методы, помеченные аннотацией Init. Все create-методы в домашнем удаленном интерфейсе возвращают значения типа удаленного интерфейса данного компонента, а соответствующие им методы в классе компонента не возвращают результата.

3) Все методы интерфейса должны соответствовать их объявлению в классе компонента и содержать в предложении throws исключение java.rmi.RemoteException.

Требования к классу компонента.

1) Класс должен быть объявлен как public и не может быть final или abstract.

2) Класс компонента должен предоставлять публичный конструктор без параметров. Именно он используется контейнером для создания экземпляра класса компонента.

3) Тип компонента (с состоянием или без) можно указать с помощью аннотации к классу компонента: Stateful — для компонентов с состоянием и Stateless — для компонентов без состояния.

4) Класс компонента должен реализовать бизнес-интерфейс(ы) компонента или его (их) методы и бизнес-методы, объявленные в удаленном или локальном интерфейсе компонента, если указанные интерфейсы определены.
Если класс компонента не реализует явно бизнес-интерфейс или компонентные интерфейсы, то для определения клиентского представления компонента можно использовать следующие аннотации: для локального представления — Local, для удаленного представления — Remote, для адаптированного локального представления — LocalHome, для адаптированного удаленного представления — RemoteHome. К бизнес-методам предъявляются след. требования:

a. название метода может быть произвольным, но не должно нач-ся с «ejb»;

b. метод должен быть public и не может быть final или static;

c. параметры и возвращаемое значение должны быть сериализуемыми, если метод соответствует бизнес-методу удаленного бизнес-интерфейса или удаленного компонентного интерфейса;

d. метод может выбрасывать произвольные исключения, определенные в приложении (не системные).

5) Класс компонента может прямо или косвенно реализовать интерфейс javax.ejb.SessionBean.

6) Класс компонента может содержать ejbCreate-метод(ы), к которому предъявляются следующие требования:

a. метод ejbCreate должен быть public и не может быть final или static;

b. тип возвращаемого значения должен быть void;

c. предложение throws может включать исключение javax.ejb.CreateException;

d. параметры метода должны соответствовать параметрам одного из create-методов, объявленных в домашнем интерфейсе.

7) Класс компонента может иметь родительский класс, который в свою очередь не может быть классом сессионного компонента.

Кроме этого класс компонента может содержать любые вспом-ные методы.

Требования к полям входящим в SFSB. После метода PrePassivate поля должны содержать:

  1. Сериализуемый объект или значение простого типа (интерфейс Serializable).
  2. null.
  3. Ссылка на несериализуемые объекты, которые автоматически заменяются контейнером на сериализуемые объекты при пассивации.

При обработке события ж.ц. PrePassivate следует закрывать все активные соединения с менеджерами ресурсов (например, JDBC-соединение) и присваивать соответствующим полям значения null. При обработке события ж.ц. PostActivate необходимо восстанавливать данное соединение.