1

在一个 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.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [根异常是 javax.naming.NameNotFoundException: CMS]

我不确定为什么会遇到这个问题。如何解决这个问题呢?

4

1 回答 1

0

错误消息说找不到“CMS”上下文,所以我猜您的应用程序名称实际上不是“CMS”。lookup("java:app/AppName") 返回什么?

如果您的 EJB 模块在同一个应用程序中,您可以使用 lookup("java:app/CMS-ejb-/..."),这让您在更改应用程序名称时更加灵活。

于 2012-07-23T13:58:13.617 回答