IBM WebSphere Application ServerでJClass ServerChartを動作させるとイメージが正常に生成されません。("EncoderException: JPEG encoding error: Image is NULL."というメッセージが出力されます)
対象製品
詳細
WebSphereのエディションによっては、JClass ServerChartを動作させた場合に問題が発生する可能性があります。
この現象が発生しているかどうかは、以下の点で判断できます。
- グラフ画像が生成されない
- WebSphereのSystemErr.logファイルに、以下のメッセージが出力される。
com.klg.jclass.util.swing.encode.EncoderException: JPEG encoding error: Image is NULL.
この現象は、JClass ServerChart に含まれるクラスと同名のクラスが、WebSphere Application Server(以後 WAS)のライブラリにも含まれているために発生します。
WASに含まれるライブラリとして、通常以下のディレクトリに"chart.jar"というファイルがインストールされています。
(WebSphereルートディレクトリ)/AppServer/lib
こちらのファイルには、JClass ServerChart の旧バージョンのクラスの一部が含まれており、それがJClass ServerChart のモジュールより優先して参照されるため、バージョンの違いによる不整合が発生し現象が発生します。
この現象の回避のために、以下の2つの方法が考えられます。
方法1:クラスローダーモードの変更
クラスローダーのクラス検索順序を変更することにより、"chart.jar"より先に、JClass ServerChartのライブラリである、"jcschart.jar"ファイルが先に参照されるようになり、現象を回避します。
- WASのサーバーを起動し、管理コンソールにログインする。
- 左側ツリーより、[アプリケーション]→[エンタープライズアプリケーション]→(作成したアプリケーション名)を選択してください。
- 表示された項目中、画面下部の[関連項目]の[Webモジュール]を選択してください。
- お客さまがご作成中のWebモジュール名(warファイル)を選択し、表示された個別のWebモジュールに対する設定画面で、 [クラス・ローダー・モード]:"親が最後" に設定してください。
- 以下の手順で変更した内容を反映してください。
[適用]→[保管]→[ログオフ]→[サーバー停止]→[サーバー起動]
この設定は特定のWebモジュールに対して行うもので、サーバー全体のクラスローダーを変更するものではないため、大きな問題が起こる可能性が低くなります。ただし、対象となるWebモジュールに何らかの問題が発生する可能性があり、最悪アプリケーションサーバーが正常に起動しなくなる可能性があります。
もし、問題が発生した場合、以下の方法2をお試しください。
方法2:"chart.jar"の退避
上記の通り、この現象はWASの"chart.jar"に含まれるクラスとの競合により発生します。そのため、"chart.jar"をクラスパス外に退避した状態でWASを動作させることで現象が回避されます。しかし、"chart.jar"ファイルも、WAS側で使用するファイルであるため、単純に移動することはできません。
弊社にてWAS起動時にロードされるクラスを確認した限りでは、WAS本体のアプリケーションサーバーとしての動作では、"chart.jar"は参照されていない模様でした。パフォーマンス監視ツールである、"Tivoli Performance Viewer"を起動した際に、"chart.jar"を使用しているようです。もし、WASが"Tivoli Performance Viewer"のみで、"chart.jar"を使用しているのであれば、"Tivoli Performance Viewer"をご使用いただけない状態となりますが、"chart.jar"の退避によってこの現象が回避可能となります。
ご使用になる環境を含めてご検討いただき、いずれかの方法で回避を行うことをご検討ください。
この文書は、以前は次のFAQ IDで公開されていました : 4848