Java EE 6: управление запуском управляемых bean-компонентов с зависимостями: CDI, EJB

Я только что прочитал очень хорошее объяснение различных управляемых бобов и их отношений наJava EE 6 @ javax.annotation.ManagedBean против @ javax.inject.Named против @ javax.faces.ManagedBean и поскольку я сталкиваюсь с досадной проблемой в своем приложении, я хочу знать, возможно ли контролировать или влиять на то, как и когда запускаются бины.

В моем приложении Java EE я использую EJB, CDI и JSF2 в качестве технологии просмотра. Через SPI загружается служба от третьего лица, которая настраивает исполнителя задания, который запускает задания и обрабатывает другие важные для таймера вещи. Одна работа выполняется сразу же после того, как исполнитель завершил свою загрузку. Эта работа использует инъекцию CDI для получения доступа к некоторым bean-компонентам, и один из этих bean-компонентов использует EJB.

Проблема заключается в том, что в большинстве случаев сервер Java EE 6 (JBoss 7.1.1) запускает EJB, который все еще недоступен, а затем задание пытается получить к нему доступ. Выдается исключение, и задание не выполняется, а служба создается для деактивации этого сбойного задания. Что ж, дезактивация неудавшейся работы кажется не слишком плохой. Единственное решение для возобновления работы - это отменить ее и снова развернуть. К сожалению, это ручная задача, и это не может быть сделано программно.

И, что плохо, в редких случаях этого не происходит.

Итак, мой вопрос сейчас: могу ли я каким-то образом контролировать инициализацию и развертывание EJB и CDI-компонентов, чтобы я мог гарантировать, что все EJB-компоненты инициализируются до инициализации CDI-компонентов?

Я установил initialize-in-order для true в файле EAR application.xml и установил последовательность EJB так, чтобы они инициализировались так, как они мне нужны (ядро EJB, затем бизнес EJB, затем WAR), но служба на основе CDI помещается как JAR в папку lib.

Ответы на вопрос(1)

Ваш ответ на вопрос