4

我在耳朵中部署了一个无接口 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

更新:我需要将远程接口与战争打包,它现在可以正常工作。

4

2 回答 2

2

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

于 2012-06-05T11:20:05.973 回答
0

在另一个使用 EJB 3.1 可移植命名格式的应用程序中,您必须使用完全限定名称来引用 EJB:

java:global/[<application-name>]/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>
于 2012-06-05T23:08:13.127 回答