Oc4j:从同一EAR中的Web应用程序调用本地EJB

时间:2012-01-16 20:19:15

标签: java dependency-injection ejb ear oc4j

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

EJB模块和Web模块。

在web模块中,我试图获得一些EJB SLSB的引用,我不使用注入cause the class the I need to invoke the method in is not managed

我正在使用网络模块中的以下代码:

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

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

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

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

2 个答案:

答案 0 :(得分: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");

有关标准名称here的更多信息。

答案 1 :(得分:0)

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

解决方案是:

fooBarService = (FooBarService) ((StatelessSessionDefaultLocalHome)
    new InitialContext().lookup("EJBModuleName_FooBarServiceLocal")).create();