コンテンツにスキップ

演習 2 シンプルなメディエーション開発

演習の目的:
ここではアプリケーションの開発の大まかな流れを学習します。 以下のことを体験します。

- メッセージ・モデルの作成 - メッセージ・フローの作成 - 簡単なESQLの作成 - BARファイルの作成 - デプロイ - テスト - デバッグとトレース

目次

2.1 シナリオの概要

この演習では単純なカンマ区切りの文字列をXML形式に変換します。 データフォーマットの変換方法を下に示します。

スクリーンショット

入力メッセージは単純なカンマ区切りの文字列です。
メッセージ・フローはメッセージ・モデルで定義されたデータ・レイアウトでメッセージをパースし、パースされた入力データに対して以下の処理を行います。

① 文字列の付加
  ”world”の文字列を追加

② 文字型で指定されている日付項目をXML Schemaのxsd:date型に変換
  出力は宛先に対してACEのXMLパーサーがXML形式で出力します。

スクリーンショット

戻る

2.2 演習の準備

2.2.1 演習に使用するキューの作成

演習に必要なキューを作成します。

本演習ではFL1.IN, FL1.OUTの2つのキューを使用します。

① MQエクスプローラーで作成したキュー・マネージャー「ACE13QMGR」の下の「キュー」フォルダーを右クリックし、「新規」→「ローカル・キュー」を選択します。

スクリーンショット

② 「ローカル・キューの作成」画面で「名前」フィールドに“FL1.IN”を入力し、「終了」ボタンをクリックします。

スクリーンショット

③ 「オブジェクト作成完了」のポップアップ画面では「OK」をクリックします。

スクリーンショット

④ 上記の手順を繰り返して、 “FL1.OUT”を作成します。

スクリーンショット

戻る

2.3 アプリケーションの作成

ACEの開発物には連携処理の流れをGUIで記述する「メッセージ・フロー」やACEが扱うデータのレイアウトを定義する「メッセージ・モデル」が代表的なものですが、他にもマッピングの定義やESQLのコード、Javaのコード等、いくつかの種類があります。

特定の業務に紐づくような、あるひとまとまりの開発物をまとめて管理しやすくする仕組みとして「アプリケーション」というものがあります。アプリケーションはEclipseのプロジェクトに似ていますが、必ずしもEclipseのプロジェクトと1対1ではありません。一つの「アプリケーション」が複数のプロジェクトを含むこともあります。また、「アプリケーション」は開発ツール上の管理単位にとどまらず、実行環境にデプロイされた際には「アプリケーション」単位での起動・停止が可能であるなど運用の単位にもなります。

ここでは演習2で作成する定義物を入れるための「アプリケーション」を作成します。

2.3.1 ツールキットの起動

ツールキットが起動していない場合には起動します。

「スタート」 → 「IBM App Connect Enterprise 13.0.6.0」 → 「IBM App Connect Enterprise Toolkit13.0.6.0」を選択します。

2.3.2 アプリケーションの作成

① ツールキットの左上に配置されている「新規 アプリケーション」をクリックし、「アプリケーション名」に”SimpleScenario”と入力して「終了」をクリックします。

スクリーンショット

② アプリケーション「SimpleScenario」が作成されたことを確認します。

スクリーンショット

戻る

2.4 メッセージ・モデルの作成

ACEのパーサーはCSVや固定長のデータ等、XML以外のデータ形式を扱う際、メッセージ・モデルという定義物を参照して処理するデータのパースやシリアライズを行います。

ここでは入力データのCSV用のデータ・モデルをウィザードで作成します。その後、出力用のXMLスキーマをXMLスキーマ・エディターを使って作成します。

2.4.1 入力用メッセージ・モデルの作成

① アプリケーション「SimpleScenario」配下の「(新…)」をクリックし、「メッセージ・モデル…」を選択します。

スクリーンショット

② 新規メッセージ・モデル作成用のウィザードが起動しますので、「CSV テキスト」を選択して「次へ」をクリックします。

スクリーンショット

③ 「このウィザードに従ってDFDLスキーマ・ファイルを作成する」を選択し、「次へ」をクリックします。

スクリーンショット

④ 「DFDLスキーマ・ファイル名」に”simpleMessageIn”と入力します。「メッセージ名」には自動的に同じ名前が設定されますのでそのまま「次へ」をクリックします。※大文字・小文字の入力間違いにご注意ください。

スクリーンショット

