0

我有一个 EAR 应用程序包含两个模块。

EJB 模块和 Web 模块。

在 web 模块中,我试图获取一些 EJB SLSB 的引用,我不使用注入,因为我需要调用该方法的类不是托管的

我正在使用来自 web 模块的以下代码:

IFooBarService service = InitialContext.doLookup("IFooBarService");

IFooBarService:定义为(在 ejb 模块中)的本地接口:

@Local
public interface IFooBarService
{
    // ...
}

我错过了什么吗?(我应该提供环境信息吗?)

4

2 回答 2

1

您确定这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");

有关标准名称的更多信息在这里

于 2012-01-17T16:48:29.467 回答
0

从这里:https ://forums.oracle.com/forums/thread.jspa?threadID=476903

解决方案是:

fooBarService = (FooBarService) ((StatelessSessionDefaultLocalHome)
    new InitialContext().lookup("EJBModuleName_FooBarServiceLocal")).create();
于 2012-01-18T09:39:39.387 回答