Tooling のチュートリアル

Red Hat Fuse 7.8

Tooling のチュートリアル

Red Hat Fuse Documentation Team

概要

本ガイドには、Red Hat Fuse Tooling が提供するツールを使用してアプリケーションを開発およびテストする方法を示す簡単なチュートリアルが多数含まれています。

第1章 Fuse Tooling のチュートリアルについて

Red Hat Fuse Tooling のチュートリアルは、Fuse Tooling を使用して Apache Camel アプリケーションの開発、実行、テスト、およびデプロイを行うためのハンズオンの基礎を提供します。

前提条件

開始する前に、以下のソフトウェアについて理解しておく必要があります。

Fuse Tooling チュートリアルの概要

チュートリアルの概要およびそれぞれのチュートリアルの目的を以下に示します。

  • 2章環境の設定

    Fuse Integration プロジェクトを作成し、チュートリアルのリソースファイル (メッセージおよびルーティングコンテキストファイルのサンプル) を設定する。プロジェクトの作成時に、ルーティングコンテキストとメインのルートが自動作成されます。

  • 3章ルートの定義

    フォルダーからメッセージを取得し、別のフォルダーにコピーする単純なルートのエンドポイントを定義する。

  • 4章ルートの実行

    テストメッセージを表示する。ルートを実行し、テストメッセージがソースフォルダーからターゲットフォルダーにコピーされたことを確認して、これが機能することを確認します。

  • 5章コンテンツベースルーターの追加

    メッセージをフィルタリングして、メッセージのコンテンツに基づいて異なるターゲットフォルダーにコピーするコンテンツベースルーターを追加する。

  • 6章ルーティングコンテキストへの別のルートの追加

    メッセージをさらにフィルタリングして、メッセージのコンテンツに基づいて異なるターゲットフォルダーにコピーする新たなルートを追加する。

  • 7章ルーティングコンテキストのデバッグ

    Camel デバッガーを使用してブレークポイントを設定し、ルートを介してルートおよびメッセージ変数を調べる。

  • 8章ルートを通じたメッセージのトレース

    ルートにメッセージをドロップし、すべてのルートノードを介してトラッキングする。

  • 9章JUnit を使用したルートのテスト

    ルートの JUnit テストケースを作成し、ルートをテストする。

  • 10章Red Hat Fuse へのプロジェクトのパブリッシュ

    Apache Camel プロジェクトを Red Hat Fuse にパブリッシュするプロセスを順を追って実行する: ローカルサーバーを定義し、パブリッシュオプションを設定し、サーバーを起動し、プロジェクトをパブリッシュし、サーバーに接続し、プロジェクトが正常にビルドおよびパブリッシュされたことを確認します。

Fuse Tooling 機能の詳細は、『Tooling User Guide』を参照してください。

サンプルアプリケーションについて

Fuse Tooling のチュートリアルでビルドするサンプルアプリケーションは、動物園が動物をオーダーする単純な注文アプリケーションを模擬しています。サンプル XML メッセージが提供されます。各 XML メッセージには、顧客情報 (動物園の名前、都市、および国) と注文情報 (要求した動物のタイプおよび数、ならびに動物の最大許容数) が含まれます。

Fuse Tooling を使用して、受信サンプルメッセージを受け取り、コンテンツでフィルターし (有効な注文/無効な注文)、動物園の場所 (国) で有効なオーダーをさらに並べ替える Blueprint プロジェクトを作成します。チュートリアルの後半では、サンプルアプリケーションを使用してルーティングコンテキストをデバッグし、ルート経由でメッセージを追跡し、JUnit でルートをテストし、最後に Fuse プロジェクトをパブリッシュします。

リソースファイルについて

各チュートリアルは、直前のチュートリアルに結果に基づいて構成されます。チュートリアルを順番に完了できるように、あるチュートリアルによって生成されたコードは、次のチュートリアルの開始点になります。または、最初のチュートリアルを完了した後に、提供されたコンテキストファイルの 1 つを開始点として使用し、シーケンスの他のチュートリアルを実行することもできます。

チュートリアルは、ここ にある Fuse-tooling-tutorials-jbds-10.3.zip ファイルにあるリソースファイルに依存します。この zip ファイルには、以下の 2 つのフォルダーが含まれます。

Messages
このフォルダーには、message1.xmlmessage2.xmlmessage6.xml … という名前の 6 つのメッセージファイルが含まれています。最初のチュートリアル「2章環境の設定」では、これらのメッセージファイルを保存するディレクトリーを作成し、それらのコンテンツも表示します。すべてのチュートリアルにこれらのメッセージファイルが必要です。
blueprintContexts

このフォルダーには、3 つのルーティングコンテキストファイルが含まれます。

第2章 環境の設定

このチュートリアルでは、Fuse Integration プロジェクトを作成するプロセスについて順を追って説明します。このプロジェクトには、初期ルートとデフォルトの CamelContext が含まれます。ルートは、メッセージが移動するプロセッサーチェーンです。CamelContext は単一のルーティングルールベースで、ルート設定用のコンテキストを定義し、エンドポイント (メッセージソースとターゲット) 間のメッセージ交換時に使用するポリシーを指定します。

他のチュートリアルを実行する前に、このチュートリアルを完了する必要があります。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • Fuse Integration プロジェクトを作成する
  • プロジェクトのテストメッセージ (XML ファイル) をダウンロードする
  • テストメッセージを表示する

操作を始める前に

Fuse Integration プロジェクトを設定するには、Fuse Tooling を使用して Red Hat CodeReady Studio をインストールする必要があります。CodeReady Studio のインストール方法については、Red Hat カスタマーポータル からお使いのプラットフォームのインストールガイドを参照してください。

10章Red Hat Fuse へのプロジェクトのパブリッシュ」チュートリアルの手順を実行するには、Java 8 をインストールする必要があります。

Fuse Integration プロジェクトの作成

  1. Red Hat CodeReady Studio を開きます。

    CodeReady Studio を初めて起動すると、JBoss パースペクティブで開きます。

    JBoss Perspective on startup

    それ以外の場合は、以前の CodeReady Studio セッションで使用していたパースペクティブで開きます。

  2. メニューから FileNewFuse Integration Project を選択し、New Fuse Integration Project ウィザードを開きます。

    New Project wizard
  3. Project Name フィールドに ZooOrderApp を入力します。

    Use default workspace location オプションをチェックしたままにします。

  4. Next をクリックし、Select a Target Runtime ページを開きます。

    Select Target Runtime page
  5. Standalone をデプロイメントプラットフォームに選択します。
  6. Karaf/Fuse on Karaf を選択して、ランタイムに None selected を受け入れます。

    注記

    後の「10章Red Hat Fuse へのプロジェクトのパブリッシュ」のチュートリアルで、このランタイムを追加します。

  7. デフォルトの Apache Camel バージョン を受け入れます。

    Select Target Runtime page filled out
  8. Next をクリックして Advanced Project Setup ページを開き、Empty - Blueprint DSL テンプレートを選択します。

    Advanced Project Setup
  9. Finish をクリックします。

    Fuse Tooling は、プロジェクトをビルドするのに必要なすべてのファイルを Maven レポジトリーからダウンロードし始め、新しいプロジェクトを Project Explorer ビューに追加します。

    CodeReady Studio で Fuse Integration パースペクティブが表示されていない場合は、すぐに切り替えるかどうかを尋ねられます。

    tutSwitchToFIP
  10. Yes をクリックします。

    Fuse Integration パースペクティブに、新しい ZooOrderApp プロジェクトが開きます。

    tutEmptyProjectOpen

    ZooOrderApp プロジェクトに は、以下を含むルートを作成して実行するために必要なすべてのファイルが含まれます。

    • ZooOrderApp/pom.xml: Maven プロジェクトファイル

      Generated blueprint.xml and pom.xml files
    • ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml: Camel ルーティングコンテキストと初期の空のルートが含まれる Blueprint XML ファイル。
  11. メインのルーティングコンテキストを表示するには、Editor ビューで blueprint.xml ファイルを開き、Source タブをクリックします。

    tutRouteSource

ID 値を表示するためのコンポーネントラベルの設定

Design キャンバスに配置するパターンおよびコンポーネントのラベルが、Tooling のチュートリアルに表示されるラベルと同じになるようにするには、以下の手順を実施します。

  1. Editor の設定ページを開きます。

    • Linux および Windows マシンでは、WindowsPreferencesFuse ToolingEditor と選択します。
    • OS X では、CodeReady StudioPreferencesFuse ToolingEditor と選択します。
  2. Use ID values for all component labels オプションをチェックします。

    Editor Preferences - Use ID values option
  3. Apply and Close をクリックします。

プロジェクトのテストメッセージのダウンロード

Tooling のチュートリアルを使用して作業する際に、ZooOrderApp プロジェクトをテストできるように、XML メッセージファイルのサンプルが提供されます。メッセージには、動物園の動物の注文情報が含まれます。たとえば、Chicago 動物園からのウォンバット 5 頭の注文です。

提供されたテストメッセージ (XML ファイル) をプロジェクトにダウンロードしてコピーするには、以下の手順を実施します。

  1. CodeReady Studio の Project Explorer ビューで、テストメッセージを含めるフォルダーを作成します。

    1. ZooOrderApp/src フォルダーを右クリックし、NewFolder を選択します。New Folder ウィザードが開きます。
    2. Folder namedata と入力します。
    3. Finish をクリックします。
  2. こちら をクリックして、提供される Tooling チュートリアルのリソース Fuse-tooling-tutorials-jbds-10.3.zip ファイルの場所に対して Web ブラウザーを開きます。

    Fuse-tooling-tutorials-jbds-10.3.zip ファイルを、ZooOrderApp プロジェクトのワークスペースの外部にある便利な場所にダウンロードし、展開します。「1章Fuse Tooling のチュートリアルについて」で説明されているように、フォルダーが 2 つ含まれます。

  3. messages フォルダーから、6 つの XML ファイルを ZooOrderApp プロジェクトの src/data フォルダーにコピーします。

    Messages files in the project’s data folder
    注記

    XML ファイルの Warning icon は無視しても問題ありません。

テストメッセージの表示

各 XML メッセージファイルには、動物園 (顧客) からの動物のの量に関する注文が含まれます。たとえば、「message1.xml」ファイルには、Brooklyn 動物園からの 12 頭のウォンバット関する注文が含まれています。

Editor ビューでメッセージ XML ファイルを開いて、コンテンツを調べることができます。

  1. Project Explorer ビューで、メッセージファイルを右クリックします。
  2. ポップアップメニューから Open を選択します。
  3. Source タブをクリックします。

    Editor ビューで XML ファイルが開きます。

    たとえば、message1.xml ファイルの内容には、Brooklyn 動物園からの 12 頭のウォンバットに関する注文が表示されます。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <order>
      <customer>
        <name>Bronx Zoo</name>
        <city>Bronx NY</city>
        <country>USA</country>
      </customer>
      <orderline>
        <animal>wombat</animal>
        <quantity>12</quantity>
      </orderline>
    </order>
注記

新しく作成した message1.xml ファイルの最初の行の Warning icon を無視しても問題はありません。ドキュメントが参照する文法の制約 (DTD または XML スキーマ) がないことを示しています。

以下の表は、6 つすべてのメッセージファイルの内容の概要を示しています。

表2.1 提供されるテストメッセージ

メッセージ No.<name><city><country><animal><quantity>

1

Bronx 動物園

Bronx NY

米国

ウォンバット

12

2

SAN Diego 動物園

SAN Diego CA

米国

キリン

3

3

Sea Life Centre

Munich

ドイツ

ペンギン

15

4

Berlin 動物園

Berlin

ドイツ

エミュー

6

5

Philadelphia 動物園

Philapelphia PA

米国

キリン

2

6

st Louis 動物園

