无法从 Swing 客户端创建初始上下文
Cannot create an initial context from a Swing client
请看下面的代码:
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
。我相信豆子的名字可能是错误的。这是豆子:
包 ejb;
import javax.annotation.Resource;
import javax.ejb.Remote;
@Resource(name = "MySessionRemote")
@Remote
public interface MySessionRemote {
public String getResult();
}
bean 的名称应该是什么?
您使用的是哪个应用程序服务器?例如。使用 Glassfish 时,可以在 glassfish-naming.jar
文件中找到 class。该 JAR 需要位于您的 class 路径中。我假设其他应用程序服务器也有类似的 JAR 文件。
事实上,当你在 class 路径上有那个 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
请看下面的代码:
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
。我相信豆子的名字可能是错误的。这是豆子:
包 ejb;
import javax.annotation.Resource;
import javax.ejb.Remote;
@Resource(name = "MySessionRemote")
@Remote
public interface MySessionRemote {
public String getResult();
}
bean 的名称应该是什么?
您使用的是哪个应用程序服务器?例如。使用 Glassfish 时,可以在 glassfish-naming.jar
文件中找到 class。该 JAR 需要位于您的 class 路径中。我假设其他应用程序服务器也有类似的 JAR 文件。
事实上,当你在 class 路径上有那个 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