В настоящее время я сталкиваюсь с некоторыми проблемами с 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 в
Теперь вот две основные проблемы:.
- Если модуль A.1 будет включать в себя persistence.xml и с активированным CDI, CDI будет жаловаться на недостающий блок персистентности, как только я попытаюсь развернуть модуль B с зависимостью B.1 -> A.1
- Именно по этой причине я передал заявления о сохранении в A.2, что является уродливым обходным решением, но я мог бы жить с этим.
- увидеть эту ошибку: https://issues.jboss.org/browse/WELD-1851
- Я думаю, EJB и CDI не полностью совместимы, так как если я впрыснуть сессионный компонент в классе в другом модуле (различные развертывания с другим загрузчиком классов) в @EJB впрыскивает из сессионный компонент просто игнорируется.
- Кажется, что класс сеансового компонента создается с использованием CDI, а не EJB в этом случае.
- Это, по-видимому, основная несовместимость CDI и EJB, поскольку я не хочу заботиться о том, как DAO A.1 реализованы. Я просто хочу ввести экземпляр интерфейса в мое приложение и использовать его.
Кто-нибудь знает, как работать вокруг этих проблем или, что вызывает такое поведение?
Большое спасибо!
Что заставляет вас думать, что-либо вообще в EAR A будет доступно из EAR B? Даже если вам удастся погрузить проблемы загрузки классов через jboss-deployment-structure.xml, вы выходите за пределы спецификаций, и я не ожидал бы, что обработка обработки аннотаций будет работать. Почему бы просто не поместить копии банок A.1 и A.2 в EAR B? –