Как запустить CDI в war И EJB, если оба подключены к EAR

#jakarta-ee #java-ee-6 #cdi #ear #ejb-3.1

#джакарта-ee #java-ee-6 #cdi #ear #ejb-3.1

Вопрос:

Я пытаюсь создать корпоративное приложение, которое собирается в EAR. Это приложение должно содержать один или несколько ejb-jar и один или несколько war. Я хочу активно использовать CDI, перехватчики и продюсеры. На первом шаге я хочу использовать Log-Producer, который помещается в ejb-jar во всех областях приложения.

Что я сделал, так это создал beans.xml в папках ejb/META-INF и war/WEB-INF/. Создание EAR работает. Но развертывание на сервере Glassfish (3.1) завершается с ошибкой ClassNotFoundException класса Interceptor, который помещен в ejb-jar.

Извлечение EAR и развертывание ejb-jar внутри war работает, как и ожидалось.

По причине модульности и наличия большего количества war и ejb-jar развертывание на основе EAR приветствуется.

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

Большое вам спасибо.

Приветствую Ansgar

Ответ №1:

У нас были похожие проблемы с CDI на JBoss 6. Обходным путем для нас было настроить средство развертывания WAR на использование одной области загрузки глобального класса совместно с другими приложениями, развернутыми в файле EAR. По умолчанию каждое приложение в файле WAR использует свою собственную область загрузчика классов. К сожалению, я не знаю, доступна ли аналогичная конфигурация для Glassfish, но я предполагаю, что она есть.

В системе отслеживания проблем glassfish есть открытый запрос, который также может иметь отношение к вашей проблеме.