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

时间:2012-02-17 08:27:52

标签: java websphere ejb-3.0

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

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

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

我正在使用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 个答案:

答案 0 :(得分:5)

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

<ejb-jar-bnd
    xmlns="http://websphere.ibm.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd"
    version "1.0">
  <session name="HelloEjbImpl1">
    <ejb-ref name="com.mycompany.myapp.ejb.test1/helloEjb2"
        binding-name="myapp2/myapp2.jar/HelloEjbImpl2#com.mycompany.myapp1.ejb.test1.HelloEjb1"
  </session>  
</ejb-jar-bnd>

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