当本地接口由两个无状态bean实现时,我遇到异常,其中一个具有正常功能,另一个具有一些增强功能。
java.lang.RuntimeException:不能 解析@EJB的全局JNDI名称 container UserBean:引用类: org.app.SecurityServiceLocal ejbLink: 在Some.jar中重复
答案 0 :(得分:3)
最后我才知道为什么我会得到这个例外
我使用@EJB注释将无状态bean注入另一个无状态bean名称UserBean,其代码如下
@Stateless(name="UserBean")
@EJB(name="app/SecurityService",
beanInterface=SecurityServiceLocal.class)
public class UserBean implements UserRemote{
}
如果检查注入细节,我注入了SecurityServiceLocal,它由两个无状态bean类名称SercurityServiceBean和SecurityServiceEnhaBean实现。因此,容器处于歧义状态以决定注入哪个bean,因为两者都在实现相同的接口。
这可以通过在@EJB注释中指定一些更多信息来解决,例如 beanName 属性值。在那里,您需要使用bean名称(在ejb-jar.xml中的bean级别(或)声明)提供需要注入的无状态bean类。检查代码以识别注入映射中的更改
@Stateless(name="UserBean")
@EJB(name="app/SecurityService",
beanInterface=SecurityServiceLocal.class,
beanName="SecurityServiceEnha")
public class UserBean implements UserRemote{
}
答案 1 :(得分:0)
如果没有看到代码,很难肯定地说。一个好的第一步是在会话bean的注释中使用可选的mappedName =“”属性来为每个提供唯一的JNDI名称。您必须在客户端中使用等效的mappedName属性,以确保使用您想要的bean。