2016-07-13 17 views
0

WebSphereアプリケーションサーバーに複数のWebアプリケーションがデプロイされています。両方のアプリケーションで標準JavaのImageIOが使用されていますが、 /作家。適切なスコープでjavax.imageio.spi.IIORegistryのインスタンスを取得する方法

質問は今、両方のアプリケーションがIIORegistry.getDefaultInstance()を使用してサービスレジストリのインスタンスを取得し、両方のアプリケーションが同じインスタンスを取得するようです。内部的には、これは同じawt AppContextを返すAppContext.getAppContext()に関連しています。同じライブラリを使用している両方のアプリケーションを気にせずに、JavaのImageIOを使用して複数のWebSphereアプリケーションを作成する適切な方法はありますか? WebSphereアプリケーション用のawt AppContextを手動で作成する必要がありますか?

答えて

0

私はアプリのコンテキストの概念(IIORegistryクラスで使用され、Webアプリケーションのコンテキストと混同しないでください)はもともとアプレット(ブラウザ内の単一のJVMで動作する複数のアプレット)を対象としていたと考えています。 Webアプリケーションの場合、これも意味をなさないでしょうが、私はそれがそのように機能するとは思わないのです。また、アプリケーションコンテキストの作成や維持に関連する公開APIクラスやメソッドはありません(すべてがsun.awt.*パッケージにあります)。手動でコンテキストを作成することはお勧めしません。

私はweb context listenerを作成しました。これは、ウェブアプリケーションでImageIOを使用していくつかの問題を解決します。 Webアプリケーションがロード/アンロードされたとき(「古くなった」プラグインの検出と削除の両方を処理するとき)、ウェブアプリケーション「ローカル」プラグインの登録と登録解除を行います。残念ながら、これは他のWebアプリケーションからのWebアプリケーションのプラグインには表示されません(これがあなたの意図である場合)。

WebアプリごとにAppContextを持つと、おそらくよりクリーンなアプローチになりますが、前述のように、公開APIがなく、「標準的な」方法ではないため、このようなソリューションは移植性がなく、望ましくありません。

+0

返信いただきありがとうございます。実際には、あるWebアプリケーションのプラグインを他のWebアプリケーションのプラグインから隠すことになります。望ましくないNoClassDefFoundErrorsは、他の側が適切に動作することを妨げているので、両方のWebアプリケーションが同じライブラリセットを共有する必要があります(実現可能ですが、何らかの形で奇妙なものです)。 –

+0

@ThomasWこれを実現する最も簡単な方法は、Webアプリケーションごとに1つずつ、複数のWebSphereインスタンスを実行することです。 – haraldK

+0

@ThomasWそれを考えると、同じコンテナ内で可能かもしれません。しかし、Webアプリケーションコンテキストごとに 'ThreadGroup'を使うようにWebSphereを設定するには何らかの方法が必要です。それが可能かどうかわからないのですか?いずれにせよ、私は、異なるスレッドグループが実際に文書化されているように異なる 'IIORegistry'インスタンスを取得することを証明するための簡単なPoCを書いています。 – haraldK

関連する問題