3

スタンドアロンの 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 の代わりのシリアル コンテキスト ファクトリはありますか?

事前にご協力いただきありがとうございます。

4

3 に答える 3

8

リモート EJB インターフェースに関する明確なポイント

クライアント アプリケーションが、EJB モジュールをホストしている JVM とは異なる 1 つの JVM 上にある場合は、リモート EJB インターフェースが必要です。言い換えると:

  • クライアント アプリケーションは 1 つの JVM に存在し、EJB モジュールは同じマシン上の別の JVM にデプロイされます。

また

  • クライアント アプリケーションは 1 つの JVM に存在し、EJB モジュールはリモート マシン上の別の JVM にデプロイされます。

簡単にするために

クライアント アプリケーションと EJB モジュールの両方がまったく同じマシン上の異なる JVM に存在する最初のシナリオを考えてみましょう。

  1. マシンに 2 つの JDK がインストールされていることを確認してください。
  2. 1 つの JDK (JVM) を指す Glassfish インストールに EJB モジュールをデプロイします。"C:/glassfish3/" に Glassfish をインストールすることに同意できます。
  3. このリンクのドキュメントによると。ファイル「gf-client.jar」をコピーするのではなく、インストール ディレクトリ (つまり、C:/glassfish3/glassfish/lib/gf-client.jar) 内から外部ライブラリとしてクライアント アプリケーションのクラスパスに追加します。
  4. また、EJB のリモート ビジネス インターフェースを含むファイル remote_interface.jar をクライアント アプリケーションのクラスパスに追加します。
  5. 2 番目の 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. 上記のステップ (4) は、POM 依存関係がインストールされていると仮定して、ローカルの Maven リポジトリーの remote_interface.jar を指すことによって説明されます。方法を知るには、これに従ってください。

参照する別のドキュメントはこちら

于 2013-09-27T16:14:22.487 に答える
1

gf-client.jar ライブラリの MANIFEST.MF ファイルを調べると、そこから参照されている他の jar-lib が数十個あることに気付きました。クライアントを netbeans プラットフォームの外部で実行するには、これらすべてのライブラリを自分のアプリケーションの最終ビルドにコピーする必要がありました。その後、問題なく動作します... :-)

于 2012-10-24T08:30:41.520 に答える
0

クラスパスにクラス com.sun.enterprise.naming.SerialInitialContextFactory を含む jar がありません。クライアント jar のマニフェストに追加します。

于 2012-08-17T09:45:27.617 に答える