第12章
Novell exteNd Composerには、テストやデバッグ用のさまざまな支援機能があります。 ほとんどの場合、プロジェクト内のサービスをすべて、最初から最後までアニメーション実行(あらゆる制御パスの実行テスト)することが可能です。アプリケーションサーバに展開する必要もありません。 ドキュメント入出力、XML変換、トランザクション制御、ログ出力なども、バックエンドシステムと「運用環境と同様に」接続した状態で、リアルタイムでテストできます。 Composerは、設計時もデバッグ時も、Composer Enterprise Server環境とまったく同じJavaクラスを使って実行するようになっています。したがって、設計時に問題が起こらなければ、アプリケーションサーバに展開後の信頼性についてもかなりの自信を持つことができます。
Composerには、次のようなテスト/デバッグ機能があります。
以上の機能やデバッグ手法の使い方について、以下に解説します。
Composerのサービスエディタおよびコンポーネントエディタには、サービスやコンポーネント内でアクションをテストしたりトラブルシューティングしたりできるようにするアニメーションツールがあります。 このため、サービスやコンポーネントのアクションモデルを通して段階的に実行し、各アクションの結果を監視することができます。 エラーを検出するばかりでなく、接続状態やデータが想定どおりになっているかどうか確認することも可能です。
アクションモデルの特定の1セクションをテストするには、アニメーションツールを使用して1つまたは複数の「ブレークポイント」を設定できます。 「ブレークポイントまでの実行」ツールと組み合わせて使えば、アクションモデルのうち正常に動作している部分は一気に実行し、問題の箇所で停止してそこからステップ実行する、といった手順でデバッグできます。 さらに、ループ、コンポーネントアクションなどのコードブロックで、その内部に「ステップイン」しても冗長なだけである場所は、「ステップオーバー」実行することも可能です。
アニメーションツールは、サービスエディタとコンポーネントエディタのアクションモデルツールバーから使用できます。 アクションモデルツールバーの他に、エディタには、Composerの[アニメーション]メニューのメニューオプションや、対応するキーボードコマンドもあります。さまざまなツールとその機能については、次の表で説明します。
サービスまたはコンポーネントを初めて開いたときに使用できるのは、[アニメーションの開始]ツールと[ブレークポイントの切り替え]ツールのみで、ほかは淡色表示になっています。 [アニメーションの開始]ボタンをクリックすると、ほかのアニメーションツールもクリックできる状態になります。 アニメーションを一時的に停止したいときは、[アニメーションの一時停止]ボタンを使います。 同様に、アニメーションを中断したいときは、赤い[アニメーションの終了]ボタンをクリックします。
警告: [コピー]、[貼り付け]、およびアクション編集操作(新規アクションの追加を含む)は、アニメーション実行中でも可能ですが、通常は行わないようにしてください。 編集すると、例外または予測できない動作、あるいはその両方が起こる可能性があります。 アクションモデルを編集したい場合は、いったん[アニメーションの終了]ボタンを押してから編集し、その後改めてアニメーション実行を開始してください。
アクションペインのツールバーで[アニメーションの開始]ボタンをクリックするか、またはキーボードの<F5>キーを押します。すると、現在では淡色表示されている[アニメーションの開始]ボタンを除き、アクションツールバーのツールがすべてアクティブになります。
[ブレークポイントの切り替え]ツールを使用すると、プロセスを停止する場所となるブレークポイントをアクションモデルで設定できます。これは、適切に動作する長いセクションがある、時間のかかるアクションモデルである場合に特に便利です。問題が発生する各アクションの開始にブレークポイントを設定した後、アクションを1つずつトラブルシューティングすることができます。
アクションモデルツールバーで[ブレークポイントの切り替え]ボタンをクリックするか、またはキーボードの<F2>キーを押します。すると、選択したアクションのバックグラウンドは赤色に、テキストは白色に変わります。
アクションモデルツールバーの[アニメーションの開始]ボタンをクリックします(ボタンがグレー表示されていない場合)。[アニメーションの開始]ボタンがグレー表示されている場合は、別のアニメーションツールを選択して、現在のブレークポイントからアニメーションプロセスを完了できます。[アニメーションの開始]をクリックすると、次のように変更されます。
[ブレークポイントまでの実行]ツールは、[ブレークポイントの切り替え]ツールと組み合わせて使用することにより、アニメーションプロセスを制御できます。 時間のかかるアクションモデルでは、アニメーションプロセスを実行する時間と停止するポイントを制御するための機能が役立ちます。この機能は、[ブレークポイントまでの実行]を使用して実行できます。
アクションペインのツールバーで[ブレークポイントの切り替え]ボタンをクリックするか、またはキーボードの<F2>キーを押します。
アクションペインのツールバーで[アニメーションの開始]ボタンをクリックするか、またはキーボードの<F5>キーを押します。 すると、サービスまたはコンポーネントのアクションペインは、次のようになります。
アクションペインのツールバーで[ブレークポイントまでの実行]ボタンをクリックするか、またはキーボードの<F9>キーを押します。すると、アニメーションプロセスにより、ブレークポイントの前までのアクションがすべて実行されます。プロセスはブレークポイントで停止し、ブレークポイントは赤色で選択されます(次を参照)。
[ステップイン]ツールを使用すると、アクションモデルで選択されているアクションを実行した後、次のアクションに移動します。他のコンポーネント内であっても同様です。 つまり、次が「コンポーネント」アクションであれば、そのターゲットコンポーネントが開き、そのアクションモデルにある最初のアクションからアニメーション実行が継続されます。 [ステップイン]ツールは、アクションモデル全体でアクションを1つずつ処理するために使用したり、[ブレークポイントまでの実行]ツールと組み合わせて使用したりすることができます。 次のブレークポイントまたはアクションモデルの末尾に到達すると、実行が停止します。
ブレークポイントを使ったシナリオとして、10個のアクションは適切に動作しているが、11番目のアクションは適切に動作するかどうか確信がないような場合があります。 このような状況では、11番目のアクションをブレークポイントとして設定し、[ブレークポイントまでの実行]ツールを実行してから、[ステップイン]ツールを実行して11番目以降のアクションを対処することが可能です。
注記: サービスまたはコンポーネントがアクションモデルから呼び出され、呼び出されたオブジェクトを表示するために個別のエディタが開かれた場合、そのオブジェクトのアクションモデルを通して完了する必要があります。完了すると、エディタが閉じて、元のアクションモデルに戻ります。
アクションペインのツールバーで[アニメーションの開始]ボタンをクリックするか、またはキーボードの<F5>キーを押します。 アニメーションツールがアクティブになり、オブジェクトの名前がアクションモデルで選択されます。
アクションツールバーで[ステップイン]ボタンをクリックするか、またはキーボードの<F7>キーを押します。すると、最初のアクションが選択されます。
各アクションが実行され、次のアクションが選択されたら、[ステップイン]ボタンをクリックすることによって、アクションモデルを通して作業を続行します。
別のサービスまたはコンポーネントを呼び出すアクションが選択されたら、[ステップイン]ボタンをクリックします。すると、次のような結果になります。
引き続き[ステップイン]ボタンをクリックして、呼び出されたコンポーネントのアクションをすべて実行します。 アクションをすべて実行すると、ウィンドウが閉じ、元のアクションモデルで停止したポイントに戻り、次のアクションが選択されます。
引き続き[ステップイン]ボタンをクリックして、元のサービスまたはコンポーネントのアクションをすべて実行します。完了すると、メッセージが表示されます。
注記: アクションモデルでは1つまたは複数のコンポーネントが呼び出されることがあり、各コンポーネントでも複数のコンポーネントが呼び出されることがあります。呼び出されたコンポーネントの各インスタンスでは、アニメーションツールはまったく同じように機能します。たとえば、呼び出されたコンポーネント内で[ブレークポイントの切り替え]機能を実行した後、元のサービスまたはコンポーネントで[ブレークポイントまでの実行]機能を実行したいことがあります。 このような場合、アクションモデルでは、アクションの実行を開始して、呼び出されたコンポーネントを開き、設定したブレークポイントでアクションを停止します。
[ステップオーバー]ツールは、「コンポーネント」、「繰り返し」、「決定」、または「Try/On Fault」アクションの詳細にステップインしない場合に役立ちます。
Componentアクションの場合、[ステップオーバー]ツールを使用すると、ターゲットコンポーネントを通してアニメーションを続行するのに長い時間を費やして別のエディタを開く可能性がなくなります。[ステップオーバー]ツールでは、単にターゲットコンポーネントを実行した後、アクションモデルで次のアクションを選択します。
同様に、「Try/On Fault」、「繰り返し」、またはその他の制御フローアクションでラップされたコードのブロックの場合は、ステップオーバー機能を使用すると、各アクションを個々に通さずに(ループ内で厄介になることがあるため)、コードのブロック全体を一度に実行できます。
[ステップオーバー]ツールは、[ブレークポイントまでの実行]ツールと組み合わせて使用すると便利な場合があります。 たとえば、[ブレークポイントの切り替え]機能を使用し、[ブレークポイントまでの実行]ツールを実行した後、[ステップオーバー]ツールを使用して、ブレークポイントとして指定したアクションを実行できます。[ステップオーバー]ツールでは、個々のアクション(関係のないものが含まれる場合もある)を通して単調に実行する必要がないため、長いアクションモデルをテストする場合に時間を大幅に節約できます。
アクションペインのツールバーで[アニメーションの開始]ボタンをクリックします。 すると、アニメーションツールがアクティブになり、オブジェクトの名前がアクションモデルで選択されます。
ループ、またはインデントされたコードブロックに先行するコードの別の行に達するまで、[ステップイン]ボタンを使用して、アクションモデルを通して作業します。
アクションツールバーで[ステップオーバー]ボタンをクリックするか、またはキーボードの<F8>キーを押します。 すると、インデントされたコードのブロックの「後」にある最初のアクションが選択されます(インデントされたコードはすべて通常どおりに実行され、インデントされたアクションの行を個々に通して作業する必要なく、「アウトデント」された次のアクションに直ちに移動します)。
引き続き[ステップイン]ボタンまたは[ステップオーバー]ボタン、あるいはその両方をクリックして、アクションモデルのアクションをすべて実行します。完了すると、メッセージが表示されます。
[アニメーションの一時停止]ツールを使用すると、アクションモデルでアクションの実行を一時停止できます。これは、アクションモデルに長いループが含まれている場合に特に便利です。
アクションの実行中に、アクションペインのツールバーで[アニメーションの一時停止]ボタンをクリックするか、またはキーボードの<F6>キーを押します。
アニメーションプロセスを再開するには、必要に応じて[ステップイン]、[ステップオーバー]、または[ブレークポイントまでの実行](ブレークポイントが設定されている場合)をクリックします。
警告: [コピー]、[貼り付け]、およびアクション編集操作は、アニメーションの一時停止中でも可能ですが、通常は行わないようお勧めします。 編集すると、例外が発生することがあります。
[アニメーションの停止]ツールでは、単にアニメーションプロセスを停止します。 アニメーションは、停止したら、停止した場所から再開することはできません。 このため、アクションモデルの開始から再開する必要があります。
アニメーションの実行中に、アクションペインのツールバーで[アニメーションの停止]ボタンをクリックするか、またはキーボードの<Shift>+<F5>キーを押します。すると、次のメッセージが表示されます。
アクションが正しく実行されなかった場合、エラーメッセージが表示されます。

[詳細]ボタンをクリックすると、発生した問題に関する詳細を表示できます。この機能により、完全なJavaスタックトレースが生成されます。
すべてのエラーメッセージは、Composerの[表示]メニューから表示できるシステムログにも書き込まれます。
注記: Composerのログ(または出力)ペインにもメッセージが表示されます。 細かいメッセージまですべて[ログ]タブに表示したい場合は、[ツール]>[初期設定]の順に選択し、[一般]タブで[ログのしきい値]を1にします。 同じダイアログで、[スタックトレースの表示]チェックボックスもオンにします。

アクションモデルが正しく動作するようになったら、最初から最後まで、中断無しに実行してみることになります。 そのためには、これまでに設定したブレークポイントをすべて解除しなければなりません。 [すべてのブレークポイントのクリア]コマンドを使用すると、すべてのブレークポイントをまとめて解除できます。 その手順は2とおりあります。
テストまたはデバッグセッション中、コンポーネントの入力、出力、一時、および障害ドキュメントを、すべて元の状態に戻さなければならないことがあります。 そのためには、メインメニューバーの[コンポーネント]メニューから、[XMLドキュメントの再ロード]を選択します。
ドキュメントの内容を、ルートノードを含め、ECMAScriptを使ってプログラムで完全にクリアすることができます。 次のような関数アクションを追加してください。
Temp.removeChild( Temp.firstChild );
Composerのメインツールボックスにある[実行]ボタンでこの文を実行するか、または関数アクションダイアログで[適用]ボタンを押します。 すると、(この例の場合は) Tempドキュメントが空になります。
注記: removeChild()メソッドおよびfirstChildプロパティは、W3Cで定義された標準DOM ECMAScript拡張です。 ECMAScriptを使ったアクション内では、このようなメソッドを使って、ドキュメント構造のどの部分でも削除、追加、または修正することができます。 詳しくはを参照してください。
アクションモデルのテストやデバッグに当たっては、次のような技法を覚えておくとよいでしょう。
それぞれについて以下に解説します。
マップアクションやその他のタイプのアクションを実行する前または実行した後、あるいは両方の場合に、データ値を検査したいことがあります。このような状況では、ECMAScript alert()関数を含む関数アクションを作成して検査することができます。alert関数を使用すると、指定した値が表示されたメッセージボックスが現れます。
次の例では、ある条件が真であることを確認するために、alert関数アクションを使っています。

注記: アプリケーションサーバ環境にプロジェクトを配備する前に、alert()関数を使用するアクションをすべて無効にすることが推奨されます。alert()の機能は、設計時のテストの場合にのみ有用です。 アプリケーションサーバに展開後は実行できません。
コンポーネントまたはサーバにデバッグ関連のアクションが多数含まれている場合、プロジェクトの展開時にアクションが実行されないようにすることができます。 1つの方法は、決定アクション内で使用できる「プロジェクト変数」を作成して、デバッグアクションを実行するかどうかを決定することです。その後、すべてのデバッグ関連アクションをコンポーネントの決定アクション内に配置します。
別の方法は、コンポーネントの内部メソッドの1つに直接の呼び出しを使用して、現在の環境がランタイムまたは設計のいずれであるかを決定することです。
gDebugMode = !Packages.com.sssw.b2b.rt.GNVxObjectFactory.isRuntime();
これは、カスタムJavaメソッドを呼び出すためにECMAScriptを使用する例です。ここでの結果は、コンポーネントが設計(またはアニメーション)時にComposerで実行されている場合は、(コンポーネントにスコープされた)変数gDebugModeにtrueが含まれ、コンポーネントがサーバ上に展開したプロジェクトで実行されている場合は、falseが含まれます。
次に、この「標識変数」を使用してalert()を呼び出すかどうか判断を下す場合の例を示します。

