我的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
{
// ...
}
我错过了什么吗? (我应该提供环境信息吗?)
答案 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();