DI в приложении EJB / MDB - PullRequest
       7

DI в приложении EJB / MDB

4 голосов
/ 21 апреля 2011

В настоящее время я разрабатываю небольшое приложение EJB, работающее на IBM Websphere Application Server 7 (Java EE 5).Приложение в основном состоит из одного MDB, прослушивающего входящие сообщения MQ, которые преобразуются и сохраняются в БД.В настоящее время я использую множество Singleton / Factories для обмена конфигурациями, сопоставлениями, поисками источников данных и т. Д. Но на самом деле это приводит к очень сложному тестированию кода.Решением может быть использование (простой) структуры DI, такой как guice / spring, для внедрения различных экземпляров.Вопрос: где разместить код инициализации / настройки?Где находится основная точка входа в приложение?Как я могу внедрить экземпляры в MDB?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Возможно, стоит отказаться от использования Guice и попытаться работать с механизмами внедрения, уже доступными в Java EE 5.

Что касается поиска подходящей "точки запуска", к сожалению, спецификация EJB не определяет способ запуска bean-компонента при запуске. Однако в веб-профиле спецификации EE есть один - вы можете добавить WAR в свое приложение и установить компонент прослушивателя сервлета:

http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContextListener.html

Вы можете настроить его на запуск при загрузке и запуске приложения контейнером (WebSphere). Остерегайтесь проблем с загрузчиком классов.

1 голос
/ 14 июля 2011

Используя Spring, вы можете сделать это через перехватчики EJB3, см. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html#ejb-implementation-ejb3

Полезная информация о предостережениях содержится в javadoc, обязательно прочитайте ее: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/ejb/interceptor/SpringBeanAutowiringInterceptor.html

...