2015-03-31 3 views
0

В настоящее время я сталкиваюсь с некоторыми проблемами с EJB 3.1 и CDI 1.2 на Wildfly 8.2.0.Final. Я думаю, что CDI и EJB не полностью совместимы, поскольку это предлагается повсюду в Интернете.Действительно ли CDI и EJB совместимы?

Моя установка заключается в следующем:

EAR A 
    | 
    +- JAR A.1 (containing some Stateless Session Beans) 
    +- JAR A.2 (containing some persistence things) 

EAR B 
    | 
    +- JAR B.1 (containing some classes that use A.1) 

Дополнительная информация:

  • На сессии бобах использования A.1 @EJB вводить другие сессионные компоненты одного и того же модуля
  • CDI является активирован для A.1
  • EAR B имеет jboss-deployment-structure.xml, который объявляет зависимость от B.1 до A.1, aso.
  • CDI активирован для B.1
  • Во избежание необходимости явного поиска (@EJB (lookup = "java: global/...)) для инъекции зависимостей в модуле B.1, инъекция сеансовые бобы (DAOS) модуля А.1 должно быть сделано с помощью @Inject CDI в

Теперь вот две основные проблемы:.

  1. Если модуль A.1 будет включать в себя persistence.xml и с активированным CDI, CDI будет жаловаться на недостающий блок персистентности, как только я попытаюсь развернуть модуль B с зависимостью B.1 -> A.1
    • Именно по этой причине я передал заявления о сохранении в A.2, что является уродливым обходным решением, но я мог бы жить с этим.
    • увидеть эту ошибку: https://issues.jboss.org/browse/WELD-1851
  2. Я думаю, EJB и CDI не полностью совместимы, так как если я впрыснуть сессионный компонент в классе в другом модуле (различные развертывания с другим загрузчиком классов) в @EJB впрыскивает из сессионный компонент просто игнорируется.
    • Кажется, что класс сеансового компонента создается с использованием CDI, а не EJB в этом случае.
    • Это, по-видимому, основная несовместимость CDI и EJB, поскольку я не хочу заботиться о том, как DAO A.1 реализованы. Я просто хочу ввести экземпляр интерфейса в мое приложение и использовать его.

Кто-нибудь знает, как работать вокруг этих проблем или, что вызывает такое поведение?

Большое спасибо!

+1

Что заставляет вас думать, что-либо вообще в EAR A будет доступно из EAR B? Даже если вам удастся погрузить проблемы загрузки классов через jboss-deployment-structure.xml, вы выходите за пределы спецификаций, и я не ожидал бы, что обработка обработки аннотаций будет работать. Почему бы просто не поместить копии банок A.1 и A.2 в EAR B? –

ответ

0

Теоретически вы можете позволить EAR A зависеть от EAR B (используя jboss-deployment-structure.xml, добавив зависимость модуля к deploy.ear.b или что-то в этом роде). Если META-INF EAR B содержит файл активации CDI (beans.xml), EAR A может, вероятно, вводить зависимости из EAR B.

В развертываниях JBoss AS7 и WildFly 8 в большинстве случаев можно рассматривать как «нормальные» модули ,