在Java EE应用程序中,我编写了一个布局管理器类。从这个类中,有时我需要从EJB模块访问EJB会话。
这是代码,这是生成的代码:
private MessagesFacadeLocal lookupMessagesFacadeLocal() {
try {
Context c = new InitialContext();
return (MessagesFacadeLocal) c.lookup("java:global/CMS/CMS-ejb/MessagesFacade!cms.model.beans.MessagesFacadeLocal");
} catch (NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
throw new RuntimeException(ne);
}
}
但是,在尝试使用这个时,我得到了一个错误
java.lang.RuntimeException:javax.naming.NamingException:
查找'java:global/CMS/CMS ejb/MessagesFacade!cms.model.beans.MessagesFacadeLocal'
在SerialContext[myEnv={java.nameing.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.nameing.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs=com.sun.enterprise.naming}[根异常为javax.naming.NameNotFoundException:CMS]
我不知道我为什么会遇到这个问题。如何解决这个问题?
错误消息说找不到"CMS"上下文,所以我猜您的应用程序名称实际上不是"CMS"。查找("java:app/AppName")返回什么?
如果您的EJB模块在同一个应用程序中,您可以使用查找("java:app/CMS EJB-/…"),这使您在更改应用程序名称时有了更大的灵活性。