7

別の構成が必要な既存のプロジェクトがあります。これは、コードを大幅に変更せずに行う必要があります。私は実際に、構成だけで何とかこれを行うことができることを望んでいます。私は過去 2 ~ 3 日間、この号に関する情報をすべて読みました。私はグラスフィッシュのクラスローダと、私が利用できるものを理解しています。

@Local インターフェースを定義する EJB を持つ現在のサンプル プロジェクトがあります。ejb は、ejb-module 内で ejb-module として Glassfish ドメインにデプロイされます。現在、同じドメインに耳としてデプロイされた別のアプリケーションが、ローカル インターフェイスを介してその EJB にアクセスできるようにする方法を見つけようとしています。

これは不可能であるというドキュメントを読みました。それから、ここStackOverflowでの投稿を見たことがあります.Web上でそれが可能であると言っている人もいます。しかし、私は実際の解決策を見つけることができません。

調査の結果、 @Local EJB が jndi に登録されていないことがわかりました (少なくともログによると)。glassfish JNDI ブラウザーを使用すると、それも表示されません。したがって、それが不可能であるか、EJB プロジェクトのデプロイメントに問題があり、どうにかしてそれを公開する必要があるということは、私には理にかなっています。

@Remote は、参照によるものであれば可能であり、パフォーマンスのオーバーヘッドはありません。しかし、@Local EJB アクセスを許可する推奨される方法は、実際には究極のニーズです。

@Local EJB を別のアプリケーションに公開するために何をする必要があるか知っている人はいますか? それとも、これは明らかに不可能ですか?

EJB 3.0でGlassfish 2.1を使用しています

Glassfish 2.1 が EJB 3.1 を処理できるのであれば、この機能が提供されていれば喜んでそれに移行したいと思いますが、それほど簡単かどうかは疑問です。

手伝ってください。ありがとうございました。

賞金を追加しています。バウンティを完了するには、同じドメインで 2 つの ear アプリケーションを実行する必要があります。ここで、A.ear には、B.ear のアプリケーションでも使用される @Local EJB が含まれています。

4

1 に答える 1

5

@Peter が提供したリンクは、問題をほぼ解決します。(リンク)

@Xavier の問題を解決するために実行する必要がある 1 つのトリックは、common.jar を同じバージョン (同じクラス ローダーによってロードされる) で両方の耳に提供することです。そうすることで、クラスキャスト例外がスローされなくなり、ejb をローカル インターフェイスで使用できるようになります。

これを行うには、common.jar を glassfish/domains/domain1/lib フォルダーに配置する必要があります (domain1 をドメイン名に置き換えます)。このようにして、この jar は Glassfish の共有クラス ローダーによってロードされます。

次の構造でEclipseとGlassfish 3で簡単なテストを行いました:

package com.example;

JarShared
 - @Local class Server

EarServer
 - EjbServer
    - @Stateless class ServerBean implements Server

EarClient
 - EjbClient
    - @Stateless @LocalBean class ClientBean

ClientBean からのルックアップ:

InitialContext ic = new InitialContext();
Server server = (Server) ic.
    lookup("java:global/EarServer/EjbServer/ServerBean!com.example.Server");

ClassCastException は発生せず、ServerBean からサンプルメソッドを呼び出すことができました。

重要事項:

  • EarServer と EarClient の両方が lib フォルダに JarShared を含むべきではなく、ドメインの lib フォルダにあるものを再利用する必要があります
  • JarShared を追加した後、Glassfish を再起動することを忘れないでください。
  • 両方の ejb プロジェクトをコンパイルするには、ビルド パスに JarShared を追加する必要があります。

質問がある場合は、コメントを投稿してください。

于 2012-11-30T20:23:41.077 に答える