在没有可用接口类的情况下调用远程EJB3

问题描述 投票:2回答:1

从另一个EJB模块调用远程EJB3(Glassfish)时,通常有可用的接口,它们作为JAR文件包含在内,这样当你进行JNDI查找时,一切都按预期工作。

我有一种情况,其中EJB3 JNDI名称是在运行时确定的,我尝试以通常的方式访问从JNDI检索的EJB失败,容器抱怨ClassNotFound用于远程接口类。这对我来说很奇怪,因为所有接口类扩展了一个父接口,我在其调用EJB模块中具有依赖性,即:

IParent ejbRef =(IParent)JndiLocator.getObject(“jndinameRemote”);

这是否可以使用EJB3,而不需要在我的JAR中提供精确的远程EJB接口字节码?

博佐

ejb-3.0
1个回答
0
投票

即使我完全不确定上面的设置是什么,我有一个类似的需要尝试在编译时不知道客户端jar时调用EJB,事实上除此之外我也没办法知道什么是应用程序服务是部署的EJB。

我设法通过编写我的Customized Class Loader来实现这一点,这里的问题是,反过来尝试调用EJB的Class必须使用Customized类加载器以及所有必需的jar来加载,即带有接口和模型的客户端jar和应用程序服务器特定的客户端jar。我将所有上下文属性作为输入传递给我的Invoker类,以初始化上下文工厂并调用bean。

这些是实现这一目标的高级步骤

使用方法invokeEJB创建类EJBInvoker,您可以传递几个带有属性的Maps来准备上下文和Ejb接口,方法,参数类,值和输出类。使用反射创建InitialContextFactory实例以及Bean对象,参数和方法调用。将上面的类添加到单独的jar文件中,并使用自定义的类加载器调用具有外部项目所需属性的方法。

© www.soinside.com 2019 - 2024. All rights reserved.