レベル: 中級 Vivek Grover, Software Engineer, IBM Richard Lustig, Senior Product Manager, Phase Forward
2009年 3月 05日 この記事では、WebSphere® Business Events V6.1 でよくある問題を診断し、解決するためのトラブルシューティング手法、そして利用できるロギング・メカニズムについて学びます。
はじめに
WebSphere Business Events V6.1 (以降、Business Events とします) での問題を解決するには、多数のログやその他の情報源を利用することができます。この記事では、発生する可能性のある問題をわかりやすく説明する一般的なシナリオを取り上げ、その問題を解決するための手段を説明します。これらのシナリオから、Business Events で問題が発生した場合、トラブルシューティングをどこから開始したらよいのか、そして各種のログに記録されたエラーおよび警告メッセージの情報を問題解決にどのように役立てられるのかがわかるようになります。
この記事では読者の皆さんが Business Events V6.1 の主要なコンポーネントと構成を十分理解していることを前提とします。Business Events の詳細については、「参考文献」を参照してください。
トラブルシューティング・プロセスを開始する前に、発生した問題に明らかな原因があるかどうかを診断するための確認項目があります。最初にこれらの点を調べて単純なエラーを明らかしたり、あるいは考えられる原因の範囲を絞り込んだりすることで、必要な作業を大幅に削減することができます。以下に予備診断のための、いくつかの確認項目を記載します。このリストをひと通り読みながら、自分が抱えている特定の問題に関与するかもしれないと思うことをメモしてください。
- これまでまだ一度も Business Events が正常に動作していない場合は、以下の点を確認してください。
それでも問題を解決できない場合は、製品をアンインストールしてから再インストールします。
- これまで正常に動作していた WebSphere Business Events が現在問題をレポートしている場合は、以下の措置を検討してください。
- 問題が最初に発生する前に行った変更を調べ、その変更を元に戻します。例えば、マシンまたは製品、あるいはその依存関係に対して行ったサービス・パックの変更、フィックス・パックの変更、構成の変更などです。
- 更新をインストールした場合は、どのサービス更新がシステムまたはアプリケーションに適用されているかを確認します。APAR または PTF を Business Events、WebSphere Application Server (以降、Application Server とします)、あるいはデータベースに適用した場合は、その際にエラー・メッセージが生成されていないことを確認します。更新のインストールが正常に完了している場合には、IBM サポート・センターにサービス更新に既知のエラーがないかどうかを問い合わせてください。
- システムに影響するサービス更新を適用した際に、規定の手順に従っていたことを確認します。例えば、リソースを再定義する必要があったり、コンポーネントを停止してから再起動しなければならなかったりする場合があります。
- WebSphere Business Events のシステム要件を調べて、Websphere Business Events インストールが、記載されている仕様に従って行われたことを確認します。お使いの環境がインストール要件を満たしていないと、他にも予期せぬ問題が発生する可能性があることに注意してください。
- APAR PK66053 が含まれている Websphere Application Server V6.1 Fix Pack 19 以降をインストールしましたか?
- 以下の環境変数が、該当する Business Events ユーザー ID のプロファイルに記述されているとおりに構成されていることを確認します。環境変数を確認するには、Windows では
set コマンドを、Linux/AIX では env コマンドを実行します。
-
WBE_WAS_HOME は WebSphere Application Server インストール・ディレクトリーを指していなければなりません。例えば、Windows の場合は C:\Program Files\IBM\WebSphere\AppServer、Linux/AIX の場合は /opt/IBM/WebSphere/AppServer となります。
-
APTSOFT_HOME は Business Events インストール・ディレクトリーを指していなければなりません。例えば、Windows の場合は C:\Program Files\IBM\WBE、Linux/AIX の場合は /opt/IBM/wbe となります。
- Business Events が既存の Application Server システムにインストールされている場合は、<WBE のインストール・ディレクトリー>\config\was から以下のスクリプトを実行済みであることを確認します。
-
setenv.bat
-
update_wbeprops.bat
詳細については、Business Events 「Installation and Operations Guide」の「Installing on an existing WebSphere Application Server instance」セクションを参照してください。
- Business Events データベースでは、以下のことを確認します。
- データベースのログを調べて、データベースが起動されていることを確認します。
- サポートされているデータベースがインストールされていることを確認します。
- データベースのログで、データベースに関するエラーがレポートされているかどうかを調べます。
- Business Events のデータベース設定を調べて、プロパティーが「Installation and Operations Guide」の「Configuring the environment」セクションにある「Configuring the Repository Database」での説明に従って正しく構成されていることを確認します。
- Application Server または WebSphere MQ (MQ) (JMS プロバイダーとして使用されているほう) に問題があるかどうかを確認します。
Application Server を使用している場合:
- <WAS のインストール・ディレクトリー>/profiles/<プロファイル名>/logs/server_name/systemout.log を調べて、Application Server が実行中であることを確認します。
- Application Server の SystemOut.log を調べて、WBERuntimeEAR アプリケーションが実行中であることを確認します。
- Application Server の SystemOut.log ファイルと SystemErr.log ファイルで、Application Server または SI Bus のエラーがレポートされていないかどうかを調べます。
MQ を使用している場合:
- <WebSphere MQ インストール・ディレクトリー>/qmgrs/<qmgr 名>/errors/AMQERR0x.log を調べて、MQ キュー・マネージャーが実行中であることを確認します。
- AMQERR0x.log を調べて、MQ ブローカーが起動されていることを確認します。必要な場合は、
strmqbrk コマンドを実行して MQ ブローカーを起動します。
- AMQERR0x.log と全ての FDC/FFST ファイルで、MQ エラーがレポートされていないかどうかを調べます。
- 最近、ユーザー ID またはパスワードを変更しましたか? Business Events、Business Events リポジトリー・データベース、または Application Server に使用するユーザー ID のパスワードをオペレーティング・システム・レベルで変更すると、アクセスに関する問題が発生することがあります。その場合には、以下のステップを実行します。
- 関連するコンポーネントのプロパティーがパスワードの変更を反映するように更新します。
- パスワードに、予約されているキーワードが含まれていないことを確認します (例えば、
IBM は DB2® では予約されているキーワードです)。
- お使いのマシンで実行している WebSphere Business Events のバージョンは何ですか?
Windows では、以下のステップに従ってバージョンおよびフィックス・パックのレベルを調べます。
- コマンド・プロンプトから、
regedit と入力して Windows レジストリーを開きます。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IBM\WebSphere Business Events V6.1 のような情報が表示されます。
- コマンド・プロンプトから C:\Program Files\Zero G Registry\.com.zerog.registry.xml に移動し、
component ref_id の xml タグを調べます。
UNIX では、以下のステップに従ってバージョンおよびフィックス・パックのレベルを調べます。
- Application Server の SystemOut.log を調べます。Application Server は起動するたびに、 Business Events のバージョンとビルド番号のエントリーをログに記録します。
- var/.com.zerog.registry.xml に移動して、
component ref_id の xml タグを調べます。
エラー・メッセージおよび過去にレポートされた問題は、WebSphere Business Events Support ページで検索することができます。

 |
