1

Webcenterスイート11.1.1.5でADFフレームワークを使用していますが、たまたまApache POIライブラリバージョン3.5がバンドルされていました。ただし、現在のプロジェクトには少なくとも 3.7、またはこのライブラリの最新バージョンが必要です。

私は weblogic サーバーを持っており、webcenter アプリケーションとそれに必要なすべてのライブラリが事前にデプロイされています。

プロジェクト内に Apache POI ライブラリ バージョン 3.8 をバンドルすると、一緒にデプロイされますが、アプリケーションは引き続きバージョン 3.5 を使用します。

Webcenter ライブラリは以前にデプロイされており、この動作を変更できません。私のプロジェクトにApache POIのソースを含める以外に、少なくとも私のアプリケーションのためにそれをオーバーライドする方法はありますか?

ありがとう。

4

3 に答える 3

1

weblogicでどのように動作するかはわかりませんが、クラスローダーの構成を確認することをお勧めします。私が覚えている限り、Webアプリケーションをデプロイするときに、ある種のクラスローダーの注文構成がありました。通常、最初にアプリケーションレベルのクラスパスを使用してから、アプリケーションサーバーライブラリクラスを使用するように依頼する必要があります。weblogic管理コンソールを開き、この構成を見つけてください。

于 2012-09-06T09:27:54.103 に答える
1

weblogic-application.xml ファイル (META-INF に配置) を見てみることができます。このファイルでは、どのクラスを weblogic からではなく、アプリケーションの lib フォルダからロードするかを指定できます。

例:

<wls:prefer-application-packages> <wls:package-name>org.apache.log4j.*</wls:package-name> </wls:prefer-application-packages>

(これは、weblogic log4j ライブラリではなく、アプリケーション ライブラリから log4j をロードします)

于 2012-09-06T14:26:10.343 に答える
0

AlexRは正しい方向を示しており、実際にはこの問題にはいくつかの解決策があります。1.POIライブラリを$DOMAIN_HOME/ lib /にインストールし、サーバーを再起動します。これはシステムクラスパスであり、設定していない場合は他のソースを上書きします。この解決策は簡単ですが、すべての場合に機能するとは限りません。2. 2番目の解決策は、フィルタリングクラスローダー機能を使用することです。これにより、標準のルックアップがシステム->アプリケーション->ウェブからフィルタリング->アプリケーション->ウェブに変更されます。詳細については、https://blogs.oracle.com/jamesbayer/entry/sharing_a_class_with_aをご覧ください。

つまり、adminserver:port:/ wls-cat(クラスローダー分析ツール)を使用して、クラスの競合の可能性を特定し、現在のクラスローダー構成を検査してから、収集した情報を使用してアプリケーションのweblogic-application.xmlに追加し、クラスローダーのフィルタリングを有効にすることができます。特徴。たとえば、「org.apache.poi。*」をフィルターに追加して、クラスローダーが最初にアプリケーションライブラリをチェックするようにすることができます。また、この構成は現在のアプリケーションにのみ影響するため、古いライブラリの古い/異なるバージョンを必要とする可能性のある他のアプリケーションを壊すことはありません。

于 2012-09-06T14:19:55.917 に答える