我正在尝试使用@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";
}
}
答案 0 :(得分:5)
在部署应用程序(1,2)时指定绑定,或在客户端(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="..."/>
元素的类似绑定文件,则可以简化绑定名称。