ejb - @专门针对EJB

标签 ejb cdi java-ee-6

我正在尝试专门化一个 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),我总是会得到

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/

相关文章:

java - 是否可以从现有的请求范围激活 session 范围和 session 范围?

java - CDI和EJB,安全问题?

java - 从无状态 EJB 访问 SessionScoped 对象

java - 是否可以定义一个与其实现分离的 jax-rs 服务接口(interface)(使用 eclipse 和 jersey)?

jpa - 内部异常 : java. sql.SQLSyntaxErrorException: ORA-00972: 标识符太长

java - Spring JNDI 查找 EJB 计时器服务

java - Toplink 对象未显示在 JDeveloper 中的 Toplink Map 节点下

java - 什么时候应该使用 Instance<T> 和 Provider<T> 在 CDI 中注入(inject) bean?

java - Glassfish 部署错误,并包含无信息的错误消息

EJB 无状态 session Bean - 无法创建错误