ページの先頭です。
ここから本文です。

お知らせ

[WebOTX] JSPへのリクエストでClassNotFoundExceptionが発生する問題と対策について


概要

Webアプリケーション(JSPファイル)に対する初回リクエスト受信時に行われるJSPコンパイルと そのクラスをロードする一連の処理でタイムアウトすると、それ以降の当該JSPへのアクセスでは、 JSPコンパイルの結果であるクラスをロードすることができずClassNotFoundExceptionが発生し、 クライアントにHTTP500エラーが返却されます。


影響のある製品

  • WebOTX Application Server Standard V9.2~V9.4
  • WebOTX Application Server Enterprise V9.2~V9.5
  • WebOTX Application Server Standard V10.1


詳細

以下の条件をすべて満たす場合に発生します。

  • Webアプリケーションが動作するプロセスグループのプロセス多重度を2以上に指定
  • Webアプリケーションをプロセスグループに配備する際に次の指定がなく、JSPが事前コンパイルされていない
    [otxadminコマンドを使用の場合] 「--precompilejsp=true」の指定
    [運用管理コンソールを使用の場合] 「JSPコンパイル」にチェック
  • JSPファイルのコンパイル、およびクラスロードの処理においてプロセス間排他のロック解放待ちでタイムアウト(既定値 2秒)が発生

Webアプリケーションをプロセスグループに配備する際にJSPの事前コンパイルを行う設定をしていない場合、JSPへ初回のリクエスト受信時にJSPコンパイルが行われます。

1つのJSPに対して複数クライアントから同時にリクエストを受け付け、それらをプロセスグループ上の別プロセスで処理する場合、複数のプロセス間でJSPコンパイルの処理が衝突しないように排他制御をしています。

後からリクエストを受け付けたプロセスがロック解放待ち時間を超過してタイムアウトすると、 JSPコンパイルが完了したものと誤判断してしまい、その影響でJSPコンパイルの結果であるクラスファイルを 正しく認識できない状態になります。それ以降、そのタイムアウトが発生したプロセスでは、クライアントから 当該JSPにアクセスしてもJSPコンパイルの結果のクラスを見つけられずClassNotFoundExceptionが発生し クライアントにHTTP500エラーが返却されます。


対処方法

本問題を修正したWebOTXのパッチを以下で公開していますので適用してください。

WebOTX Application Server V9.4 パッチモジュール(9.40.00.13)
上記以外の製品に対するパッチの公開時期は現在検討中です。
急ぎでパッチが必要な場合はご連絡ください。

(注意) パッチモジュールは製品保守契約を結んでいただいたお客様に限定して提供させていただいています。
まだ契約がお済みでないお客様は、保守契約締結の後、ダウンロードをお願いいたします。


回避方法

以下のいずれかの方法により、本問題を回避することが可能です。

  • 配備されたWebアプリケーション(全てのJSPファイル)に対して、運用開始前に、競合が発生しないように順番にリクエストします。
    このリクエストの延長でJSPコンパイルが行われます。JSPコンパイルが正常に完了すると、以降、JSPコンパイルもその競合によるロック解放待ちタイムアウトも発生しないため、本問題が回避されます。
  • JSPの事前コンパイルを指定してWebアプリケーション(JSPファイル)を配備します。
  •  [otxadminコマンドを使用する場合]
      コマンドオプションに"--precompilejsp=true"を指定する。
      【コマンド例】
       otxadmin> deploy --precompilejsp=true <warファイル名>

     [運用管理コンソールを使用する場合]
      [アプリケーション]ノード
       > [配備]タブ
        > 詳細項目の表示
         「JSPコンパイル」にチェックを入れる。


更新履歴

2019/05/28 初版

製品名カテゴリ

WebOTX Application Server

  • コンテンツID: 3010102779
  • 公開日: 2019年05月28日
  • 最終更新日:2019年05月28日
ここからページ共通メニューです。 ページ共通メニューを読み飛ばす。