Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为独立客户端设置Glassfish 3.1.2的JNDI?_Java_Glassfish_Java Ee 6_Initial Context - Fatal编程技术网

Java 如何为独立客户端设置Glassfish 3.1.2的JNDI?

Java 如何为独立客户端设置Glassfish 3.1.2的JNDI?,java,glassfish,java-ee-6,initial-context,Java,Glassfish,Java Ee 6,Initial Context,我尝试从一个独立的swing客户机(在客户机上一个单独的JVM中运行)连接到Glassfish服务器 我目前使用Netbeans的以下设置,一切正常: System.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory"); System.setProperty("java.naming.factory.url.pkgs", "com.sun.enterpris

我尝试从一个独立的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)
D:\workspace\gf client\dist>java-jar gf-client.jar
17.08.2012 11:07:38 ch.client.core.ServerContext getInitialContext SCHWERWIEGEND:无法实例化类:com.sun.enterprise.naming.SerialInitContextFactory javax.naming.NoInitialContextException:无法实例化类:com.sun.enterprise.naming.SerialInitContextFactory[根异常为java.lang.ClassNotFoundException:com.sun.enterprise.naming.SerialInitContextFactory]
位于javax.naming.spi.NamingManager.getInitialContext(未知源)
位于javax.naming.InitialContext.getDefaultInitCtx(未知源)
位于javax.naming.InitialContext.init(未知源)
位于javax.naming.InitialContext。(未知源)
位于ch.lawsuite.core.ServerContext.getInitialContext(ServerContext.java:27)
位于ch.client.core.remote.Facades.initialize(Facades.java:68)
在ch.client.core.client.main(client.java:57)处,由以下原因引起:java.lang.ClassNotFoundException:com.sun.enterprise.naming.SerialIni tContextFactory
位于java.net.URLClassLoader$1.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于sun.misc.Launcher$AppClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(未知源)
位于com.sun.naming.internal.VersionHelper12.loadClass(未知源)
…线程“main”java.lang.NullPointerException中还有7个异常
位于ch.client.core.remote.Facades.initialize(Facades.java:69)
位于ch.client.core.client.main(client.java:57)
有人有什么有用的主意吗

  • JVM是否缺少任何LIB?哪些?(它从netbeans工作,所有依赖的LIB都打包到已编译的jar文件中(至少我认为是这样)
  • Glassfish是否有其他系列上下文工厂

非常感谢您的帮助!

您的类路径中缺少包含com.sun.enterprise.naming.SerialInitialContextFactory类的jar。请将其添加到客户端jar的清单中。

通过查看gf-client.jar库的manifest.MF文件,我注意到从为了在netbeans平台之外运行客户端,我必须将所有这些LIB复制到我自己的应用程序的最终版本中。然后它就可以正常工作了…:-)

这是关于远程EJB接口的一点 当客户端应用程序位于不同于承载EJB模块的JVM的JVM上时,您需要远程EJB接口。换句话说:

  • 客户端应用程序位于一个JVM上,EJB模块部署在同一台机器上的另一个JVM上

  • 客户端应用程序位于一个JVM上,EJB模块部署在远程机器上的另一个JVM上
为了简单起见

让我们考虑第一个场景,客户机应用程序和EJB模块都在同一台机器上使用不同的JVM。

  • 确保您的计算机上安装了2个JDK
  • 在指向一个JDK(JVM)的Glassfish安装中部署EJB模块。我们可以同意在“C:/glassfish3/”中安装Glassfish
  • 根据本文中的文档,将文件“gf client.jar”作为外部库从安装目录(即C:/glassfish3/glassfish/lib/gf client.jar)中添加到客户端应用程序类路径中,而不是复制它
  • 还要将文件remote_interface.jar添加到客户机应用程序类路径中,该文件包含EJB的远程业务接口
  • 在第二个JDK(JVM)上运行SE(独立)客户机应用程序
  • 关于客户的重要提示 根据文档,独立java客户端必须显式使用全局JNDI名称来查找远程EJB。此外,Glassfish不需要任何属性来调用InitialContext()构造函数。因此,客户端应用程序可以使用以下代码段调用EJB:

    InitialContext context = new InitialContext();
    _RemoteEjbInterface ejbBean = (_RemoteEjbInterface) context.lookup("java:global/DeployedEJBAppName/EjbImplClass!com.sam._RemoteEjbInterface");
    
    如果您的SE独立客户端应用程序是maven应用程序,那么您需要
  • 通过将此条目添加到客户端应用程序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>
    
    
    org.glassfish.main.appclient.client
    


  • 另一个要引用的文档

    也许这可以帮助您:我将从glassfish使用appclient运行,如果必要的话,制作一个脚本来启动它。我知道这个类在appserv-rt.jar中,而这个类又被gf client.jar的清单文件引用,该文件实际上在我的类路径上。我如何告诉Netbeans包含被包含的lib的清单文件引用?而您只是将这些jar包含在应用程序的/lib文件夹中?不,保持所有这些glassfish lib的结构是非常重要的!因此您必须将gf-client.jar添加到与glassfish安装目录相对应的lib中。这意味着:将gf-client.jar保留在glassfish/lib/gf中-只要从项目中指向该jar即可,请确保glassfish文件夹的引用方式与以前相同。如果您需要更多信息,请告诉我…嗯,很有趣。gf客户端是主要要求?是的。添加gf-client.jar作为第一个库,否则您将与其他jar(我想它是java-ee-7.jar)发生名称冲突。全局JNDI名称是否会根据需要更改