st Loius MO

米国

ペンギン

10

次のステップ

CodeReady Studio プロジェクトを設定したので、XML メッセージを処理するルートを定義する「3章ルートの定義」のチュートリアルを続けることができます。

第3章 ルートの定義

このチュートリアルでは、ルートへのエンドポイントの追加および設定について順を追って説明します。エンドポイントは、ルートを移動するメッセージのソースおよびシンクを定義します。ZooOrderApp プロジェクトでは、開始 (ソース) エンドポイントは XML メッセージファイルを含むフォルダーです。シンク (終了) エンドポイントは、プロジェクトに指定する別のフォルダーです。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • ソースおよびシンクエンドポイントをルートに追加する
  • エンドポイントを設定する
  • エンドポイントを接続する

作業を始める前に

このチュートリアルを開始する前に:

  1. 2章環境の設定」チュートリアルで説明されているように、ワークスペース環境を設定する必要があります。
  2. CodeReady Studio で、ZooOrderApp プロジェクトの /src/main/resources/OSGI-INF/blueprint/blueprint.xml ファイルを Editor ビューで開きます。
  3. 必要に応じて、Editor ビューの下部にある Design タブをクリックして、Route_route1 というラベルが付けられた初期ルートのグラフを表示します。

ソースエンドポイントの設定

以下の手順に従って、src/data フォルダーをルートのソースエンドポイントとして設定します。

  1. File コンポーネント ( File icon ) を PaletteComponents ドロワーからキャンバスにドラッグし、それを Route_route1 コンテナーノードにドロップします。

    File コンポーネントは、Route_route1 コンテナーノード内の From _from1 ノードに変更されます。

  2. キャンバスで From _from1 ノードを選択します。

    キャンバスの下の Properties ビューには、編集用にノードのプロパティーフィールドが表示されます。

  3. メッセージファイルのソースディレクトリーを指定するには、Properties ビューで Advanced タブをクリックします。

    FileSysCompProps1Tut
  4. Directory Name フィールドに src/data を入力します。

    FileSystemCompPropsTut

    src/data は、プロジェクトのディレクトリーからの相対パスです。

  5. Consumer タブで、Noop オプションにチェックを入れて有効にします。

    Noop オプションにより、message#.xml ファイルが src/data フォルダーから削除されなくなり、べき等を有効にして各 message#.xml ファイルが 1 度だけ消費されるようにします。

  6. Details タブを選択して、ファイルノードの Details ページを開きます。

    このツールは、Uri フィールドに、Advanced タブで設定した Directory Name および Noop プロパティーを自動的に設定することに注意してください。また、Id フィールドに自動生成される ID (_from1) も設定します。

    FileSystemCompPropsTut2
    注記

    ツールプレフィックスは、自動生成されるアンダースコア (_) の付いた ID 値です。必要に応じて、ID の値を変更できます。アンダースコアのプレフィックスは必須ではありません。

    自動生成される ID はそのまま残します。

  7. FileSave を選択してルートを保存します。

シンクエンドポイントの設定

ルートのシンク (ターゲット) エンドポイントを追加および設定するには、以下を行います。

  1. 別の File コンポーネントをPaletteComponents ドロワーからドラッグし、それを Route_route1 コンテナーノードにドロップします。

    File コンポーネントは、Route_route1 コンテナーノード内の To_to1 ノードに変更されます。

  2. キャンバスで To_to1 ノードを選択します。

    キャンバスの下の Properties ビューには、編集用にノードのプロパティーフィールドが表示されます。

  3. Details タブで以下の操作を行います。

    1. Uri フィールドに file:target/messages/received を入力します。
    2. Id フィールドに _Received を入力します。

      FilesysTargetCompPropsTut
      注記

      ツールは、実行時に target/messages/received フォルダーを作成します。

  4. Route_route1 コンテナーで From _from1 ノードを選択し、そのコネクター矢印 ( connector arrow icon ) を To_Received ノードにドラッグしてからリリースします。

    CompletedRoute1
    注記

    2 つのファイルノードが接続され、ルートエディターのレイアウト方向設定に従ってキャンバスに調整されます。選択肢は Down (デフォルト) と Right です。

    ルートエディターのレイアウト設定オプションにアクセスするには、以下を実行します。

    • Linux および Windows マシンでは、WindowsPreferencesFuse ToolingEditorChoose the layout direction for the diagram editor と選択します。
    • OS X では、CodeReady StudioPreferencesFuse ToolingEditorChoose the layout direction for the diagram editor と選択します。
    注記

    プロジェクトを閉じる前にノードを接続しないと、プロジェクトを再度開く際にツールが自動的に接続します。

  5. ルートを 保存 します。
  6. キャンバスの下部にある Source タブをクリックして、ルートの XML を表示します。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
        https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
        http://camel.apache.org/schema/blueprint
        http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
    
        <camelContext id="_context1" xmlns="http://camel.apache.org/schema/blueprint">
            <route id="_route1">
                <from id="_from1" uri="file:src/data?noop=true"/>
                <to id="_Received" uri="file:target/messages/received"/>
            </route>
        </camelContext>
    </blueprint>

次のステップ

ルートにエンドポイントを追加および設定したので、「4章ルートの実行」チュートリアルで説明されているようにルートを実行できます。

第4章 ルートの実行

このチュートリアルでは、ルートを実行して、ルートがソースエンドポイントからシンクエンドポイントにメッセージを正しく転送することを確認するプロセスについて順を追って説明します。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • ローカルの Camel コンテキストとしてルートを実行する (テストがまだ設定されていないため、テストは行わない)
  • ルートを通じてメッセージを送信する
  • シンクエンドポイントによって受信されたメッセージを検査し、ルートがテストメッセージを正しく処理したことを確認する

前提条件

このチュートリアルを開始するには、以下のいずれかによる ZooOrderApp プロジェクトが必要です。

  1. 2章環境の設定」チュートリアルを完了する。
  2. 以下のいずれか:

ルートの実行

