【问题标题】:Cannot create an initial context from a Swing client无法从 Swing 客户端创建初始上下文
【发布时间】:2019-10-17 16:49:57
【问题描述】:

请看下面的代码:

try {
            //InitialContext ic = new InitialContext();
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,  
             "com.sun.enterprise.naming.SerialInitContextFactory");
            Context ctx = new InitialContext(env);      

            MySessionRemote hb = (MySessionRemote) ctx.lookup("MySessionRemote");
            System.out.println(hb.getResult());
        } catch (NamingException ex) {
            ex.printStackTrace();
        }

我从 Swing 应用程序得到的错误是:(javax.naming.NoInitialContextException) javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]

我有一段时间没有使用 Java,所以这可能很简单。

更新

我使用的是 Glassfish 4.1 版。我在 NetBeans 项目中添加了对以下 jar 的引用:

appserv-rt.jar
gf-client.jar
javaee.jar

我现在可以获得一个 InitialContext。但是,我无法查找 bean,即这条线失败:

MySessionRemote hb = (MySessionRemote) ctx.lookup("ejb.MySessionRemote");

例外是NamingException,即Lookup Failed。我相信bean的名称可能是错误的。这是豆子:

打包ejb;

import javax.annotation.Resource;
import javax.ejb.Remote;
@Resource(name = "MySessionRemote")
@Remote
public interface MySessionRemote {
    public String getResult();
}

bean 的名称应该是什么?

【问题讨论】:

    标签: java jakarta-ee glassfish glassfish-4


    【解决方案1】:

    您使用的是哪个应用程序服务器?例如。使用 Glassfish 时,可以在 glassfish-naming.jar 文件中找到该类。该 JAR 需要在您的类路径中。我假设其他应用服务器也有类似的 JAR 文件。

    事实上,当您的类路径中有该 JAR 时,您可以简单地使用 InitialContext 的无参数构造函数,因为 JAR 已经包含具有以下内容的 jndi.properties 文件:

    java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory
    java.naming.factory.url.pkgs=com.sun.enterprise.naming
    # Required to add a javax.naming.spi.StateFactory for CosNaming that
    # supports dynamic RMI-IIOP.
    java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
    

    【讨论】:

    • 这个jar文件在哪里?我在 glassfish/lib 中找不到它(这是我的类路径)。谢谢。
    • 您使用的是哪个版本的 Glassfish?
    • 我已对回答您的问题的问题添加了更新。你能看看吗?谢谢。
    • 两件事:我不确定您需要 MySessionRemote 中的 @Resource 批注做什么。其次:检查日志文件。它应该打印出可用于远程查找的部署名称。
    • 谢谢。我能够在日志中找到 EJB 名称。
    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2014-12-12
    相关资源
    最近更新 更多