@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 - 这应该可以解决重名问题,但我不确定它能否解决您的整体问题。
我正在尝试专门化 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 - 这应该可以解决重名问题,但我不确定它能否解决您的整体问题。