0
我目前在Wildfly 8.2.0.Final上面临EJB 3.1和CDI 1.2的一些问题。我认为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的会话bean注入同一模块的其他会话bean
- CDI是为A.1激活
- EAR B有一个jboss-deployment-structure.xml,声明从B.1到A.1的依赖关系,aso。
- 为B.1激活CDI
- 为了避免在模块B.1中为依赖项注入显式查找(@EJB(lookup =“java:global/...)”,注入模块A.1的会话bean(DAO的)应采用CDI的@Inject做
现在,这里有两个核心问题:
- 如果模块A.1将包括persistence.xml中和在激活CDI的情况下,只要我试图部署依赖于B.1的模块B,CDI就会抱怨缺失的持久性单元 - > A.1
- 这就是我将持久性声明外包给A.2的原因,这是一个丑陋的解决方法,但我可以忍受这一点。
- 看到这样的错误:https://issues.jboss.org/browse/WELD-1851
- 我认为,EJB和CDI是不完全兼容,因为如果我在注射一类无状态会话bean在另一模块(不同的部署,不同的类加载器)的@EJB内喷射会话bean简单地被忽略。
- 看来会话bean的类在这种情况下使用CDI而不是EJB来实例化。
- 这似乎是CDI和EJB的主要不兼容问题,因为我不想关心A.1的DAO如何实现。我只想在我的应用程序中注入一个接口实例并使用它。
有谁知道如何解决这些问题,或者是什么原因导致这种行为?
非常感谢!
在EAR B中,什么让你觉得什么都可以从EAR B访问?即使你设法通过jboss-deployment-structure.xml来纠正类加载问题,你已经超出了规范的范围,我不会期望很多注释处理工作。为什么不把罐子A.1和A.2的副本放入EAR B? – 2015-04-01 14:10:12