WebOTX Web Server(Apache) やIIS(Microsoft Internet Information Services)と連携を行っている場合、1回のリクエストで同一の業務処理が複数回実行される可能性があります。
同一の業務処理が複数回実行された場合、ブラウザに同一の業務処理の結果表示画面が複数表示される等の現象が発生します。
なお、WebOTX V8についてはこちらをご参照ください。
Webサーバプラグインの動的反映機能に問題があり、Webコンテナにリクエストを転送する処理が成功しているにも関わらず失敗したと誤認する場合があり、Webコンテナにリクエストの転送をリトライする場合があります。
本問題が発生した場合、Webコンテナでは同一のリクエストを複数回受け取り、その度にWebアプリケーションを実行します。そのため、DBの更新を多重に実行したり、ブラウザに同じ処理結果を多重に返却してしまい、同一の処理結果画面が多重に表示される等の現象が発生します。
また、Webサーバプラグインのログファイルには次のメッセージが出力されます。
ajp_connection_tcp_get_message::jk_ajp_common.c (xxxx): (ajp13) can't receive the response body message from Web Container (::1:8099) (errno=10038,Socket operation on nonsocket.) |
※Webサーバプラグインのログファイルの場所
${INSTANCE_ROOT}/logs/web/ 配下
-
WebOTX Webサーバ2.2の場合:mod_jk-22.log*
- WebOTX Webサーバ2.4の場合:mod_jk-24.log*
- IISの場合:isapi.log*
ログがローテーションされている場合は"*"部分にローテート情報が付加されます。
本問題の発生条件を以下に記載します。
- WebOTX V9.1x.xx.xx/V9.2x.xx.xx
次のいずれかの条件に合致する場合
- WebOTX のエディションが Express
- WebOTX のエディションが Standard, Enterprise で、Web コンテナの動作モードがスタンダードモードの場合
WebOTX V9.30.xx.xx
次のいずれかの条件に合致する場合
- WebOTX のエディションが Express
- WebOTX のエディションが Standard, Enterprise で、Web コンテナの動作モードがスタンダードモードの場合、もしくは、Web コンテナの動作モードがアドバンスドモードで、WebコンテナとWebサーバの連携モードをAJPプロトコルで利用している場合
全てに共通の条件
- 動的反映機能が有効である場合
- Webサーバプラグインのバージョンが「1.2.37.x または 1.2.40.0」の場合(Webサーバプラグインのバージョン確認方法は後述します)
WebOTXの動作モードの確認方法
ご利用されている WebOTX がスタンダードモードで動作しているかどうかを確認するためには、以下のコマンドを実行してください。
otxadmin> get server.web-container.processMultiplicity
|
コマンドの実行結果が以下のように false が表示された場合はスタンダードモードで動作しています。
server.web-container.processMultiplicity = false
|
WebOTX V9.30.xx.xxの場合にWebコンテナとWebサーバの連携モードがAJPプロトコルで動作しているかどうかを確認するためには、以下のコマンドを実行してください。
otxadmin> get server.web-container.advanced-mode-protocol
|
コマンドの実行結果が以下のように ajp と表示された場合はAJPプロトコルで動作しています。
server.web-container.advanced-mode-protocol = ajp
|
Webサーバプラグインのバージョン確認方法
Webサーバプラグインのバージョンの確認方法は以下のとおりです。
WebOTX Web Server(Apache)をご利用の場合
以下のファイルにバージョン情報が出力されます。
「Webserver_Plugin/1.2.37.x」 または 「1.2.40.0 configured.」と表示された場合は本問題が発生します。
IISをご利用の場合
isapi_redirect.dll をエクスプローラで選択して右クリックメニューでプロパティを開くと「詳細」タブの「ファイルバージョン」にバージョン情報が表示されます。isapi_redirect.dll は以下のフォルダにあります。
- 32bitの場合
${INSTALL_ROOT}\bin\win32\i386
- 64bitの場合
${INSTALL_ROOT}\bin\win64\x64
「1.2.37.x」 または 「1.2.40.0」と表示された場合は本問題が発生します。
問題の原因となる動的反映機能を無効化する事で回避が可能です。
動的反映機能を無効化する方法はWebOTXマニュアルの以下をご参照ください。
リファレンス集 運用管理・設定編
1. コンフィグレーション(設定一覧)
1.4. Webコンテナ
1.4.4. Webサーバプラグイン定義ファイルの設定方法
1.4.4.1. 動的反映しない設定方法
動的反映機能を無効化した場合は、WebサーバプラグインがWebコンテナへ転送するコンテキスト名(ブラウザ等でWebアプリケーションにアクセスする時のWebアプリケーションを識別する名称(URI部分)) をWebサーバプラグイン定義
ファイルに明記する必要があります。
以下の手順で設定を変更します。
※なお、WebOTX のドメイン・ディレクトリを「INSTANCE_ROOT」と表現しています。パスの区切り 文字"/"は、Windows環境では"\" と読み替えてください。
WebOTX Webサーバ(Apache)をご利用の場合
-
${INSTANCE_ROOT}/config/WebServer/httpd.conf を開いてTM_WS_PLUGIN-start ~ TM_WS_PLUGIN-end で囲まれた部分を編集し、".conf-auto" を".conf"に変更します。
変更前:
# TM_WS_PLUGIN-start
include "${INSTANCE_ROOT}/config/WebCont/mod_jk-2(2|4).conf-auto"
# TM_WS_PLUGIN-end
変更後:
# TM_WS_PLUGIN-start
include "${INSTANCE_ROOT}/config/WebCont/mod_jk-2(2|4).conf"
# TM_WS_PLUGIN-end
-
${INSTANCE_ROOT}/config/WebCont/mod_jk-2(2|4).conf-auto を
${INSTANCE_ROOT}/config/WebCont/mod_jk-2(2|4).conf にコピーします。
-
${INSTANCE_ROOT}/config/WebCont/mod_jk-2(2|4).conf を開いてJkMountFile のファイル名拡張子 ".properties-auto"を ".properties"に変更します。
変更前:JkMountFile "${INSTANCE_ROOT}/config/WebCont/uriworkermap.properties-auto"
変更後:JkMountFile "${INSTANCE_ROOT}/config/WebCont/uriworkermap.properties"
IISをご利用の場合
-
${INSTANCE_ROOT}\config\WebCont\isapi_redirect.properties を開いてworker_mount_file のファイル名拡張子 ".properties-auto"を ".properties"に変更します。
変更前:worker_mount_file=${INSTANCE_ROOT}\config\WebCont\uriworkermap.properties-auto
変更後:worker_mount_file=${INSTANCE_ROOT}\config\WebCont\uriworkermap.properties
WebOTX Webサーバ(Apache)/IIS ご利用の場合共通
-
${INSTANCE_ROOT}/config/WebCont/uriworkermap.properties-auto を${INSTANCE_ROOT}/config/WebCont/uriworkermap.properties にコピーします。
-
${INSTANCE_ROOT}/config/WebCont/uriworkermap.properties を開いてWebコンテナに転送を行うコンテキストの定義を必要に合わせて追記します。
/<コンテキスト名>=$(default.worker)
/<コンテキスト名>/*=$(default.worker)
のセットで追記します。
フォーマット
…
/<コンテキスト名1>=$(default.worker)
/<コンテキスト名1>/*=$(default.worker)
/<コンテキスト名2>=$(default.worker)
/<コンテキスト名2>/*=$(default.worker)
|
※新規のアプリケーションを配備した場合は、その都度本作業を実施します。
-
${INSTANCE_ROOT}/config/WebCont/workers.properties を開いてworker.listに"ajp13_original"を追加します。
変更前:worker.list=ajp13
変更後:worker.list=ajp13,ajp13_original
※「変更前」はデフォルトの状態を記載しています。
-
WebOTX Webサーバ(Apache)/IISを再起動します。