⑤ フィールド数に”2”を入力して「終了」をクリックします。

スクリーンショット

⑥ DFDLエディターが開きますので、下記のようにフィールド名を修正します。

スクリーンショット

⑦ Ctrl + sで保存します。

以上の操作でCSV形式の入力メッセージ・モデルが完成です。

2.4.2 出力用メッセージ・モデルの作成

出力メッセージはXML形式です。XMLスキーマ・エディターを利用してモデリングを行います。

① アプリケーション「SimpleScenario」を右クリックし、「新規」の中の「メッセージ・モデル…」を選択します。

スクリーンショット

② メッセージ・モデル作成用のウィザードが起動しますので、「その他のXML」を選択して「次へ」をクリックします。

スクリーンショット

③ 「空のXMLスキーマ・ファイルを作成し、XMLスキーマ・エディターを使用してマイ・データをモデル化する」を選択して「次へ」をクリックします。

スクリーンショット

④ 「XMLスキーマ・ファイル」に”simpleMessageOut.xsd”と入力して「終了」をクリックします。

スクリーンショット

⑤ XMLスキーマ・エディターが開きます。「タイプ」ペインを右クリックして「複合型の追加」をクリックします。

スクリーンショット

⑥ 作成する複合タイプの名前を”SimpleMessageOut”に設定します。

スクリーンショット

⑦ 作成した複合タイプ「SimpleMessageOut」を右クリックして「Elementの追加」をクリックします。

スクリーンショット

Note

「SimpleMessageOut」をダブルクリックしてしまった場合、以下のアイコンをクリックすることで「スキーマ索引ビュー」に戻ります。

スクリーンショット

⑧ 追加されたエレメント名に”text”を設定します。

スクリーンショット

⑨ 同様に複合タイプ「SimpleMessageOut」を右クリックして「Elementの追加」をクリックします。

スクリーンショット

⑩ 追加されたエレメント名に”date”を設定します。

スクリーンショット

⑪ 作成したエレメント「date」のデータ型を”date”に設定します。

スクリーンショット

⑫ 下記のアイコンをクリックして「スキーマ索引ビュー」に戻ります。

スクリーンショット

⑬ 「要素」ペインを右クリック → 「Elementsの追加」を選択します。

スクリーンショット

⑭ 作成するエレメント名に”simpleMessageOut”を設定します。

スクリーンショット

⑮ 作成したエレメントにタイプを設定します。「simpleMessageOut」を右クリックし、「タイプの設定」から「参照」を選択します。

スクリーンショット

⑯ 下記のように「Simple」と検索すると設定可能なタイプがフィルターされるため「SimpleMessageOut」を選択して「OK」をクリックします。

スクリーンショット

⑰ Ctrl + s で作成したXMLスキーマを保存します。

以上の操作で出力用のメッセージ・モデルが作成されました。 

戻る

2.5 メッセージ・フローの作成

ここからはメッセージ・フローを作成していきます。

2.5.1 メッセージ・フローの作成

① 左上の「アプリケーション開発」ビュー上で作成した「SimpleScenario」アプリケーション・プロジェクトを右クリックしてメニューより「新規」内の「メッセージ・フロー」を選択します。

スクリーンショット

② 「メッセージ・フロー名」に”SimpleScenario”を入力し、「終了」をクリックします。

スクリーンショット

③ メッセージ・フロー・ファイルが作成され、メッセージ・フロー・エディターが表示されます。

スクリーンショット

2.5.2 MQInput ノード、MQOutput ノード、Computeノードの配置

① メッセージ・フロー・エディターの左端の「パレット」にて「コネクター」セクションの「IBM MQ」タブを展開し、「MQInput」をクリックします。 カーソルを右側のペインに移動して再度クリックするとMQInputノードが追加されます。

スクリーンショット

② 同様に「MQOutput」ノードを追加します。

スクリーンショット

③ さらに「パレット」の「ツールボックス」セクションの「変換」タブを展開し、「Compute」ノードを追加します。

スクリーンショット

④ ノードを接続します。
  MQ Inputノードの右側の「Out」ターミナルをクリックし、Computeノードの「In」ターミナルまでカーソルを移動し、クリックします。

スクリーンショット

⑤ 次にComputeノードの右側のターミナルをクリックします。
  以下の画面が表示されるので、「Out」ターミナルを選択し、「OK」を押します。

スクリーンショット

⑥ カーソルをMQOutputノードの「In」ターミナルまで移動し、クリックします。