インストールおよびアンインストールの問題
このセクションでは、Business Events のインストールまたはアンインストール時に発生する可能性のある問題について説明します。このような問題を診断するには、Business Events のインストール時に生成されるログを利用することができます。
インストールの問題については、以下のログを利用することができます。
- Business Events インストール・ログ (1 次): <WBE のインストール・ディレクトリー>/IBM_WebSphere_Business_Events_V6.1_InstallLog.log
例: C:\Program Files\IBM\WBE\IBM_WebSphere_Business_Events_V6.1_InstallLog.log
- Business Events インストール・ログ (2 次): <システムの一時ディレクトリー>/wbe_outputdebug.txt
例: C:\Documents and Settings\vgrover\Local Settings\Temp\wbe_outputdebug.txt
- WebSphere Application Server インストール・ログ: <WAS のインストール・ディレクトリー>/logs/install/Log.txt
例: C:\Program Files\IBM\WBE\WAS\logs\install\Log.txt
アンインストールの問題については、以下のログを利用することができます。
インストールの問題が発生すると、大抵はポップアップ・ウィンドウにエラー・メッセージが表示されます。Unix システムでコンソール出力をファイルに取り込むには、ルート・プロファイルにある環境変数 LAX_DEBUG=true をエクスポートしてから UNIX プロンプトでインストールまたはアンインストールを実行します。インストーラー/アンインストーラーを呼び出すときに実行するコマンドは以下のとおりです。
<UNIX installer/uninstaller> > /tmp/debug_file.log 2>&1
これにより、出力は /tmp/debug_file.log ファイルに記録されます。
インストールの問題の例: Application Server をインストールできない
問題:
コンソール・モードで Windows に Business Events をインストールしようとすると、インストール・プロセスの終わり近くで「The application server installation failed (アプリケーション・サーバーをインストールできませんでした)」というエラーが発生します (図 1 を参照)。
図 1. Application Server インストール失敗メッセージ
問題の判別:
- <WBE のインストール・ディレクトリー>/IBM_WebSphere_Business_Events_V6.1_InstallLog.log を開きます。このファイルには、以下のメッセージが記録されています。
The Web Application Server failed to install
Status: ERROR
Additional Notes: ERROR - The Web Application Server install failed.
Please see the WAS install log (C:\Program Files\
IBM\WBE\WAS\logs\install\log.txt) for further details.
|
- メッセージの推奨案に従って、WAS のインストール・ディレクトリー配下にある WebSphere Application Server のインストール・ログを確認します。このログには、以下のエラー・メッセージが記録されています。
Process, com.ibm.ws.install.ni.ismp.actions.WasSilentInstallInputValidationAction,
err, Directory C:\Program Files\IBM\WBE\WAS could not be validated as a non-existing
or an empty directory.
Process,
com.ibm.ws.install.ni.ismp.actions.WasSilentInstallInputValidationAction, err,
com.ibm.ws.install.was.validators.WASInstallInvalidInputException:
Directory C:\Program Files\IBM\WBE\WAS could not be validated as a non-existing
or an empty directory.
|
このメッセージは、インストール時に C:\Program Files\IBM\WBE\WAS が空でなかったことを示しています。つまり、Business Events をインストールしようとしたマシンで、以前にインストールを試行した Business Events がまだ正しくアンインストールされていないか、あるいはアンインストール中に発生した問題が Business Events をインストールする障害となっているということです。
解決策:
-
C:\Program Files\IBM\WBE\uninstall にある
uninstaller.exe を実行します。この実行可能ファイルが存在しない場合には、次のステップに進んでください。
- 「スタート」=>「コントロール パネル」=>「プログラムの追加と削除」の順に選択して、Business Events をアンインストールします。
プログラム一覧に Business Events が見つからない場合は、次のステップに進んでください。
- 以下のステップに従って、以前にインストールしたときの残骸を手動で削除します。
- %windir%\.nifregistry (C:\WINNT\.nifregistry など) に移動します。
- <WBE のインストール・ディレクトリー>/WAS (C:/Program%20Files/IBM/WBE/WAS など) を参照しているエントリーを削除します。これ以外に WebSphere Application Server システムの参照がマシン上にある場合には、それらのエントリーを削除しないように注意してください。
- %windir%\vpd.properties (C:\WINNT\vpd.properties など) に移動します。
- 同じく、<WBE のインストール・ディレクトリー>/WAS と関連するエントリー (C:\Program Files\IBM\WBE\WAS など) を削除します。
- com.zerog.registry.xml (C:\Program Files\Zero G Registry\com.zerog.registry.xml など) を削除します。
- Business Events インストール・ディレクトリー (C:\Program Files\IBM\WBE など) を削除します。
- 上記のステップが完了したら、Business Events を再インストールします。今度は正常にマシンにインストールできるはずです。
インストールの問題の例: データベース検証エラーが発生する
問題:
DB2 を Business Events データベースとして使用して、GUI インストール・モードで Windows マシンに Business Events をインストールしようとすると、データベース検証エラーが発生するという問題です。インストーラーの GUI (図 2 を参照) にデータベース接続情報を指定すると、データベース検証エラーがポップアップ・メッセージとして表示されます。
図 2. データベース・パラメーターを入力する GUI インストール画面
Connection Information ダイアログの Next をクリックすると、以下のエラーが表示されます。
図 3. データベース検証エラー・メッセージ
問題の判別:
エラー・メッセージに示されているとおり、Connection Information ダイアログで指定したユーザー ID とパスワードの組み合わせには、Business Events データベースに接続するための適切な権限がありません。
解決策:
- DB2 Control Center を選択し、Database を右クリックして Authorities を選択します。
- Connection Information ダイアログに指定した userID に、同じく Connection Information ダイアログに指定したデータベースでの権限を付与します。
- Database Validation エラー・メッセージ・ウィンドウで OK をクリックします。
- Connection Information ダイアログに戻ったら、正しいパスワードであることを確認してから Next をクリックします。
- インストール前の要約情報が表示されて、インストール・プロセスを続行できるようになります。
これは DB2 データベースに特有のシナリオであることに注意してください。Oracle や Derby、または SQL Serverなどの他のサポートされているデータベースを使用している場合には、それぞれのデータベースに応じたステップに従って問題を解決してください。
構成の問題
このセクションでは、Business Events の構成が適切でない場合に生じる一般的な問題について説明します。以下のコンポーネントが誤って構成されたことが原因で発生する問題、そしてその問題によって生成されるメッセージが含まれるログを表 1 に記載します。
表 1. Business Events コンポーネントとそれぞれに関連するログ
|
コンポーネント
|
確認対象のログ
| | データベース | Application Server SystemOut.log,
Application Server SystemErr.log, WBERuntime.system.log | | セキュリティー | Application Server SystemOut.log,
Application Server SystemErr.log, WBERuntime.system.log,
connectors.log | | ダッシュボード | Application Server SystemOut.log,
WBERuntime.event.log, WBERuntime.system.log, Application Server
SystemErr.log, connectors.log | | ランタイム | WBERuntime.system.log, Application
Server SystemOut.log, WBERuntime.event.log, Application Server
SystemErr.log, connectors.log | | コネクター | connectors.log, WBERuntime.system.log,
Application Server SystemOut.log, WBERuntime.event.log,
Application Server SystemErr.log | | JMS | Application Server の SystemOut.log、Application Server の SystemErr.log、AMQErr0x.log (WebSphere MQ が SIBus ではなく JMS 用に構成されている場合) | | ロギング | WBERuntime.event.log,
WBERuntime.system.log |
Business Events V6.1 には、ログおよびセキュリティーを構成するためのプロパティー・インターフェースが用意されています。
Business Events の Properties
上記に記載したコンポーネントの構成設定は、Business Events の Properties 機能を使用して指定します。これらの設定についての説明は、Business Events 「Installation and Operations Guide」に記載されています。
- Business Events の Properties を使用して定義したプロパティーは、以下のファイルに保管されます。
- <WBE のインストール・ディレクトリー>\director\cfg\aptsoft_properties.xml。値が設定されていないプロパティーが含まれる暗号化されていないファイルです。
<WBE のインストール・ディレクトリー>\director\cfg\aptsoft.enc.properties。プロパティーと実際の値が含まれる暗号化されたファイルです。
Business Events の Properties を変更するたびに、上記のファイルのバックアップ xml と新規 xml ファイルが <WBE のインストール・ディレクトリー>\director\cfg (例えば、C:\Program Files\IBM\WBE\director\cfg) に作成されます。
Properties を開く際に問題がある場合は、以下のようにしてバックアップ・ファイルに戻すことができます。
- aptsoft_properties.xml と aptsoft.enc.properties のファイル名を変更します。
- aptsoft_properties.xml.<Date>-<Time> は、aptsoft_properties.xml に名前を変更します。
例えば、aptsoft_properties.xml.2008-10-07-17-10-19 は、aptsoft_properties.xml という名前に変更します。
- aptsoft.enc.properties.<Date>-<Time> は、aptsoft.enc.properties に名前を変更します。
例えば、aptsoft.enc.properties.2008-10-07-16-03-30 は、aptsoft.enc.properties という名前に変更します。
- Business Events の Properties を開きます。すると、古い日付と時刻の設定で開くことになります。
Business Events のロギング
Business Events は Log4j を使用してログをレポートします。設計およびランタイムの問題が発生すると、Business Events は以下のログを生成します。
- WBERuntime.system.log。ランタイム・サーバー自体に関する情報が含まれます。
- WBERuntime.event.log。ランタイム・サーバーが受信したイベント、これらのイベントの評価結果、関連するイベントが true と評価されたために作成されたアクション、およびアクションの実行後にコネクターが返した結果についての情報が含まれます。
- connectors.log。テクノロジー・コネクターが処理したイベントおよびアクションに関する情報が含まれます。
Business Events での問題のトラブルシューティングを行う際には、上記のログのロギング・パラメーター (ロギング・レベル、ロギング間隔、ログのロケーションなど) を構成しておくと役に立ちます。これらのパラメーターを設定する方法は以下のとおりです。
- Business Events で、Properties => Full Configurator => Logging の順に選択します。すると、Properties Configurator ダイアログが表示されます (図 4 を参照)。
図 4. Business Events の Properties Configurator
- as.director.server.log.path を使用してログ・ファイルの場所を指定します。図 4 に示されているように、
logs の値はデフォルト・パスの C:\Program Files\IBM\WBE\director にマッピングされます。デフォルト・パスを変更する場合には、完全なパス (c:\logfiles など) を指定してください。
- as.director.server.log.system.interval には、新しいシステム・ログ・ファイルの使用を開始してから (そのログ・ファイルの使用を終了して) 次のシステム・ログ・ファイルの使用を開始するまでの間隔を定義します。選択ボックスをクリックして、オプションから間隔 (HOUR (1 時間)、WEEK (1 週間)、MONTH (1 ヶ月) など) を選択します。
- as.director.server.log.event.interval には、新しいイベント・ログ・ファイルの使用を開始してから (そのログ・ファイルの使用を終了して) 次のイベント・ログ・ファイルの使用を開始するまでの間隔を定義します。
- LOG4J settings の下にある log4j.logger.com で、システム・ログの詳細レベルの設定を
info, C, JMS1 から debug, C, JMS1 に変更し、重大度によらず全てのメッセージを WBERuntime.system.log に書き込むようにします。
- LOG4J settings の下にある log4j.logger.event で、イベント・ログの詳細レベルの設定を
info, JMS2 から debug, JMS2 に変更し、重大度によらず全てのメッセージを WBERuntime.event.log に書き込むようにします。
上記のステップで定義したロギング・レベルを変更して、上記とは異なる重大度のメッセージをログに書き込むようにする方法については、「Installation and Operations Guide」を参照してください。
ロギング・レベルが上がるにつれ、パフォーマンスへの影響が大きくなることに注意してください。一般に、本番環境ではロギング・レベルを ERROR 以下に設定し、問題を診断するのに詳細な情報が必要になった場合にだけレベルを上げてください。Business Events の Properties でロギング設定を変更した場合、変更を適用するには WBERuntimeEAR アプリケーションを再起動する必要があります。
WBERuntime.event.log および WBERuntime.system.log を Web ブラウザーから確認するには、Business Events の管理コンソールを使用します。以下のようにすると、ログ・ファイルが読みやすくなります。
- ログ・ファイルをテキスト・エディターで開き、ファイルの一番先頭に独特のタグを追加し、それに対応する終了タグをファイルの終わりに追加します。以下はその一例です。
- ファイル形式として .xml を指定してファイルを保存します。
- 保存したファイルを Web ブラウザーで開きます。
これらのログを詳細に分析して、効果的なトラブルシューティングを行う方法について詳しくは、「ランタイムの問題」を参照してください。
connectors.log を構成するには、以下のステップに従います。
- Business Events の Properties を開き、Full Configurator、そして Connectors の順に選択します。
- 組み込みコネクターのロギング情報は、<WBE のインストール・ディレクトリー>/director/logs/connectors.log ファイルに提供されます。
- このファイル名を変更するには、Minor section: Logging の下にある as.director.connectors.log4j.appender.File.file プロパティーを更新します (図 5 を参照)。
図 5. Connectors.log の構成
Business Events のセキュリティー
セキュリティーが有効に設定されている場合、ユーザーは LDAP、Active Directory、または Database で以下のいずれかのセキュリティー・グループのメンバーになっていなければなりません。
- AptsoftAdmins
- AptsoftUsers
上記以外のグループを使用する場合は、該当するグループを指すカスタム・プロパティー as.director.common.authentication.adminGroup をプロパティーに追加する必要があります。セキュリティーおよびグループの詳細については、「Installation and Operations Guide」を参照してください。
構成の問題の例: Business Events リポジトリーに成果物を追加できない
問題:
Business Events リポジトリーのデータベース・ポートがデフォルト以外の値、例えば 50001 になっている場合 (DB2 のデフォルトは 50000)、この設定で Design ツールまたは Design Data ツールを使用して Business Events リポジトリーに成果物を追加しようとしても何も起こりません。ログを調べると、以下のエラーが記録されています。
WBERuntime.system.log に記録されているエラー:
[CDATA[Caught SQL Exception while attempting to connect to db
URL: jdbc:db2://localhost:50000/WBEDB]]></message>
org.apache.commons.dbcp.SQLNestedException: Cannot create
PoolableConnectionFactory ([jcc][t4][2057][11264][3.50.152] The
application server rejected establishment of the connection.
An attempt was made to access a database, WBEDB, which was either
not found or does not support transactions. ERRORCODE=-4499,
SQLSTATE=08004)
Application Server の SystemOut.log に記録されているエラー:
[8/25/08 11:16:41:328 EDT] 0000001c SystemOut 2008-08-25 11:16:41,328
ERROR Caught SQL Exception while attempting to connect to db
URL: jdbc:db2://localhost:50000/WBEDB
org.apache.commons.dbcp.SQLNestedException: Cannot create
PoolableConnectionFactory ([jcc][t4][2057][11264][3.50.152] The
application server rejected establishment of the connection.
An attempt was made to access a database, WBEDB, which was either not
found or does not support transactions. ERRORCODE=-4499,
SQLSTATE=08004)
また、Business Events 管理コンソールにログインしようとすると、以下の認証エラーが発生します。
図 5. 認証エラー
問題の判別:
上記のログに記録されたエラー・メッセージには、使用されているポート番号が 50000 であると示されています。しかしデータベースがリッスンしているのは、それとは異なるポートです (この例では 50001)。Properties => Full Configurator => Common の順に選択して as.director.common.db.default.port プロパティーを調べると、図 6 に示すように、このプロパティーが空であることがわかります (この場合、プロパティーはデフォルト値の 50000 にマッピングされます)。
図 6. 空のポート・プロパティー
解決策:
- as.director.common.db.default.port をデータベースがリッスンしているポート (この例ではポート
50001) に変更します (図 7 を参照)。
図 7. ポートの値の変更
- WBERuntimeEAR を再起動し、Add in を選択してプロジェクトの成果物をもう一度追加します。これで問題は解決されているはずです。
設計の問題
一部の問題は、不完全な設計や誤ったコーディングが原因で発生します。通常、設計の問題はイベントの処理中に発覚します。問題が発生したときに詳細なログを参照できるように、「Business Events のロギング」の説明に従って、デバッグ・ログの LOG4J settings を有効にしてください。
設計の問題については、以下のログを調べます。
- <WAS のインストール・ディレクトリー>/profiles/<Profile 名>/logs/server_name/WAS systemout.log
例: C:\Program Files\IBM\WBE\WAS\profiles\<Profile name>\logs\server1\WAS systemout.log
- <WAS のインストール・ディレクトリー>/profiles/<Profile 名>/logs/server_name/WAS systemerr.log
例: C:\Program Files\IBM\WBE\WAS\profiles\<Profile 名>\logs\server1\WAS systemerr.log
- <WBE のインストール・ディレクトリー>/director/logs/WBERuntime.event.log
例: C:\Program Files\IBM\WBE\director\logs\WBERuntime.event.log
- <WBE のインストール・ディレクトリー>/director/logs/WBERuntime.system.log
>例: C:\Program Files\IBM\WBE\director\logs\WBERuntime.system.log
- <WBE のインストール・ディレクトリー>/director/logs/connectors.log
例: C:\Program Files\IBM\WBE\director\logs\connectors.log
設計の問題の例: アクションの出力でフィールドが欠落している
問題:
Retrieve Customer Data 対話セットで評価した Outgoing アクションの出力のなかに、欠落したフィールドがあります。この例で、Retrieve Customer Data で評価しているのは Incoming イベントです (図 8 を参照)。フィルターはないため、このイベントを受信すると常に対応する Outgoing アクションが実行されます。
図 8. Retrieve Customer Data
Outgoingアクションに含まれる Discount フィールドは、これに対応する Intermediate object フィールドからマッピングされています。このフィールドはその値を、データのフェッチによって取得される CUST_LIFETIME_VALUE フィールドの値を基に計算します (図 9 を参照)。
このアクションは File System Connector を使用します。記事に付属の BrokenExample_Design_scenario.xml を Design Data ツールにインポートすると、詳細を確認することができます。
図 9. Design Data ツールに表示された CUST_LIFETIME_VALUE フィールド
Discount は、中間オブジェクト・フィールド CUST_LIFETIME_VALUE を使用した JavaScript 式を基に計算されます (図 10 を参照)。
図 10. Discount 中間オブジェクト・フィールド
実行時にイベントがサブミットされると、Retrieve Customer Data インタラクション・セット (図 8 を参照) が評価され、アクションに関連付けられたファイルが、コネクターの構成によって指定されたディレクトリーに現れます。ところが、アクションの出力に対して作成された全てのフィールドが示される connectors.log (以下にスナップショットを記載) を見てみると、Discount フィールドが見当たりません。
<connectors>
<connector name="WBE" version="2.2">
<connector-bundle id="32ACAC46F450F45011DD9258A675D35C"
name="Outgoing" type="Action" workflow="FACE">
<connector-object name="Outgoing">
<field name="CUST_ID" type="Integer">74824</field>
<field name="CUST_FIRST_NAME" type="String">Montgomery</field>
<field name="CUST_LIFETIME_VALUE" type="Real">100000000</field>
<field name="CUST_LAST_NAME" type="String">Burns</field>
</connector-object>
</connector-bundle>
<system>rlustig</system>
<timestamp>2008-08-22T16:19:54.234-0400</timestamp>
<loginfo>Generated from IBM WebSphere Business Events</loginfo>
</connector>
</connectors>
|
問題の判別:
- 最初に調べる場所は、WBERuntime.event.log です。このログには、以下の例外が記録されているはずです。
<message><throwable><![CDATA[
org.mozilla.javascript.EvaluatorException:
syntax error (sourceName#1) at
.
.
.
]]></throwable></message>
</exceptionitem>
<item time='2008-08-22T16:19:54.140-0400' level='INFO' thread='RulesEngineThread-0'>
<source>event.com.aptsoft.maestro.server.action.
JmsAction</source>
<event id='32ACAC46F450F45011DD9258A675D35C'
name='Incoming'></event>
<message><![CDATA[Unable to get a value for action
field [Discount] from Intermediate Object
[Outgoing](may be a NULL field or may be a
Parameter).]]></message>
|
このメッセージは、JavaScript の構文エラーが発生したことを示しています。具体的には、インスタンス化された Outgoing 中間オブジェクトに Discount フィールドの値がなかったために、Data Resolver が Discount アクション・オブジェクト・フィールドの値を作成することができなかったという内容です。Business Events の Runtime コンポーネントである Data Resolver の役割は、フィルターが参照する全ての中間オブジェクト・フィールドに値が確実に設定されるようにすると同時に、イベントが true と評価された結果として実行されたアクションの中で、全てのアクション・オブジェクト・フィールドに値が確実に設定されるようにすることです。
注: このメッセージがあるからといって、必ずしも問題があることを示しているとは限りません。中間オブジェクト・フィールドが NULL 値となる正当な理由がある場合もあるからです。例えばイベントの発生時に、そのイベントに対応するイベント・オブジェクト・フィールドがない場合、そのフィールドはアプリケーションにとって重要ではありません。
- プロジェクトを開いて、CUSTOMER 中間オブジェクトの Discount フィールドを調べます (図 13 を参照)。
図 11. Discount 中間オブジェクト・フィールドの定義
- JavaScript に精通している読者なら、構文エラーをすぐに見つけられると思いますが、組み込み JavaScript Tester ツール (図 12 を参照) を使用してエラーを見つけることもできます。このツールは、Business Events がインストールされているマシンの http://hostname:port/wbe/tools/test_javascript.html にあります (例えば、http://localhost:9080/wbe/tools/test_javascript.html)。
- JavaScript Tester ツールを開いて、JavaScript 式を入力し (図 12 を参照)、Evaluate をクリックします。すると結果が評価されて画面の下部に表示されます。
図 12. エラーを表示する JavaScript Tester ツール
プロジェクトで変更を行う前に、このツールを使用して正しく機能する構文になるように修正します (この例では、余分な括弧を削除。図 13 を参照)。
正しい構文が使用されていれば、結果が評価されて JavaScript ツールの下部に表示されるので、それによってこの JavaScript 式の構文が正しいことが検証されます。
図 13. 正しい値を表示する JavaScript Tester ツール
解決策:
- Design Data ツールを開き、CUSTOMER 中間オブジェクトに対して Check out を選択します。
- JavaScript Tester ツールで修正した正しい式を使用して、JavaScript コードを修正します。
- Add in を選択してアセットをリポジトリーに戻します。
- WBERuntimeEAR を再起動した後、テストをもう一度実行します。今回は、アクション・ファイルにDiscount フィールドが含まれていることが示されるはずです。
以下は、出力に対して作成された全てのフィールドを示す connectors.log のスナップショットです。
<connector name="WBE" version="2.2">
<connector-bundle id="7BAF3462FB10FB1011DD9258A675D35C"
name="Outgoing" type="Action" workflow="FACE">
<connector-object name="Outgoing">
<field name="Discount" type="Integer">20</field>
<field name="CUST_ID" type="Integer">74824</field>
<field name="CUST_FIRST_NAME" type="String">Montgomery</field>
<field name="CUST_LIFETIME_VALUE" type="Real">100000000</field>
<field name="CUST_LAST_NAME" type="String">Burns</field>
</connector-object>
</connector-bundle>
<system>rlustig</system>
<timestamp>2008-08-22T16:45:07.515-0400</timestamp>
<loginfo>Generated from IBM WebSphere Business Events</loginfo>
</connector>
|
一般的な経験則として、JavaScript を Business Events プロジェクトに組み込む前には、組み込み JavaScript Tester やその他のユーティリティーを使用して JavaScript をテストしてください。
ランタイムの問題
イベント処理の際に起きるランタイムの問題は、一般に以下の 2 つのカテゴリーに分類されます。
- イベントがまったく処理されない (Business Events ランタイム・サーバーがイベントを受信することがない)。
- イベントは処理されるが、結果が正しくない。例えば、予期しないフィルタリング結果になる、関連するアクションが作成されないなど)。
Business Events ランタイムが生成するログ・ファイルは以下の 3 つです。
- <WBE のインストール・ディレクトリー>/director/logs/WBERuntime.event.log
例: C:\Program Files\IBM\WBE\director\logs\WBERuntime.event.log
- <WBE のインストール・ディレクトリー>/director/logs/WBERuntime.system.log
例: C:\Program Files\IBM\WBE\director\logs\WBERuntime.system.log
- <WBE のインストール・ディレクトリー>/director/logs/connectors.log
例: C:\Program Files\IBM\WBE\director\logs\connectors.log
ランタイムのトラブルシューティングを行う際には、通常、WBERuntime.event.log を最初に調べます。event name を検索することも、type= "event" を検索することもできます。このイベント・ログには、実行された SQL、または評価された JavaScript も記録されます。
WBERuntime.event.log では以下の処理を行います。
type= "event" を検索して、対象のイベントを見つけます。
- イベントの内容を調べ、イベントに期待されるイベント・オブジェクトとオブジェクト・フィールドが含まれているかどうか、そしてオブジェクトとフィールドの名前が正しく記述されているかどうかを判断します (Business Events ではストリングの大文字/小文字を区別することに注意してください)。これらの名前は、Design Data ツールで Business Events に定義された対応する定義と完全に一致していなければなりません。
- ログをスクロールダウンして、中間オブジェクトがどのようにインスタンス化されているかを調べます。特に注意する点として、値が入力されるべき中間オブジェクト・フィールドに、値が入力されているかどうかを調べます。フィールドに値が入力されていない場合は、その理由を説明するメッセージが含まれています。中間オブジェクト・フィールドに値が入力されていない場合、そのフィールドに値を入力してはならない正当な理由があるとしても、ユーザーに警告メッセージが提供されます (例えば、値は関連イベント・オブジェクト・フィールドから提供されないとしても、NULL 条件をテストするアプリケーションが値を期待するため)。
- さらにスクロールして、フィルター条件で true と評価されているかどうかを示すメッセージを確認します。true と評価することが期待されているのに、そのように評価していないフィルターの場合、フィルター・ロジックと、そのフィルターによって評価されたデータを調べます。フィルター・ロジックが意図されたようなロジックになっていないことや、評価対象のデータが true 条件の結果にならないこともあります。異常な条件を表していると思われるメッセージがあるかどうかを調べてください。例えば、フィルターで使用されている 1 つ以上の中間オブジェクトに NULL 値があるため (そしてフィルターが NULL をテストしないため)、フィルターが false になっていることを示すメッセージなどがあります。
- さらにスクロールして、今度は true のフィルター評価によって生成されたアクションを確認します。これらのアクションを調べることで、アクション・オブジェクトの全てのフィールドに、期待される値が含まれているかどうかを判断することができます。アクションが組み込み技術コネクターに関連付けられている場合は、そのコネクターによって返される結果がログに記録されるので、この結果を調べれば、コネクターが受信タッチポイントにアクションを正常に渡したかどうかがわかります。
以下に、実行時にイベントが正常に振る舞っていない例を取り上げます。この例から、問題の原因を特定して修正する方法がわかります。
ランタイムの問題の例: 出力ファイルが見つからない
問題:
Retrieve Customer Data インタラクション・セットで評価される Outgoing アクションが指定するディレクトリーに、出力ファイルが見つかりません。この例では、Incoming イベントは HTML フォームによって送信され、Retrieve Customer Data によって評価されます。フィルターはないため、イベントが受信されると常に対応する Outgoing アクションが実行されることになります。アクションは File System Connector を使用してファイルをディレクトリーに送信します。
図 14. イベントをサブミットするためのフォーム
イベントがサブミットされても、File System Connector に定義されたディレクトリーには出力が生成されません。言い換えると、出力ファイル (この例では ValidationTest.xml) が生成されているはずのディレクトリー (この例では C:\WebSphereBusinessEventsTest) が空になっているということです。
詳細を確認するには、この記事に付属の BrokenExample_Runtime_scenario.xml を Design Data ツールにインポートしてください。この壊れたイベント・フォームの HTML (Broken7_Form.html) は、ダウンロードすることもできます。
問題の判別:
- 最初に WBERuntime.event.log を調べます。このイベント・ログに、何も問題が示されていない場合、あるいはエントリー自体がない場合には、次のステップに進みます。
- イベントはコネクターを介してサブミットされたので、以下の connectors.log を調べます。
DEBUG 2008-08-25 20:16:44,109 [WebContainer : 1]
[com.aptsoft.connectors.http.eventConnector]- _event => Event1
DEBUG 2008-08-25 20:16:44,109 [WebContainer : 1]
[com.aptsoft.connectors.http.eventConnector]-_event => Event1
DEBUG 2008-08-25 20:16:44,109 [WebContainer : 1]
[com.aptsoft.connectors.http.eventConnector]- B1 => Submit
DEBUG 2008-08-25 20:16:44,109 [WebContainer : 1]
[com.aptsoft.connectors.http.eventConnector]- _object => Event1
DEBUG 2008-08-25 20:16:44,109 [WebContainer : 1]
[com.aptsoft.connectors.http.eventConnector]- IntegerIn => 42
DEBUG 2008-08-25 20:16:44,109 [WebContainer : 1]
[com.aptsoft.connectors.http.eventConnector]- Looking for:
Event1 found :Incoming
ERROR 2008-08-25 20:16:44,109 [WebContainer : 1]
[com.aptsoft.connectors.http.eventConnector]- Missing event bundle
|
このメッセージの内容は、Business Events のランタイム・サーバーはイベント (Event1) を受信したけれども、その名前のイベントが Design Data ツールに定義されていなかったため、イベントを処理できなかったというものです。
- プロジェクトを開いて、該当する名前 (Event1) のイベントがあるかどうかを調べます。すると、このプロジェクトには Incoming 以外のイベントは含まれていないことがわかります (図 15 を参照)。
図 15. イベントとアクションを示す Touchpoints ビュー
- この問題を解決するには、HTML フォームを調べて Event1 がどこから送信されているのかを突き止める必要があります。HTML フォームを入力してイベントを生成する HTTP イベント・コネクターは、フォームの HTML 内で特定の隠しフィールドを使用して、イベント、イベント・オブジェクト、そしてイベント・オブジェクトに関連付けたフィールドを定義します。イベントでは、これらの要素がBusiness Events のランタイム・サーバーに渡されることになります。フィールドに指定された内容と、Design Data に定義された内容との間に不一致がある場合、このエラーが発生します。
解決策:
- テキスト・エディターで Broken Event HTML Form (図 14 を参照) を開きます。すると、以下の内容が表示されます。
<p>Enter a number<br><input type="text" name="IntegerIn" size="20"></p>
<p><input type=hidden value="Event1" name="_event">
<p><input type=hidden value="Event1" name="_object">
|
_event および _object タグの値は Event1 となっています。コネクターを正しく機能させるためには、この 2 つのフィールドの値を変更して、以下のように、Design Data でイベントに定義されている値 (この例では Incoming) に合わせます。
<p>Enter a number<br><input type="text" name="IntegerIn" size="20"></p>
<p><input type=hidden value="Incoming" name="_event">
<p><input type=hidden value="Incoming" name="_object">
|
- フォームを保存し、再びサブミットします。今回はイベントが正しく Business Events のランタイムに渡されて、出力ファイルが正常に生成されます。この例の場合には、プロジェクトに変更を加えたり、サーバーを再起動したりする必要はありません。
まとめ
この記事では、Business Events のトラブルシューティングに一般的な手法をいくつか取り上げ、Business Events V6.1 を使用する際に発生しがちな問題のデバッグ方法を紹介しました。また、利用できるログのそれぞれについて、そしてログを問題の解決に役立てる方法についても説明しました。Business Events の使用中に発生する問題のほとんどは、この記事で取り上げた 4 つのカテゴリー、つまりインストール、構成、設計、ランタイムといった問題の 1 つ、もしくは複数に当てはまります。
謝辞
この記事のために貴重な情報を提供してくれた WebSphere Business Events Test リーダーの Denise M. Goldberg と、WebSphere Message Broker、WebSphere Service Registry and Repository、および WebSphere Business Events Level 2 サポートの Prasad Imandi、そして Workstation Installation Development の Julia Holloway に心から感謝いたします。
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| Sample files | samples.zip | 5KB | HTTP |
|---|
参考文献
著者について  | 
|  | Vivek Grover は、ノースカロライナ州 Research Triangle Park で WebSphere Business Events および WebSphere Message Broker の Level 2 Support ソフトウェア・エンジニアを務めています。また e-Support チーム・リーダーとして、技術ノート、DCF (Document Control Facility)、年 4 回の E メールによる顧客への技術問題通知の設計および作成でナレッジ・エンジニアを支援しています。 |
 | |  | Richard Lustig は、IBM による買収前の AptSoft でトレーニングおよびサポート責任者を務めていました。WebSphere Business Events では Level 3 Support を担当しています。現在、Phase Forward による製薬業界および生命科学業界向け臨床試験管理ソフトウェア・ソリューションの製品管理チームのメンバーとなっています。 |
記事の評価
|