Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oc4j:在同一个EAR中从Web应用程序调用本地EJB_Java_Dependency Injection_Ejb_Ear_Oc4j - Fatal编程技术网

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

Java Oc4j:在同一个EAR中从Web应用程序调用本地EJB,java,dependency-injection,ejb,ear,oc4j,Java,Dependency Injection,Ejb,Ear,Oc4j,我有一个EAR应用程序包含两个模块 EJB模块和Web模块 在web模块中,我尝试获取对某个EJB SLSB的引用,我不使用注入 我正在使用web模块中的以下代码: IFooBarService service = InitialContext.doLookup("IFooBarService"); IFooBarService:本地接口,定义为(在ejb模块中): 我错过什么了吗?(我应该提供环境信息吗?您确定IFooBarService是IFooBarService绑定到的JNDI名称吗?

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

EJB模块和Web模块

在web模块中,我尝试获取对某个EJB SLSB的引用,我不使用注入

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

IFooBarService service = InitialContext.doLookup("IFooBarService");
IFooBarService:本地接口,定义为(在ejb模块中):


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

您确定
IFooBarService
是IFooBarService绑定到的JNDI名称吗?例如,JBoss在引导日志中显示JNDI名称。然后可以将其用于查找目的

一般来说,如果你希望你的应用是可移植的,你不应该依赖服务器机制来生成JNDI名称,因为JavaEE规范有自己的。您应该能够做到:

IFooBarService service = InitialContext.doLookup("java:comp/env/IFooBarService");
如果您使用的是较新版本的Java EE(Java EE 6),并且希望查找同一应用程序中不同模块中的EJB,则可以执行以下操作:

IFooBarService service = InitialContext.doLookup("java:app/[module name]/IFooBarService");
有关标准名称的更多信息。

从这里:

解决办法是:

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

您遇到了哪些错误(如果有)?它只是返回一个空引用吗?命名异常,在
Ocj4
中找不到“IFooBarService”的名称,我可以查找我输入的任何名称
@Stateless(name=“IFooBarService”)
。在JBoss中,我记得它类似于
{moudleName}/{ServiceName}/{local | remote}
(如果我遗漏了一些东西,请纠正我)…你能给我提供一个关于jee5的可移植名称吗?java:app/[module name]/IFooBarService是用于查找的规范定义,而不是JBoss定义。我自己没有使用过OC4J,但我希望它符合JEE标准,因此您应该能够使用上述方法。我已经尝试了上面提供的JEE 5 JNDI Portable JNDI name,但它似乎不起作用!但是,这个解决方案不可移植。我建议寻找一种非特定于服务器的解决方案。
fooBarService = (FooBarService) ((StatelessSessionDefaultLocalHome)
    new InitialContext().lookup("EJBModuleName_FooBarServiceLocal")).create();