两个无状态bean是否可以实现单个本地接口?

4

当一个本地接口被两个无状态bean实现时,其中一个具有正常功能,另一个具有一些增强功能,我遇到了以下异常。

java.lang.RuntimeException: 无法解析容器UserBean的@EJB全局JNDI名称:引用类:org.app.SecurityServiceLocal ejbLink:在Some.jar中重复

2个回答

3

最后我知道了为什么会出现这个异常

我在另一个无状态bean名称UserBean中使用@EJB注解来注入一个无状态bean,代码如下:

@Stateless(name="UserBean")
@EJB(name="app/SecurityService",
        beanInterface=SecurityServiceLocal.class)
public class UserBean implements UserRemote{

}

如果您查看注入细节,我正在注入SecurityServiceLocal,它由两个无状态bean类SercurityServiceBean和SecurityServiceEnhaBean实现。因此,容器处于不确定状态,无法决定要注入哪个bean,因为两个都实现了相同的接口。
可以通过在@EJB注释中指定更多信息来解决此问题,例如beanName属性值。在那里,您需要提供使用bean名称(在该bean级别(或)在ejb-jar.xml中声明)注入哪个无状态bean类。请检查代码以识别注入映射中的更改。
@Stateless(name="UserBean")
@EJB(name="app/SecurityService",
        beanInterface=SecurityServiceLocal.class,
        beanName="SecurityServiceEnha")
public class UserBean implements UserRemote{

}

0
没有看到代码很难确定问题。一个好的第一步是在你的会话bean注解上使用可选的mappedName=""属性,为每个bean分配一个唯一的JNDI名称。你必须在客户端中使用等效的mappedName属性来确保你使用了你想要的bean。

第一个Bean: @Stateless(name="SecurityService", mappedName="SecurityService") public class SecurityServiceBean implements SecurityServiceLocal{ }第二个Bean: @Stateless(name="SecurityServiceEnha", mappedName="SecurityServiceEnha") public class SecurityServiceEnhaBean implements SecurityServiceLocal{ } - Pokuri
感谢KeithL的指导。 - Pokuri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接