2012-11-22 7 views
7

私は別の設定が必要な既存のプロジェクトを持っています。これはコードの大きな変更なしに起こる必要があります。私は実際に構成でのみ何とかこれを行うことができると期待しています。私は過去2〜3日をこの問題で見つけることのできるすべてを読んで過ごしました。私はグラスフィッシュのクラスローダーを理解しています。 Glassfish 2.1 EJB 3.0同じドメインで実行されている他のアプリケーションにローカルEJBを公開する/ jvm

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

これは不可能であることを示す文書を読んでいます。 私はStackOverflowでここに投稿を見てきました。しかし、私は実際の解決策を見つけることができません。

調査の結果、@Local EJBがjndi(少なくともログに応じて)に登録されないことがわかりました。glassfish JNDIブラウザを使用しても表示されません。ですから、それは不可能であるか、またはEJBプロジェクトの展開に誤りがあり、何とか私はそれを公開する必要があります。

@Remoteは参照可能な場合は可能性があり、パフォーマンスオーバーヘッドはありません。しかし、@Local EJBへのアクセスを可能にする好ましい方法は、本当に究極の必要性です。

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

Glassfishの2.1はEJB 3.1を扱うことができる場合、私はEJB 3.0

でGlassfishの2.1を使用しています

それがこの機能を提供する場合、私はそれに移動することをいとわないだろうが、私はそれが簡単だ疑い。

助けてください。 ありがとうございます。

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

+0

追加情報:http://docs.oracle.com/cd/E18930_01/html/821-2418/beadh.html#beadlこれはGlassfish 3.1用ですが、ドキュメントには2.1で同じことが書かれています。私はこれを働かせることはできません。 – guyumu

+1

多分あなたはこれを行うためのあなたの動機を説明する必要がありますが、すでに言及したように、同じ問題を扱う他のスレッドがあります。私はちょうどjtahlbornの答えに同意するでしょう:http://stackoverflow.com/questions/5681197/access -a-local-session-bean-from-another-ear(それをやろうとしません) –

答えて

4

リンク@Peterはあなたの問題をほぼ解決しました。 (link

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

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

私は構造以下でのEclipseとGlassFish 3との簡単なテストをした:私はClassCastExceptionが取得していないと私はServerBeanからサンプルメソッドを呼び出すことができ

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

:ClientBeanから

package com.example; 

JarShared 
- @Local class Server 

EarServer 
- EjbServer 
    - @Stateless class ServerBean implements Server 

EarClient 
- EjbClient 
    - @Stateless @LocalBean class ClientBean 

検索。

重要事項:

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

質問があれば、コメントを投稿してください。

+0

こんにちは、ありがとうございます。私はあなたがここで言及する鍵は、ドメイン/ libフォルダだと思います。以前は、domain/lib/applibsフォルダを使用しようとしていましたが、それがどのように問題になるかを見ることができます。私は今日、この解決策を試み、レポート/投票を取り戻すでしょう:-)ありがとう! :) – guyumu

+0

私はいくつかのテストを行い、再びあなたの記事を読んで:)私はあなたがglassfish 3.1を使用して参照してください:)私はここにグラスフィッシュ3がこれをサポートしている傾向をピックアップしていると思います、そして私は野生のガチョウの追跡ですglassfish on 2.1:/悲しいことに、glassfish 3に変更することはできません。 – guyumu

+0

これを確認してください:http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment - GF2固有のJNDI名に関するルールです。互換性の理由でそれらを、私は推測する) – MeTTeO

関連する問題