スクリーンショット

2.5.3 ノードのプロパティ設定

① MQInputノード、MQOutputノードのプロパティーを設定します。 メッセージ・フロー・エディター内の各ノードをクリックし、下の「プロパティー」ビューで設定します。

MQInputノードのプロパティー設定

タブ プロパティー 設定値
基本 キュー名 FL1.IN
入力メッセージの構文解析 メッセージ・ドメイン DFDL
メッセージ {}:simpleMessageIn

スクリーンショット

スクリーンショット

MQOutputノードのプロパティー設定

タブ プロパティー 設定値
基本 キュー名 FL1.OUT

スクリーンショット

2.5.4 ESQLの編集

ComputeノードのESQLを実装します。

① Computeノードを右クリックし、「ESQLを開く」を選択します。

スクリーンショット

以下のESQLファイルが自動作成されます。

スクリーンショット

ESQLを編集するにはCtrl + スペースのショートカットでコード補完機能が利用できます。

スクリーンショット

② ESQLを以下のように変更します。変数名は大文字・小文字を区別しますので注意してください。スペル・ミスを避けるため、なるべくコード補完の機能を利用することをおすすめします。

スクリーンショット

コピー&ペーストしない場合には、綴りミスを無くす為コード補完機能(Ctrl+スペース)をピリオド(.)を入力する度に使うようにします。綴りは以下のソースコードも参考にしてください。
CREATE COMPUTE MODULE SimpleScenario_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
-- CALL CopyEntireMessage();

      SET OutputRoot.XMLNSC.simpleMessageOut.text = InputRoot.DFDL.simpleMessageIn.record.text || 'world';
      SET OutputRoot.XMLNSC.simpleMessageOut.date = CAST(InputRoot.DFDL.simpleMessageIn.record.date AS DATE FORMAT 'yyyyMMdd');

      RETURN TRUE;
    END;

③ Ctrl + sで変更を保存します。保存後、ESQLの名前の前にある”*”が無くなることを確認します。

スクリーンショット

④ 同様にフローも保存します。 「SimpleScenario.msgflow」のメッセージ・フロー・エディターをフォーカスし、「Ctrl+s」で保存します。

戻る

2.6 開発物のデプロイ

メッセージ・ブローカー・アーカイブファイルを作成します。

① 「アプリケーション開発」ビューで、アプリケーション「SimpleScenario」を右クリックし、コンテキスト・メニューより「新規」内の「BARファイル」を選択します。

スクリーンショット

② 「コンテナー」にアプリケーション「SimpleScenario」を選択し、「名前」に”simpleScenario.bar”と入力して「終了」をクリックします。

スクリーンショット

③ 作成されたbarファイルがBarファイル・エディター上で開かれます。アプリケーション「SimpleScenario」を選択し、「ビルドして保存」ボタンを押します。

スクリーンショット

④ ポップアップ画面で「OK」を選択します。

スクリーンショット

⑤ 「管理」タブを開き、作成したメッセージ・モデルやメッセージ・フローが追加されたことを確認します。

スクリーンショット

⑥ メッセージ・ブローカー・アーカイブ・ファイルをデプロイします。 「アプリケーション開発」ビュー上の「simpleScenario.bar」をドラッグし、「Integration Explorer」ビュー上の「ACE13SERVER」まで移動します。

スクリーンショット

⑦ 以下のポップアップで統合ノードからの成功応答を確認します。「閉じる」ボタンでポップアップを閉じます。

スクリーンショット

⑧ 統合サーバー「ACE13SERVER」の状態が更新され、アプリケーション「SimpleScenario」が配下に表示されます。

スクリーンショット

戻る

2.7 メッセージ・フローのテスト

インテグレーション・ツールキットにはテストを行うための2種類のツールが提供されています。

- フロー・エクササイザー : IIB V10から追加された機能 - 単体テスト・クライアント : 従来から存在するテスト・ツール

2.7.1 フロー・エクササイザーの利用

ここではフロー・エクササイザーを利用したテストを行います。フロー・エクササイザーを利用するとフローのデプロイ、テスト・メッセージの投入、フローの接続を流れるデータの記録、出力メッセージの確認を簡単な操作で行うことができます。

① メッセージ・フローSimpleScenarioを開き、フロー・エクササイザーの開始ボタンをクリックします。

スクリーンショット

② ポップアップ画面が出たら、「はい」をクリックします。

スクリーンショット

