我有一个EAR应用程序,其中包含两个模块。
EJB模块和Web模块。
在Web模块中,我尝试获取对某些EJB SLSB的引用,我不使用注入cause the class the I need to invoke the method in is not managed。
我正在使用来自Web模块的以下代码:
IFooBarService service = InitialContext.doLookup("IFooBarService");
IFooBarService:定义为(在ejb模块中)的本地接口:
@Local
public interface IFooBarService
{
// ...
}
我想念什么吗? (我应该提供环境信息吗?)
最佳答案
您确定IFooBarService
是IFooBarService服务绑定到的JNDI名称吗?例如,JBoss在引导日志中显示JNDI名称。然后,您可以将其用于查找目的。
通常,如果您希望应用程序具有可移植性,则不应依赖服务器机制来生成JNDI名称,因为Java EE规范具有其自己的名称。您应该能够:
IFooBarService service = InitialContext.doLookup("java:comp/env/IFooBarService");
如果您正在使用Java EE的较新版本(Java EE 6),并且想要查找在同一应用程序中但在不同模块中的EJB,则可以执行以下操作:
IFooBarService service = InitialContext.doLookup("java:app/[module name]/IFooBarService");
有关标准名称here的更多信息。