EJB:将具体类的实例传递给EJB方法

时间:2016-08-30 11:21:49

标签: java java-ee ejb wildfly

假设有一个EJB方法接受实现某个接口的对象。

MyStatelessBean.method(InterfaceA aObj);

因此服务器实现了MyStatelessBean,并且InterfaceA在其类路径中可用。

现在, InterfaceA的具体类在客户端实现。这些具体类在服务器的类路径中

现在,当客户端调用服务器并将具体类的实例传递给EJB方法时,

InterfaceA concreteObjA = new InterfaceA() { ... }   
bean = context.lookup(ejbLookupStr);
bean.method(concreteObjA);

预期的行为是什么?

我在WildFly 9.0.2中的测试导致在客户端日志中报告了ClassNotFoundException(但它似乎报告了服务器端问题)。

  

线程“main”中的异常javax.ejb.EJBException:   抛出java.lang.ClassNotFoundException:   来自[Module。的org.ktest.study.javaee.ejb.CallBackClient   来自服务模块的“deployment.wildfly-ear.ear.wildfly-ejb.jar:main”   装载机]   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:238)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)     在   org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)     在com.sun.proxy。$ Proxy0.register(未知来源)at   org.ktest.study.javaee.ejb.ClientObject.main(ClientObject.java:21)

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

实际上我的要求是使用RMI进行服务器到客户端的回调。服务器提供CallBack接口。但是客户可以提供具体的实施方案。由于EJB使用序列化将对象从客户端传递到服务器,因此需要在服务器端提供具体类以进行反序列化。

我的RMI代码中有一个导致错误的错误。