@Specializes for EJB

@Specializes for EJB

我正在尝试专门化 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 应该忘记核心-class,而是使用专门的 class。我还发现了这个错误 https://issues.jboss.org/browse/WELD-1451,它表明可以专门化 EJB。

但是如果我尝试部署我的应用程序(我使用的是 Weblogic 12.1.3),我总是得到

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) 只包含简单的 class 名称,不包含包名称。所以你不能在不同的包中有两个同名的 EJB。

添加 CDI 和 @Specializes 可能会阻止专用 EJB 出现在 CDI 容器中,但它仍然是一个 EJB。

您可以尝试重命名派生的 class - 这应该可以解决重名问题,但我不确定它能否解决您的整体问题。