@EJB从不同的jar注入

我正在尝试注入一个位于不同jar文件中的bean然后我正在尝试将其注入其中。 这两个bean都只是具有本地和远程接口的基本@Stateless bean。 如果我使用正常注射

@EJB IBean injectedBean; 

要么

 @EJB IBeanLocal injectedBean; 

部署应用程序时,我得到一个NullPointerException。

如果我使用:

 @EJB(mappedName="Bean") IBean injectedBean; 

要么

 @EJB(mappedName="Bean") IBeanLocal injectedBean; 

一切正常,JBoss不会抛出任何部署错误。

我可能会提到我使用JBoss 5。

我正在注入的bean类被声明为:

 @Remote public interface IBean @Local public interface IBeanLocal extends IBean @Stateless(name = "Bean") public class Bean implements IBean, IBeanLocal 

我的问题是,如文档中所指定,mappedName属性是特定于供应商的。 有没有其他方法我可以让这个工作?

解决了:

我设法解决了这个问题。

问题是我试图单独部署两个jar,这意味着每个人都会在JBoss中获得它自己的ClassLoader,这样他们就无法找到对方并在尝试注入bean时返回NullPointerException。

解决方案是将jar子添加到耳朵并添加包含application.xml的META-INF,如下所示:

  Simple example of application  ejb1.jar   ejb2.jar   

我还必须通过在类之前添加ear名称来更改我为匹配新结构而进行的一些JNDI查找:“ear-name / bean”

在此之后,我只是将jar子添加到耳朵,所有部署都很好。

您需要声明本地接口,以便让JBoss仅基于接口查找bean(假设您使用的是EJB 3.0):

 @Stateless(name = "Bean") @Local ( IBeanLocal.class ) @Remote ( IBean.class ) public class Bean implements IBean, IBeanLocal { ... } 

编辑:IBean是一个远程接口(请参阅注释)。

尝试用@EJB(beanName = "Bean")注入你的bean @EJB(beanName = "Bean")

不确定它是否可行,但是我们遇到了类似的问题,这是由缺少beanName属性引起的。