当本地接口(interface)由两个无状态 bean 实现时,我遇到以下异常,其中一个具有正常功能,另一个具有一些增强功能。
java.lang.RuntimeException: could not resolve global JNDI name for @EJB for container UserBean: reference class: org.app.SecurityServiceLocal ejbLink: duplicated in Some.jar
最佳答案
终于知道为什么会出现这个异常了
我使用@EJB 注释将一个无状态 bean 注入(inject)另一个名为 UserBean 的无状态 bean,代码如下
@Stateless(name="UserBean")
@EJB(name="app/SecurityService",
beanInterface=SecurityServiceLocal.class)
public class UserBean implements UserRemote{
}
如果您查看注入(inject)细节,我正在注入(inject) SecurityServiceLocal,它由两个无状态 bean 类 SercurityServiceBean 和 SecurityServiceEnhaBean 实现。因此,容器处于歧义状态以决定注入(inject)哪个 bean,因为两者都实现相同的接口(interface)。
这可以通过在@EJB 注释中指定更多信息来解决,例如 beanName 属性值。在那里,您需要使用 bean 名称(在该 bean 级别(或)在 ejb-jar.xml 中声明)来提供需要注入(inject)的无状态 bean 类。检查代码以识别注入(inject)映射中的更改
@Stateless(name="UserBean")
@EJB(name="app/SecurityService",
beanInterface=SecurityServiceLocal.class,
beanName="SecurityServiceEnha")
public class UserBean implements UserRemote{
}
关于java - 不允许两个无状态 bean 实现单个本地接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077610/