我在耳中部署了无接口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打包远程接口,它现在正常工作。
答案 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>