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是一个远程接口(请参阅注释). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |