我有一个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的更多信息。

10-07 23:08