③ 確認画面にも同様に「OK」をクリックします。

スクリーンショット

④ 下記の画面では「閉じる」をクリックします。

スクリーンショット

以上の操作でメッセージ・フローが自動的にデプロイされ、フローが記録モードで稼働します。 ここからはメッセージの投入を行っていきます。

⑤ 「フロー・エクササイザー」のメッセージ送信ボタンをクリックします。

スクリーンショット

⑥ 左上の新規メッセージ作成のボタンをクリックすると作成される「new message1」というメッセージを選択し、右手のエディターに”hello,20260330”を入力します(カンマの後に不要なスペースを入れないように注意してください)。その後「送信」ボタンでテスト・メッセージを送信します。

スクリーンショット

⑦ メッセージの送信が完了すると、下記の画面が開き、出力キューFL1.OUTにフローが投入したメッセージが確認できます。確認できたら「閉じる」ボタンをクリックして画面を閉じます。

スクリーンショット

⑧ フロー・エクササイザーを使ってメッセージの記録が行われると、フローを流れたデータを後から確認することができます。ノード間の接続に現れるメッセージのアイコンをクリックし、ポップアップ画面で記録されたメッセージを確認します。

スクリーンショット

⑨ 確認が終わったら上部の「フローを編集モードに戻します」ボタンをクリックし、次の画面で「はい」をクリックし、記録モードを終了します。

スクリーンショット

2.7.2 単体テストクライアントの利用

ここではもう一つのテスト・ツールである、単体テスト・クライアントを利用したテストを行います。単体テスト・クライアントはV9以前から利用されているテスト機能です。フロー・エクササイザーは現時点でデバッガーと同時に利用できない制限があるため、デバッグとともにフローを利用したい場合には従来からの単体テスト・クライアントを利用します。

① ツールキットの「ウィンドウ」タブより、「設定」を選択します。

スクリーンショット

② 設定ウィンドウが表示されるので、「統合開発」>「単体テスト・クライアント」 より、「テスト・クライアントのメニューを使用可能にする」にチェックを入れ、「適用して閉じる」で閉じます。

スクリーンショット

③ アプリケーション開発ビューより、メッセージ・フローSimpleScenarioを右クリックし、「メッセージ・フローのテスト」を選択します。

スクリーンショット

④ 以下のポップアップを「OK」ボタンで閉じます。

スクリーンショット

⑤ テスト・クライアント画面が表示されたら、「構成」タブをクリックします。

スクリーンショット

⑥ 「デプロイメント」を選択し、「ブローカー・アーカイブ・ファイルの指定」の「参照」ボタンをクリックします。

スクリーンショット

⑦ simpleScenario.barファイルを選択し,「OK」をクリックします。

スクリーンショット

⑧ 「イベント」タブに戻り、メッセージに”hello,20260330”を入力し、「メッセージ送信」をクリックします。

スクリーンショット

⑨ 「デプロイメントのロケーションの選択」画面が表示されたら、統合ノード「ACEV13NODE」配下の統合サーバー「ACE13SERVER」を選択して、「終了」ボタンを押します。

スクリーンショット

⑩ 実行が完了したら、出力キューFL1.OUTにメッセージが出力されます。内容を確認します。

スクリーンショット

戻る

2.8 問題判別:ログ、デバッガー、トレース

2.8.1 (参考)システム・ログ

Windows環境では、ACEのログはイベント・ビューアーで参照可能です。(UnixやLinuxの場合はSyslogにログが出力されます。)

イベント・ビューアーはスタート・ボタンを右クリックし、「イベント ビューアー」から参照できます。

スクリーンショット

テストで応答が返らない等の問題が発生した場合には、まずイベント・ビューアーでエラー出力の有無を確認し、エラーが記録されている場合にはそこから問題判別を行います。

スクリーンショット

また、より詳細な情報が必要な場合にはデバッグ機能を使用して詳細な解析を実施することができます。

2.8.2 デバッガーの利用

ここまでで作成したフローを利用してデバッグ方法とトレース方法を学びます。

ACEのデバッグ機能を利用すると、フローの中でどのようなデータが流れ、どのような処理が行われているかをステップごとに確認し、問題判別に役立てることができます。

① デバッガーを有効にするために、統合サーバーの構成ファイルを編集します。 以下のファイルをnotepad等のエディタで開きます。

C:¥ProgramData¥IBM¥MQSI¥components¥ACE13NODE¥servers¥ACE13SERVER¥server.conf.yaml

