【发布时间】:2015-05-11 18:24:07
【问题描述】:
我正在使用 EJB 3.1。我需要在 servlet 中获取对其中一个 EJB 的引用,并且我宁愿不将 EJB 接口 jar 放在类路径上以获取要编译的代码。
是否可以通过 JNDI 查看 EJB 并找到我想要使用反射调用的方法,而无需将对象强输入到接口中?
【问题讨论】:
标签: java jakarta-ee ejb jndi
我正在使用 EJB 3.1。我需要在 servlet 中获取对其中一个 EJB 的引用,并且我宁愿不将 EJB 接口 jar 放在类路径上以获取要编译的代码。
是否可以通过 JNDI 查看 EJB 并找到我想要使用反射调用的方法,而无需将对象强输入到接口中?
【问题讨论】:
标签: java jakarta-ee ejb jndi
是的,如果您正在查找本地 EJB 接口,那么您可以使用反射在同一应用程序中查找并调用本地 EJB。
如果您使用直接查找或 EJB 引用查找,这应该可以工作,因为 Java EE 规范要求应用程序服务器使 EJB 模块类可用于同一应用程序中的 WAR。 EJB 规范不要求支持跨应用程序的本地接口,因此如果您正在这样做,则必须咨询您的应用程序服务器供应商。
这通常不适用于远程 EJB 接口,因为需要创建客户端代理。如果您使用 RMI-IIOP(EJB 2.x 远程或 EJB 3 扩展 java.rmi.Remote),您可能能够将 EJB 查找结果强制转换为 javax.rmi.CORBA.Stub 并使用 _servant_preinvoke 或 _invoke 方法与生成的存根方法相同。
(最终,这是为了避免编译时依赖性而需要注意的地方。这可能不值得脆弱,所以我建议找到一种方法来解决这个问题并正常编译。)
【讨论】: