第7章 ルーティングコンテキストのデバッグ
このチュートリアルでは、Camel デバッガーを使用して、ローカルで実行されているルーティングコンテキストの論理エラーを見つける方法を示します。
ゴール
このチュートリアルでは、次のタスクを完了します。
- 2 つの経路の対象ノードにブレークポイントを設定します
- デバッグパースペクティブで、経路をステップスルーし、メッセージ変数の値を調べます
- メッセージ変数の値を変更し、効果を観察しながら、経路をもう一度ステップスルーします
前提条件
このチュートリアルを開始するには、次のいずれかの結果である ZooOrderApp プロジェクトが必要です。
6章ルーティングコンテキストに別のルートを追加するチュートリアルを完了します。
または
-
2章環境の設定チュートリアルを完了し、「リソースファイルについて」に記載されているように、プロジェクトの
blueprint.xml
ファイルを、提供されるblueprintContexts/blueprint3.xml
ファイルに置き換える。
ブレークポイントの設定
デバッガーでは、条件付きブレークポイントと無条件ブレークポイントの両方を設定できます。このチュートリアルでは、無条件のブレークポイントのみを設定します。条件付きブレークポイント (デバッグセッション中に特定の条件が満たされたときにトリガーされる) を設定する方法は、Tooling User Guide を参照してください。
無条件のブレークポイントを設定するには:
-
必要に応じて、ルートエディターで
ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml
を開きます。 -
Project Explorer で
Camel Contexts
src/main/resources/OSGI-INF/blueprint/blueprint.xml
を展開して両方のルートエントリーを公開します。 -
Route_route1 エントリーをダブルクリックして、Design タブで
Route_route1
にフォーカスを切り替えます。 キャンバスで
Choice_choice1
ノードを選択し、その アイコンをクリックし、無条件のブレークポイントを設定します。注記ルートエディターで、ノードの アイコンまたは アイコンをそれぞれクリックすることにより、特定のブレークポイントを無効または削除できます。キャンバスを右クリックし、Delete all breakpoints を選択すると、設定したすべてのブレークポイントを削除することができます。
以下の
Route_Route1
ノードに無条件ブレークポイントを設定します。-
Log_log1
-
SetHeader_setHeader1
-
To_Invalid
-
Log_log2
-
SetHeader_setHeader2
-
To_Fulfill
-
-
Project Explorer で、
src/main/resources/OSGI-INF/blueprint
の下にあるRoute_route2
をダブルクリックして、キャンバスでRoute_route2
を開きます。 以下の
Route_Route2
ノードに無条件ブレークポイントを設定します。-
Choice_choice2
-
SetHeader_setHead_usa
-
Log_usa
-
To_US
-
SetHeader_setHead_ger
-
Log_ger
-
To_GER
-
ルーティングコンテキストのステップスルー
次の 2 つの方法でルーティングコンテキストをステップスルーできます。
- Step over ( ) - ブレークポイントに関係なく、ルーティングコンテキストで実行の次のノードにジャンプします。
Resume ( ) - ルーティングコンテキスト内の次のアクティブなブレークポイントにジャンプします。
-
Project Explorer で
ZooOrderApp
プロジェクトのCamel Contexts
フォルダーを展開し、blueprint.xml
ファイルを公開します。 blueprint.xml
ファイルを右クリックしてコンテキストメニューを開き、Debug AsLocal Camel Context (without tests) をクリックします。 Camel デバッガーは、最初に検出したブレークポイントで実行を一時停止し、今すぐ Debug パースペクティブを開くかどうかを尋ねます。
Yes をクリックします。
注記No をクリックすると、確認ペインがさらに数回表示されます。3 回目の拒否後、それは消え、Camel デバッガーは実行を再開します。この時点でデバッガーを操作するには、Window
Open Perspective →> Debug をクリックして、Debug パースペクティブを開く必要があります。 Debug ビューに示されるように、ルーティングコンテキストが
_choice1 in _route1 [blueprint.xml]
で一時停止された状態で Debug パースペクティブが開きます。注記ブレークポイントは、デバッガーが自動的に再開する前に最大 5 分間保持され、次のブレークポイントまたはルーティングコンテキストの最後のいずれかに移動します。
Variables ビューで、ノードを展開して、各ノードで使用可能な変数と値を表示します。
ルーティングコンテキストをステップ実行すると、最後のブレークポイント以降に値が変更された変数が黄色で強調表示されます。変更された変数を表示するには、各ブレークポイントでノードを展開する必要がある場合があります。
をクリックし、次のブレークポイント
_log2 in _route1 [blueprint.xml]
に移動します。-
Variables ビューでノードを展開し、
_choice1 in Route1 [blueprintxt.xml]
の最後のブレークポイントから変更された変数を確認します。 をクリックし、次のブレークポイント
_setHeader2 in Route1 [blueprint.xml]
に移動します。_log2 in Route1 [blueprint.xml]
のブレークポイントから変更された変数 (黄色で強調表示) を検証します。Debug ビューで
_log2 in _route1 [blueprint.xml]
をクリックし、Variables ビューにブレークポイント_log2 in _route1 [blueprint.xml]
からの変数の値を投入し素早く比較します。Debug ビューでは、同じメッセージフロー内のブレークポイントを切り替えて、Variables ビューで変化する変数値をすばやく比較および監視できます。
注記メッセージフローの長さはさまざまです。
Route_route1
のInvalidOrders
ブランチを移動するメッセージの場合、メッセージフローは短くなります。Route_route2
に続行するRoute_route1
のValidOrders
ブランチを移動するメッセージでは、メッセージフローが長くなります。ルーティングコンテキストのステップを続行します。1 つのメッセージがルーティングコンテキストを完了し、次のメッセージがそのコンテキストに入ると、新しいメッセージフローが Debug ビューに表示され、新しいブレッドクラム ID でタグ付けされます。
この場合、
ID-janemurpheysmbp-home-55846-1471374645179-0-3
は、ルーティングコンテキストに入ったmessage2.xml
に対応する 2 番目のメッセージフローを識別します。ブレッドクラム ID は 2 ずつ増加します。注記Exchange ID とメッセージ ID は同一であり、メッセージがルーティングコンテキストを通過する間は変更されません。それらの ID は、メッセージフローのブレッドクラム ID から作成され、1 ずつ増加します。そのため、
message2.xml
の場合、そのExchangeId
およびMessageId
はID-janemurpheysmbp-home-55846-1471374645179-0-4
になります。Message3.xml
がブレークポイント_choice1 in _route_route1 [blueprint.xml]
に入る際に、Processor 変数を確認します。表示される値は、これまでルーティングコンテキストを移動したmessage1.xml
およびmessage2.xml
の累積メトリクスです。タイミングメトリックはミリ秒単位です。
-
ルーティングコンテキストを介して各メッセージのステップを続行し、各処理ステップで変数とコンソール出力を調べます。
Message6.xml
がブレークポイントTo_GER in Route2 [blueprint.xml]
に入ると、デバッガーはパンくずスレッドのシャットダウンを開始します。 メニューバーで をクリックし、Camel デバッガーを終了します。コンソールは終了しますが、手動で出力をクリアする必要があります。
注記Debug ビューの Camel Context ノードでスレッドまたはエンドポイントを選択した状態で、 をクリックする必要があります。2 回 - 最初にスレッドまたはエンドポイントを終了し、2 番目に Camel Context、つまりセッションを終了します。
メニューバーで を右クリックし、コンテキストメニューを開き、Close を選択して Debug パースペクティブを閉じます。
CodeReady Studio は、Camel デバッガーを起動したパースペクティブに自動的に戻ります。
Project Explorer で、プロジェクトを右クリックし、Refresh を選択して表示を更新します。
注記すべてのメッセージがルーティングコンテキストを移動する前にセッションを途中で終了した場合、
ZooOrderApp/src/data
フォルダーにmessage3.xml.camelLock
のようなメッセージが表示されることがあります。プロジェクトでデバッガーを再度実行する前に、これを削除する必要があります。これを行うには、.camelLock
メッセージをダブルクリックしてコンテキストメニューを開き、Delete を選択します。求められたら、OK をクリックして削除を確認します。ZooOrderApp/target/messages/
ディレクトリーを展開して、メッセージが予想される宛先に配信されていることを確認します。
-
Project Explorer で
すべてのブレークポイントを設定して有効にして、ルーティングコンテキストをそのままにします。
変数の値を変更する
このセクションでは、ウォッチリストに変数を追加して、メッセージがルーティングコンテキストを通過するときに変数の値がどのように変化するかを簡単に確認します。メッセージ本文の変数の値を変更してから、その変更がルーティングコンテキストを介したメッセージのルートにどのように影響するかを観察します。
-
ZooOrderApp
プロジェクトで Camel デバッガーを再度実行するには、blueprint.xml
ファイルを右クリックして、Debug AsLocal Camel Context (without tests) をクリックします。 Message1
が最初のブレークポイント_choice1 in _route1 [blueprint.xml]
で停止した場合、変数NodeId
およびRouteId
(Exchange
カテゴリー) ならびにMessageBody
およびCamelFileName
(Message
カテゴリー) を監視リストに追加します。4 つの変数のそれぞれについて:
- Variables ビューで、適切なカテゴリーを展開して、ターゲット変数を公開します。
変数 (ここでは
Exchange
カテゴリーのNodeId
) を右クリックしてコンテキストメニューを開き、Watch を選択します。Expressions タブが開き、監視するように選択した変数が一覧表示されます。
注記ウォッチリストを作成すると、関心のある複数の変数の現在の値をすばやく簡単に確認できます。
-
4 番目のブレークポイント
_Fulfill in _route1 [blueprint.xml]
に到達するまで、ルーティングコンテキスト全体でmessage1
を確認します。 -
Variables ビューで、
Message
カテゴリーを展開します。 変数
Destination
を監視リストに追加します。これで、Expressions ビューに次の変数が含まれるはずです。
注記- 変数のリストの下のペインには、選択した変数の値が表示されます。
- Expressions ビューは、明示的に削除するまで、リストに追加したすべての変数を保持します。
-
残りのルーティングコンテキスト全体で
message1
を確認し、次にルーティングコンテキスト全体でmessage2
を確認します。 -
_choice1 in _route1 [blueprint.xml]
でmessage3
を停止します。 -
Variables ビューで
Message
カテゴリーを展開し、MessageBody
変数を表示します。 MessageBody
を右クリックしてコンテキストメニューを開き、Change Value を選択します。(これを無効な注文から有効な注文に変更するため)、
quantity
の値を 15 から 10 に変更します。この操作により、インメモリーの値のみが変更されます (
message3.xml
ファイルは編集されません)。- OK をクリックします。
Expressions ビューに切り替え、
MessageBody
変数を選択します。変数リストの下にあるペインには
message3
のボディー全体が表示され、注文アイテムの現在の値を簡単に確認することができます。をクリックし、次のブレークポイントに移動します。
To_Invalid
へのブランチをたどる代わりに、message3
はTo_Fulfill
およびRoute_route2
へのブランチをたどります。
Camel デバッガーのフォーカスを絞る
ブレークポイントを無効にしてから再度有効にすることで、デバッガーのフォーカスを一時的に絞り込んでから再拡張できます。
-
ルーティングコンテキスト全体で
message4
を確認し、各ステップで Debug ビュー、Variables ビュー、および Console の出力をチェックします。 -
_choice1 in _route1 [blueprint.xml]
でmessage4
を停止します。 Breakpoints ビューに切り替え、
_choice1
の下に一覧表示されるブレークポイントの横にある各チェックボックスのチェックを外します。ブレークポイントのチェックボックスをオフにすると、一時的に無効になります。をクリックすると、次のブレークポイントに移動します:
デバッガーは、無効なブレークポイントをバイパスし、
_FulFill in _route1 [blueprint.xml]
にジャンプします。をクリックして、もう一度次のブレークポイントに進みます。
デバッガーは、
_GER in _route2 [blueprint.xml]
にジャンプします。-
を繰り返しクリックして、ルーティングコンテキスト全体で
message5
およびmessage6
素早く確認します。 - Breakpoints ビューに切り替え、すべてのブレークポイントの横にあるチェックボックスをオンにして、ブレークポイントを再度有効にします。
メッセージ変数値を変更した場合の影響を確認する
デバッガーを停止し、message1 の数量変数の値を変更した結果を確認するには:
ツールバーで、 をクリックし、Camel デバッガーを終了します:
- コンソールの ボタンをクリックして出力をクリアします。
- Debug パースペクティブを閉じて、Camel デバッガーを起動したパースペクティブに戻ります。
- Project Explorer で、表示を更新します。
ZooOrderApp/target/messages/
ディレクトリーを展開して、メッセージが想定どおりに配信されたかどうかを確認します。Message1
のみがinvalidOrders
に送信されたこと、およびmessage3.xml
がvalidOrders/Germany
フォルダーに表示されることが確認できるはずです。
次のステップ
8章ルートを介したメッセージのトレースチュートリアルでは、ルーティングコンテキストを介してメッセージをトレースし、ルーティングコンテキストのパフォーマンスを最適化および微調整できる場所を決定します。