我正在尝试专门化一个 EJB。我有
package com.foo.core;
@Stateless
public class MyFacade { }
和
package com.foo.extension;
@Specializes
@Stateless
public class MyFacade extends com.foo.core.MyFacade { }
在我看来,这应该可行,因为 @Specializes 的含义是,CDI 应该忘记核心类,而使用专用类。我也发现了这个bug https://issues.jboss.org/browse/WELD-1451这表明可以专门化一个 EJB。
但是如果我尝试部署我的应用程序(我使用的是 Weblogic 12.1.3),我总是会得到 p>
weblogic.utils.ErrorCollectionException: There are 1 nested errors: weblogic.j2ee.dd.xml.AnnotationProcessException: Duplicate ejb name 'MyFacade' found: annotation 'Stateless' on bean class com.foo.core.MyFacade and annoation 'Stateless' on bean class com.foo.extension.MyFacade
我做错了什么吗?
谢谢!
最佳答案
您引用的异常消息是由名称冲突引起的,这与 CDI 完全没有直接关系:每个 EJB 可以通过许多不同的 JNDI 名称来寻址,其中一些名称(例如 java:module/MyFacade
) 只包含简单的类名,不包含包名。因此,不同包中不能有两个同名的 EJB。
添加 CDI 和 @Specializes
可能会阻止专用 EJB 显示在 CDI 容器中,但它仍然是一个 EJB。
您可以尝试重命名您的派生类 - 这应该可以解决重复名称问题,但我不确定它是否可以解决您的整体问题。
关于ejb - @专门针对EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641923/