加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – @EJB从不同的jar注入

发布时间:2020-12-15 02:29:19 所属栏目:Java 来源:网络整理
导读:我正在尝试注入一个位于不同jar文件中的bean,然后我正在尝试将其注入其中.这两个bean都只是具有本地和远程接口的基本@Stateless bean. 如果我使用正常注射 @EJBIBean injectedBean; 要么 @EJBIBeanLocal injectedBean; 部署应用程序时出现NullPointerExcepti
我正在尝试注入一个位于不同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.

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

<application xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"
         version="1.4">

  <display-name>Simple example of application</display-name>

  <module>
    <ejb>ejb1.jar</ejb>
  </module>
  <module>
    <ejb>ejb2.jar</ejb>
  </module>
</application>

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

在此之后,我只是将罐子添加到耳朵,一切都很好地部署.

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读