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

时间:2010-01-16 14:29:52

标签: java ejb-3.0

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

  

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

2 个答案:

答案 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。