注記: デバッグには、「ログ」アクションも不可欠で、[初期設定]ダイアログボックスの[一般]タブを使って簡単に制御できます。 160ページのログアクションを参照してください。
アニメーション実行中、あるデータの値がどのように変化するかを監視できます。監視したい変数またはデータノードを、「ウォッチリスト」に追加してください。
ウォッチリストは、(Composerメインウィンドウの下部にある出力ペインの)[ウォッチ]タブを手前に表示すれば参照できます。

ウォッチリストの実体は、メモリ中に展開されたXMLドキュメント(DOM)です。ウォッチするデータ項目は、いつでも追加または削除できます。 コンポーネントまたはサービスをステップ実行する都度、リアルタイムにデータ値が更新されます。 もちろんこれは、設計の支援用としてのみ使うべき機能です。 (サーバの)実行環境では使えません。
ウォッチリストはコンポーネントごとに作成し、コンポーネントごとに切り替えながら使います。各ウォッチリストのスコープは、コンポーネントの範囲に限られます。
ウォッチリスト変数が追加されたコンポーネントを保存すると、次にコンポーネントを開いたときにも、ウォッチリスト変数はそのまま残っています。 このようにウォッチリストは、コンポーネントと組にして保存しておけるのです。
また、XMLファイルの形でウォッチリストを保存することもできます (WATCHノードを右クリックし、コンテキストメニューから[XMLとして保存]を選択します)。 これは障害復旧にも役立ちます。異なる設計セッションで実行し、同じ箇所でウォッチリストを保存して違いを見ることができるからです。
ウォッチできる変数には2種類あります。 すなわち、ECMAScript変数とDOMノード (要素など)です。 リーフ以外のDOMノードは、単独でウォッチリストに追加するほか、子ノードを含む全体を追加することも可能です (ウォッチ対象はXPathで定義します)。
注記: ウォッチリストは読み込み専用です。 ウォッチウィンドウで項目を追加および削除できますが、値を変更することはできません。
ウォッチツリーに項目を追加する方法は3とおりあります。
ウォッチビューでノードを右クリックし、コンテキストメニューから[ウォッチの追加]を選択する方法。 [ウォッチの追加]以外にも、次のように、[ウォッチの削除]などのコマンドがあります。
ドラッグ&ドロップによる方法。 ツリー表示にしたXMLドキュメントから、マウスでノードをつかみ、ウォッチウィンドウまでドラッグすると、 そのノードがウォッチリストに追加されます。
注記: この方法が使えるのはドキュメントノードに限ります。 ECMAScript変数を追加したい場合は[ウォッチの追加]コマンドを使ってください。次の例を参照してください。
変数をウォッチリストに追加し、コンポーネントをアニメーション実行しながら変数値が変化する様子を監視し、最後に変数を削除する様子を示します。
ウォッチビューのルートノード(「ウォッチ」)を右クリックします。すると、コンテキストメニューが表示されます。 (前の図を参照してください)。
コンテキストメニューから[ウォッチの追加]を選択します。 ダイアログボックスが表示されます。
このダイアログは式ビルダです。 ここで、XPathの値を評価するECMAScript式を作成します。 上側の3つのペインからマウスで項目を選択するだけで、式が作成されるのです。 たとえば上の図で、INV:INVOICEBATCH/INV:INVOICEの入力要素をウォッチリストに追加する手順は、入力ツリーノードを開き、該当するノードをダブルクリックするだけです。 対応するECMAScript文が、上図のように、テキスト編集フィールドに自動的に生成されます。
注記: ECMAScript変数をウォッチしたい場合は、変数名をそのまま入力します(ECMAScriptユーザ変数は選択リストに表示されないので、手で入力する必要があります)。
ノードまたは変数がウォッチビューに追加されているはずです。 変数が子ノードのあるDOMノードであれば、ダブルクリック(またはすぐ横のプラス(+)記号をクリック)すると、子ノードおよびその値を展開表示できます。
ウォッチ変数を削除するには、当該ノードを右クリックし、コンテキストメニューから[ウォッチの削除]を選択します。 これで変数が削除されます。
Composerでのアニメーションテストと、展開テストには、大きな環境的相違があります。これらのテストはいずれも作成したコンポーネントやサービスを適切に検証するために必要です。違いについては、次の表に詳しく説明します。
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...