【发布时间】:2010-01-03 20:37:12
【问题描述】:
当从另一个 EJB 模块调用远程 EJB3 (Glassfish) 时,通常会有可用的接口,它们作为 JAR 文件包含在内,因此当您进行 JNDI 查找时,一切都会按预期工作。
我有一种情况,EJB3 JNDI 名称是在运行时确定的,并且我尝试以通常的方式访问从 JNDI 检索的 EJB 失败,容器抱怨远程接口类的 ClassNotFound。这对我来说很奇怪,因为所有接口类都扩展了一个父接口,我在调用 EJB 模块中确实依赖于它,即:
IParent ejbRef = (IParent) JndiLocator.getObject("jndinameRemote");
这是否可以通过 EJB3 实现,而无需在我的 JAR 中提供精确的远程 EJB 接口字节码?
博佐
【问题讨论】:
-
这是一个狂野的镜头(既是因为我的知识有限,也因为描述不够详细。包设置是什么?错误消息是什么?等等),但如果你可以尝试放置全局应用程序服务器(或域)类路径上的接口,并且它以这种方式工作,那么由于不同的类加载器等,您可能会遇到一些问题。
-
恐怕这就是 JEE 的设计方式,您根本无法创建一个通用的 EJB 客户端来调用您拥有 JNDI 名称和接口父类的任何远程 EJB。这很糟糕,我不知道他们为什么不这样做,这违背了在现有的仅限 JEE 的基础架构中使用 EJB 来实现类似 SOA 的分布式服务的目的。我确定他们想为此使用 Web 服务,但 WS 只是不必要的矫枉过正,他们在应用程序服务器中拥有所有技术来做到这一点。
标签: ejb-3.0