1

私が直面している問題を要約すると、ライブラリのバージョン 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-vA.jar ではなく dep-vB.jar が読み込まれる理由を説明できる Sun アプリケーション サーバーに詳しい人はいますか? アプリケーションサーバーの lib フォルダーの内容を変更せずに dep-vA.jar をロードする方法はありますか? (サーバー上の他のアプリケーションに影響を与える可能性のあることは何でもすることを躊躇します)

ありがとう。

4

2 に答える 2

1

この質問の最初の部分は、Sun One Application Server v9.1 は EJB を相互に分離するかということだと思います。私はそうであるという印象を受けました。しかし、別のアプリケーションが dep-vB.jar をロードしたようで、この EJB はそれ自体をロードせずに直接使用しています。

Sahoo (GlassFish 開発者) によると、Java EE 仕様では、単一の耳のモジュール間でクラスの読み込みを分離することは義務付けられていないため、アプリケーション サーバーごとに動作が異なる可能性があります。Sun ONE では、ドキュメンテーションに関する私の理解では、EJB-JAR は分離されています。

2 番目の質問は、アプリケーション サーバーが EJB を分離する場合、アプリケーション サーバーの lib フォルダーを調べる前に、EJB の jar ファイルから依存関係をロードするかどうかです。これもまた真実だろうという印象を受けましたが、そうではないかもしれません...

これは親優先の戦略です (私の知る限り、Sun ONE ではWeb アプリケーションのみの委任モードを変更できます)。

では、EJB-JAR のdep-vA.jarClass-Pathエントリに記載するとどうなるでしょうか。MANIFEST.MF

こちらもご覧ください

于 2010-06-23T00:40:32.190 に答える
0

その特定のサーバーを使用したことはありませんが、WebSphere には PARENT_FIRST または PARENT_LAST クラスローディングを使用するオプションがあることは知っています。サーバーにアクセスする前にクラスが最初に EAR からロードされる PARENT_LAST に相当するものを探すことになります。

アプリケーション固有の jar を常に他のものよりも優先してロードできるようにする必要があるため、このような構成はどのアプリ サーバーでも可能であると想定します。

于 2010-06-22T21:26:12.340 に答える