第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 Contextssrc/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 つの方法でルーティングコンテキストをステップスルーできます。
- 
					ステップオーバー ( 
					
					 ) - ブレークポイントに関係なく、ルーティングコンテキストで実行の次のノードにジャンプします。
				 再開 (
					 ) - ルーティングコンテキスト内の次のアクティブなブレークポイントにジャンプします。
				- 
							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 回 クリックします。1 回目のクリックでスレッドまたはエンドポイントを終了し、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章ルートを介したメッセージのトレースチュートリアルでは、ルーティングコンテキストを介してメッセージをトレースし、ルーティングコンテキストのパフォーマンスを最適化および微調整できる場所を決定します。