我可以通过JNDI查找EJB并使用反射调用方法吗?

时间:2015-05-11 18:24:08

标签: java java-ee ejb jndi

我正在使用EJB 3.1。我需要获取对servlet中的一个EJB的引用,而不是在类路径上放置EJB接口jar来获取要编译的代码。

是否可以通过JNDI查找EJB并找到我想使用反射调用的方法,而无需将对象强烈地键入接口?

1 个答案:

答案 0 :(得分:1)

是的,如果您正在查找本地EJB接口,那么您可以使用反射查找并调用同一应用程序中的本地EJB。

如果您使用直接查找或EJB ref查找,这应该有效,因为Java EE规范要求应用程序服务器在同一应用程序中为WAR提供EJB模块类。 EJB规范并不需要跨应用程序支持本地接口,因此,如果您正在执行此操作,则必须与应用程序服务器供应商联系。

这对于远程EJB接口通常不起作用,因为需要创建客户端代理。如果您正在使用RMI-IIOP(EJB 2.x远程或EJB 3扩展java.rmi.Remote),您可以将EJB查找结果强制转换为javax.rmi.CORBA.Stub并使用_servant_preinvoke或_invoke方法与生成的存根方法相同。

(最后,为了避免编译时的依赖,这是一个很多的注意事项。它可能不值得脆弱,所以我建议找到解决方法并正常编译的方法。)