WebSphere 7.从另一个应用程序注入EJB

我正在尝试使用@EJB注释注入EJB:

  • 当我将EJB注入同一个耳中的另一个EJB时,它可以正常工作。
  • 当我将EJB从同一服务器中的另一个耳朵注入另一个EJB时,我得到一个exception:

EJB在调用方法“sayHello”期间抛出了意外的(未声明的)exception。 exception数据:javax.ejb.EJBException:注入失败; 嵌套exception是:com.ibm.ejs.container.EJBNotFoundException:应用程序myapp1中不存在带有com.mycompany.myapp.ejb.test2接口的EJB

我正在使用WebSphere 7和EJB 3.0。 当我自己进行jndi查找时,它运行正常。 如何让容器知道从哪里注入我的远程bean?

myapp1.ear包含以下内容:myapp1.jar(EJB所在的位置)

myapp1 EJB:

package com.mycompany.myapp1.ejb.test1; @Remote public interface HelloEjb1 { public String sayHello(); } 

EJB Impl:

 package com.mycompany.myapp.ejb.test1; @Stateless public class HelloEjbImpl1 implements HelloEjb1 { @EJB HelloEjb2 helloEjb2; @Override public String sayHello() { return HelloEjb2.sayHello(); } } 

myapp2.ear包含以下内容:myapp2.jar(EJB所在的位置)

myapp2 EJB:

 package com.mycompany.myapp2.ejb.test2; @Remote public interface HelloEjb2 { public String sayHello(); } 

EJB Impl:

 package com.mycompany.myapp2.ejb.test2; @Stateless public class HelloEjbImpl2 implements HelloEjb2 { @Override public String sayHello() { return "Hello"; } } 

在部署应用程序时指定绑定( 1,2 ),或在客户端(myapp1)EJB模块中包含META-INF / ibm-ejb-jar-bnd.xml 。 它看起来像这样:

     

如果使用@EJB(name="myrefname")则可以简化ejb-ref name="..." 。 如果myapp2.jar包含一个带有元素的类似绑定文件,则绑定名称可以简化。