演習 2 シンプルなメディエーション開発
演習の目的:
ここではアプリケーションの開発の大まかな流れを学習します。
以下のことを体験します。
- メッセージ・モデルの作成 - メッセージ・フローの作成 - 簡単なESQLの作成 - BARファイルの作成 - デプロイ - テスト - デバッグとトレース
目次
- 2.1 シナリオの概要
- 2.2 演習の準備
- 2.3 アプリケーションの作成
- 2.4 メッセージ・モデルの作成
- 2.5 メッセージ・フローの作成
- 2.6 開発物のデプロイ
- 2.7 メッセージ・フローのテスト
- 2.8 問題判別:ログ、デバッガー、トレース
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サポート・センターから指示された場合にのみアクティブにします。
























































































