3

iPlanet の Java アプリケーション サーバーを実行していますcommons-logging-1.0.4.jar

私のアプリケーションの 1 つが、同じく使用AuthSSLProtocolSocketFactoryする別の apache ライブラリである呼び出しを行うまでは問題ありませんcommons-logging

jar を jvm クラスパスに配置すると、次のエラーが発生します。

Invalid class loader hierarchy. You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed. (Caused by org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy....

それcommons-logger自体の 2 つのインスタンスを異なるクラスローダーにロードするのは好きではないようです。アプリケーションサーバーには、最初にそれをロードする独自のクラスローダーがあると想定しています(ただし、それについて言及しているアプリケーションサーバー構成は見つかりません)。そのため、アプリケーションが2回目にロードしようとすると、その例外がスローされます。

Web サーバーを変更することも、Apache ライブラリを変更することもできません。提案?

4

3 に答える 3

3

SLF4Jを見てください。

さらに、http://www.qos.ch/logging/classloader.jspが役立ちます。

于 2009-05-06T14:55:43.147 に答える
0

クラスパスにコモンズロギングを明示的に入れていますか? あなたはjvmクラスパスと言ったので、iPlanetを起動するときにコマンドラインで指定していると思います。これは、J2EE アプリで jar をロードするための推奨される方法ではありません。

最も簡単な方法は、Apache ライブラリに iPlanet に付属の commons logging jar を使用させることです。commons-logging.jar を WEB-INF/lib ディレクトリやクラスパス設定に置かないでください。iPlanet の設定が自動的に選択されます。

于 2009-06-26T14:01:37.610 に答える
0

iplanet には詳しくありませんが、WebSphere では、アプリケーションのクラスロード ポリシーを PARENT_LAST に設定できます。これにより、親を見る前に、アプリケーションのクラスローダーにすべてが読み込まれます。同様の設定があると仮定すると、これはこの種の問題を解決するはずです。

これは、独自のアプリケーションですべての依存関係を提供する必要があることを意味します (とにかく、これがベスト プラクティスです)。

于 2009-05-06T17:09:01.720 に答える