我正在使用EJB 3.1。我需要在servlet中获取对一个EJB的引用,我宁愿在类路径上放置EJB接口jar以获取编译代码。
是否可以通过JNDI查看EJB并找到我想使用反射调用的方法,而无需强烈将对象键入接口?
是的,如果您正在查找本地EJB接口,则可以使用反射在同一应用程序中查找并调用本地EJB。
如果您使用直接查找或EJB Ref查找,这应该有效,因为Java EE规格要求应用程序服务器使EJB模块类在同一应用程序中可用于战争。EJB规格不需要在应用程序跨应用程序的本地接口方面支持,因此,如果您正在做的事情,则必须与应用程序服务器供应商联系。
这对远程EJB接口通常不起作用,因为需要创建客户端代理。如果您使用的是rmi-iiiop(ejb 2.x远程或ejb 3扩展java.rmi.remote),则可以将EJB查找结果施加到javax.rmi.corba.corba.stub并使用_servant_preinvoke或_invoke methods与生成的存根方法相同。
(最终,这是很多警告只是为了避免汇编时间依赖。这可能不值得脆弱,因此我建议找到一种解决方法并正常编译的方法。)