Могу ли я сделать произвольные классы «инъекционными» в Java EE? - PullRequest
1 голос
/ 17 июня 2010

Я работаю над большим унаследованным приложением, использующим сеансовые компоненты без сохранения состояния, которые недавно были перенесены с EJB2 на EJB3, и я хотел бы использовать внедрение зависимостей. К сожалению, в (ошибочной IMO) попытке добиться развязки вся реальная бизнес-логика заключается в классах «менеджера», которым сессионные компоненты перенаправляют свои вызовы. Эти классы менеджеров часто используют другие EJB.

Могу ли я каким-то образом сделать эти классы менеджера способными внедряться в EJB через @Resource и затем вставлять в них другие EJB через @EJB?

Приложение должно работать на Glassfish 2.1.

Ответы [ 2 ]

1 голос
/ 17 июня 2010

(...) вся действующая бизнес-логика заключается в классах "менеджера", которым сеансные бины перенаправляют свои вызовы.

Это был очень распространенный шаблон в EJB 2.xпозволяя выполнить модульное тестирование классов «менеджера» легко, вне контейнера, без какого-либо соблюдения API EJB.

Можно ли каким-то образом сделать эти классы менеджера способными внедряться в EJB через @Resource изатем добавление в них других EJB-компонентов через @EJB?

Не из коробки с Java EE 5. Инъекция ограничена только конструкциями первого класса, определенными в платформе Java EE, включая:

  • SessionContext объект
  • DataSources объект
  • UserTransaction
  • EntityManager интерфейс
  • TimerService интерфейс
  • Другие корпоративные компоненты
  • Веб-сервисы
  • Очереди сообщений и темы
  • Фабрики соединений для ресурса адаптируются
  • Ограничение записей средыСтрока, Символ, Байт, Короткое, Целое, Длинное, Буlean, Double и Float.

В Java EE 6 это возможно при использовании CDI ( JSR-199 ) и аннотации @Inject в EJB для внедрения ваших менеджеров.а также у вас, менеджеров, чтобы вводить EJB.

Возможно вы можете попытаться развернуть Weld (RI JSR-199) как часть вашего приложения на GlassFish v2.1.Я не экспериментировал сам, поэтому не могу ничего подтвердить.На всякий случай, возможно, взгляните на главу 18. Серверы приложений и среды, поддерживаемые Weld (GlassFish v2.1 не был протестирован, но это не значит, что он не работает).

0 голосов
/ 24 июня 2010

Предложение Паскаля об обновлении до GlassFish 3 звучит, вероятно, как самый элегантный подход;) Мне было бы интересно услышать, что мешает перейти на более новую версию (не говоря, что не может быть причины, просто интересно, в чем проблемаздесь).

...