gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:07:44 29 4
gpt4 key购买 nike

我尝试从独立的 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)

有人有什么有用的想法吗?

  • JVM 是否遗漏了任何库?哪个? (它适用于 netbeans,所有依赖库都打包到编译后的 jar 文件中(至少我是这么认为的..))
  • Glassfish 是否有替代的串行上下文工厂?

非常感谢您提前提供的帮助!

最佳答案

关于远程 EJB 接口(interface)的一点说明

当您的客户端应用程序位于一个不同于托管 EJB 模块的 JVM 上时,您需要一个远程 EJB 接口(interface)。换句话说:

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

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

为简单起见

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

  1. 确保您的机器上安装了 2 个 JDK。
  2. 在指向一个 JDK (JVM) 的 Glassfish 安装中部署 EJB 模块。我们可以同意在“C:/glassfish3/”中安装 Glassfish
  3. 根据本 link 中的文档.从安装目录(即 C:/glassfish3/glassfish/lib/gf-client.jar)中将文件“gf-client.jar”作为外部库添加到您的客户端应用程序类路径,而不是复制它。
  4. 还将文件remote_interface.jar 添加到您的客户端应用程序类路径中,其中包含您的EJB 的远程业务接口(interface)。
  5. 在第二个 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 应用程序,那么您需要

  1. 通过将此条目添加到您的客户端应用程序 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>
  2. 假设你安装了它,通过一个指向你本地 maven 仓库中的 remote_interface.jar 的 POM 依赖项来计算上述步骤 (4)。 Follow this to know how.

另一个引用文档 is here

关于java - 如何为独立客户端的 Glassfish 3.1.2 设置 JNDI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002948/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com