我想在运行时调用一个ejb3。ejb的名称和方法名称只能在运行时使用,因此我不能在编译时包含任何远程接口。
String bean = 'some/Bean';
String meth = 'doStuff';
//lookup the bean
Object remoteInterface = (Object) new InitialContext().lookup(bean);
//search the method ..
// foreach (methods)
// if method == meth, method.invoke(bean);beans应该分布在多个应用服务器上,所有bean都要远程调用。
有什么暗示吗?具体来说,我是做而不是想要的:
应用特定ejb接口的injection
。
是否可以通过网络加载ejb3远程接口(如果是的话,如何加载?),这样我就可以将接口缓存在一些hashmap或其他东西中。
我有一个带有远程dispatcher bean的解决方案,我可以将其包含在上面的主调度程序中,这基本上是相同的,但是只是将调用中继到本地ejb (我可以如何查找这个调用)。命名查找失败)。给定远程调度程序bean,我可以使用依赖项注入。
谢谢你的帮助
(netbeans和玻璃鱼)
发布于 2008-11-09 05:58:25
ejb3调用使用RMI。RMI支持远程类加载,所以我建议研究一下。
此外,JMX mbean支持完全非类型化的远程调用。因此,如果您可以使用mbean而不是会话bean,则可以工作。(例如,JBoss支持类似ejb3 3的mbean,并带有一些自定义注释)。
最后,许多应用服务器支持CORBA调用,CORBA支持非类型化方法调用。
发布于 2008-11-11 16:11:20
您可能可以使用java.rmi.server.RMIClassLoader进行远程类加载。您还需要加载远程服务返回或抛出的任何类。
发布于 2009-01-16 12:04:12
这是做不到的。您将始终得到“未找到的类”异常。在我看来,这是EJB/Java的最大缺点。因为元语言特性是有限的,所以你失去了一些动态功能。
EJB3支持RMI/IIOP,但不支持RMI/JRMP (标准RMI),因此动态类加载并不是supported.You松散了某些Java通用性,而是获得了其他特性,比如能够与事务和安全进行通信。
https://stackoverflow.com/questions/275540
复制相似问题