EJB依存関係バージョンSUNアプリケーションサーバーでの競合
質問
私が遭遇している問題を要約するために、ライブラリのバージョンAを使用するEJBがあります(dep-va.jarと呼びましょう)。 DEP-VA.JARは、EJBのJARファイルのルートにパッケージ化されています。アプリケーションサーバーのドメインLIBフォルダーには、同じライブラリのバージョンBが含まれています(DEP-VB.JARと呼びましょう)。 EJBを呼び出すと、dep-va.jarではなくdep-vb.jarファイルがロードされているため、エラーが発生します。
この質問の最初の部分は、Sun One Application Server v9.1が互いにEJBを分離するのだと思いますか?私はそれがそうであるという印象を受けていました。しかし、別のアプリケーションがDEP-VB.JARをロードしたように思われ、このEJBは独自のロードなしで直接使用しています。
2番目の質問は、アプリサーバーがEJBを分離する場合、アプリケーションサーバーのLIBフォルダーを見る前にEJBのJARファイルから依存関係をロードするのですか?私はこれも真実であると印象を受けていましたが、多分そうではありません...
DEP-VB.JARがDEP-Va.jarではなくロードされている理由を説明するために、Sunアプリケーションサーバーに十分な精通している人はいますか?アプリケーションサーバーのlibフォルダーにあるものを変更せずに、dep-va.jarをロードする方法はありますか? (サーバー上の他のアプリケーションに影響を与える可能性のあることをすることをheします)
ありがとう。
解決
この質問の最初の部分は、Sun One Application Server v9.1が互いにEJBを分離するのだと思いますか?私はそれがそうであるという印象を受けていました。しかし、別のアプリケーションがDEP-VB.JARをロードしたように思われ、このEJBは独自のロードなしで直接使用しています。
によると サフー (これはGlassfish開発者です)、 Java EEスペックはそうです いいえ 単一の耳のモジュール間の分離をクラスの読み込みに委任して、動作がアプリサーバーと別のアプリサーバーとは異なる可能性があるように. 。太陽の1つで、私の理解 ドキュメンテーション EJB-jarsが分離されているということです。
2番目の質問は、アプリサーバーがEJBを分離する場合、アプリケーションサーバーのLIBフォルダーを見る前にEJBのJARファイルから依存関係をロードするのですか?私はこれも真実であると印象を受けていましたが、多分そうではありません...
それは親第一の戦略です(そして私の知る限り、太陽は委任モードを変更できます WebAppsのみ).
そうは言っても、リストした場合はどうなりますか dep-vA.jar
の中に Class-Path
のエントリ MANIFEST.MF
ejb-jarの?
参照してください
- 第2章クラスローダー Sun Javaシステムアプリケーションサーバープラットフォームエディション9開発者ガイド
- パッケージEJB 3アプリケーション
他のヒント
私はその特定のサーバーを使用していませんが、WebSphereでは、parent_firstまたはparent_lastクラスロードを使用するオプションがあることを知っています。サーバーに上がる前に、クラスが最初に耳からロードされるParent_lastに相当するものを探しています。
アプリサーバーでは、そのような構成が可能性があると仮定します。常に、アプリケーション固有のジャーを他のものにロードするように施行できるはずです。