第7章 ルーティングコンテキストのデバッグ
このチュートリアルでは、Camel デバッガーを使用して、ローカルで実行されているルーティングコンテキストの論理エラーを見つける方法を示します。
ゴール
このチュートリアルでは、次のタスクを完了します。
- 2 つの経路の対象ノードにブレークポイントを設定します
- デバッグパースペクティブで、経路をステップスルーし、メッセージ変数の値を調べます
- メッセージ変数の値を変更し、効果を観察しながら、経路をもう一度ステップスルーします
前提条件
このチュートリアルを開始するには、次のいずれかの結果である ZooOrderApp プロジェクトが必要です。
- 6章ルーティングコンテキストに別のルートを追加する チュートリアルを完了します。 - あるいは、以下のような場合もあります。 
- 
					2章環境の設定チュートリアルを完了し、「リソースファイルについて」に記載されているように、プロジェクトの blueprint.xmlファイルを、提供されるblueprintContexts/blueprint3.xmlファイルに置き換える。
ブレークポイントの設定
デバッガーでは、条件付きブレークポイントと無条件ブレークポイントの両方を設定できます。このチュートリアルでは、無条件のブレークポイントのみを設定します。条件付きブレークポイント (デバッグセッション中に特定の条件が満たされたときにトリガーされるブレークポイント) を設定する方法は、Tooling ユーザーガイド を参照してください。
無条件のブレークポイントを設定するには:
- 
					必要に応じて、ルートエディターで ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xmlを開きます。
- 
					Project Explorer で Camel Contextssrc/main/resources/OSGI-INF/blueprint/blueprint.xmlをデプロイメントして両方のルートエントリーを公開します。
- 
					Route_route1 エントリーをダブルクリックして、Design タブで Route_route1にフォーカスを切り替えます。
- キャンバスで - Choice_choice1ノードを選択し、その アイコンをクリックし、無条件のブレークポイントを設定します。
				注記 アイコンをクリックし、無条件のブレークポイントを設定します。
				注記- ルートエディターで、ノードの  アイコンまたは アイコンまたは アイコンをそれぞれクリックすることにより、特定のブレークポイントを無効または削除できます。キャンバスを右クリックし、Delete all breakpoints を選択すると、設定したすべてのブレークポイントを削除することができます。 アイコンをそれぞれクリックすることにより、特定のブレークポイントを無効または削除できます。キャンバスを右クリックし、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 つの方法でルーティングコンテキストをステップスルーできます。
- 
					ステップオーバー ( 
					 ) - ブレークポイントに関係なく、ルーティングコンテキストで実行の次のノードにジャンプします。 ) - ブレークポイントに関係なく、ルーティングコンテキストで実行の次のノードにジャンプします。
- 再開 (  ) - ルーティングコンテキスト内の次のアクティブなブレークポイントにジャンプします。 ) - ルーティングコンテキスト内の次のアクティブなブレークポイントにジャンプします。- 
							Project Explorer で ZooOrderAppプロジェクトのCamel Contextsフォルダーをデプロイメントし、blueprint.xmlファイルを公開します。
- blueprint.xmlファイルを右クリックしてコンテキストメニューを開き、Debug As- Local 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 デバッガーを終了します。コンソールは終了しますが、手動で出力をクリアする必要があります。
						注記 をクリックし、Camel デバッガーを終了します。コンソールは終了しますが、手動で出力をクリアする必要があります。
						注記- Debug ビューの Camel Context ノードでスレッドまたはエンドポイントを選択した状態で、  を 2 回クリックします。1 回目のクリックでスレッドまたはエンドポイントを終了し、2 回目のクリックで Camel Context (つまりセッション) を終了します。 を 2 回クリックします。1 回目のクリックでスレッドまたはエンドポイントを終了し、2 回目のクリックで Camel Context (つまりセッション) を終了します。
- メニューバーで  を右クリックし、コンテキストメニューを開き、Close を選択して Debug パースペクティブを閉じます。 を右クリックし、コンテキストメニューを開き、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 デバッガーを終了します。 をクリックし、Camel デバッガーを終了します。
- 
					コンソールの 
					 ボタンをクリックして出力をクリアします。 ボタンをクリックして出力をクリアします。
- Debug パースペクティブを閉じて、Camel デバッガーを起動したパースペクティブに戻ります。
- Project Explorer で、表示を更新します。
- ZooOrderApp/target/messages/ディレクトリーをデプロイメントして、メッセージが想定どおりに配信されたかどうかを確認します。- Message1のみが- invalidOrdersに送信されたこと、および- message3.xmlが- validOrders/Germanyフォルダーに表示されることが確認できるはずです。
次のステップ
8章ルートを介したメッセージのトレースチュートリアルでは、ルーティングコンテキストを介してメッセージをトレースし、ルーティングコンテキストのパフォーマンスを最適化および微調整できる場所を決定します。
 
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    