我尝试从独立的swing客户端(在客户端计算机上的单独JVM中运行)连接到Glassfish服务器。
我目前使用Netbeans的以下设置,一切正常:
System.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
System.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
System.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
System.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.3");
System.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext context = new InitialContext();
但是当我尝试通过输入“java -jar client.jar”从控制台启动编译的客户端时,我收到以下错误:
D:\workspace\gf-client\dist>java -jar gf-client.jar
17.08.2012 11:07:38 ch.client.core.ServerContext getInitialContext SCHWERWIEGEND: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at ch.lawsuite.core.ServerContext.getInitialContext(ServerContext.java:2 7)
at ch.client.core.remote.Facades.initialize(Facades.java:68)
at ch.client.core.Client.main(Client.java:57) Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialIni tContextFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
... 7 more Exception in thread "main" java.lang.NullPointerException
at ch.client.core.remote.Facades.initialize(Facades.java:69)
at ch.client.core.Client.main(Client.java:57)
有人有什么有用的想法吗?
非常感谢您的帮助!
答案 0 :(得分:6)
当客户端应用程序位于与托管EJB模块的JVM不同的JVM上时,您需要远程EJB接口。换句话说:
OR
让我们考虑第一种情况,即客户端应用程序和EJB模块都位于同一台计算机上的不同JVM上。
根据文档,独立的Java客户端必须显式使用全局JNDI名称来查找远程EJB。此外,Glassfish不需要任何属性instialization来调用InitialContext()构造函数。因此,客户端应用程序可以使用以下代码段调用EJB:
InitialContext context = new InitialContext();
_RemoteEjbInterface ejbBean = (_RemoteEjbInterface) context.lookup("java:global/DeployedEJBAppName/EjbImplClass!com.sam._RemoteEjbInterface");
通过将此条目添加到您的客户端应用程序POM来考虑上述步骤(3):
<dependency>
<groupId>org.glassfish.main.appclient.client</groupId>
<artifactId>gf-client</artifactId>
<version>3.1.2</version>
<scope>system</scope>
<systemPath>C:/glassfish3/glassfish/lib/gf-client.jar</systemPath>
</dependency>
假设您安装了本地maven仓库中指向您的remote_interface.jar的POM依赖关系,请考虑上述步骤(4)。 Follow this to know how.
引用is here
的其他文档答案 1 :(得分:1)
通过查看gf-client.jar库的MANIFEST.MF文件,我注意到那里引用了其他几十个jar-libs。为了在netbeans平台之外运行客户端,我不得不将所有这些库复制到我自己的应用程序的最终版本中。然后它工作得很好......: - )
答案 2 :(得分:0)
您在类路径中缺少包含类com.sun.enterprise.naming.SerialInitialContextFactory的jar。将其添加到客户端jar的清单中。