"ProgramData"フォルダーは隠しファイルとなっているため、「表示」より、「隠しファイル」にチェックを入れる必要があります。

スクリーンショット

② 以下のように構成ファイルを修正して保存します。

スクリーンショット

  • 【修正前】server.conf.yaml ファイルの158行目〜
JVM:
#jvmVerboseOption: 'none'
#jvmDisableClassGC: ''
#jvmEnableIncGC: ''
#jvmShareClasses: ''
#jvmNativeStackSize: -1
#jvmJavaOSStackSize: -1
#jvmMinHeapSize: 33554432 # a change at the root level setting above will take precedence (32MB)
#jvmMaxHeapSize: 268435456 # a change at the root level setting above will take precedence (256MB)
#jvmDebugPort: 0 # a change at the root level setting above will take precedence
  • 【修正後】server.conf.yaml ファイルの158行目〜
JVM:
#jvmVerboseOption: 'none'
#jvmDisableClassGC: ''
#jvmEnableIncGC: ''
#jvmShareClasses: ''
#jvmNativeStackSize: -1
#jvmJavaOSStackSize: -1
#jvmMinHeapSize: 33554432 # a change at the root level setting above will take precedence (32MB)
#jvmMaxHeapSize: 268435456 # a change at the root level setting above will take precedence (256MB)
jvmDebugPort: 9997 # a change at the root level setting above will take precedence

③ 設定変更を有効にするために、統合サーバーを再起動します。App Connect Enterprise Consoleより以下のコマンドを実行します。
mqsireload ACE13NODE -e ACE13SERVER

スクリーンショット

④ ツールキットに戻り、メッセージ・フローにブレークポイントを追加します。 メッセージフロー・エディターで、ノードとノードを結ぶターミナルを右クリックし、メニューより「ブレークポイントの追加」をクリックします。

スクリーンショット

⑤ 単体テストクライアントを開き、「構成」タブの「配備場所」にある「変更」ボタンをクリックします。

スクリーンショット

⑥ 以下の画面でACE13SERVERを選択し、「トレースおよびデバッグ」にチェックを入れ、「終了」をクリックします。

スクリーンショット

⑦ 「イベント」タブに戻り、以前実行した「メッセージ・フローの起動」を右クリックして「Re-run」を選択します。

スクリーンショット

Note

単体クライアントテストのタブを消してしまった場合は「Re-run」が表示されないため、「メッセージ送信」ボタンをクリックして実行します。

テストが再度実行されます。

⑧ 以下のポップアップが表示されたら「切り替え」を選択します。

スクリーンショット

デバッグ・パースペクティブが開き、配置したブレークポイントで処理が止まっていることがわかります。
デバッグ・パースペクティブではステップ・オーバー、ステップ・イン、ステップ・リターンなどの各種デバッガー操作が行えるほか、停止地点でのメッセージ・ツリーの内容が確認できる「変数」ビューが提供されています。
Computeノードにステップ・インし、ESQLのコードのデバッグを行うこともできます。

スクリーンショット

デバッグ・パースペクティブを一通り触れたらデバッガーを終了します。

⑨ デバッグ操作を終えたら、以下の「終了」ボタンを押してデバッガーの処理を停止してください(これを行わないとプロセスがハングした状態となるので必ず実行してください)

スクリーンショット

⑩ ツールキット画面右上の「Integration Development」ボタンを押して、デバッグ・パースペクティブから統合開発パースペクティブに戻ります。

スクリーンショット

2.8.3 (参考)トレース

詳細な情報が必要な場合にはトレース取得を使用して詳細な解析を実施することができます。 下図のように、ツールキットより統合サーバーを選択し右クリックを行い、トレースのメニューを選択します。

スクリーンショット

ACEで取得できるトレースには、ユーザー・トレースおよびサービス・トレースの2種類があります。

  • ユーザー・トレース
  • アプリケーションをデバッグするときに使用します。
  • 統合ノード、統合サーバー、デプロイされたメッセージフローをトレースできます。
  • トレースする全アクティビティを記録するため、開発フェーズ以外での取得はパフォーマンスへの影響を考慮する必要があります。
  • サービス・トレース
  • 統合ノードや統合サーバーのより包括的なトレースをアクティブにします。
  • サービス・トレースの開始を指示するエラーメッセージを受け取った場合や、IBMサポート・センターから指示された場合にのみアクティブにします。

戻る