Главная » Spring » Внедрение компонентов EJB в Spring

0

Если прежде вам приходилось писать клиентские приложения для 2.x EJB, то вы наверняка знаете, как получить доступ к ссылке на компонент EJB. Сначала необходимо получить ссылку на домаш- ний интерфейс компонента EJB из JNDI, как показано ниже:

private TrafficServiceHome trafficServiceHome; private TrafficServiceHome getTrafficServiceHome ()

throws   javax.naming.NamingException   {

if(trafficServiceHome  !=  null) return  trafficServiceHome;

javax.naming.InitialContext    ctx    =

new      javax.naming.InitialContext();

try  {

Object    objHome    =    ctx.lookup("trafficService");

TrafficServiceHome   home   =

(TrafficServiceHome)    javax.rmi.PortableRemoteObject.narrow( objHome, TrafficServiceHome.class);

trafficServiceHome   =   home; return   home;

}  finally  {

ctx.close();

}

}

А затем получить ссылку на прикладной интерфейс компонента EJB (удаленный или локальный), чтобы иметь возможность вызы- вать его методы. Например, следующий фрагмент демонстрирует, как вызвать метод getTrafficConditions() службы управления движе- нием EJB:

try  {

TrafficServiceHome home = getTrafficServiceHome(); TrafficService    trafficService    =    home.create();

TrafficConditions conditions = trafficService.getTrafficConditions(city,      state);

}  catch  (java.rmi.RemoteException  e)  { throw   new   TrafficException();

}  catch  (CreateException  e)  { throw   new   TrafficException();

}

М-да! Такой объем кода, и только чтобы выяснить условия орга- низации движения. Самое неприятное, что из всего этого лишь не- сколько строк имеют прямое отношение к получению информации. Большая же часть – это шаблонный код, необходимый, только чтобы получить ссылку на компонент EJB. Такой объем работы, и только

чтобы совершить единственный вызов метода getTrafficConditions()

компонента EJB.

Спецификация EJB 3 несколько улучшила положение дел. Вмес- то получения ссылки на домашний интерфейс компонента EJB, из JNDI можно сразу получить сеансовый компонент EJB 3. Но и в этом случае приходится писать массу шаблонного кода, реализую- щего операции с JNDI.

Но постойте! На протяжении всей книги мы не раз сталкивались с разными способами внедрения в прикладные компоненты ссылок на службы, в которых они нуждаются. При этом компоненты не занимались поиском других компонентов – компоненты внедря- лись в иные компоненты посредством конфигурации. А этот при- мер практически целиком посвящен поиску компонента EJB и его домашнего интерфейса в JNDI, что совершенно не укладывается в наши представления. Если мы продолжим работать с компонен- тами EJB традиционным способом, мы в результате получим массу уродливого кода, реализующего поиск и образующего тесную связь с EJB. Нет ли более простого пути?

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

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