Могу ли я добавить SessionBean в Java EE AroundInvoke-Interceptor? - PullRequest
5 голосов
/ 25 мая 2009

У меня есть EAR с модулями:

  • Foo-api.jar
  • Foo-impl.jar
  • interceptor.jar

В foo-api есть:

@Local
FooService // (interface of a local stateless session bean)

В foo-impl есть:

@Stateless
FooServiceImpl implements FooService //(implementation of the foo service)

В interceptor.jar я хочу

public class BazInterceptor {

  @EJB
  private FooService foo;

  @AroundInvoke
  public Object intercept( final InvocationContext i) throws Exception {
    // do someting with foo service
    return i.proceed();
  }

Вопрос:

Будет ли сервер приложений, совместимый с Java EE 5 (например, JBoss 5), внедряться в перехватчик? Если нет, какова хорошая стратегия доступа к сессионному компоненту?

Для рассмотрения:

  • Порядок развертывания / условия гонки

Ответы [ 2 ]

6 голосов
/ 20 ноября 2010

Да, внедрение должно происходить в перехватчике, как указано, например, в Статья «Введение в платформу Java EE 5» (жирный шрифт):

Упрощенный доступ к ресурсам благодаря внедрению зависимостей

Внедрение зависимости - это паттерн в какие зависимости объекта поставляется автоматически предприятием внешний по отношению к этому объекту. Объект не требуется запрашивать эти ресурсы явно, например, искать их в службе имен. В платформе Java EE 5 зависимость инъекция может применяться ко всем ресурсы, в которых нуждается компонент, эффективно скрывая создание и поиск ресурсов из приложения код. Зависимость инъекций может быть применяется во всей Java EE 5 технология - в программном обеспечении EJB контейнеры, веб-контейнеры и клиенты.

Чтобы запросить внедрение ресурса, компонент использует @Resource аннотации или, в случае некоторых специализированные ресурсы, @EJB и @WebServiceRef аннотации. Ниже приведены некоторые из многих ресурсы, которые могут быть введены:

  • SessionContext объект
  • DataSources объект
  • UserTransaction
  • EntityManager интерфейс
  • TimerService интерфейс
  • Другие бобы предприятия
  • Веб-сервисы
  • Очереди сообщений и темы
  • Фабрики соединений для адаптеров ресурсов
  • Записи окружения (например, строки, целые числа и т. Д.)

Внедрение ресурса может быть запрошено любой класс компонента, то есть любой класс, чей жизненный цикл управляется контейнер. В программном обеспечении EJB контейнер, компоненты, которые поддерживают инъекции включают в себя следующее:

  • Компоненты EJB-технологии
  • перехватчики
  • Обработчики сообщений для API Java для веб-служб XML (JAX-WS) и API Java для RPC на основе XML (JAX-RPC)

В веб-контейнерах, компоненты, которые Поддержка впрыска следующие:

  • Сервлеты, фильтры сервлетов, прослушиватели событий
  • Обработчики тегов, слушатели событий библиотеки тегов
  • Управляемые бобы

В клиентском контейнере main класс и обработчик обратного вызова login компоненты поддерживают впрыск.

См. Также раздел EJB-перехватчики учебника JBoss EJB 3.0 :

Так же, как класс бобов, перехватчик может быть целью зависимости инъекции. Формат как это работает так же, как впрыск работает с тем же ENC, что и бин который перехватчик связан.

...

Помните, что перехватчики следуют за тот же жизненный цикл, что и у бобов связаны с Перехватчики созданы одновременно с экземпляром компонента и внедрение зависимостей происходит до первого бизнеса метод вызывается.

Ресурсы

0 голосов
/ 11 сентября 2009

Мой опыт показывает, что внедрение может происходить только в управляемых классах: EJB (Entity, Session или Message) и Servlets.

...