在不同的耳朵中注入无接口ejb

时间:2012-06-04 16:49:15

标签: java-ee dependency-injection ejb-3.1

我在耳中部署了无接口ejb(MyEar.ear)

@Stateless
@LocalBean
public class MyService{
// stuff
}

将耳朵部署到jboss-6.0.0.Final

我从服务器jmx控制台确认了JNDI名称:

MyEar /为MyService /不接口

我试图在同一台服务器的战争中(耳朵外)从另一个ejb引用这个ejb:

@EJB(mappedName = "MyEar/MyService/no-interface")
private MyService myService;

我在eclipse中引用了war项目中的ear项目,编译成功。

在部署战争时我不断收到ClassNotFoundException异常:

java.lang.ClassNotFoundException:eg.com.test.MyService

为什么战争中的ejb没有从另一只耳朵看到ejb?

修改:我更新了以下内容

远程接口

@Remote
public interface MyServiceRemote{
// stuff
}

EJB

@Stateless
public class MyService implements MyServiceRemote{
// stuff
}

ejb在不同应用程序中的引用

@EJB(mappedName = "MyEar/MyService/remote")
private MyServiceRemote myService;

我在服务器上验证了新的JNDI名称:MyEar / MyService / remote

但是我仍然得到相同的异常,这次没有找到界面:

java.lang.ClassNotFoundException:eg.com.test.MyServiceRemote

更新:我需要使用war打包远程接口,它现在正常工作。

2 个答案:

答案 0 :(得分:2)

EJB需要有一个远程接口,您可以像访问外部WAR的任何远程EJB一样访问它。外部WAR对EAR有一个单独的类加载器,因此它不会找到EAR类。

答案 1 :(得分:0)

您必须使用完全限定名称来使用EJB 3.1便携式命名格式在另一个应用程序中引用EJB:

java:global/[<application-name>]/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>