テストとデバッグ
このトピックでは、Ensemble プロダクションのテストとデバッグで使用できる機能について説明します。ここで説明する内容は、既に企業で使用しているプロダクション・ソフトウェアのトラブルシューティングと調整にも役立ちます。トピックは以下のとおりです。
プロダクション問題状態の修正
プロダクションが一時停止またはトラブルの場合は、この節に目を通してください。
一時停止プロダクションの回復
プロダクションは、シャットダウン・シーケンスの最後で同期メッセージが残っているキューがあると中断中ステータスになります。この場合、中断中のプロダクションを再開して、これらのメッセージを処理することもできます。
ただし、中断中ステータスの原因となった問題を解決していない場合は、中断中のプロダクションを再開しても、以前のメッセージが解放されないまま、別の同期メッセージがキューに追加されるだけなので、プロダクションが単に中断中ステータスに戻るだけとなる可能性があります。
中断中のプロダクションは停止できます。これは開発の初期段階でのみ行うことをお勧めします。導入済みで稼働中のインストール環境では実行しないでください。
このような場合は、より抜本的なアクションをとり、中断中ステータスになったプロダクションを完全にクリーンアップすることが必要になる場合があります。この状況に備え、Ensemble には CleanProduction() メソッドが用意されています。
導入済みで稼働中の Ensemble プロダクションでは、この手順を使用しないでください。CleanProduction() メソッドを実行すると、キューにあるすべてのメッセージが消去され、プロダクションに関する現在の情報がすべて削除されます。この手順は、開発中のプロダクションでのみ使用してください。展開済みで稼働中の Ensemble プロダクションが中断中状態になった場合は、インターシステムズのサポート窓口Opens in a new tabまでお問い合わせください。
問題を解決するためにあらゆる手段を講じたが効果がないので、配信されていない同期メッセージを破棄してでも、中断中のプロダクションを停止する必要があると判断した場合は、以下の手順が有効です。
-
Ensemble, プロダクション構成 ページで、リボン・バーの [開始] をクリックして、中断中のプロダクションを開始します。これにより、そのプロダクションのステータス表示が [実行中] に変わります。
-
次に [停止] をクリックして、問題が引き続き存在しているかどうかを確認します。プロダクションが正常に停止する場合は、プロダクションをクリーンアップする必要はありません。プロダクションのステータスが中断中に戻る場合は、次の手順に進んでください。
-
ターミナル・セッションから以下のようにしてプロダクションを停止します。
-
以下のコマンドを入力して、該当のネームスペースに移動します。
ZN "EnsSpace"
ここで EnsSpace は、中断中のプロダクションが実行されている Ensemble ネームスペースの名前です。
-
以下のコマンドを入力します。
Do ##class(Ens.Director).CleanProduction()
-
-
Ensemble, プロダクション構成 ページで、プロダクションの [ステータス] が [停止] になっていることを確認します。
CleanProduction() メソッドは、中断状態のプロダクションに対してのみ実行するようにします。
トラブル・プロダクションの回復
Ensemble が停止しても、プロダクションが適切にシャットダウンしなかった場合に、そのプロダクションは [問題発生] ステータスになります。先にプロダクションを停止せずに Ensemble の再開またはマシンの再起動を実行すると、このステータスが発生する可能性があります。
この場合は、[回復] コマンドが Ensemble, プロダクション構成 ページに表示されます。[回復] をクリックすると、障害が発生しているプロダクションのインスタンスが終了し、クリーンアップされるので、新しいインスタンスを実行できるようになります。
または、コマンド・ラインを使用してプロダクションを回復しなければならない場合があります。前述した “Ens.Director の使用によるプロダクションの開始および停止” を参照してください。
管理ポータルからのテスト
プロダクションを開発、テスト、およびデバッグする際に、管理ポータルを使用して以下のようなタスクを実行できます。
-
システム構成の表示と変更ができます。
-
プロダクションの起動と停止ができます。
-
キューとその内容、メッセージとその詳細、アダプタとアクターおよびそれらのステータス、ビジネス・プロセスとそのステータス、コード、構成項目のグラフィカル表現を表示できます。
-
イベント・ログ・エントリの表示、ソート、および選択的パージができます。
-
接続が一時的に遮断されているメッセージを一時停止 (および後で再送) できます。
-
カテゴリまたはメッセージ内容に基づいて、メッセージ・ウェアハウスの内容をフィルタリングして特定のメッセージを検索できます。この操作は、グラフィカル・ユーザ・インタフェースを使用して行うことも、SQL SELECT コマンドを入力して行うこともできます。
-
グラフィカル・ユーザ・インタフェースを使用して、メッセージ・アクティビティをビジュアルにトレースできます。
-
統計レポートの作成と表示ができます。
開発者にとって最も役立つポータルの機能は、モニタ・サービス、テスト・サービス、およびイベント・ログの 3 つです。モニタ・サービスは実行時データを継続的に収集します。テスト・サービスを使用すると、開発中のプロダクションに対して、シミュレートした要求を発行できます。イベント・ログはビジネス・ホストによって発行されたステータス・メッセージのログを記録します。テスト・データの生成と結果の調査には、この 3 つの機能を一緒に使用してください。
ポータルの使用方法は、"Ensemble の管理" を参照してください。
管理ポータルの [テスト] メニューでは、ビジネス・ホストとデータ変換の両方をテストできます。このメニューには以下の項目が含まれています。
-
[ビジネス・ホスト] — Ensemble, テスト・サービス ページでは、ビジネス・プロセスとビジネス・オペレーションをテストできます。
-
[データ変換] — このオプションは別のページに誘導します。このページで、データ変換を選択して [テスト] をクリックできます。詳細は、"データ変換のテスト" の節を参照してください。
テスト・サービスの使用
Ensemble, テスト・サービス ページを使用すると、アクティブなネームスペースで実行中の Ensemble プロダクションのビジネス・プロセスまたはビジネス・オペレーションをテストできます。テスト・サービスには、管理ポータル内の以下の場所から移動できます。
-
Ensemble メニューで [テスト] をクリックします。
-
Ensemble, プロダクション構成 ページの構成ダイアグラムで、左ペインにあるビジネス・プロセスまたはビジネス・オペレーションをクリックして、[アクション] タブの [テスト] をクリックします。
ここで、テスト・サービスを使用するには:
-
適切なプロダクションが動作していることを確認します。"Ensemble の管理" を参照してください。
-
そのプロダクションに対してテストが有効になっていることを確認します。通常通り、Ensemble, プロダクション にアクセスします。プロダクションが選択されている状態で、[テスト使用可能] チェック・ボックスにチェックを付け、[適用] をクリックしてから、[OK] をクリックします。
-
管理ポータルで、[Ensemble]、[テスト]、[ビジネス・ホスト] の順にクリックして、Ensemble, テスト・サービス ページを表示します。
このページには、テストの対象として [ビジネスプロセス] と [ビジネスオペレーション] のどちらかを選択可能なオプションがあります。
-
必要に応じて、[ビジネスプロセス] と [ビジネスオペレーション] のどちらかを選択します。
-
ドロップダウン・リストからテスト対象を選択します。
-
送信するメッセージのタイプを選択します。ページに以下のフィールドが表示されます。
-
[現在のプロダクション] — 現在実行中のプロダクションの名前 (表示専用)。
-
[ターゲット] — 前の [テスト・サービス] ページで選択したビジネス・プロセスまたはビジネス・オペレーション (表示専用)。
-
[要求タイプ] — 要求メッセージのリストから選択します。指定されているターゲットで有効な要求タイプのみが、サポートされているタイプのサブクラスも含め、表示されます。
-
-
選択したメッセージのプロパティに関する値を入力します。
要求メッセージにプロパティが含まれていない場合は、何も表示されません。
仮想ドキュメント・メッセージ (HL7、X12) をテストする場合、テキスト・メッセージを貼り付けることができる自由形式のボックスがあります。このボックスの下に、メッセージのオブジェクト・プロパティを入力できます。
-
[実行] をクリックして入力した値が含まれた要求を送信し、結果を表示します。
テスト・サービスによる要求の試行に時間がかかる場合は、[待機中] のページに以下の表示専用情報が表示されます。
-
[ターゲット] — 要求に関連付けられているセッション ID
-
[要求タイプ] — 選択されたターゲットの要求タイプ。
-
[セッション ID] — 要求に関連付けられているセッション ID
-
[送信済み要求] — 要求が送信された日時。
-
[受信済み応答] — 待機中のステータスと、作業が進行中であることを示すグラフィック進行バー。
最後に、要求によって生成された応答の出力値が [結果] ページに表示されます。エラーがあれば、その完全なエラー・メッセージ・テキストと共に表示されます。
-
テストの完了後は、次のいずれかのコマンドを実行できます。
-
[完了] をクリックすると、Ensemble ホーム・ ページに戻ります。
-
[トレース] をクリックすると、[ビジュアル・トレース] ページが表示されて、プロダクション内でのメッセージの経路を視覚的にたどることができます。
EnsLib.Testing パッケージ内のクラスとメソッドを使用することもできます。詳細は、"クラス・リファレンス" の EnsLib.Testing.ServiceOpens in a new tab のエントリを参照してください。
プロダクションのコードのデバッグ
デバッグの最初の手順は、"Ensemble プロダクションの監視" の説明に従ってトレースを有効にすることです。この手順で問題が発見されなければ、次のように、デバッガを使用してコードにステップインできます。
-
スタジオを使用して、デバッグを開始する箇所に BREAK コマンドを挿入します。
-
デバッグ対象のクラスを使用しているビジネス・ホストの [フォアグラウンド] 設定を有効にします。
-
プロダクションを起動します。手順 2 でマークしたジョブが、ターミナル内でフォアグラウンドで実行されます。
-
BREAK コマンドが検出されると、ターミナルがデバッグ・モードに入り、コードをステップスルーできるようになります。
詳細は、"Caché ObjectScript の使用法" の “コマンド行ルーチンのデバッグ” の章を参照してください。
スタジオでは、コードのデバッグを実行することもできます。
-
ビジネス・サービスでは、フォアグラウンドで実行し、BREAK を使用してプロセス ID を取得するように指定します。
-
ビジネス・プロセスを使用すれば、スタジオでブレークポイントを設定してから、デバッグするプロセスにアタッチできます。対照的に、BPL を使用している場合は、スタジオに .INT コードが表示されます。
-
ビジネス・オペレーションを使用すれば、スタジオでブレークポイントを設定してから、デバッグするオペレーション・プロセスにアタッチできます。
詳細は、"スタジオの使用法" の “スタジオ・デバッガの使用” を参照してください。
%ETN ロギングの有効化
イベント・ログには、自動的に、システム・レベルの例外 (コード内の例外を含む) に関する部分的な情報が書き込まれます。これらのイベント・ログ・エントリの最後は、デフォルトで、次のようになります。
-- logged as '-' number - @' quit arg1/arg2 }'
このようなエラーのより完全な情報を入手するには:
-
^Ens.Debug("LogETN") グローバル・ノードを任意の値に設定します。
これにより、Ensemble でシステム・レベルの例外に関する追加の詳細情報が記録されます。
-
例外を引き起こしたと思われるコードを再実行します (メッセージの再送など)。
-
エントリの最後が次のようになっているイベント・ログを再チェックします。
-- logged as '25 Sep 2012' number 15 @' quit arg1/arg2 }'
この情報は、アプリケーション・イベント・ログ内のエントリを参照しています。具体的には、2012 年 9 月 25 日のアプリケーション・エラー・ログ内のエラー 15 を参照しています。
-
次に、これらの例外を検査するために、以下のどちらかを実行できます。
-
ホーム, システムログ, アプリケーションエラーログの表示 ページを使用します。このページにアクセスするには、[システム・オペレーション]、[システムログ]、[アプリケーションエラーログ] の順にクリックしてから、[進む] をクリックします。
-
^%ETN ルーチンを使用します。詳細は、"Caché ObjectScript の使用法" の “コマンド行ルーチンのデバッグ” の章で “その他のデバッグ・ツール” を参照してください。
-