Java 不允许通过两个无状态bean实现单个本地接口吗?

Java 不允许通过两个无状态bean实现单个本地接口吗?,java,ejb-3.0,Java,Ejb 3.0,当本地接口由两个无状态bean实现时,我遇到了以下异常,其中一个具有正常功能,另一个具有一些增强功能 java.lang.RuntimeException:无法 为的@EJB解析全局JNDI名称 容器UserBean:引用类: org.app.SecurityServiceLocal: 在Some.jar中复制 如果没有看到代码,很难确定。好的第一步是在会话bean的注释中使用可选的mappedName=“”属性,为每个会话bean指定一个唯一的JNDI名称。您必须在客户端中使用等效的mappe

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

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


如果没有看到代码,很难确定。好的第一步是在会话bean的注释中使用可选的mappedName=“”属性,为每个会话bean指定一个唯一的JNDI名称。您必须在客户端中使用等效的mappedName属性,以确保您使用的是您想要的bean。

最后,我知道了为什么会出现此异常

我使用@EJB注释将一个无状态bean注入另一个无状态bean名UserBean,代码如下

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

}
如果您检查注入细节,我正在注入SecurityServiceLocal,它由两个名为SercurityServiceBean和SecurityServiceEnhaBean的无状态bean类实现。所以,容器处于模糊状态,以决定注入哪个bean,因为两者都实现了相同的接口

这可以通过在@EJB注释中指定更多的信息来解决,比如beanName属性值。在这里,您需要通过使用bean名称(在ejbjar.xml中的bean级别(或)声明)来提供需要注入的无状态bean类。检查代码以识别注入映射中的更改

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

}

第一个Bean:@Stateless(name=“SecurityService”,mappedName=“SecurityService”)公共类SecurityServiceBean实现SecurityServiceLocal{}第二个Bean:@Stateless(name=“SecurityServiceEnha”,mappedName=“SecurityServiceEnha”)公共类securityserviceenhebean实现SecurityServiceLocal{}谢谢KeithL的指导