ルートを実行するには、以下を実行します。

  1. ZooOrderApp プロジェクトを開きます。
  2. Project ExplorerZooOrderApp/Camel Contexts/blueprint.xml を選択します。

    tutRunCBRrouteCamContext
  3. blueprint.xml を右クリックし、Run AsLocal Camel Context (without tests) を選択します。

    注記

    代わりに Local Camel Context を選択すると、ツールは自動的に指定された JUnit テストに対してルーティングコンテキストを実行しようとします。JUnit テストは存在しません。そのため、ツールはテストのないルーティングコンテキストの実行に戻します。「9章JUnit を使用したルートのテスト」チュートリアルで、JUnit テストケースを作成して ZooOrderApp プロジェクトをテストします。

    Console パネルが開き、プロジェクトの実行の進捗を反映するログメッセージが表示されます。開始時に、Maven はローカルの Maven リポジトリーを更新するために必要なリソースをダウンロードします。Maven のダウンロードプロセスには数分かかる場合があります。

  4. 出力の最後に (以下のような) メッセージが表示されるまで待ちます。これらのメッセージは、ルートが正常に実行されたことを示しています。

    ...
    [Blueprint Event Dispatcher: 1] BlueprintCamelContext INFO  Route: _route1 started and consuming from:Endpoint[file://src/data?noop=true]
    [Blueprint Event Dispatcher: 1] BlueprintCamelContext INFO  Total 1 routes, of which 1 are started.
    [Blueprint Event Dispatcher: 1]BlueprintCamelContext INFO  Apache Camel 2.21.0.redhat-3 (CamelContext: ...) started in 0.163 seconds
    [Blueprint Event Dispatcher: 1] BlueprintCamelContext INFO  Apache Camel 2.21.0.redhat-3 (CamelContext: ...) started in 0.918 seconds
  5. ルートをシャットダウンするには、Console ビューの上部にある console’s shutdown button をクリックします。

ルートの確認

ルートが適切に実行されたことを確認するには、メッセージ XML ファイルがソースフォルダー (src/data) からターゲットフォルダー (target/messages/received) にコピーされたかどうかを確認します。

  1. Project ExplorerZooOrderApp を選択します。
  2. 右クリックし、Refresh を選択します。
  3. Project Explorertarget/messages/ フォルダーを見つけ、これを展開し、target/messages/received フォルダーに 6 つのメッセージファイル (message1.xml から message6.xml) が含まれることを確認します。

    message destination
  4. message1.xml をダブルクリックして、ルートエディターの Design タブでそれを開き、Source タブを選択して XML コードを表示します。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <order>
      <customer>
        <name>Bronx Zoo</name>
        <city>Bronx NY</city>
        <country>USA</country>
      </customer>
      <orderline>
        <animal>wombat</animal>
        <quantity>12</quantity>
      </orderline>
    </order>

次のステップ

5章コンテンツベースルーターの追加」チュートリアルで、メッセージのコンテンツを使用して宛先を決定するコンテンツベースルーターを追加します。

第5章 コンテンツベースルーターの追加

本チュートリアルでは、コンテンツベースルーター (CBR) を追加し、ルートにロギングする方法を説明します。

CBR は、メッセージをそのコンテンツに基づいて宛先にルーティングします。このチュートリアルでは、各メッセージの数量フィールドの値 (注文の動物の数) に基づいて、作成する CBR がメッセージを異なるフォルダー (有効または無効) にルーティングします。各注文の動物の最大値は 10 です。数量が 10 よりも大きいかどうかに応じて、CBR はメッセージを異なるフォルダーにルーティングします。たとえば、動物園はシマウマ 5 頭を注文したが 3 頭のシマウマしかいない場合、注文が無効な注文のターゲットフォルダーにコピーされます。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • コンテンツベースルーターをルートに追加する
  • コンテンツベースルーターを設定する

    • コンテンツベースルーターの各出力ブランチにログエンドポイントを追加する
    • 各ログエンドポイントの後に Set Header EIP を追加する
    • コンテンツベースルーターに Otherwise ブランチを追加する

前提条件

このチュートリアルを開始するには、以下のいずれかによる ZooOrderApp プロジェクトが必要です。

コンテンツベースルーターの追加および設定

ルートのコンテンツベースルーターを追加および設定するには、以下を実行します。

  1. Project ExplorerZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml をダブルクリックし、Editor ビューで開きます。
  2. Design キャンバスで To_Received ノードを選択し、ごみ箱アイコンを選択して削除します。
  3. PaletteRouting ドロワーを開き、Choice ( Choice icon ) パターンをクリックし、(Design キャンバスで) From_from1 ノードをクリックします。

    tutCBRaddChoice1

    Route_route1 コンテナーが展開され、Choice_choice1 ノードが追加されます。エラーアイコンは、Choice_choice1 ノードに子ノードが必要なことを示しています。子ノードは、次のステップで追加します。

  4. Routing ドロワーから、When ( When icon ) パターンをクリックし、キャンバスで Choice_choice1 ノードをクリックします。

    Choice_choice1 コンテナーが展開され、When_when1 ノードが追加されます。

    tutCBRaddWhen1

    When_when1 ノードに付随する warning icon は、1 つまたは複数の必要なプロパティー値を設定する必要があることを示しています。

    注記

    ツールは、Route コンテナーの無効なドロップポイントにパターンが追加されるのを防ぎます。

  5. キャンバスで When_when1 ノードを選択し、Properties ビューでそのプロパティーを開きます。

    tutCBRWhen1OpenProps
  6. Expression フィールドの drop-down menu icon ボタンをクリックして、利用可能なオプションのリストを開きます。
  7. テストメッセージは XML で記述されているため、xpath (XML クエリー言語用) を選択します。

    注記

    Expression 言語を選択すると、Properties ビューの Expression フィールドのすぐ下にインデントされたリストでそのプロパティーが表示されます。このインデントされたリストの Id プロパティーは、式の ID を設定します。Description フィールドに続く Id プロパティーによって When ノードの ID が設定されます。

  8. インデントされた Expression フィールドに /order/orderline/quantity/text() > 10 と入力します。

    この式は、quantity フィールドの値が 10 より大きいメッセージのみがルート内のこのパスを (invalidOrders フォルダーに) 移動することを指定します。

  9. 残りのプロパティーはそれぞれそのままにしておきます。

    注記

    Trim オプション (デフォルトで有効) は、メッセージの最初または末尾の空白および改行を削除します。

    tutCBRWhen1Props
  10. ルーティングコンテキストファイルを 保存 します。
  11. Source タブをクリックして、ルートの XML を表示します。

    tutCBRaddedSourceV

ロギングの追加および設定

ZooOrder アプリケーションの例で、ログメッセージを追加して、ルートを移動する XML メッセージを追跡できるようにします。ルートを実行すると、ログメッセージが Console ビューに表示されます。

以下の手順に従って、CBR ルートにロギングを追加します。

  1. Design タブの PaletteComponents ドロワーを開き、Log コンポーネント ( Log icon ) をクリックします。
  2. キャンバスで When_when1 ノードをクリックします。

    When_when1 コンテナーが展開され、Log_log1 ノードが追加されます。

    tutCBRlog1Added
  3. キャンバスで Log_log1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Message フィールドに The quantity requested exceeds the maximum allowed - contact customer. と入力します。

    tutCBRlog1Properties

残りのプロパティーはそのままにしておきます。

+

注記

ツールはログノードの id 値を自動的に生成します。ルートでトレースが有効になっている場合 (「8章ルートを通じたメッセージのトレース」のチュートリアルを参照)、Fuse Integration パースペクティブの Messages ビューで、ツールはログノードの Id フィールドの内容をメッセージインスタンスの Trace Node Id 列に挿入します。ルートが実行されるたびに、コンソール で、ログノードの Message フィールドの内容がログデータに追加されます。

  1. ルーティングコンテキストファイルを 保存 します。

メッセージヘッダーの追加および設定

メッセージヘッダーにはメッセージを処理するための情報が含まれます。

メッセージヘッダーを追加および設定するには、以下を実行します。

  1. PaletteTransformation ドロワーを開き、Set Header ( Set Header icon ) パターンをクリックします。
  2. キャンバスで Log_log1 ノードをクリックします。

    When_when1 コンテナーが展開され、SetHeader_setHeader1 ノードが追加されます。

    tutSetHead1Added
  3. キャンバスで SetHeader_setHeader1 ノードを選択し、Properties ビューでそのプロパティーを開きます。

    tutSetHeadPropEdNew
  4. Expression フィールドの drop-down menu icon ボタンをクリックして利用可能な言語のリストを開き、constant を選択します。
  5. インデントされた Expression フィールドに Invalid と入力します。
  6. Header Name フィールドに Destination と入力します。
  7. 残りのプロパティーはそのままにしておきます。

    tutSetHead1Properties2
  8. PaletteComponents ドロワーを開き、File ( File icon ) コンポーネントをクリックします。
  9. キャンバスで SetHeader_setHeader1 ノードをクリックします。

    When_when1 コンテナーが展開され、To_to1 ノードが追加されます。

    tutCBRWhen1TargetFile
  10. キャンバスで To_to1 ノードを選択し、Properties ビューでそのプロパティーを開きます。

    tutCBRNewTargetFileProps1
  11. Details タブで、directoryNameUri フィールドの target/messages/invalidOrders に置き換え、Id フィールドに _Invalid と入力します。

    tutCBRNewTargetFileProps2
  12. ルーティングコンテキストファイルを 保存 します。
  13. Source タブをクリックして、ルートの XML を表示します。

    tutCBRLogHeaderSourceV

有効な注文を処理するブランチの追加および設定

今のところ、CBR は無効な注文 (数量の値が 10 よりも大きい注文) が含まれるメッセージを処理します。

有効な注文 (When_when1 ノードに設定された XPath 式に一致しないすべての XML メッセージ) を処理するために、ルートの Otherwise ブランチを追加および設定するには、以下を実行します。

  1. PaletteRouting ドロワーを開き、Otherwise ( Otherwise icon ) パターンをクリックします。
  2. キャンバスで Choice_choice1 コンテナーをクリックします。

    tutCBRaddOtherwise

    Choice_choice1 コンテナーが展開され、Otherwise_otherwise1 ノードが追加されます。

  3. キャンバスで Otherwise_otherwise1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Id フィールドで、_otherwise1_elseValid に変更します。

    tutCBROtherwiseProps

Otherwise ブランチのロギングを設定するには、以下を実行します。

  1. PaletteComponents ドロワーを開き、Log ( Log icon ) コンポーネントをクリックします。
  2. キャンバスで Otherwise_elseValid ノードをクリックします。

    Otherwise-elseValid コンテナーが展開され、Log_log2 ノードが追加されます。

    tutCBROtherwiseLogAdd
  3. キャンバスで Log_log2 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Message フィールドに This is a valid order - OK to process. と入力します。

    tutCBROtherwiseLog2

    残りのプロパティーはそのままにしておきます。

  5. ルートを 保存 します。

Otherwise ブランチにメッセージヘッダーを設定するには、以下を実行します。

  1. PaletteTransformation ドロワーを開き、Set Header パターンをクリックします。
  2. キャンバスで Log_log2 ノードをクリックします。

    Otherwise_elseValid コンテナーが展開され、SetHeader_setHeader2 ノードが追加されます。

    tutCBRSetHead2Add
    注記

    多数のダイアグラムが表示されるようになったら、コンテナーを折りたたんでスペースを作ることができます。これを行うには、折りたたむコンテナーを選択して、その collapse icon ボタンをクリックします。

    tutCBRcollapseWhen1Container

    コンテナーを再度開くには、コンテナーを選択してからその expand icon ボタンをクリックします。

    tutCBRexpandWhen1Container

    Design タブでコンテナーを折りたたんだり展開したりしても、ルーティングコンテキストファイルには影響がありません。変更されないままです。

  3. キャンバスで SetHeader_setHeader2 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Expression フィールドの drop-down menu icon ボタンをクリックして利用可能な言語のリストを開き、constant を選択します。
  5. インデントされた Expression フィールドに ReadyForDispatcher と入力します。
  6. Header Name フィールドに Destination と入力します。
  7. 残りのプロパティーはそのままにしておきます。

    tutCBROtherwiseSetHeadProps2

有効なメッセージのターゲットフォルダーを指定するには、以下を実行します。

  1. PaletteComponents ドロワーを開き、File ( File icon ) コンポーネントを選択します。
  2. キャンバスで SetHeader_setHeader2 ノードをクリックします。

    Otherwise_elseValid コンテナーが展開され、To_to1 ノードが追加されます。

    tutCBROtherwiseFileAdd
  3. キャンバスで To_to1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. URI フィールドの directoryNametarget/messages/validOrders に置き換え、Id フィールドに _Valid と入力します。

    tutCBROtherwiseTargFile2
  5. ルーティングコンテキストファイルを 保存 します。

    設定の完了したコンテンツベースルーターは、以下のようになります。

    tutCBRfinalDesignV
  6. キャンバスの左下にある Source タブをクリックして、ルートの XML を表示します。

    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
        https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
        http://camel.apache.org/schema/blueprint
        http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
    
    <camelContext id="_context1" xmlns="http://camel.apache.org/schema/blueprint">
            <route id="_route1">
                <from id="_from1" uri="file:src/data?noop=true"/>
                <choice id="_choice1">
                    <when id="_when1">
                        <xpath>/order/orderline/quantity/text() &gt; 10</xpath>
                        <log id="_log1" message="The quantity requested exceeds the maximum allowed - contact customer."/>
                        <setHeader headerName="Destination" id="_setHeader1">
                            <constant>Invalid</constant>
                        </setHeader>
                        <to id="_Invalid" uri="file:target/messages/invalidOrders"/>
                    </when>
                    <otherwise id="_elseValid">
                        <log id="_log2" message="This is a valid order - OK to process."/>
                        <setHeader headerName="Destination" id="_setHeader2">
                            <constant>ReadyForDispatcher</constant>
                        </setHeader>
                        <to id="_Valid" uri="file:target/messages/validOrders"/>
                    </otherwise>
                </choice>
            </route>
        </camelContext>
    </blueprint>

CBR の確認

「ルートの実行」」チュートリアルで説明するように新しいルートを実行し、Console ビューを表示してログメッセージを確認します。

この実行後に、ルートが適切に実行されたかどうかを確認するには、Project Explorer でターゲットの宛先フォルダーを確認します。

  1. ZooOrderApp を選択します。
  2. これを右クリックしてコンテキストメニューを開き、Refresh を選択します。
  3. プロジェクトの root ノード (ZooOrderApp) で、target/messages/ フォルダーを見つけて展開します。

    message destinations
  4. target/messages/invalidOrders フォルダーに message1.xml および message3.xml が含まれていることを確認します。

    これらのメッセージでは、quantity 要素の値は 10 を超えます。

  5. target/messages/validOrders フォルダーに有効な注文が含まれる 4 つのメッセージファイルが含まれていることを確認します。

    • message2.xml
    • message4.xml
    • message5.xml
    • message6.xml

      これらのメッセージでは、quantity 要素の値は 10 以下です。

      注記

      メッセージの内容を表示するには、各メッセージをダブルクリックし、ルートエディターの XML エディターで開きます。

次のステップ

次のチュートリアル「6章ルーティングコンテキストへの別のルートの追加 」で、有効な注文メッセージをさらに処理する 2 番目のルートを追加します。

第6章 ルーティングコンテキストへの別のルートの追加

このチュートリアルでは、ZooOrderApp プロジェクトの blueprint.xml ファイルの Camel コンテキストに 2 番目のルートを追加する方法を説明します。2 番目のルートは以下の処理を行います。

  • 最初のルートの Otherwise ブランチの終端から直接メッセージ (有効な注文) を取得する。
  • 顧客の国に応じて有効なメッセージを並べ替える。
  • 各メッセージを ZooOrderApp/target/messages フォルダーの該当する country フォルダーに送信する。たとえば、Chicago 動物園からの注文は USA フォルダーにコピーされます。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • 2 番目のルートへの直接接続のために既存のルートを再設定する
  • Camel コンテキストに 2 番目のルートを追加する
  • 最初のルートの Otherwise ブランチから直接メッセージを取得するように 2 番目のルートを設定する
  • コンテンツベースルーターを 2 番目のルートに追加する
  • メッセージヘッダー、ロギング、およびターゲットの宛先を 2 番目のルートのコンテンツベースルーターの各出力ブランチに追加および設定する

前提条件

このチュートリアルを開始するには、以下のいずれかによる ZooOrderApp プロジェクトが必要です。

既存のルートのエンドポイントの再設定

既存のルートは、すべての有効な注文を target/messages/validOrders フォルダーに送信します。

このセクションでは、既存のルートのエンドポイント Otherwise _elseValid ブランチを再設定し、代わりに (次のセクションで作成する) 2 番目のルートに接続します。

2 番目のルートに直接接続するように既存のルートを設定するには、以下を実行します。

  1. ルートエディターで ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml を開きます。
  2. キャンバスで Route_route1 コンテナーを選択し、Properties ビューでそのプロパティーを開きます。
  3. Shutdown Route プロパティーまでスクロールダウンし、Default を選択します。
  4. キャンバスで終端ファイルノード To_Valid を選択し、そのプロパティーを Properties ビューで表示します。
  5. Uri フィールドで既存のテキストを削除して、direct:OrderFulfillment を入力します。
  6. Id フィールドに _Fulfill を入力します。
注記

既存の To_Valid 端末ファイルノードを再使用する代わりに、ComponentsDirect コンポーネントに移動してこれを置き換えることができます (再使用する To_Valid ノードと同じプロパティー値で設定する)。

Direct コンポーネントの詳細は、『Apache Camel Component Reference』を参照してください。

2 番目のルートの追加

別のルートをルーティングコンテキストに追加するには、以下の手順を実施します。

  1. PaletteRouting ドロワーを開き、Route ( Route icon ) パターンをクリックします。
  2. キャンバスで Route_route1 コンテナーの右をクリックします。

    tutRte2DropOnCanvas

    キャンバスで Route パターンが Route_route2 コンテナーノードになります。

  3. Route_route2 コンテナーノードをクリックして、Properties ビューでそのプロパティーを表示します。プロパティーはそのままにしておきます。
  4. ファイルを 保存 します。
注記

ルーティングコンテキストが複雑になると、作業中にルートエディターを個々のルートに集中させる必要がある場合があります。これを実行するには、Project Explorer で、ルートエディターがキャンバスで表示するルートをダブルクリックします (例: Route_route2)。

tutProjExSwitchRtesOnCanvas

キャンバスにルーティングコンテキストにあるすべてのルートを表示するには、Camel Contexts フォルダーの上部にあるプロジェクトの .xml コンテキストファイルエントリー (src/main/resources/OSGI-INF/…) をダブルクリックします。

USA の注文を処理する Choice ブランチの設定

このセクションでは、ルートに Choice ブランチを追加し、新しい target/messages/validOrders/USA フォルダーに USA からの注文を送信するようにルートを設定します。メッセージヘッダーとログファイルコンポーネントも設定します。

  1. PaletteComponents ドロワーを開き、Direct コンポーネント ( Direct icon ) を選択します。
  2. キャンバスで Route_route2 コンテナーをクリックします。

    Route_route2 コンテナーが拡張し、Direct コンポーネント (From_from2 ノード) が追加されます。

    tutCBRrte2From2Add
  3. キャンバスで From_from2 ノードをクリックし、Properties ビューでそのプロパティーを開きます。
  4. Uri フィールドの name (direct: の後) を OrderFulfillment に置き換え、Id フィールドに _direct:OrderFulfillment と入力します。

    tutCBRrte2From2Props
  5. PaletteRouting ドロワーを開き、Choice ( Choice icon ) パターンを選択します。
  6. キャンバスで From _direct:OrderFulfillment ノードをクリックします。

    Route_route2 コンテナーが展開され、Choice_choice2 ノードが追加されます。

    tutCBRrte2Choice2Added

    Properties ビューで、Choice_choice2 ノードのプロパティーをそのままにしておきます。

  7. Palette で Routing ドロワーを開き、When ( When icon ) パターンを選択します。
  8. キャンバスで Choice_choice2 ノードをクリックします。

    Choice_choice2 コンテナーが展開され、When_when2 ノードが追加されます。

    tutCBRrte2When2Added
  9. キャンバスで When_when2 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  10. When_when2 ノードのプロパティーを以下のように設定します。

    • Expression ドロップダウンリストから xpath を選択します。
    • インデントされた Expression フィールドに /order/customer/country = 'USA' と入力します。
    • Trim は有効のままにします。
    • 2 番目の Id フィールドに _when/usa と入力します。

      tutCBRrte2WhenUSAprops
  11. PaletteComponents ドロワーを開き、File コンポーネント ( File icon ) を選択します。
  12. キャンバスで When_when/usa コンテナーをクリックします。

    When_when/usa コンテナーが展開され、To_to1 ノードが追加されます。

  13. Properties ビューで、以下を実行します。

    tutRte2EndptUSA
    • Uri フィールドで、directoryNametarget/messages/validOrders/USA に置き換えます。
    • Id フィールドに _US と入力します。
  14. ファイルを 保存 します。

メッセージヘッダーを設定し、ログコンポーネントを追加するには、以下を実行します。

  1. PaletteTransformation ドロワーを開き、Set Header パターンを選択します。
  2. キャンバスで When_when/usa ノードをクリックします。

    When_when/usa コンテナーが展開され、SetHeader_setHeader3 ノードが追加されます。

    tutCBRrte2SetHeadUSAadd
  3. キャンバスで SetHeader_setHeader3 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. ノードのプロパティーを以下のように設定します。

    • Expression ドロップダウンメニューから、constant を選択します。
    • インデントされた Expression フィールドに USA と入力します。
    • Trim は有効のままにします。
    • Header Name フィールドに Destination と入力します。
    • 2 番目の Id フィールドに _setHead_usa と入力します。

      tutCRErte2SetHeadusaProps
  5. PaletteComponents ドロワーを開き、Log コンポーネント ( Log icon ) を選択します。
  6. キャンバスで SetHeader ノードの上をクリックします。

    When_when/usa コンテナーが展開され、Log_log3 ノードが追加されます。

    tutCBRrte2Log3Added
  7. キャンバスで Log_log3 ノードを選択し、Properties ビューでそのプロパティーを開きます。

    tutCBRrteLog3Props
  8. Properties ビューで、以下を実行します。

    • Message フィールドに Valid order - ship animals to USA customer と入力します。
    • Id フィールドに _usa と入力します。
    • Logging Level はそのままにします。

      tutCBRrte2Log3usaAdded
  9. ファイルを 保存 します。

    Route_route2 の USA ブランチは以下のようになります。

    tutUSAbranchRte2

ドイツの注文を処理する Otherwise ブランチの設定

キャンバスに Route_route2 が表示されている状態で、以下の操作を実施します。

  1. PaletteRouting ドロワーを開き、Otherwise パターン ( Otherwise icon ) を選択します。
  2. キャンバスで Choice_choice2 コンテナーをクリックします。

    Choice_choice2 コンテナーが展開され、Otherwise_otherwise1 ノードが追加されます。

    tutCBRrte2WhenGERAdd
  3. Otherwise_otherwise1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Properties ビューで、Id フィールドに _else/ger と入力します。
  5. PaletteTransformation ドロワーを開き、Set Header パターン ( Set Header icon ) を選択します。
  6. キャンバスで Otherwise_else/ger ノードをクリックします。

    Otherwise_else/ger コンテナーが展開され、SetHeader_setHeader3 ノードが追加されます。

    tutCBRrte2SetHeadGERAdd
  7. キャンバスで SetHeader_setHeader3 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  8. Properties ビューで、以下を実行します。

    • Expression ドロップダウンリストから constant を選択します。
    • 2 番目の Expression フィールドに Germany と入力します。
    • Trim はそのままにしておきます。
    • Header Name フィールドに Destination と入力します。
    • 2 番目の Id フィールドに _setHead_ger と入力します。
  9. PaletteComponents ドロワーを開き、Log パターン ( Log icon ) を選択します。
  10. キャンバスで SetHeader_setHead_ger ノードの下をクリックします。

    Otherwise_else/ger コンテナーが展開され、Log_log3 ノードが追加されます。必要に応じて、Log_log3 ノードから SetHeader_setHead_ger ノードにコネクターエラーをドラッグします。

    tutCBRrte2LogGERAdd
  11. キャンバスで Log_log3 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  12. Properties ビューで、以下を実行します。

    • Message フィールドに Valid order - ship animals to Germany customer と入力します。
    • Id フィールドに _ger と入力します。
    • Logging Level はそのままにします。
  13. Components ドロワーで File パターン ( File icon ) を選択し、Log_ger ノードの下をクリックします。

    Otherwise_else/ger コンテナーが展開され、To_to1 ノードが追加されます。必要に応じて、SetHeader_setHead_ger ノードから To_to1 ノードにコネクターエラーをドラッグします。

    tutCBRrte2GERtermFile
  14. キャンバスで To_to1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  15. Properties ビューで、以下を実行します。

    • Uri フィールドで、directoryNametarget/messages/validOrders/Germany に置き換えます。
    • Id フィールドに _GER と入力します。
  16. ファイルを 保存 します。

Route_route2 のドイツブランチは以下のようになります。

tutGERbranchRte2

2 番目のルートの確認

キャンバスのルートは以下のようになります。

設定の完了した route1

Completed first route in the ZooOrderApp routing context

設定の完了した route2

Completed second route in the ZooOrderApp routing context

キャンバスの下部の Source タブで、camelContext 要素の XML が 例6.1「デュアルルートのコンテンツベースルーターの XML」のように表示されるはずです。

例6.1 デュアルルートのコンテンツベースルーターの XML

<?xml version="1.0" encoding="UTF-8"?>

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
    https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
    http://camel.apache.org/schema/blueprint
    http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

    <camelContext id="_context1" xmlns="http://camel.apache.org/schema/blueprint">
       <route id="_route1" shutdownRoute="Default">
           <from id="_from1" uri="file:src/data?noop=true"/>
           <choice id="_choice1">
               <when id="_when1">
                   <xpath>/order/orderline/quantity/text() &gt; 10</xpath>
                   <log id="_log1" message="The quantity requested exceeds the maximum allowed - contact customer."/>
                   <setHeader headerName="Destination" id="_setHeader1">
                       <constant>Invalid</constant>
                   </setHeader>
                   <to id="_Invalid" uri="file:target/messages/invalidOrders"/>
               </when>
               <otherwise id="_elseValid">
                   <log id="_log2" message="This is a valid order - OK to process."/>
                   <setHeader headerName="Destination" id="_setHeader2">
                       <constant>ReadyForDispatcher</constant>
                   </setHeader>
                   <to id="_Fulfill" uri="direct:OrderFulfillment"/>
               </otherwise>
           </choice>
       </route>
       <route id="_route2">
           <from id="_direct:OrderFulfillment" uri="direct:OrderFulfillment"/>
           <choice id="_choice2">
               <when id="when/usa">
                   <xpath>/order/customer/country = 'USA'</xpath>
                   <log id="_usa" message="Valid order - ship animals to USA customer"/>
                   <setHeader headerName="Destination" id="_setHead_usa">
                       <constant>USA</constant>
                   </setHeader>
                   <to id="_US" uri="file:target/messages/validOrders/USA"/>
               </when>
               <otherwise id="_else/ger">
                   <log id="_ger" message="Valid order - ship animals to Germany customer"/>
                   <setHeader headerName="Destination" id="_setHead_ger">
                       <constant>Germany</constant>
                   </setHeader>
                   <to id="_GER" uri="file:target/messages/validOrders/Germany"/>
               </otherwise>
           </choice>
       </route>
   </camelContext>
</blueprint>
重要

ツールが shutdownRoute=" " 属性を 2 番目のルート要素 (<route id="route2">) に追加した場合は、その属性を削除します。そうしないと、ZooOrderApp プロジェクトの実行に失敗する可能性があります。

更新されたプロジェクトが予想通りに機能するようにするには、以下の手順に従います。

  1. ZooOrderApp/Camel Contexts/blueprint.xml をローカルの Camel コンテキスト (テストなし) として実行します。
  2. コンソールの出力の最後を確認します。以下の行が表示されるはずです。

    tutCBRrte2Console
  3. ターゲットの宛先フォルダーを確認し、ルートが適切に実行されたことを確認します。

    1. Project ExplorerZooOrderApp を右クリックし、Refresh を選択します。
    2. target/messages/ フォルダーを展開します。

      message*.xml ファイルが以下のように宛先フォルダー内で分散されるはずです。

      図6.1 Project Explorer でのターゲットメッセージの宛先

      message destinations

次のステップ

次のチュートリアル「7章ルーティングコンテキストのデバッグ」で、Fuse Tooling デバッガーの使用方法について説明しています。

第7章 ルーティングコンテキストのデバッグ

このチュートリアルでは、Camel デバッガーを使用して、ローカルで実行中のルーティングコンテキストについてのロジックエラーを見つける方法を説明します。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • 2 つのルートの対象ノードにブレークポイントを設定する
  • Debug パースペクティブでルート全体を確認し、メッセージ変数の値を調べる
  • 再度ルート全体を確認し、メッセージ変数の値の変更しその効果を確認する

前提条件

このチュートリアルを開始するには、以下のいずれかによる ZooOrderApp プロジェクトが必要です。

ブレークポイントの設定

デバッガーでは、条件付きおよび無条件のブレークポイントの両方を設定できます。このチュートリアルでは、無条件のブレークポイントのみを設定します。デバッグセッション中に特定の条件が満たされたときに発生する条件付きブレークポイントの設定方法については、『Tooling User Guide』を参照してください。

無条件ブレークポイントを設定するには、以下を実行します。

  1. 必要に応じて、ルートエディターで ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml を開きます。
  2. Project ExplorerCamel Contextssrc/main/resources/OSGI-INF/blueprint/blueprint.xml を展開して、両方のルートエントリーを表示します。
  3. Route_route1 エントリーをダブルクリックして、Design タブで Route_route1 にフォーカスを切り替えます。
  4. キャンバスで Choice_choice1 ノードを選択し、その red icon アイコンをクリックし、無条件のブレークポイントを設定します。

    BPnodeIcons
    forward nav
    BPnodeIcons2
    注記

    ルートエディターでは、ノードの gray icon アイコンまたはその delete icon アイコンをクリックし、特定のブレークポイントをそれぞれ無効にする、または削除することができます。キャンバスを右クリックし、Delete all breakpoints を選択して、設定したすべてのブレークポイントを削除できます。

  5. 以下の Route_Route1 ノードに無条件ブレークポイントを設定します。

    • Log_log1
    • SetHeader_setHeader1
    • To_Invalid
    • Log_log2
    • SetHeader_setHeader2
    • To_Fulfill
  6. Project Explorersrc/main/resources/OSGI-INF/blueprint の下にある Route_route2 をダブルクリックし、キャンバスで Route_route2 を開きます。
  7. 以下の Route_Route2 ノードに無条件ブレークポイントを設定します。

    • Choice_choice2
    • SetHeader_setHead_usa
    • Log_usa
    • To_US
    • SetHeader_setHead_ger
    • Log_ger
    • To_GER

ルーティングコンテキスト全体の確認

ルーティングコンテキスト全体の確認を 2 つの方法で行うことができます。

  • ステップオーバー ( Step Over icon ): ブレークポイントに関係なく、ルーティングコンテキスト内の次の実行ノードに移動します。
  • レジューム ( Resume icon ): ルーティングコンテキスト内の次のアクティブなブレークポイントに移動します。

    1. Project ExplorerZooOrderApp プロジェクトの Camel Contexts フォルダーを展開し、blueprint.xml ファイルを表示します。
    2. blueprint.xml ファイルを右クリックしてコンテキストメニューを開き、Debug AsLocal Camel Context (without tests) をクリックします。

      Camel デバッガーは、最初に発生したブレークポイントで実行を一時停止し、今 Debug パースペクティブを開くかどうかを尋ねます。

      tutCnfrmPerspSwitch
    3. Yes をクリックします。

      注記

      No をクリックすると、確認ペインが複数回表示されます。3 回拒否するとペインは消え、Camel デバッガーは実行を再開します。この時点でデバッガーと対話するには、WindowOpen Perspective → > Debug をクリックして Debug パースペクティブを開く必要があります。

      Debug ビューに示されるように、ルーティングコンテキストが _choice1 in _route1 [blueprint.xml] で一時停止された状態で Debug パースペクティブが開きます。

      tutDebugPerspOpen1
      注記

      ブレークポイントは、デバッガーが自動的に再開する前に最大 5 分間保持され、次のブレークポイントまたはルーティングコンテキストの最後のいずれかに移動します。

    4. Variables ビューでノードを展開し、各ノードで利用可能な変数および値を表示します。

      ルーティングコンテキスト全体を確認する際、最後のブレークポイントから値が変更された変数は黄色で強調表示されます。各ブレークポイントでノードを拡張して、変更された変数を表示する必要がある場合があります。

    5. Resume icon をクリックし、次のブレークポイント _log2 in _route1 [blueprint.xml] に移動します。

      tutDBResumeLog2Rte1
    6. Variables ビューでノードを展開し、_choice1 in Route1 [blueprintxt.xml] の最後のブレークポイントから変更された変数を確認します。
    7. Resume icon をクリックし、次のブレークポイント _setHeader2 in Route1 [blueprint.xml] に移動します。

      _log2 in Route1 [blueprint.xml] のブレークポイントから変更された変数 (黄色で強調表示) を検証します。

    8. Debug ビューで _log2 in _route1 [blueprint.xml] をクリックし、Variables ビューにブレークポイント _log2 in _route1 [blueprint.xml] からの変数の値を投入し素早く比較します。

      Debug ビューでは、同じメッセージフロー内のブレークポイント間を切り替えて、Variables ビュー内の変数の値をすばやく比較して監視することができます。

      注記

      メッセージフローの長さは異なる可能性があります。Route_route1InvalidOrders ブランチを移動するメッセージの場合、メッセージフローは短くなります。Route_route2 に続行する Route_route1ValidOrders ブランチを移動するメッセージでは、メッセージフローが長くなります。

    9. ルーティングコンテキスト全体の確認を続けます。1 つのメッセージがルーティングコンテキストを完了し、次のメッセージがそのコンテキストに入ると、Debug ビューに新しいメッセージフローが表示され、新しいブレッドクラム ID に関連付けられます。

      tutDBviewNextMsg

      この場合、ID-janemurpheysmbp-home-55846-1471374645179-0-3 は、ルーティングコンテキストに入った message2.xml に対応する 2 番目のメッセージフローを識別します。ブレッドクラム ID は 2 つ増えます。

      注記

      メッセージがルーティングコンテキストを通過しても、エクスチェンジとメッセージ ID は同じまま変更されません。これらの ID は、メッセージフローのブレッドクラム ID から構築され、1 つずつ増加します。そのため、message2.xml の場合、その ExchangeId および MessageIdID-janemurpheysmbp-home-55846-1471374645179-0-4 になります。

    10. message3.xml がブレークポイント _choice1 in _route_route1 [blueprint.xml] に入ると、Processor 変数を調べます。表示される値は、これまでルーティングコンテキストを移動した message1.xml および message2.xml の累積メトリクスです。

      tutMsg3Choice1Stats

      タイミングのメトリクスはミリ秒単位です。

    11. ルーティングコンテキスト全体で各メッセージの確認を続行し、各処理ステップで変数とコンソールの出力を調べます。message6.xml がブレークポイント To_GER in Route2 [blueprint.xml] に入ると、デバッガーはブレッドクラムスレッドのシャットダウンを開始します。
    12. メニューバーで Terminate icon をクリックし、Camel デバッガーを終了します。コンソールは終了しますが、出力を手動で消去する必要があります。

      注記

      Debug ビューの Camel Context ノードで選択されたスレッドまたはエンドポイントの場合、 Terminate icon を 2 回クリックする必要があります。1 回目でスレッドまたはエンドポイントを終了し 2 回目で Camel Context を終了してセッションを終了します。

    13. メニューバーで tutDebugPersp を右クリックしてコンテキストメニューを開き、Close を選択して Debug パースペクティブを閉じます。

      CodeReady Studio は、Camel デバッガーを起動したパースペクティブに自動的に戻ります。

    14. Project Explorer でプロジェクトを右クリックし、Refresh を選択して表示を更新します。

      注記

      すべてのメッセージがルーティングコンテキストを移動する前にセッションを途中で終了した場合、ZooOrderApp/src/data フォルダーに message3.xml.camelLock のようなメッセージが表示されることがあります。プロジェクト上でデバッガーを再度実行する前に、これを削除する必要があります。これを行うには、.camelLock メッセージをダブルクリックしてコンテキストメニューを開き、Delete を選択します。確認を受けたら、OK をクリックして削除を確定します。

    15. ZooOrderApp/target/messages/ ディレクトリーを展開して、メッセージが予想される宛先に配信されていることを確認します。

      tutDualCBRrteVerify

すべてのブレークポイントが設定され有効になっている状態で、ルーティングコンテキストをそのままにしておきます。

変数の値の変更

このセクションでは、メッセージがルーティングコンテキストを通過する際に変数の値がどのように変更されるかを簡単に確認するために、ウォッチリストに変数を追加します。メッセージの本文にある変数の値を変更して、その変更がルーティングコンテキストを介したメッセージのルートにどのような影響を与えるかを確認します。

  1. ZooOrderApp プロジェクトで Camel デバッガーを再度実行するには、blueprint.xml ファイルを右クリックして、Debug AsLocal Camel Context (without tests) をクリックします。
  2. 最初のブレークポイント _choice1 in _route1 [blueprint.xml] で停止した message1 の場合、変数 NodeId および RouteId (Exchange カテゴリー内) ならびに MessageBody および CamelFileName (Message カテゴリー内) をウォッチリストに追加します。

    4 つの変数それぞれについて、以下を実行します。

    1. Variables ビューで、適切なカテゴリーを展開してターゲット変数を表示します。
    2. 変数 (ここでは Exchange カテゴリーの NodeId) を右クリックしてコンテキストメニューを開き、Watch を選択します。

      FTVarNodeIDWatch

      Expressions タブが開き、監視するために選択した変数が一覧表示されます。

      FTWatchM1NodeId
      注記

      ウォッチリストを作成すると、対象の複数変数の現在値を迅速に確認するのが楽になります。

  3. 4 番目のブレークポイント _Fulfill in _route1 [blueprint.xml] に到達するまで、ルーティングコンテキスト全体で message1 を確認します。
  4. Variables ビューで、Message カテゴリーを展開します。
  5. 変数 Destination を監視リストに追加します。

    Expressions ビューに以下の変数が含まれているはずです。

    FTWatchM1R1toFfil
    注記
    • 変数リストの下にあるペインには、選択した変数の値が表示されます。
    • Expressions ビューは、明示的に削除されるまで、リストに追加する変数をすべて保持します。
  6. 残りのルーティングコンテキスト全体で message1 を確認し、次にルーティングコンテキスト全体で message2 を確認します。
  7. _choice1 in _route1 [blueprint.xml]message3 を停止します。
  8. Variables ビューで Message カテゴリーを展開し、MessageBody 変数を表示します。
  9. MessageBody を右クリックしてコンテキストメニューを開き、Change Value を選択します。

    tutVarChngMenuMsg2
  10. (これを無効な注文から有効な注文に変更するため)、quantity の値を 15 から 10 に変更します。

    tutChgVarsMsg2

    この操作により、インメモリーの値のみが変更されます (message3.xml ファイルは編集されません)。

  11. OK をクリックします。
  12. Expressions ビューに切り替え、MessageBody 変数を選択します。

    変数リストの下にあるペインには message3 のボディー全体が表示され、注文アイテムの現在の値を簡単に確認することができます。

    FTWatchM2R1toFfilVarChng
  13. Resume icon をクリックし、次のブレークポイントに移動します。

    To_Invalid につながるブランチに従う代わりに、message3To_Fulfill および Route_route2 につながるブランチに従うようになりました。

Camel デバッガーのフォーカスの絞り込み

ブレークポイントを無効化して再有効化することで、デバッガーのフォーカスを一時的に絞り込み、再び拡大できます。

  1. ルーティングコンテキスト全体で message4 を確認し、各ステップで Debug ビュー、Variables ビュー、および Console の出力をチェックします。
  2. _choice1 in _route1 [blueprint.xml]message4 を停止します。
  3. Breakpoints ビューに切り替え、_choice1 の下に一覧表示されるブレークポイントの横にある各チェックボックスのチェックを外します。ブレークポイントのチェックボックスをクリアすると、一時的に無効になります。

    tutBreakptsDisabled
  4. Resume icon をクリックし、次のブレークポイントに移動します。

    tutMsg3toFulfillRte1

    デバッガーは、無効なブレークポイントをバイパスし、_FulFill in _route1 [blueprint.xml] にジャンプします。

  5. Resume icon を再度クリックして、次のブレークポイントに移動します。

    tutMsg3toUKRte2

    デバッガーは _GER in _route2 [blueprint.xml] へジャンプします。

  6. Resume icon を繰り返しクリックして、ルーティングコンテキスト全体で message5 および message6 素早く確認します。
  7. Breakpoints ビューに切り替え、すべてのブレークポイントの横にあるボックスにチェックマークを入れて、再度有効にします。

メッセージ変数値変更の影響の確認

デバッガーを停止し、message1 の数量変数の値を変更した結果を確認するには、以下の手順を実施します。

  1. ツールバーで Terminate icon をクリックし、Camel デバッガーを終了します。

    tutDBTerminateNorm
  2. コンソールの Clear output icon ボタンをクリックして出力を消去します。
  3. Debug パースペクティブを閉じ、Camel デバッガーを起動したパースペクティブに戻ります。
  4. Project Explorer で表示を更新します。
  5. ZooOrderApp/target/messages/ ディレクトリーを展開して、メッセージが想定どおりに配信されたかどうかを確認します。

    tutPETargetDestsChngedVars

    message1 のみが invalidOrders に送信され、message3.xmlvalidOrders/Germany フォルダーに表示されていることが確認できるはずです。

次のステップ

8章ルートを通じたメッセージのトレース」チュートリアルで、ルーティングコンテキストを通じてメッセージを追跡し、ルーティングコンテキストのパフォーマンスを最適化および微調整できる場所を決定します。

第8章 ルートを通じたメッセージのトレース

トレースを使用すると、メッセージがあるノードから別のノードにルーティングされる時に、メッセージをインターセプトできます。ルーティングコンテキストを通じてメッセージを追跡し、ルーティングコンテキストのパフォーマンスを最適化および微調整できる場所を把握することができます。このチュートリアルでは、ルートを通じてメッセージを追跡する方法を説明します。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • Fuse Integration パースペクティブで ZooOrderApp を実行する
  • ZooOrderApp でトレースを有効にする
  • ZooOrderApp にメッセージをドロップし、すべてのルートノードを通じてメッセージを追跡する

前提条件

このチュートリアルを開始するには、以下のいずれかによる ZooOrderApp プロジェクトが必要です。

Fuse Integration パースペクティブの設定

メッセージのトレースを容易にするためにワークスペースを設定するには、以下を実行します。

  1. ツールバーの右側にある Open Perspective icon ボタンをクリックし、リストから Fuse Integration を選択します。

    tutPerspListFIPselected

    デフォルトのレイアウトで Fuse Integration パースペクティブが開きます。

    TutFIP 63
  2. JMX Navigator タブを右端の Terminal タブにドラッグし、そこにドロップします。

    ftTutFIPrearrange

    この配置により、Diagram View がルーティングコンテキストのノードをグラフィカルに表示するスペースが多くなり、メッセージがルーティングコンテキストを移動する際にたどるパスを視覚的にトレースするのが容易になります。

    注記

    ルーティングコンテキストの .xml ファイルへのアクセスを容易にするために (特にプロジェクトが複数のコンテキストで構成される場合)、このツールは Project ExplorerCamel Contexts フォルダーにコンテキストを一覧表示します。

    また、ルーティングコンテキストのすべてのルートは、そのコンテキストファイルエントリーのすぐ下にアイコンとして表示されます。キャンバスにルーティングコンテキストの 1 つのルートを表示するには、Project Explorer でそのアイコンをダブルクリックします。ルーティングコンテキストのすべてのルートを表示するには、コンテキストファイルエントリーをダブルクリックします。

    TutCamelContextsFolderPE

メッセージトレースの開始

ZooOrderApp プロジェクトでメッセージのトレースを開始するには、以下を実行します。

  1. Project ExplorerZooOrderApp プロジェクトを展開し、src/main/resources/OSGI-INF/blueprint/blueprint.xml を表示します。
  2. src/main/resources/OSGI-INF/blueprint/blueprint.xml を右クリックしてコンテキストメニューを開きます。
  3. Run AsLocal Camel Context (without tests) を選択します。

    注記

    Local Camel Context を選択すると、ZooOrderApp プロジェクトの JUnit テストがまだ作成されていないため、ツールはテストのない実行に戻します。JUnit テストの作成は、後ほど「9章JUnit を使用したルートのテスト」で実行します。

  4. JMX Navigator で、Local Processes を展開します。

    tutMsgTrJMXLocalProcessess
  5. maven [ID] ノードを右クリックし、Connect を選択します。
  6. ルートの要素を展開します。

    tutMsgTrJMXLCCexpanded
  7. Routes ノードを右クリックし、Start Tracing を選択します。

    tutTraceStart

    ツールは、Diagram View でルーティングコンテキストのグラフィカル表示を表示します。

    tutDiagramNodes

    すべてのメッセージフローパスを明確に表示するには、Diagram View タブで適切にフィットするようにノードをドラッグして、ノードを再配置する必要があります。また、Diagram View タブが拡張できるように、Red Hat CodeReady Studio の他のビューおよびタブのサイズを調整しなければならない場合もあります。

実行中の ZooOrderApp プロジェクトへのメッセージのドロップ

実行中の ZooOrderApp プロジェクトにメッセージをドロップするには、以下を行います。

  1. Project ExplorerZooOrderApp/src/data を展開し、メッセージファイル (message1.xml から message6.xml) にアクセスできるようにします。

    tutMsgFiles
  2. message1.xml をドラッグし、JMX Navigator_context1>Endpoints>file>src/data?noop=true ノードにドロップします。

    tutJMXLocalCntxtExpanded

    メッセージがルートを移動するにつれ、ツールがトレースし、各ステップでの経過を記録します。

Messages View の設定

メッセージトレースを表示するには、Messages View をリフレッシュする必要があります。また、すべてのメッセージトレースで列を維持する場合には、Messages View の列を設定する必要もあります。

  1. Messages View を開きます。
  2. パネルのメニューバー右上にある refresh (リフレッシュボタン) をクリックし、表示に message1.xml のメッセージトレースを反映させます。
  3. パネルのメニューバーの View Menu icon アイコンをクリックし、Configure Columns を選択して Configure Columns ウィザードを開きます。

    TutConfigColsDefaults
    注記

    ルーティングコンテキストでメッセージに設定するメッセージヘッダー (Destination) がリストに表示されることに注意してください。

    項目を選択または選択解除して、Messages View に項目を追加または除外することができます。選択した個々の項目を強調表示し、リストで上下に移動することで、Messages View で項目が表示される列の順番を再編成できます。

  4. Configure Columns ウィザードで、このように列を選択して順序付けします。

    tutMsgVCnfgColsMnu

    これらの列とその順序は、列を変更するまで Messages View で維持されます。

注記

ツールのすべての表で列のレイアウトを制御できます。ドラッグメソッドを使用して、表のフォーマットを一時的に再配置します。たとえば、列の境界線ルールをドラッグして、その幅を拡大または縮小します。列を非表示にするには、その境界線を完全に縮小します。列ヘッダーをドラッグして、表内で列を移動させます。配置を維持したいときは、代わりに ViewConfigure Columns メソッドを使用する必要があります。

メッセージトレース全体の確認

メッセージトレース全体を確認するには、以下を行います。

  1. message2.xml をドラッグし、JMX Navigator_context1>Endpoints>file>src/data?noop=true ノードにドロップします。
  2. Console から Messages View に切り替えます。
  3. Messages Viewrefresh (リフレッシュボタン) をクリックし、表示に message2.xml のメッセージトレースを反映させます。

    JMX Navigator にメッセージをドロップするたびに、Messages View を更新して、メッセージトレースを反映させる必要があります。

  4. メッセージトレースのいずれかをクリックし、Properties ビューでその詳細を表示します。

    tutTraceDetails2

    ツールは、Properties ビューの上半分にメッセージトレースの詳細 (設定されている場合はメッセージヘッダーを含む) を表示し、Properties ビューの下半分にメッセージインスタンスの内容を表示します。そのため、アプリケーションがルート内の任意のステップでヘッダーを設定した場合、Message Details を確認して、想定通りに設定されたかどうかを確認することができます。

    各インスタンスを強調表示し、特定のメッセージがどのようにルートを移動したかや、ルートの各ステップで期待したとおりに処理されたかどうかを調べて、メッセージインスタンス全体を確認することができます。

  5. Diagram View を開いて、ルート内の関連付けられたステップが強調表示されていることを確認します。

    TutMsgTraceDiagNode

    ツールは、ルートを Diagram View に表示し、処理のステップを終了するパスをタイミングおよびパフォーマンスメトリクス (ミリ秒単位) にタグ付けします。ダイアグラムには、メトリクス Total exchanges だけが表示されます。

  6. 表示されるメトリクスにマウスポインターをかざして、メッセージフローに関する追加のメトリクスを表示します。

    tutDVnodeMetrics
    • メッセージ処理のステップにかかった平均時間
    • メッセージ処理のステップにかかった最大時間
    • メッセージ処理のステップにかかった最小時間
  7. 任意で、トレースが有効であれば、いつでも ZooOrderApp/src/data/ の残りのメッセージを JMX Navigator_context1>Endpoints>file>src/data?noop=true ノードにドラッグし、ドロップすることができます。

    後続のドロップごとに、 refresh (リフレッシュボタン) をクリックして、Messages View に新しいメッセージトレースを反映させるようにしてください。

  8. 完了時には、以下を実行します。

    • JMX Navigator_context1 を右クリックし、Stop Tracing Context を選択します。
    • Console を開き、パネルの右上にある Stop icon ボタンをクリックしてコンソールを停止します。次に、 Clear icon ボタンをクリックして、コンソールの出力を消去します。

次のステップ

9章JUnit を使用したルートのテスト」チュートリアルで、プロジェクトの JUnit テストケースを作成し、プロジェクトを Local Camel Context として実行します。

第9章 JUnit を使用したルートのテスト

このチュートリアルでは、New Camel Test Case ウィザードを使用してルートのテストケースを作成し、ルートをテストする方法を説明します。

概要

New Camel Test Case ウィザードは、定形の JUnit テストケースを生成します。ルートを作成または変更する場合 (例: プロセッサーをさらに追加する場合)、テストケースを作成または生成されたテストケースを変更して、作成または更新したルートに固有の期待値およびアサーションを追加する必要があります。これにより、テストがルートに対して有効になります。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • JUnit テストケースを保存する /src/test/ フォルダーを作成する
  • ZooOrderApp プロジェクトの JUnit テストケースを生成する
  • 新たに生成された JUnit テストケースを変更する
  • ZooOrderApp プロジェクトの pom.xml ファイルを変更する
  • 新しい JUnit テストケースで ZooOrderApp を実行する
  • 出力を確認する

前提条件

  1. このチュートリアルを開始するには、以下のいずれかによる ZooOrderApp プロジェクトが必要です。

  2. Project Explorer で、ZooOrderApp プロジェクトの /src/data/ ディレクトリーおよび /target/messages/ サブディレクトリーからトレースにより生成されたメッセージを削除します。トレースにより生成されたメッセージは、ID- 接頭辞で始まります。たとえば、図9.1「トレースにより生成されたメッセージ」には、8 つのトレースにより生成されたメッセージが表示されています。

    図9.1 トレースにより生成されたメッセージ

    tutTraceGenMsgs

    すべてのトレースにより生成されたメッセージをバッチで選択し、右クリックしてから Delete を選択します。

src/test フォルダーの作成

ZooOrderApp プロジェクトの JUnit テストケースを作成する前に、ビルドパスに含まれるフォルダーを作成する必要があります。

  1. Project ExplorerZooOrderApp プロジェクトを右クリックし、NewFolder を選択します。
  2. New Folder ダイアログで、プロジェクトツリーペインで ZooOrderApp ノードを展開し、src フォルダーを選択します。

    ZooOrderApp/srcEnter or select the parent folder フィールドに表示されるようにしてください。

  3. Folder name/test/java を入力します。

    tutCreateJUnitTestFolder
  4. Finish をクリックします。

    Project Explorer では、src/main/resources フォルダーの下に新しい src/test/java フォルダーが表示されます。

    tutTestFolderAdded
  5. 新しい /src/test/java フォルダーがビルドパスに含まれていることを確認します。

    1. Project Explorer/src/test/java フォルダーを右クリックし、コンテキストメニューを開きます。
    2. Build Path を選択してメニューオプションを表示します。

      Remove from Build Path のメニューオプションで、/src/test/java フォルダーが現在ビルドパスに含まれていることが確認できます。

      tutJavaFolderOnBldPath

JUnit テストケースの作成

ZooOrderApp プロジェクトの JUnit テストケースを作成するには、以下を実行します。

  1. Project Explorersrc/test/java を選択します。
  2. 右クリックして NewCamel Test Case の順に選択します。

    NewCamTstCaseTut
  3. Camel JUnit Test Case ウィザードで、Source folder フィールドに ZooOrderApp/src/test/java が含まれていることを確認します。適切なフォルダーを見つけるには、 browse button をクリックします。
  4. Package フィールドに、tutorial.zooapp.route を入力します。このパッケージが、新しいテストケースに含まれます。
  5. Camel XML file under test フィールドで、 browse button をクリックし、XML ファイルをフィルターするように設定されたファイルエクスプローラーを開き、ZooOrderApp プロジェクトの blueprint.xml ファイルを選択します。

    tutCamXMLUnderTst
  6. OK をクリックします。Name フィールドは、デフォルトで BlueprintXmlTest に設定されます。

    tutCamJUnitTstPgComplete
  7. Next をクリックして Test Endpoints ページを開きます。

    デフォルトでは、すべてのエンドポイントが選択され、テストケースに含まれます。

  8. Finish をクリックします。

    注記

    プロンプトが表示されたら、JUnit をビルドパスに追加します。

テストのアーティファクトはプロジェクトに追加され、src/test/java の下にある Project Explorer に表示されます。テストケースを実装するクラスは、ツールの Java エディターで開きます。

package tutorial.zooapp.route;

import org.apache.camel.EndpointInject;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.blueprint.CamelBlueprintTestSupport;
import org.junit.Test;

public class BlueprintXmlTest extends CamelBlueprintTestSupport {

	// TODO Create test message bodies that work for the route(s) being tested
	// Expected message bodies
	protected Object[] expectedBodies = { "<something id='1'>expectedBody1</something>",
			"<something id='2'>expectedBody2</something>" };
	// Templates to send to input endpoints
	@Produce(uri = "file:src/data?noop=true")
	protected ProducerTemplate inputEndpoint;
	@Produce(uri = "direct:OrderFulfillment")
	protected ProducerTemplate input2Endpoint;
	// Mock endpoints used to consume messages from the output endpoints and then perform assertions
	@EndpointInject(uri = "mock:output")
	protected MockEndpoint outputEndpoint;
	@EndpointInject(uri = "mock:output2")
	protected MockEndpoint output2Endpoint;
	@EndpointInject(uri = "mock:output3")
	protected MockEndpoint output3Endpoint;
	@EndpointInject(uri = "mock:output4")
	protected MockEndpoint output4Endpoint;

	@Test
	public void testCamelRoute() throws Exception {
		// Create routes from the output endpoints to our mock endpoints so we can assert expectations
		context.addRoutes(new RouteBuilder() {
			@Override
			public void configure() throws Exception {
				from("file:target/messages/invalidOrders").to(outputEndpoint);
				from("file:target/messages/validOrders/USA").to(output3Endpoint);
				from("file:target/messages/validOrders/Germany").to(output4Endpoint);
			}
		});

		// Define some expectations

		// TODO Ensure expectations make sense for the route(s) we're testing
		outputEndpoint.expectedBodiesReceivedInAnyOrder(expectedBodies);

		// Send some messages to input endpoints
		for (Object expectedBody : expectedBodies) {
			inputEndpoint.sendBody(expectedBody);
		}

		// Validate our expectations
		assertMockEndpointsSatisfied();
	}

	@Override
	protected String getBlueprintDescriptor() {
		return "OSGI-INF/blueprint/blueprint.xml";
	}

}

この生成された JUnit テストケースは ZooOrderApp プロジェクトには不十分なため、正常に実行できません。「BlueprintXmlTest ファイルの変更」および「pom.xml ファイルの変更」に記載されているように、テストケースおよびプロジェクトの pom.xml を変更する必要があります。

BlueprintXmlTest ファイルの変更

BlueprintXmlTest.java ファイルを以下のように変更する必要があります。

  • 必要なファイル関数をサポートする複数のクラスをインポートする
  • さまざまなソース .xml ファイルの内容を保持する変数を作成する
  • ソース .xml ファイルの内容を読み取る
  • 適切な期待値を定義する

以下の手順にしたがって BlueprintXmlTest.java ファイルを変更します。

  1. Project ExplorerZooOrderApp プロジェクトを展開し、BlueprintXmlTest.java ファイルを表示します。

    tutBlueprintXMLTestProjExp
  2. BlueprintXmlTest.java ファイルを開きます。
  3. Java エディターで import org.apache.camel.EndpointInject; の横にある展開ボタンをクリックしてリストを展開します。
  4. 太字テキストの 2 行を追加します。最初の行を追加するとエラーが発生しますが、次のセクションで指示どおりに pom.xml ファイルを更新すると解決されます。

    package tutorial.zooapp.route;
    
    import org.apache.camel.EndpointInject;
    import org.apache.camel.Produce;
    import org.apache.camel.ProducerTemplate;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.component.mock.MockEndpoint;
    import org.apache.camel.test.blueprint.CamelBlueprintTestSupport;
    import org.apache.commons.io.FileUtils;
    import org.junit.Test;
    import java.io.File;
  5. // Expected message bodies のすぐ後の行までスクロールします。
  6. それらの行 (protected Object[] expectedBodies={ …… expectedBody2</something>"};) を、以下の protected String body#; 行に置き換えます。

    protected String body1; protected String body2; protected String body3; protected String body4; protected String body5; protected String body6;
  7. public void testCamelRoute() throws Exception { 行までスクロールし、そのすぐ後に以下に示す body# = FileUtils.readFileToString(new File("src/data/message#.xml"), "UTF-8"); 行を挿入します。これらの行は、次のセクションで指示どおりに pom.xml ファイルを更新するまでエラーを示します。

    // Valid orders body2 = FileUtils.readFileToString(new File("src/data/message2.xml"), "UTF-8"); body4 = FileUtils.readFileToString(new File("src/data/message4.xml"), "UTF-8"); body5 = FileUtils.readFileToString(new File("src/data/message5.xml"), "UTF-8"); body6 = FileUtils.readFileToString(new File("src/data/message6.xml"), "UTF-8"); // Invalid orders body1 = FileUtils.readFileToString(new File("src/data/message1.xml"), "UTF-8"); body3 = FileUtils.readFileToString(new File("src/data/message3.xml"), "UTF-8");
  8. // TODO Ensure expectations make sense for the route(s) we’re testing のすぐ後の行までスクロールします。
  9. outputEndpoint.expectedBodiesReceivedInAnyOrder(expectedBodies); で始まり、inputEndpoint.sendBody(expectedBody); } で終わるコードのブロックを、以下に表示される行に置き換えます。

    // Invalid orders outputEndpoint.expectedBodiesReceived(body1, body3); // Valid orders for USA output3Endpoint.expectedBodiesReceived(body2, body5, body6); // Valid order for Germany output4Endpoint.expectedBodiesReceived(body4);

    残りのコードはそのまま残します。

  10. ファイルを保存します。
  11. 更新された BlueprintXmlTest.java ファイルに必要な変更が反映されていることを確認します。以下のようになるはずです。

    package tutorial.zooapp.route;
    
    import org.apache.camel.EndpointInject;
    import org.apache.camel.Produce;
    import org.apache.camel.ProducerTemplate;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.component.mock.MockEndpoint;
    import org.apache.camel.test.blueprint.CamelBlueprintTestSupport;
    import org.apache.commons.io.FileUtils;
    import org.junit.Test;
    import java.io.file;
    
    public class BlueprintXmlTest extends CamelBlueprintTestSupport {
    
    	// TODO Create test message bodies that work for the route(s) being tested
    	// Expected message bodies
    	protected String body1;
    	protected String body2;
    	protected String body3;
    	protected String body4;
    	protected String body5;
    	protected String body6;
    	// Templates to send to input endpoints
    	@Produce(uri = "file:src/data?noop=true")
    	protected ProducerTemplate inputEndpoint;
    	@Produce(uri = "direct:OrderFulfillment")
    	protected ProducerTemplate input2Endpoint;
    	// Mock endpoints used to consume messages from the output endpoints and then perform assertions
    	@EndpointInject(uri = "mock:output")
    	protected MockEndpoint outputEndpoint;
    	@EndpointInject(uri = "mock:output2")
    	protected MockEndpoint output2Endpoint;
    	@EndpointInject(uri = "mock:output3")
    	protected MockEndpoint output3Endpoint;
    	@EndpointInject(uri = "mock:output4")
    	protected MockEndpoint output4Endpoint;
    
    	@Test
    	public void testCamelRoute() throws Exception {
    		// Create routes from the output endpoints to our mock endpoints so we can assert expectations
    		context.addRoutes(new RouteBuilder() {
    			@Override
    			public void configure() throws Exception {
    				// Valid orders
    				body2 = FileUtils.readFileToString(new File("src/data/message2.xml"), "UTF-8");
    				body4 = FileUtils.readFileToString(new File("src/data/message4.xml"), "UTF-8");
    				body5 = FileUtils.readFileToString(new File("src/data/message5.xml"), "UTF-8");
    				body6 = FileUtils.readFileToString(new File("src/data/message6.xml"), "UTF-8");
    
    				// Invalid orders
    				body1 = FileUtils.readFileToString(new File("src/data/message1.xml"), "UTF-8");
    				body3 = FileUtils.readFileToString(new File("src/data/message3.xml"), "UTF-8");
    
    				from("file:target/messages/invalidOrders").to(outputEndpoint);
    				from("file:target/messages/validOrders/USA").to(output3Endpoint);
    				from("file:target/messages/validOrders/Germany").to(output4Endpoint);
    				from("direct:OrderFulfillment").to(output2Endpoint);
    			}
    		});
    
    		// Define some expectations
    
    		// TODO Ensure expectations make sense for the route(s) we're testing
    		// Invalid orders
    		outputEndpoint.expectedBodiesReceived(body1, body3);
    
    		// Valid orders for USA
    		output3Endpoint.expectedBodiesReceived(body2, body5, body6);
    
    		// Valid order for Germany
    		output4Endpoint.expectedBodiesReceived(body4);
    
    		// Validate our expectations
    		assertMockEndpointsSatisfied();
    	}
    
    	@Override
    	protected String getBlueprintDescriptor() {
    		return "OSGI-INF/blueprint/blueprint.xml";
    	}
    
    }

pom.xml ファイルの変更

commons-io プロジェクトの依存関係を ZooOrderApp プロジェクトの pom.xml ファイルに追加する必要があります。

  1. Project Explorer で、target フォルダーの下の pom.xml を選択し、ツールの XML エディターで開きます。
  2. ページの下部にある pom.xml タブをクリックして、ファイルを表示して編集します。
  3. <dependencies> セクションの最後に以下の行を追加します。

    <dependency>
           <groupId>commons-io</groupId>
           <artifactId>commons-io</artifactId>
           <version>2.5</version>
           <scope>test</scope>
    </dependency>
  4. ファイルを保存します。

JUnit テストの実行

テストを実行するには、以下を実行します。

  1. JBoss パースペクティブに切り替え、より多くのワークスペースを確保します。
  2. Project ExplorerZooOrderApp プロジェクトを右クリックします。
  3. Run AsJUnit Test を選択します。

    デフォルトでは、JUnit ビューがサイドバーで開きます (より見易くするには、ConsoleServers、および Properties タブが表示される右下のパネルにドラッグします)。

    注記

    プロジェクトで JUnit を始めて実行する際に、テストに失敗する場合があります。テストを再実行すると、正常な結果が得られます。

    テストが正常に実行されると、以下のような結果が表示されます。

    図9.2 正常な JUnit の実行

    JUnit success

    テストに失敗すると、以下のような結果が表示されます。

    図9.3 失敗した JUnit の実行

    JUnit failure
    注記

    実行環境が Java SE 8 に設定されていない場合、JUnit は失敗します。JUnit タブの上部にあるメッセージバーは、正しい SDK を検出できないことを示すエラーメッセージを表示します。

    この問題を解決するには、プロジェクトのコンテキストメニューを開き、Run AsRun ConfigurationsJRE の順に選択します。Execution environment フィールドの横にある Environments ボタンをクリックして、Java SE 8 環境を見つけて選択します。

  4. 出力を確認し、テストの失敗を解決するアクションを実行します。

    JUnit パネルに表示されるエラーの詳細を確認するには、パネルのメニューバーで Maximize button をクリックしてビューを最大化します。

    JUnit テストケースを再度実行する前に、Project Explorer で ZooOrderApp プロジェクトの /src/data フォルダーから JUnit が生成するテストメッセージを削除します (図9.1「トレースにより生成されたメッセージ」を参照)。

関連資料

JUnit テストの詳細は、JUnit を参照してください。

次のステップ

10章Red Hat Fuse へのプロジェクトのパブリッシュ」チュートリアルで、Apache Camel プロジェクトを Red Hat Fuse に公開する方法を説明します。

第10章 Red Hat Fuse へのプロジェクトのパブリッシュ

このチュートリアルでは、プロジェクトを Red Hat Fuse にパブリッシュするプロセスについて順を追って説明します。Red Hat Fuse Tooling を実行しているマシンと同じマシンに Red Hat Fuse のインスタンスがインストールされていることを前提とします。

ゴール

このチュートリアルでは、以下のタスクを実行します。

  • Red Hat Fuse サーバーを定義する
  • パブリッシュオプションを設定する
  • Red Hat Fuse サーバーを起動し、ZooOrderApp プロジェクトをパブリッシュする
  • Red Hat Fuse サーバーに接続する
  • ZooOrderApp プロジェクトのバンドルが正常にビルドされ、公開されたかどうかを確認する
  • ZooOrderApp プロジェクトをアンインストールする

前提条件

このチュートリアルを開始するには、以下の項目が必要です。

  • Red Hat Fuse インスタンスへのアクセス権限
  • お使いのコンピューターに Java 8 がインストールされていること
  • 以下のいずれかによる ZooOrderApp プロジェクト

Red Hat Fuse サーバーの定義

サーバーを定義するには、以下を実行します。

  1. Fuse Integration パースペクティブを開きます。
  2. パネル右下の Servers タブをクリックして、Servers ビューを開きます。
  3. No servers are available. Click this link to create a new server… のリンクをクリックして、Define a New Server ページを開きます。

    注記

    サーバーがすでに定義されているときに新しいサーバーを定義するには、Servers ビュー内で右クリックして NewServer を選択します。

  4. Red Hat JBoss Middleware ノードを展開して、利用可能なサーバーオプションを表示します。

    tutDefineNewServer
  5. Red Hat Fuse サーバーを選択します。
  6. Server’s host name および Server name のデフォルト値 (それぞれ localhost および Fuse n.n Runtime Server) を受け入れ、Next をクリックして Runtime ページを開きます。

    tutFuseRuntimeDef1
    注記

    Fuse がインストールされていない場合は、Download and install runtime リンクを使用して今すぐダウンロードできます。

    サーバーがすでに定義されている場合、ツールはこのページをスキップし、代わりに設定の詳細ページを表示します。

  7. Name にはデフォルトを受け入れます。
  8. Home Directory フィールドの横にある Browse をクリックして、インストールに移動し、選択します。
  9. Execution Environment の横にあるドロップダウンメニューからランタイム JRE を選択します。

    JavaSE-1.8 (推奨) を選択します。必要に応じて、Environments ボタンをクリックしてリストから選択します。

    注記

    Fuse サーバーには Java 8 (推奨) が必要です。Execution Environment にこれを選択するには、事前にインストールしておく必要があります。

  10. Alternate JRE オプションはそのままにしておきます。
  11. Next をクリックして Fuse Server のランタイム定義を保存し、Fuse server configuration details ページを開きます。

    NewServerDetailsTut
  12. SSH Port のデフォルト (8101) を受け入れます。

    ランタイムは SSH ポートを使用して、サーバーの Karaf シェルに接続します。このデフォルトが正しくない場合は、Red Hat Fuse installDir/etc/org.apache.karaf.shell.cfg ファイルを確認して正しいポート番号を検出できます。

  13. User Name に、サーバーへのログインに使用される名前を入力します。

    これは、Red Hat Fuse installDir/etc/users.properties ファイルに保存されているユーザー名です。

    注記

    /etc/users.properties ファイルのデフォルトのユーザーがアクティベートされている場合 (アンコメント)、ツールは User Name および Password にデフォルトユーザーの名前およびパスワードを自動入力します。

    設定されていない場合は、user=password,role のフォーマットを使用してそのファイルにユーザーを追加するか (例: joe=secret,Administrator)、karaf jaas コマンドセットを使用して設定できます。

    • jaas:realms: レルムを一覧表示します。
    • jaas:manage --index 1: 最初の (サーバー) レルムを編集します。
    • jaas:useradd <username> <password>: ユーザーと関連パスワードを追加します。
    • jaas:roleadd <username> Administrator: 新規ユーザーのロールを指定します。
    • jaas:update: 新しいユーザー情報を使用してレルムを更新します。

      サーバーに対して jaas レルムがすでに選択されている場合は、コマンド JBossFuse:karaf@root>jaas:users を実行してユーザー名を検出できます。

  14. Password に、User name がサーバーにログインするのに必要なパスワードを入力します。

    これは、Red Hat Fuse の installDir/etc/users.properties ファイルまたは karaf jaas コマンドによって設定されたパスワードです。

  15. Finish をクリックします。

    Runtime Server [stopped, Synchronized]Servers ビューに表示されます。

  16. Servers ビューで Runtime Server を展開します。

    JBFuseServersView

    jmx[Disconnected] が、Runtime Server [stopped, synced] エントリーの下にノードとして表示されます。

パブリッシュオプションの設定

パブリッシュオプションを使用して、ZooOrderApp プロジェクトを稼働中のサーバーにパブリッシュする方法およびタイミングを設定できます。

  • プロジェクトに加えた変更を保存したら直ちに自動的に
  • プロジェクトを変更して保存した後に設定した間隔で自動的に
  • パブリッシュ操作を選択する際に手動で

このチュートリアルでは、ZooOrderApp プロジェクトへの変更を保存したら直ちにパブリッシュするように設定します。そのためには、以下の手順を実施します。

  1. Servers ビューで Runtime Server [stopped, Synchronized] エントリーをダブルクリックして、その概要を表示します。
  2. サーバーの Overview ページで Publishing セクションを展開し、オプションを表示します。

    srvEditorPubOpts

    オプション Automatically publish when resources change を必ず有効にしてください。

    必要に応じて、Publishing interval の値を変更して、変更されたプロジェクトのパブリッシュをスピードアップまたは遅延させます。

  3. Servers ビューで Start the server をクリックします。
  4. サーバーが起動するまで数秒待機します。起動すると以下のようになります。

    • Terminal ビューには、以下のスプラッシュ画面が表示されます。

      tutServerStartShellV
    • Servers ビューは以下を表示します。

      tutServerStartServerV
    • JMX Navigator には n.n Runtime Server[Disconnected が表示されます。

      tutServerStartJMXNav
  5. Servers ビューで n.n Runtime Server [Started] を右クリックし、Add and Remove を選択して Add and Remove ページを開きます。

    tutAddRemove1

    オプション If server is started, publish changes immediately のチェックを選択するようにしてください。

  6. ZooOrderApp を選択し、Add をクリックして Fuse サーバーに割り当てます。

    tutAddRemove2
  7. Finish をクリックします。

    Servers ビューには以下が表示されるはずです。

    tutCBRrtePublishedSrvV
    • Runtime Server [Started, Synchronized]

      注記

      サーバーの synchronized は、サーバーでパブリッシュされているすべてのモジュールがローカルのカウンターパートと同じであることを意味します。

    • ZooOrderApp [Started, Synchronized]

      注記

      モジュールの synchronized は、パブリッシュされているモジュールがローカルのカウンターパートと同じであることを意味します。自動パブリッシュが有効になっているため、ZooOrderApp プロジェクトに加えられた変更は直ちにパブリッシュされます (Publishing interval の値に従います)。

    • JMX[Disconnected]

ランタイムサーバーへの接続

ランタイムサーバーへの接続後、ZooOrderApp プロジェクトのパブリッシュされた要素が表示され、それらと対話できます。

  1. Servers ビューで JMX[Disconnected] をダブルクリックし、ランタイムサーバーに接続します。
  2. JMX NavigatorCamel フォルダーを展開し、ZooOrderApp の要素を表示します。

    tutJMXconnected
  3. Bundles ノードをクリックし、Properties ビューに、ランタイムサーバーにインストールされているバンドルのリストを反映させます。

    tutCBRrouteBundleInstall
  4. Search フィールドで ZooOrderApp を入力します。対応するバンドルが表示されます。

    tutCBRrouteBundleSearch
    注記

    または、Terminal ビューで osgi:list コマンドを実行し、サーバーランタイムにインストールされているバンドルに関する生成されたリストを表示することもできます。ツールは、osgi:list コマンドが表示する OSGi バンドルに異なる命名スキームを使用します。この場合、コマンドは Camel Blueprint Quickstart を返します。これはインストールされたバンドルのリストの最後に表示される

    プロジェクトの pom.xml ファイルの <build> セクションで、バンドルのシンボリック名およびそのバンドル名 (OSGi) が maven-bundle-plugin エントリーに一覧表示されます。

    tutBundleNamesPom

ZooOrderApp プロジェクトのアンインストール

注記

パブリッシュ済みリソースをアンインストールのに、JMX 接続を切断したり、サーバーを停止する必要はありません。

ランタイムサーバーから ZooOrderApp リソースを削除するには、以下を実行します。

  1. Servers ビューで n.n Runtime Server を右クリックし、コンテキストメニューを開きます。
  2. Add and Remove を選択します。

    tutUnpubCBRroute
  3. Configured 列で ZooOrderApp を選択し、Remove をクリックして ZooOrderApp リソースを Available 列に移動します。
  4. Finish をクリックします。
  5. Servers ビューで JMX[Connected] を右クリックし、Refresh をクリックします。

    JMX[Connected] 下の Camel ツリーが消えます。

    注記

    JMX Navigator でも、Server Connections > n.n Runtime Server[Connected]Camel ツリーが消失します。

  6. Properties ビューに表示される Bundles ページで、一覧の最後までスクロールし、ZooOrderApp のバンドルが一覧表示されていないことを確認します。

法律上の通知

Copyright © 2021 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.