...

IBM Integration Bus V9 ファイル連携機能 ISE 2013.12.28

by user

on
Category: Documents
283

views

Report

Comments

Transcript

IBM Integration Bus V9 ファイル連携機能 ISE 2013.12.28
IBM Integration Bus V9
ファイル連携機能
ISE
2013.12.28
目次
ファイル・インターフェース
リモート・ファイルへのアクセス(FTP/SFTP)
実装例
ファイル連携の考慮点
当資料は、IBM Integration Bus V9.0 (IIB、旧WMB)をベースに作成しています。
当資料は、IIBの基本的な知識と実装スキルを保有している方を対象とします。
当資料は、IBMの正式なレビューを受けていません。当資料に含まれる全ての情報は、利用者の責任において
使用されるべきものであり、特定環境への適用は利用者の判断に依存します。
2
機能拡張履歴
Fileノードに関する機能拡張履歴
バージョン
拡張機能
V6.0.0.0
FileInput、FileOutputノードの提供
V6.1.0.4
SFTP(SSH FTP)のサポート
V7.0.0.3
FileReadノードの追加
V8.0.0.0
入力ディレクトリのサブ・ディレクトリのサポート(FileInputノード)
ファイル除外パターンの追加(FileInputノード)
出力ファイルへの直接書き込みサポート(FileOutputノード)
既存ファイルへの追記のサポート(FileOutputノード)
V8.0.0.1
FTP/SFTPサーバー接続情報の動的設定のサポート(FileOutputノード)
FTP転送前後のFTPコマンド実行のサポート(FileOutputノード)
3
ファイル・インターフェース
4
ファイル・インターフェース
IBM Integration Bus(IIB)では、ファイルの入出力が可能な複数のノードを提供
FileInput、FileRead、FileOutput
当資料では、Fileノードについてのみ解説
ローカルのファイル、およびFTP/SFTPによるリモートのファイルとの入出力が可能
FTEInput、FTEOutput (V7001から)
WebSphere
MQ Managed File Transfer(MFT、旧FTE)のエージェントとのファイル連携が可能
–実行グループがMFT(FTE)エージェントとして稼動し、他のMFTエージェントとファイル転送を実施
CDInput、CDOutput (V8000から)
IBM
Sterling Connect:Direct のサーバーとのファイル連携が可能
–CDノードはローカル(もしくはリモート)のConnect:Direct サーバーと連携し、他のCDサーバーとファイル転送を実施
他プロトコルのノードと組み合わせて、様々なファイル連携ソリューションの実装が可能
MQ、JMS、Webサービス、HTTP、EIS(SAP、Seibel…)など
MFTネットワーク
ファイル
ブローカー
Connect:Direct
ネットワーク
ファイル連携ソリューション
Webサービス
EISアプリケーション
MQ/JMS
5
Fileノード
ローカル、および(FTP/SFTPによる)リモートのファイルとのデータ入出力が可能なノード
FileInputノード
:ファイルからデータを読み込み、フロー処理を開始
ファイル
・・・・・・・・・・・
・・・・・・・・・・・
FileReadノード
読み込み
:フローの途中でファイルからデータを読み込む
※リモート・ファイルは不可(FTP/SFTPは未サポート)
・・・・・・・・・・・
・・・・・・・・・・・
読み込み
FileOutputノード
:フローの途中/最後に、ファイルにデータを書き込む
書き込み
6
・・・・・・・・・・・
・・・・・・・・・・・
FileInputノード
指定されたファイルを検知し、データを読み取り、フロー処理を開始するノード
-Failure
-Out
-End of Data
-Catch
指定されたレコードの単位で、フロー処理を実行
1レコード毎に、ファイルから読み取り、パースしてメッセージ・ツリーに展開
–ファイル全体ではなく、1レコード分だけがメモリに展開されるため、リソースを節約
メッセージ・ツリー(LocalEnvironment)には、ファイルやレコードの情報もセットされる
レコード処理を跨るデータの共有は、共有変数や外部リソースなどの利用が必要
フローの途中でファイル・データを読み取ることは不可
入力ターミナルはない
1レコード分をツリーに展開し、
フロー処理を実行
メッセージ・ツリー
入力ファイル
レコード1
①読み取り
②パース
③フロー処理実行
レコード2
レコード3
1件目のレコード処理が終了すると、
次のレコードを読み取り
7
FileInputノード
入力ファイルの指定
「基本」タブの「入力ディレクトリ」プロパティと「ファイル名またはパターン」プロパティに指定
モニタリングの対象として、指定したディレクトリのサブ・ディレクトリまで含めることが可能(V8000から)
–「ローカル・サブディレクトリーを組み込む」プロパティをチェック(デフォルトはチェックなし)
ファイル名はワイルドカード文字「*」、「?」を使用してパターン指定が可能(詳細は後述)
–対象としない除外パターンの指定も可能(V8000から)
リモート・ファイルの指定については、次章「リモート・ファイルへのアクセス(FTP)」を参照
ノードは、指定されたディレクトリーを定期的(デフォルト5秒)にポーリングして、ファイルを検索
「ポーリング」タブの「ポーリング間隔」プロパティで指定(秒)可能
他のアプリケーションがロックしているファイルは無視
8
FileInputノード
レコードの指定
ノードが1回のフロー処理で読み取るデータをレコードとして指定
レコードの単位は、「レコードおよびエレメント」タブの「レコードの検出」プロパティに指定
プロパティ設定値
説明
ファイル全体
ファイル全体を1レコードとして扱う(デフォルト)
固定長
「長さ」プロパティに指定されたバイト長を1レコードとして扱う
区切り
「区切り文字」プロパティに指定された区切り文字までを1レコードとして扱う
「DOSまたはUNIXの行終了」もしくは、「カスタム区切り文字(16進数)」を指定
「区切り文字タイプ」には、区切り文字の位置を指定
「Infix」:ファイルの最後が区切り文字で終わった場合、空のレコードを渡す
「Postfix」:ファイルの最後が区切り文字の場合、そこで終了
構文解析された
レコード・シーケンス
ノードに指定したメッセージ定義でパースされたデータ分を1レコードとして扱う
事前に、1レコード分のメッセージ定義を用意し、「入力メッセージの構文解析」タブに指定
※「ファイル全体」、「固定長」、「区切り」の場合、1レコードの最大長はデフォルトで100MB(拡張可、後述)
1レコード目がヘッダーの場合、読み取りを
スキップすることも可
「最初のレコードをスキップ」をチェック
9
FileInputノード
レコードの最大長に関する考慮点
FileInput(およびFileRead)ノードではデフォルトで1レコードの最大長が100MBに設定されている
「レコードの検出」プロパティで「ファイル全体」/「固定長」/「区切り」を設定している場合に適用される
–「構文解析されたレコード・シーケンス」を設定した場合には最大長の制約がない点に注意
FileOutputノードではレコードの最大長の制約はない
最大長の設定は変更可能
環境変数「MQSI_FILENODES_MAXIMUM_RECORD_LENGTH」をブローカー実行環境に設定
最大長をバイト単位で指定
設定例
–SET MQSI_FILENODES_MAXIMUM_RECORD_LENGTH=268435456
FileOutputノードはこの設定の影響は受けない
最大長を拡張する場合、および最大長の制約がない「構文解析されたレコード・シーケンス」を設
定する場合には、実行時のメモリ消費を要確認
10
FileInputノード
処理後の入力ファイルの扱い
全レコード処理の正常終了後、削除するか、サブ・ディレクトリに移動させるかを選択
「基本」タブの「正常な処理に対する処置」プロパティに指定
–「削除」(デフォルト)
–「アーカイブ・サブディレクトリ(mqsiarchive)への移動」
–「タイム・スタンプの追加およびアーカイブ・サブディレクトリ(mqsiarchive)への移動」
(アーカイブ用のmqsiarchiveディレクトリは入力ディレクトリの下に自動的に作成される)
移動先のファイル名が重複する場合に、例外を生成させる、もしくは上書きするかを選択
–デフォルトの動作は、例外を生成
–上書きさせる場合は、「重複アーカイブ・ファイルの置換」プロパティをチェック
11
FileInputノード
レコード処理途中でエラーが発生した場合の入力ファイルの処置も同様に設定
バックアウト用のサブ・ディレクトリ(mqsibackout)へ移動か、削除かを選択
「再試行」タブの「障害を起こしたファイルに対する処置」に指定
–「バックアップ・サブディレクトリ(mqsibackout)への移動」(デフォルト)
–「削除」
–「タイム・スタンプの追加およびバックアウト・サブディレクトリ(mqsibackout)への移動」
※ただし、実行グループやフローが異常終了した場合、これらの処置は行われないため、エラー処理
の実装には考慮が必要(後続の章「ファイル連携の考慮点」参照)
12
FileInputノード
ノードの基本動作
①指定されたファイルを検知すると、入力ディレクトリのサブ・ディレクトリmqsitransitin に移動
–サブ・ディレクトリmqsitransitinは自動的に生成
②ファイルからレコード単位にデータを読み込み、フロー処理を実行
–読み込んだデータをパースし、メッセージ・ツリーを「Out」ターミナルへ伝播
–フロー処理が完了すると、次のレコードを読み込む(最後のレコードまでこの処理を繰り返す)
③最終レコードの処理が終了すると、「End of Data」ターミナルへ、空のメッセージを伝播
–ファイルからの入力処理が完了したことを通知するため
–「End of Data」ターミナルの先に処理が実装されていないときは空メッセージの伝播はなし
④フロー処理が完了すると、入力ファイルを削除 or mqsiarchive ディレクトリへ移動
–処理途中でエラー発生時は、削除 or mqsibackout ディレクトリへ移動
①入力ファイルを移動
②1レコード毎にフロー処理を実行
入力ディレクトリ
mqsitransitinディレクトリ
入力ファイル
レコード1
レコード1
レコード2
レコード3
End of Data
ターミナル
空メッセージ
削除
mqsiarchiveディレクトリ
④入力ファイルを
削除 or 移動
③全レコード処理が終了すると
空メッセージを伝播
mqsibackoutディレクトリ
13
FileInputノード
主なノード・プロパティ
タブ
説明
説明
基本
・ノード名、コメント
・入力ディレクトリー名、ファイル名
・処理が正常終了した場合の入力ファイルの扱い
削除、アーカイブなど
・入力メッセージをパースする際の情報
メッセージ・ドメイン、メッセージ・モデル、メッセージ、物理形式、CCSID、Encoding
・パースするタイミング
即時、要求時など
・入力ファイルを検索する間隔(秒)
・処理が失敗した場合の再試行の有無、再試行のメカニズム
短い再試行間隔と回数、長い再試行間隔
・処理が失敗した場合の入力ファイルの扱い
削除、バックアップなど
・レコードの検出方法とそれに関する設定
ファイル全体(レコード処理しない)、固定長、区切り、レコードシーケンス
長さ、区切り文字、区切り文字タイプなど
・妥当性検査の有無と方法
・妥当性検査失敗時の対応
例外、ユーザトレース、ローカルエラーログ、例外リスト
・FTPの有無、FTPサーバーおよびセキュリティに関する指定、FTP関連の設定
FTPサーバーのディレクトリー、転送モード、FTPでファイルを検索する間隔
入力メッセージの
構文解析
(パーサー・オプション)
ポーリング
再試行
レコードおよびエレメント
妥当性検査
FTP
トランザクション
インスタンス
・後続のMQメッセージ処理に対するトランザクション制御の有無
・追加インスタンスの指定方法(メッセージフロー/ノード)
ノード単位の場合のインスタンス数
14
FileInputノード
ターミナル
ターミナル名
Failure
出力
ターミナル
Out
End of Data
Catch
説明
ノード内でエラー発生時に、受信したメッセージを出力
ノード内でのメッセージ処理成功時に、受信したメッセージを出力
ファイル内の全レコード処理終了後に、空のメッセージを出力
後続ノードで例外発生時に、受信したメッセージを出力
15
ファイル名のパターン指定
下表のワイルドカード文字を使用して、ファイル名のパターン指定が可能
ワイルドカード文字
* (アスタリスク)
? (疑問符)
説明
ゼロ個以上の文字の任意のシーケンス
任意の1文字
ノードの基本タブの「ファイル名またはパターン」プロパティに指定
FileInputノードは、指定された入力ディレクトリ内のパターンに一致するファイルを処理
ワイルドカードを複数箇所に指定可能
–「Input???_report.*」など
ワイルドカードに一致した文字列は、LocalEnvironment.Wildcard.WildcardMatchにセットされる
–ワイルドカードを複数指定した場合は、最初と最後のワイルドカード文字に挟まれる文字列もセットされる
–パターン指定「Input_*.txt」に対し、ファイル「Input_20081211.txt」を処理した場合、
上記エレメントには、「20081211」がセットされる
※パターン指定に一致する対象ファイルが複数ある場合は、古い日時のファイルから処理
–幕張環境で確認する限り、更新日時の古いファイルから処理される
–ファイル名のシーケンス番号をワイルドカード指定しても、シーケンス番号順に処理されるわけではない
–Input_001.txt、Input_002.txt、・・などのネーミングのファイルに対し、「Input_*.txt」と指定した場合など
FileOutputノードは、「*(アスタリスク)」のみ使用可(「?」は不可)
「*」をLocalEnvironment.Wildcard.WildcardMatchの値に置き換えた名前のファイルに出力
上記例で、FileOutputノードの「ファイル名またはパターン」に「Output_*.txt」と指定した場合、
出力ファイルは「Output_20081211.txt」となる
16
FileOutputノード
メッセージ・ツリーのデータを指定されたファイルに書き込むノード
-Failure
-Out
-End of Data
In-
Finish File-
出力先ディレクトリ/ファイルの指定
「基本」タブの「ディレクトリ」プロパティと「ファイル名またはパターン」プロパティに指定
ファイル名にワイルドカード文字を使用可能(詳細は前述)
次ページで解説
リモート・ファイルへの出力(FTP/SFTP)の設定は次章「リモート・ファイルへのアクセス
(FTP/SFTP)」参照
17
FileOutputノード
出力ファイルへの書込モードの選択
「基本」タブの「ファイル・アクション」プロパティに指定(前ページ)
以下の2つのモードを選択可
①「mqsitransitディレクトリへ進み、「Finish file」で出力ディレクトリへ移動」プロパティ (デフォルト)
②「出力ファイルへ直接書き込み(ファイルが存在する場合は付加)」プロパティ (V8000から)
①「mqsitransitディレクトリへ進み、「Finish file」で出力ディレクトリへ移動」プロパティを選択した場合
出力先ディレクトリのサブ・ディレクトリ(mqsitransit)に出力ファイルを一時的に保持し、レコードを追記
–mqsitransit ディレクトリは自動的に作成される
「Finish
File」ターミナルに入力があると、mqsitransit下の出力ファイルを指定した出力ディレクトリに移動
–「Finish File」ターミナルに入力するメッセージの中身は任意(空のメッセージでも可)
–FileInputノードを使用している場合は、通常FileInputノードの「End of Data」ターミナルと「Finish File」ターミナルを接続
–出力ディレクトリに同名のファイルが存在する場合の動作は「ファイルが存在する場合のアクション」で指定
「既存のファイルの置換」、「既存のファイルへ付加」(V8000から)、「ファイルが存在する場合は失敗」、「既存のファイルの
保存および置換」、「既存のファイルのタイムスタンプ、保存および置換」
出力先ディレクトリ
①入力
③入力
Inターミナル
mqsitransit
Finish File
ターミナル
②出力
18
出力ファイル
④移動
FileOutputノード
②「出力ファイルへ直接書き込み(ファイルが存在する場合は付加)」プロパティを選択した場合
指定した出力ディレクトリにファイルを置き、直接レコードを出力する
すでに出力ファイルがある場合も既存ファイルに追記
「Finish
File」ターミナルへの入力は不要
出力先ディレクトリ
①入力
Inターミナル
出力ファイル
②出力
※書込モード①、②のどちらを選択した場合でも、エラー発生時には書き込み途中の中途半端な出
力ファイルが残るケースがある。入力メッセージがロールバックなどして、再処理を行う際、残存ファイ
ルがあるとその状態から、ロールバックしたメッセージを再度追記することになるため、残存ファイルの
対応には考慮が必要となる。(後続の章「ファイル連携の考慮点」参照)
19
FileOutputノード
出力先はフロー内で動的に設定することも可能(「基本」タブのプロパティ設定を上書き可能)
「要求」タブの「ディレクトリ・プロパティ・ロケーションの要求」、「ファイル名プロパティ・ロケーションの要求」に
メッセージツリーのエレメントを指定(デフォルト値は設定済み)
FileOutputノードの手前で上記エレメントに出力先ディレクトリ/ファイルをセット
–値がセットされていない場合やエレメントが欠落している場合は、 「基本」タブのプロパティが有効
(デフォルト設定)
ESQL設定例(出力ファイル名の動的変更)
出力先ディレクトリに同一名称のファイルが存在していた場合の対応を指定
「基本」タブの「出力ファイルの処置」プロパティで指定
既存ファイルを置換するか、ファイル出力をエラーにするか、既存ファイルを保存してから置換するか
–保存先は、指定した出力先ディレクトリ下のmqsiarchiveサブディレクトリ
–保存の際にタイムスタンプをファイル名に付加することも可能
–mqsiarchiveに同名のファイルが存在し、置換する場合は「重複アーカイブ・ファイルの置換」プロパティにチェック
20
FileOutputノード
レコードの出力方法の指定
「レコードおよびエレメント」タブのプロパティで指定
「レコードの定義」
プロパティ設定値
説明
ファイル全体
1レコードを1ファイルとして出力(デフォルト)
未変更
レコードをそのまま出力
固定長
レコードを固定長データとして出力
「長さ(バイト)」と「埋め込みバイト(16進数)」にレコード長と埋め込み文字を指定
指定した長さに満たないときは、埋め込み文字をPaddingして出力
区切り文字
レコードに「区切り文字」プロパティに指定した区切り文字を付加して出力
「ブローカー・システムの行終了」もしくは「カスタム区切り文字(16進数)」を指定
「区切り文字タイプ」に、区切り文字の位置を指定
「Infix」:レコードの間にのみ区切り文字を追加(最後の区切り文字は出力されない)
「Postfix」:各レコードの後ろに区切り文字を追加(最後のレコードのあとに区切り文字を出力)
(書込モード①のとき)
「ファイル全体」選択時は、「Finish File」ターミナルへのメッセージの伝播は必要なし
–1レコードの処理が完了すると、出力ファイルをmqsitransitディレクトリから出力先ディレクトリに移動
21
FileOutputノード
ノードの基本動作(書込モード①選択時)
①Inターミナルに入ってきたメッセージからレコードを作成し、mqsitransitディレクトリ下の
出力ファイルに追記
「レコードの定義」が「ファイル全体」の場合、レコード出力後、ファイルを出力先ディレクトリにコピー
「ファイル全体」以外の場合、Finish
Fileターミナルへの入力があるまで、Inターミナルから入力されたメッセージ
をレコードとしてファイルに追記
②Finish Fileターミナルにメッセージが渡されると、出力ファイルをmqsitransitディレクトリから
出力先ディレクトリへ移動
出力先ディレクトリ
Inターミナル
・・・
msg2
msg1
mqsitransitディレクトリ
Finish File
ターミナル
出力ファイル
レコード1
出力
レコード2
①レコード毎にファイルに出力
mqsiarchiveディレクトリ
22
②「Finish File」に入力があると、
ファイルを出力先ディレクトリに
移動
FileOutputノード
主なノード・プロパティ
タブ
説明
説明
基本
・ノード名、コメント
・出力ディレクトリー名、ファイル名
・処理が正常終了した場合の出力ファイルの扱い
削除、アーカイブ、既存ファイルの扱い
・出力する内容、ディレクトリー名、ファイル名に関する設定
XPath形式でメッセージツリーを指定
要求
レコードおよびエレメント
妥当性検査
FTP
・ファイルへの出力方法の指定
ファイル全体、固定長、区切り、未変更
長さ、埋め込み文字、区切り文字、区切り文字タイプなど
・妥当性検査の有無と方法
・妥当性検査失敗時の対応
例外、ユーザトレース、ローカルエラーログ、例外リスト
・FTPの有無、FTP/SFTPサーバーおよびセキュリティに関する指定、FTP/SFTP関連の設定
FTP/SFTPサーバーのディレクトリー、転送モード
・転送後のローカル(ワーク用)ファイルの保存の有無
ターミナル
ターミナル名
in
入力
ターミナル
Finish File
Failure
出力
ターミナル
Out
End of Data
説明
処理要求メッセージを受信
ファイル処理を終了するためのトリガーメッセージを受信
エラー発生時に出力
レコード出力成功時に、inターミナルで受信したメッセージを出力
ファイルの終了処理成功時に、Finish Fileターミナルで受信したメッセージを出力
23
FileReadノード
メッセージ・フローの途中で、指定されたファイルを読み込むノード
In Finish file in -
読み込んだデータは、FileReadノード内でメッセージ・ツリーに展開
-
Failure
Out
No match
File file out
LocalEnvironmentに、ファイルやレコードの情報がセットされる
ファイルの読み込みレコード単位を指定可能(ファイル全体 / 固定長 / 区切り文字など)
デフォルトでは、ファイル全体を1レコードとして扱う
ファイルから、特定の条件に合致するレコードのみをフィルタリングして取得することが可能
処理対象レコードの条件を指定することが可能
※ただし、複数のレコードが条件に合致する場合でも、先頭の1レコードのみ処理
ローカルのファイルが読み込みの対象
FTP経由でのファイル取得はできない
ファイルから取得したデータのツリーを入力ツリーと結合し、出力メッセージ・ツリーを生成可能
・・・・・・・
・・・・・・・
・・・・・・・
ファイル
読み取り
メッセージ・フロー
24
FileReadノード
入力ファイルの指定
「基本」タブの「入力ディレクトリ」プロパティと「ファイル名またはパターン」プロパティに指定
ファイル名はワイルドカード文字「*」、「?」を使用してパターン指定が可能
–ワイルドカードの使用方法はFileInputノードと同等(前述)
ただし、FileReadノードは1ファイルのみを処理
–ファイル名にワイルドカードを指定し、複数ファイルがパターンと一致する場合は、例外がスローされる
⇒入力ファイル名は特定の1ファイルを指すように設定
「環境ワイルドカードの使用」プロパティをチェックし、「パターン」に「*」を指定した場合、LocalEnvironmentの
以下のエレメント値が使用される
–LocalEnvironment.Wildcard.WildcardMatch
FileInputノードにてワイルドカードで入力ファイルを指定した場合、検知されたファイル名が上記エレメントにセットされる
※FileInputノードにあるサブ・ディレクトリの指定や除外パターンの設定は不可
25
FileReadノード
FileReadノードの基本動作
① inターミナルに入力が入ると、指定されたファイルを検索し、データを読み込む
② 読み取ったデータを ResultRootツリーに展開
ResultRootツリーは、FileReadノード内でのみ存在
③ 後続ノードにデータを渡すため、ResultRootツリー(もしくは一部)を出力メッセージツリーにコピー
OutputRoot、OutputLocalEnvironment、Environment
など
ResultRootツリー
入力ファイル
ResultRoot
・・・・・・・
・・・・・・・
・・・・・・・
②
入力ツリー
出力ツリー
①
OutputRoot
InputRoot
③
26
FileReadノード
ファイル・データ受け渡しのための設定
「結果」タブのプロパティーで、ResultRootツリーの受け渡し部分とコピー先を指定
「結果データのロケーション」にResultRootツリーの受け渡し部分を指定
(デフォルト設定は、ResultRoot)
「出力データのロケーション」に出力ツリーのコピー先を指定 (デフォルト設定は、OutputRoot)
「結果データのロケーション」で指定したエレメントの配下のツリーが、
「出力データのロケーション」で指定したエレメントの下にコピーされる
デフォルト設定では、ResultRoot全体がコピーされるため、入力メッセージはファイルから読み取ったメッセージに
置き換えられる
デフォルト設定
入力ファイル
・・・・・・・
・・・・・・・
・・・・・・・
ResultRootツリー
ResultRoot
出力ツリー
入力ツリー
OutputRoot
InputRoot
27
FileReadノード
レコードの指定とフィルタリング設定
レコード識別方法の指定
「レコードおよびエレメント」タブでレコード単位を設定
–ファイル全体、区切り、固定長、解析済みレコード・シーケンス
–FileInputノード同様、「ファイル全体」、「固定長」、「区切り」の場合、1レコードの最大長はデフォルトで100MB(拡張可、
前述)
「結果」タブの「レコード選択式」(以前は、「フィルター式」)で、出力ターミナルに伝搬するレコードの
条件を指定
ブール値を返す任意の有効な
XPath式で指定
最初に条件に合致したレコードが伝搬される
デフォルトは true() であり、
その場合は、先頭のレコードが伝播される
28
FileReadノード
レコード読み込みの動作
ファイルの先頭からレコードの読込を開始
「結果」タブのレコード選択式に合致する最初のレコードを伝播
※ファイル内にレコード選択式に合致するレコードが複数存在する場合でも、最初に合致した1レコードのみを伝搬
合致するレコードがない場合は、入力メッセージが「No
match」ターミナルに送信される
レコード選択式の設定例
$InputRoot/XMLNSC/request/id=$ResultRoot/XMLNSC/drink/@id
–入力メッセージ($InputRoot以下)に含まれるメッセージと、ファイルからパースしたレコード($ResultRoot)に含まれる属性id
の値が等しい場合
–以下のような入力メッセージとファイルの場合、id=3のレコードが処理される
②先頭から読み込み
<drink
<drink
<drink
<drink
id="1"><name>beer</name><price>580</price></drink>
入力ファイル(行区切りでレコードを指定)
id="2"><name>wine</name><price>2800</price></drink>
id="3"><name>shochu</name><price>3000</price></drink>
id="4"><name>brandy</name><price>1500</price></drink>
入力メッセージ
<request>
<id>3</id>
<data/>
</request>
③XPath式がtrueとなる
レコードを処理
①入力
29
FileReadノード
ファイル読み取り後の入力ファイルの扱い
「基本」タブの「Finish file」プロパティーで以下のアクションを指定
処置は不要です(ファイル名を変更せずに残す)
アーカイブ・サブディレクトリー(mqsiarchive)に移動
ファイル名にタイムスタンプを追加した上、アーカイブ・サブディレクトリー(mqsiarchive)に移動
削除
ファイルの終わりに到達したか、または「Finish file in」ターミナルにメッセージを入力した時点で設定
したアクションを実行
「Finish
file in」ターミナルにメッセージが入力された場合、アクションのみ実施
–ファイルからの読込を行わず、アクションのみを実行したい場合に「Finish file in」ターミナルを利用
–入力メッセージは、「Finish file out」 ターミナルに伝播される
30
FileReadノード
設定プロパティ値の動的変更
指定したメッセージ・ツリー値で、一部のノードプロパティ値を動的に変更可能
「要求」タブで設定
デフォルトでLocalEnvironment.Destination.Fileのツリー値を使用
「基本」タブの「入力ディレクトリー」設定をオーバーライド
「基本」タブの「ファイル名またはパターン」設定をオーバーライド
「レコードおよびエレメント」タブの「長さ」設定をオーバーライド
ファイル読み取り開始オフセットの設定ロケーションを指定
(対応するノード・プロパティはない)
31
FileReadノード
FileReadノード使用時の注意点
FileReadノードは1ファイルのみを処理
ファイル名にアスタリスク(*)を指定し、複数ファイルがパターンと一致する場合は、例外がスローされる
⇒入力ファイル名は特定の1ファイルを指すように設定
32
FileReadノード
主なノード・プロパティ
タブ
説明
説明
基本
・ノード名、コメント
・入力ディレクトリー名、ファイル名
・処理が正常終了した場合の入力ファイルの扱い
削除、アーカイブなど
・ノード・プロパティを動的変更する場合のツリー・ロケーション指定
・ファイル・データ受け渡しのための設定
・フィルター条件
・入力メッセージをパースする際の情報
メッセージ・ドメイン、メッセージ・モデル、メッセージ、物理形式、CCSID、Encoding
・パースするタイミング
即時、要求時など
・レコードの検出方法とそれに関する設定
ファイル全体(レコード処理しない)、固定長、区切り、レコードシーケンス
長さ、区切り文字、区切り文字タイプなど
・妥当性検査の有無と方法
・妥当性検査失敗時の対応
例外、ユーザトレース、ローカルエラーログ、例外リスト
要求
結果
入力メッセージの
構文解析
(パーサー・オプション)
レコードおよびエレメント
妥当性検査
33
FileReadノード
ターミナル
ターミナル名
in
入力
ターミナル
Finish File In
出力
ターミナル
Failure
Out
No match
Finish File Out
説明
ファイル読み込みのトリガーとなるメッセージの入力ターミナル
ファイルからデータを読み取らずに、ファイル終了アクションの実行要求を受け入れる入力ターミナル
ファイルの処置のみが行われる
ノード処理中にエラーが発生した場合、メッセージが伝播される出力ターミナル
ノード処理が正常に終了した場合、メッセージが伝播される出力ターミナル
ファイル・システムにファイルが存在しない、またはファイルは存在するが、レコード選択式と一致する
レコードが見つからない場合、メッセージが伝播される出力ターミナル
「Finish File In」 ターミナルで受け取ったメッセージが伝搬される出力ターミナル
34
LocalEnvironment
Fileノードで使用するLocalEnvironment の各種エレメント
ノード通過時にファイルやレコード情報がLocalEnvironmentのサブ・エレメントにセットされる
FileRead / FileOutputノードに対しては事前にセットしておくことでノード・プロパティを上書き可能
LocalEnvironment.File
LocalEnvironment.File.Read
LocalEnvironment.WrittenDestination.File
LocalEnvironment.Destination.File
LocalEnvironment.Destination.File.Remote
※次章「リモート・ファイルへのアクセス(FTP/SFTP)」で説明
LocalEnvironment.Wildcard.WildcardMatch
35
LocalEnvironment
LocalEnvironment.File
FileInputノード通過時に入力ファイルや処理レコードの情報がセットされる
情報内容
入力ファイルに
関する情報
エレメント名
Directory
Name
LastModified
TimeStamp
データ型
CHARACTER
CHARACTER
TIMESTAMP
CHARACTER
処理中の
レコードに
関する情報
Offset
Record
Delimiter
IsEmpty
INTEGER
INTEGER
CHARACTER
BOOLEAN
36
属性
ファイルのディレクトリ名
ファイル名(拡張子含む)
最終更新日付と時間
ノードがファイル処理を開始した時間
UTCタイムゾーン
(ファイル名にTimestampを使用する場合に利用)
ファイル内のレコード開始オフセット(0から)
ファイル内のレコード番号(1から)
レコードの区切り文字
レコードが空の場合にTrue
LocalEnvironment
LocalEnvironment.File.Read
FileReadノード通過時に入力ファイルや処理レコードの情報がセットされる
情報内容
入力ファイルに
関する情報
エレメント名
Directory
Name
LastModified
TimeStamp
データ型
CHARACTER
CHARACTER
TIMESTAMP
CHARACTER
処理中の
レコードに
関する情報
Offset
NextRecordOffset
INTEGER
INTEGER
EndOfFile
RecordNumber
NoMatchReason
BOOLEAN
INTEGER
STRING
Delimiter
IsEmpty
Archive/Directory
Archive/Name
CHARACTER
BOOLEAN
STRING
STRING
アーカイブ・ファ
イルに関する
情報
属性
ファイルのディレクトリ名
ファイル名(拡張子含む)
最終更新日付と時間
ノードがファイル処理を開始した時間
UTCタイムゾーン
(ファイル名にTimestampを使用する場合に利用)
ファイル内のレコード開始オフセット(0から)
次のレコードの開始オフセット(処理中レコードの最
後尾の1つ後ろ)
最後のレコードか(true)否か(false)
ファイル内のレコード番号(通常は1)
「No match」ターミナルに流れた場合の理由
NoFile / NoData / NoRecord
レコードの区切り文字
レコードが空の場合にTrue
入力ファイルがアーカイブされた場合のディレクトリ
入力ファイルがアーカイブされた場合のファイル名
37
LocalEnvironment
LocalEnvironment.Wildcard.WildcardMatch
FileInputノードでファイル名をワイルドカード指定すると、ワイルドカード部分の文字列がセットされる
フロー内で値をセットすることも可能
–FileInputノードを使用していないときでも利用可能
FileOutputノードのファイル名指定でワイルドカードを指定すると、この値が出力ファイル名として利用される
情報内容
ワイルドカード
に関する情報
エレメント名
WildcardMatch
データ型
CHARACTER
属性
入力ファイル名のワイルドカード文字に合致した部分
の文字列
LocalEnvironment.WrittenDestination.File
FileOutputノードのout/End of Dataターミナル出力時に出力ファイルの情報がセットされる
情報内容
出力ファイルに
関する情報
エレメント名
Directory
Name
Action
データ型
CHARACTER
CHARACTER
CHARACTER
TimeStamp
CHARACTER
38
属性
出力ファイルのディレクトリ名
ファイル名
Replace: 出力ファイルを置換
Create: 出力ファイルを新規作成
Append: 出力ファイルにレコードを追加
Finish:
Finish Fileメッセージを受信したが、
終了させるファイルが無かった場合
Transmit: ファイルがFTPにより転送完了
ノードがファイルの処理を開始した時間
UTCタイムゾーン
(ファイル名にTimestampを使用する場合に利用)
LocalEnvironment
LocalEnvironment.Destination.File
FileRead/FileOutputノードの前で以下のエレメントをセットすることで対応するノード・プロパティを
上書き可能
情報内容
エレメント名
データ型
属性
入出力ファイル
に関する情報
Directory
CHARACTER
Name
CHARACTER
Length
Offset
INTEGER
INTEGER
Archive/Directory
Archive/Name
STRING
STRING
FileReadノードの入力ディレクトリ、FileOutputノード
の出力ディレクトリ
FileReadノードの入力ファイル名、FileOutputノード
の出力ファイル名(拡張子含む)
FileReadノードが読み取るレコードの長さ
FileReadノードがレコードを検索する際の開始オフ
セット
入力ファイルがアーカイブされる場合のディレクトリ
入力ファイルがアーカイブされる場合のファイル名
アーカイブ・ファ
イルに関する
情報
39
リモート・ファイルへのアクセス
(FTP/SFTP)
40
リモート・ファイルへのアクセス(FTP/SFTP)
FileInput/FileOutputノードではリモート・ディレクトリ上のファイルへのアクセスが可能
FTP/SFTPクライアントとしてファイル転送を実施
FileReadノードは未サポート
リモート・サーバー
IIBサーバー
リモート・サーバー
レコード処理の実行
FTP転送
FTP転送
41
リモート・ファイルへのアクセス(FTP/SFTP)
リモート・ファイルに対する入出力
リモート・ディレクトリからのファイル取得
リモート・ディレクトリからFTPでローカル・ディレクトリへファイル転送し、ファイル処理を実行
ファイルがない場合は、「スキャン遅延(秒)」で指定した時間後に再度取得へ
リモート・サーバー上の
FTPディレクトリー
※「FTP」タブで指定
・・・・・・・・
・・・・・・・・
ローカルの入力ディレクトリー
※「基本」タブで指定
・・・・・・・・
・・・・・・・・
FTP
読み取り
入力ファイル
転送されたファイルは
リモート・ディレクトリから削除
リモート・ディレクトリへのファイル出力
一時出力ディレクトリー(mqsitransitディレクトリ)にファイルを作成し、FTP転送
–転送先に同一名のファイルが存在する場合は上書き
–転送後、ローカルの出力ディレクトリにファイルを作成することも可能
FTPはローカルにファイルを出力したメッセージフローが実行
ローカルの
/出力ディレクトリー/mqsitransit
※「基本」タブで指定
・・・・・・・・
・・・・・・・・
書き込み
リモート・サーバー上の
FTPディレクトリー
※「FTP」タブで指定
FTP
・・・・・・・・
・・・・・・・・
出力ファイル
42
リモート・ファイルへのアクセス(FTP/SFTP)
接続するFTPサーバーの設定箇所は以下の3箇所
①FileノードのプロパティにFTPサーバー情報を設定
Fileノードの「FTP」タブのプロパティに設定
ノード毎に設定
②構成可能サービスにFTPサーバー情報を登録
構成可能サービス「FtpServer」としてFTPサーバー情報をブローカーに登録
ノード・プロパティでは設定できないプロパティも設定可能
Fileノードの「FTP」タブでは、登録したサービス名のみを指定
FTPサーバー情報を複数のノードで共有
③(FileOutputノードのみ)LocalEnvironmentにFTPサーバー情報をセット
FileOutputノードのFTPサーバーおよびサーバー・ディレクトリの設定を動的に上書き可能
出力ファイル毎に設定を変更可能
※設定箇所によって設定できる項目が異なるため、FTPの接続要件に応じて設定箇所を選択
43
FTPサーバー情報の設定方法①
FileノードのプロパティにFTPサーバー情報を設定する場合
1.FTPサーバー・ログオン時に使用するユーザーID/パスワードをセキュリティIDとして登録(後述)
2.「FTP」タブの以下のプロパティに値を設定
「FTP」タブのプロパティ
説明
リモート転送
FTP/SFTPを利用する場合はチェック
転送プロトコル
「FTP」(デフォルト)、もしくは「SFTP」を指定
サーバーおよびポート
FTP/SFTPサーバーのIPアドレス、ポート番号を指定
<IPアドレス>:<ポート番号> ※ポート番号省略時はFTP=21、SFTP=22
FTPタブの設定内容を事前に『FtpServer』サービスとして、ブローカーに登録した場合、このプロパ
ティに登録したサービス名を指定(後述)
セキュリティID
FTP/SFTPサーバーにログオンするためのユーザーID、パスワード情報を指定
ユーザーID、パスワード情報は事前にmqsisetdbparmsコマンドでセキュリティID情報としてブロー
カーに登録し、そのセキュリティID名をプロパティに指定(後述)
サーバー・ディレクトリー
ファイル転送元/先のFTP/SFTPサーバー・ディレクトリーを指定
デフォルトは”.” (ログオン・ユーザーのデフォルト・ディレクトリー)
転送モード
ファイルの転送方法「バイナリ」(デフォルト)もしくは「ASCII」を指定
スキャン遅延
※FileInputのみ
ディレクトリー・スキャン間隔を指定 (デフォルト60秒)
(「ポーリング」タブのポーリング間隔の設定値を上書き)
リモート・ファイルが存在する場合
のアクション ※FileOutputのみ
転送先に同名のファイルがある場合のアクションを指定
「既存のファイルの置換(PUT)」(デフォルト)、「既存のファイルへ付加(APPEND)」
転送後にローカル・ファイルを保存
※FileOutputのみ
ファイル転送完了後にファイルのコピーをローカルに保存する場合にチェック(デフォルトはチェックなし)
指定時は「基本」タブで指定したディレクトリにコピーを生成
44
FTPサーバー情報の設定方法②
構成可能サービスにFTPサーバー情報を登録する場合
1.FTPサーバー・ログオン時に使用するユーザーID/パスワードをセキュリティIDとして登録(後述)
2.mqsicreateconfigurableserviceコマンドでFTPサーバー情報をブローカーへ登録
構成可能サービス「FtpServer」に設定
mqsicreateconfigurableservice ブローカー名 –c FtpServer –o サービス名 –n プロパティ名 –v 値
(設定例)
mqsicreateconfigurableservice IB9NODE -c FtpServer -o Server01
-n serverName,scanDelay,transferMode,connectionType,securityIdentity
-v one.hursley.abc.com:123,20,BINARY,ACTIVE,secId
サービス名(-o
オプション)は任意に指定可能
プロパティ一覧は次ページ参照
登録後はブローカーの再起動で反映
–設定値の確認は、mqsireportpropertiesコマンド
mqsireportproperties IB9NODE –c FtpServer –o Server01 –r
–登録後の変更は、mqsichangepropertiesコマンド
3.Fileノードの「FTP」タブの「FTPサーバーおよびポート」プロパティに登録したサービス名を指定
「リモート転送」プロパティのチェックは必須
他のノード・プロパティの設定は構成可能サービスの設定によって上書きされる
複数のFileノードでFTPサーバー情報を共有できる
ブローカー・レベルの設定のため複数の実行グループ間で共有可能
45
FTPサーバー情報の設定方法②
構成可能サービス「FtpServer」のプロパティ一覧
プロパティ
説明
accountInfo
FTPログオン中にアカウント名が要求されるFTPサーバーとの通信で、途中に入力するアカウント名
※接続するFTPサーバーによって設定が必要
cipher
(SFTPのみ)暗号化に使用するサイファースペック(blowfish-cbc / 3des-cbc / aes128-cbc)
compression
(SFTPのみ)圧縮レベル(0~9)を設定(デフォルト0は圧縮なし)
connectionType
(FTPのみ)ソケット・コネクションのタイプ(ACTIVE / PASSIVE(デフォルト))
knownHostsFile
(SFTPのみ)Hosts ファイルへの絶対パス(接続するホストとキーの情報を保管)
strictHostKeyCheckingプロパティがYesの場合に必須の設定
mac
(SFTPのみ)メッセージ認証コード(hmac-md5 / hmac-sha1)
preserveRemoteFileDate
リモート・ファイルの更新日時を引き継ぐかどうか(No(デフォルト)/ Yes)
protocol *
FTPかSFTPを指定
remoteDirectory *
FTP/SFTPサーバー上の入力/出力ディレクトリ
scanDelay
ファイル検索の間隔(秒単位)(デフォルト60秒)
securityIdentity *
事前にmqsisetdbparmsコマンドで設定したセキュリティID(後述)
serverName *
FTPサーバーのIPアドレス(およびポート番号)
strictHostKeyChecking
(SFTPのみ)接続時にホストの厳密な検査をするかどうか(No(デフォルト)/ Yes)
timeoutSec
接続時のタイムアウト(秒単位)(デフォルト5秒(FTP)、20秒(SFTP))
transferMode *
転送モード(BINARY(デフォルト)/ ASCII)
※「*」付きのプロパティはノード・プロパティの設定を上書き
46
FTPサーバー情報の設定方法③
(FileOutputノードのみ)LocalEnvironmentにFTPサーバー情報をセットする場合
1.FTPサーバー・ログオン時に使用するユーザーID/パスワードをセキュリティIDとして登録(後述)
2.フローにてLocalEnvironment.Destination.File.Remoteの以下のエレメントを設定
FileOutputノードの前で以下のエレメントをセットすることで対応するノード・プロパティを上書き可能
情報内容
出力ファイルに
関する情報
エレメント名
Server
データ型
CHARACTER
ServerDirectory
CHARACTER
属性
FTP/SFTPサーバーのIPアドレス、ポート番号を指定
<IPアドレス>:<ポート番号>
構成可能サービスFtpServerのサービス名を指定することも可
ファイル転送先のFTP/SFTPサーバー・ディレクトリーを
指定
3.(必要に応じて)Fileノードの「FTP」タブのプロパティを設定、
もしくは構成可能サービス「FtpServer」を登録
LocalEnvironmentのエレメントでは設定できない項目はノード・プロパティもしくは構成可能サービスで設定
47
ユーザーID/パスワードの設定
FTPサーバーにログオンする際に使用するユーザーID/パスワードを登録
mqsisetdbparmsコマンドでセキュリティIDとして登録
構文:
mqsisetdbparms ブローカー名 –n ftp::セキュリティID名 –u ユーザ名 –p パスワード
例:
mqsisetdbparms BROKER1 –n ftp::UserMapA –u USERA –p PASSA
セキュリティID名は任意に指定可能
登録したセキュリティID名をFileノードのFTPタブ、または
SFTPの場合はSSHキーファイル(OpenSSH
FtpServer構成可能サービスで指定
format identity files)の指定も可能
–mqsisetdbparms MyBroker –n sftp::mysftpid –u <username> -i <identity file> -r <passphrase>
※コマンド発行時は事前にブローカーを停止しておく必要がある
48
FTPコマンドの実行
FTP/SFTP転送の前後に実行するFTP/SFTPコマンドを指定可能(V8001から)
以下のLocalEnviornment配下の配列にて、コマンドを指定
転送前コマンド:
LocalEnvironment.Destination.File.Remote.Precommand [n]
転送後コマンド: LocalEnvironment.Destination.File.Remote.Postcommand [n]
FTPサーバー
FTP/SFTP
転送前後でFTPコマンドの実行が可能
(転送前)
ディレクトリ作成
(転送後)
ディレクトリにファイルを移動
ファイル名の変更
など
動的に生成された
ディレクトリ
49
FTPコマンドの実行
FTP、SFTP両方でサポートされるコマンド
フィールド名
パラメーター
使用法
RENAME
From、To
From フィールドで指定されたファイルを、To フィールドで指定されたファイル名
に名前変更
DELETE
フィールドの値
DELETE フィールドで指定されたファイルを削除
MKDIR
フィールドの値
MKDIR フィールドで指定されたディレクトリーを作成
RMDIR
フィールドの値
RMDIR フィールドで指定されたディレクトリーを削除
CD
フィールドの値
現行ディレクトリーから、CD フィールドで指定されたディレクトリーに切り替え
CDUP
パラメーターなし
現行ディレクトリーから親ディレクトリーに切り替え
FTPでのみサポートされるコマンド
フィールド名
パラメーター
使用法
SITE
フィールドの値
SITE FTP コマンドを実行
パラメーターやオプションを含む、実行対象のストリングを指定
QUOTE
フィールドの値
QUOTE FTP コマンドを実行
実行するパラメーターを含むコマンドを指定
FTP コマンドにエラーが返る場合に処理を続行する設定
転送前後コマンドに、フィールド名
IgnoreErrors を追加しtrueを設定
LocalEnvironment/Destination/File/Remote/Postcommand[1]/IgnoreErrors = true;
50
FTPコマンドの実行
コマンド実行例
以下の順番にFTPコマンドを実行
ファイル転送前
・リモートのサーバーを設定
・転送先のディレクトリ(TmpDir)を作成
・作成したディレクトリにカレントを移動
・作成するファイルを指定
ファイル転送
ファイル転送後
・作成したファイルを親ディレクトリに移動
・カレントを親ディレクトリに移動
・作成したディレクトリ(TmpDir)を削除
--before the transfer
set OutputLocalEnvironment.Destination.File.Remote.Server = ‘ftpserver.hostname:21';
set OutputLocalEnvironment.Destination.File.Remote.Precommand[1].MKDIR = 'TmpDir';
set OutputLocalEnvironment.Destination.File.Remote.Precommand[2].CD = 'TmpDir';
-- set the name to which to transfer the file
set OutputLocalEnvironment.Destination.File.Name = 'TestOfFileOutput.txt';
-- after the transfer
set OutputLocalEnvironment.Destination.File.Remote.Postcommand[1].RENAME.From = 'TestOfFileOutput.txt';
set OutputLocalEnvironment.Destination.File.Remote.Postcommand[1].RENAME.To = '../TestOfFileOutput.txt';
set OutputLocalEnvironment.Destination.File.Remote.Postcommand[2].CDUP = '';
set OutputLocalEnvironment.Destination.File.Remote.Postcommand[3].RMDIR = 'TmpDir';
51
実装例
52
実装例①
入力ファイルから1行ずつ読み取り、フォーマットを変えてファイルに出力する例
Fileノード関連の主な設定項目
取得するファイルのディレクトリ名/ファイル名、および出力するディレクトリ名/ファイル名を指定
レコードの単位を指定
–例では、改行コード区切り
FileInputの「End
of Data」ターミナルとFileOutputの「Finish File」ターミナルを接続
–FileOutputノードでは、レコード処理の終了を「Finish File」ターミナルで検知
入力ディレクトリ
入力ファイル
:/tmp/report
:DairyReport_081221.txt
食品, ワイン, 2300, 12, 27600
食品, ビール, 1300, 10, 13000
雑貨, シート, 400, 2, 800
:
出力ディレクトリ
出力ファイル
①
②
Out
食品:27600
食品:13000
雑貨:800
:
In
End Of Data
③
Finish File
<FileInputの設定例>
プロパティ
入力ディレクトリ名
設定値
/tmp/report
DairyReport*.txt
:/tmp/report_Sum
:DairySum_081221.txt
<FileOutputの設定例>
設定タブ
基本
入力ファイル
処理成功時のファイルの扱い アーカイブ保存
入力メッセージの構文解析 DairyReport用メッセージ定義
基本
基本
入力メッセージの構文解析
処理失敗時のファイルの扱い バックアップ保存
1行1レコード(区切り文字は改
レコードの扱い
行)
再試行
レコードおよびエレメント
プロパティ
入力ディレクトリ名
入力ファイル
設定値
/tmp/report_sum
DairySum*.txt
出力時の既存ファイルの扱い 既存ファイルは置換
1行1レコード(区切り文字は改
レコードの扱い
行)
設定タブ
基本
基本
基本
レコードおよびエレメント
53
実装例①
FileInputノードの設定例
取得する入力ファイルの情報や、
正常処理終了後のファイルの扱
いを指定
ファイルの処理単位を指定
この設定例では改行コードをキー
にレコード検出することを指定
FileOutputノードの設定例
出力ファイルの情報や、出力ディレク
トリに同一名のファイルが存在する場
合の動作を指定
54
処理データのファイルへの書き出し方法を指定
この設定例では、処理データをファイル内の1レコード
として改行コード区切りで追記することを指定
実装例②
FileReadノードを使用したフローの実装例
CSVファイルからルーティング・テーブルを読み込み、リクエスト・メッセージをルーティング
入力メッセージにて、ルーティング先のIDを指定
FileReadノードにて、ルーティングIDに合致するルーティング先情報をファイルから読み込む
FileReadノードにて、ルーティング先情報(=ラベル名)をLocalEnvironmentに指定し、
RouteToLabelノードで特定のLabelノードに伝播
LocalEnvironmentの指定に従い、
特定のLabelノードに伝播
ルーティング・テーブル
ルーティング先ID指定
読み取り
出力先1
ルーティング
ルーティング先IDと合致するルーティン
グ先情報を読み取り、
LocalEnvironmentに設定
出力先2
55
実装例②
各ノードの設定例
<request>
<taskId>1</taskId>
<data>Request Data</data>
</request>
入力ディレクトリ
入力ファイル
:/tmp/RoutingTable
:RoutingTable.csv
設定タブ
設定情報
設定値
基本
ラベル名
TASK1
1,TASK1
2,TASK2
FILEREAD.TASK1.OUT
FILEREAD.TASK2.OUT
<FileReadの設定例>
設定タブ
基本
設定情報
設定値
入力ディレクトリー
C:¥tmp¥RoutingTable
ファイル名パターン
RoutingTable.csv
結果データのロケーション $ResultRoot/DFDL/RoutingTable/labelName
結果
出力データのロケーション $OutputLocalEnvironment/Destination/RouterList/DestinationData/labelName
レコード選択式
$InputRoot/XMLNSC/request/taskId=$ResultRoot/DFDL/RoutingTable/taskId
入力メッセージの構文解析 メッセージ定義
(メッセージ・セット情報を記入)
レコードおよびエレメント
区切り(DOSまたはUNIXの行終了)
レコード検出
56
実装例②
FileReadノードの設定例
「基本」タブ
入力ディレクトリー
ファイル名パターンを設定
「レコードおよびエレメント」タブ
レコード識別方法を
行区切りに設定
57
実装例②
FileReadノードの設定例
「結果」タブ
ルーティングテーブルファイルのラベル名を
出力データのロケーションにコピー
入力メッセージのtaskIdと、ルーティングテーブル
ファイルのtaskIdが合致する場合
58
LocalEnvironmentに、ルーティング先
のラベル名を指定
ファイル連携の考慮点
59
他ファイル転送製品の検討
要件に応じて他のファイル転送製品の利用も検討
リモートファイルとの連携時には、ファイル転送部分は他製品を利用
IIBではファイル転送に関する高機能な制御ができない
– 圧縮転送、間欠転送、複数ファイルの一括転送、など
IIBの機能でのファイル転送(FTP/SFTP)はシステム間の密結合につながる
– メッセージ・フローがファイル転送を実行するため、転送完了まで後続のファイル処理が開始できない
FTPを外出しすれば、多くのファイル処理をより効率的に実行できる
– 接続先のFTPサーバーの運用時間をブローカーが意識する必要がでてくる
連携部分を外出ししたほうがシステム間の疎結合化、責任範囲の切り分けが可能
IIBとMQ
MFTやConnect:Directなどの他ファイル転送製品/ツールを組み合わせた構成も検討する
リモート・サーバ
リモート・サーバ
IIB
ファイル転送ツールの責任範囲
IIBの責任範囲
ファイル転送ツールの責任範囲
高度なメディエーション処理が不要な場合は、IIBを通さずファイル転送製品のみでの実装も検討
単純なファイル転送までIIBで実装すると、一時的な負荷の集中で他連携に影響する場合もあるため
ファイル連携要件に対して、IIBでの実装が必要か・他のファイル転送製品でも実装可能かを検討
(※)メディエーション: 伝送データに対する フォーマット変換、プロトコル変換、コード変換、ルーティング処理など
60
マルチスレッド処理
追加インスタンスによるマルチスレッドでのファイル処理
ノード・レベルまたは、フロー・レベルで追加インスタンスを設定可能
ノード・レベルでは、FileInputノードの「インスタンス」タブの「追加インスタンス」プロパティに設定
–「追加のインスタンス・プール」プロパティは「ノードの関連付けられたプールの使用」に設定
フロー・レベルでは、BARファイルの「構成」タブで設定
FileInputノードの「インスタンス」タブで設定
(※)ISEテスト環境にて確認する限り、FTPによりリモートファイルを読み込む場合は、
追加インスタンスを設定しても、FTPサーバーへの接続は1スレッドで実施されます。
読み取り時、1つのファイルは複数のインスタンスから重複処理されることはない
処理開始時、ファイルはtransitinディレクトリに移動され、インスタンスに割り当てられる
–他の実行グループのメッセージフローでも、重複して読み取ることはない
他のインスタンスは、指定されたパターンに一致する他のファイルを処理
書き込み時、複数のインスタンスから1つのファイルに書き込み可能
他のインスタンスが書き途中の場合、同一実行グループ内のフローはWaitして書き込みをリトライ
–他の実行グループのフローで同一ファイルにアクセスする場合は調整が行われない
書き込み先ファイルがロックされている旨のエラーが出力される
⇒複数の実行グループに同一ファイルを処理するフローを配置しない
61
ファイル連携時のトランザクション
Fileノードのトランザクション
Fileノードの入力/出力処理は、トランザクション管理できない
エラーが発生しても実施済みのファイル書き出しを取り消すことはできない
FileInputのトランザクション設定は、後続ノード(MQ/DBノードなど)のトランザクション・モードを決定
後続処理でエラーが起きても、
ファイル出力は取り消せない
入力ファイル
出力
出力ファイル
1レコード毎にメッセージ・フローは実行され、レコード単位で1UOWとなる
途中のレコード処理でエラーが発生しても、実施済のフロー処理はバックアウトされない
1レコード毎
に1UOW
入力ファイル
出力
1UOW
レコード1
メッセージ1
1UOW
レコード2
メッセージ2
1UOW
レコード3
実施済みのフロー処理は
バックアウトされない
62
ファイル連携時のトランザクション
ファイル⇒MQメッセージ連携時のコミットタイミング
ファイルの最終レコードを処理する場合、かつ、EndOfDataターミナル処理が実装されていない場合、
mqsiarchiveに入力ファイルが移動された後、メッセージがコミットされる
–mqsiarchiveに入力ファイルが移動されたことが、必ずしも最終レコードの処理成功を意味しないことに注意
⇒MQコミット後にmqsiarchiveにファイルを移動するためには、EndOfDataターミナルを実装する
入力ファイル
②outターミナルより伝播
レコード
最終レコード
①読み取り
出力
out
EndOfData
④mqsiarchiveディレクトリに移動
③メッセージPUT
メッセージ1
⑤メッセージコミット
実装なし
(※)ISEテスト環境での検証結果をもとに記載しています。
(補足)最終レコード以外の場合、メッセージPUT直後にMQコミットが発行される
入力ファイル
①読み取り
レコード1
レコード2
②outターミナルより伝播
出力
③メッセージPUT
メッセージ1
out
④メッセージコミット
⑤次のレコード
読み取り
– 最終レコードの場合、かつ、EndOfDataターミナル処理が実装されている場合、
最終レコード以外の場合と同じく、メッセージPUT直後にMQコミットが発行される
63
out
EndOfData
実装あり
エラー処理の考慮点(ファイル⇒ファイル連携)
エラー処理の考慮点(ファイル⇒ファイル連携)
処理でエラーが発生した場合、書込み途中の出力ファイルが残存
デフォルトでは出力mqsitransitディレクトリに一時ファイル、「出力ファイルへ直接書き込み」指定の場合は
出力ディレクトリに処理途中の出力ファイルが残存
残存した状態で再処理を実施すると、中途半端な状態の一時出力ファイルに追記されてしまう
(ケース①)処理エラーによりmqsibackoutディレクトリに退避された場合
–再度mqsibackoutから入力されたファイルは、先頭から読み込まれる
(ケース②)フロー障害(プロセスダウンなど)の場合、自動的にフローが再起動され再処理に入る
–入力mqsitransitinディレクトリに残った入力ファイルは、フローの再起動後に再度先頭から読み込まれる
⇒ 再処理時に一時出力ファイルへの追記を防ぐ実装が必要(後述)
入力ディレクトリ
入力
ファイル
処理開始
(ケース②)
フロー障害(プロセスダウンなど)の場合は、
入力mqsitransitinディレクトリから
再度ファイルが読み込まれる
エラー発生
mqsitransitin ディレクトリ
mqsitransit
入力
ファイル
(ケース①)
mqsibackoutディレクトリ
からファイルを再入力
再処理時に、残存した一時
ファイルに追記が発生する
一時出力
ファイル
mqsibackout ディレクトリ
入力
ファイル
64
エラー処理の考慮点(ファイル⇒ファイル連携)
エラー処理(ファイル⇒ファイル連携)
実装例 ①:出力ファイルにタイムスタンプを使用する方法
FileOutputで出力するファイル名に、タイムスタンプを付与する
– 1件目のレコードが処理された場合にのみ、出力ファイル名をタイムスタンプ付で生成する
– 2件目以降のレコード処理では、一件目のファイル名を出力先に指定
⇒入力ファイルが再投入された場合、異なるファイル名で出力ファイルの組み立てが再開されるため、
エラー発生前の一時出力ファイルへの追記が発生しない
処理開始時のタイムスタンプを
ファイル名に付与する
例: filename_yyyyMMddHHmmss
mqsitransitin ディレクトリ
入力
ファイル
ファイル名ごとに異なる一時
ファイルが作成されるため、再
処理時に追記が発生しない
mqsitransit
再処理時の
一時出力ファイル
再投入
エラー発生時の
一時出力ファイル
65
エラー処理の考慮点(ファイル⇒ファイル連携)
実装ポイント:
タイムスタンプの付与例
–ファイル名をSHARED変数とし、1レコード目の場合のみファイル名を生成しSHARED変数に格納する
–2レコード目以降は、SHARED変数のファイル名を宛先として使用する
DECLARE fileName SHARED CHARACTER;
・・・
IF LocalEnvironment.File.Record = 1 THEN
SET fileName = ‘out_’ || CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT
'yyyyMMddHHmmss') || '.txt';
END IF;
SET LocalEnvironment.WrittenDestination.File.Name = fileName
考慮点
–連携先システムが、タイムスタンプ付きのファイル名を許容していることが前提
–定期的に残存した一時出力ファイルのクリーンアップが必要
–SHARED変数はスレッド間で共有されるため、マルチスレッドでの処理には対応できない
66
エラー処理の考慮点(ファイル⇒ファイル連携)
実装例 ②: ファイルの再入力を検知し処理を停止する方法
フロー障害(プロセス障害)の場合、再入力されたファイルをmqsibackoutに退避する
–フロー再起動時はmqsitransitinディレクトリに残存したファイルが自動的に再処理されるため、
以下実装にて入力ファイルをmqsibackoutディレクトリに退避させる
※処理エラーの場合は、ファイルは自動的にmqsibackoutディレクトリに退避される
⇒mqsibackoutに退避されたファイルを再入力する場合は、再入力の前に一時ファイルおよび外部リソースから
該当する情報を削除する
実装ポイント:
再入力ファイルの退避
–処理中のファイルの情報を外部リソースに保持
ファイル開始後(一レコード目の処理)で、外部リソース(MQ/DB)に処理対象のファイル名を記録(即時コミット)
ファイル処理終了時(最終レコード処理後)に、外部リソースから情報を削除する
–ファイル処理開始時に、外部リソースに処理中のファイルの情報が存在する場合処理をエラーとし、ファイルをmqsibackout
に移動させる
考慮点
–エラー発生時は運用での対応が必要になる
67
エラー処理の考慮点(ファイル⇒ファイル連携)
実装イメージ
1.処理ファイルの
情報を外部リソースに
通常時フロー 保存
出力
入力
ファイル
一時出力ファイル
2.エラー発生
削除
外部リソース
mqsitransitinディレクトリ
再処理フロー
参照
入力
ファイル
mqsibackoutディレクトリ
入力
ファイル
3.ファイルが
再処理される
削除
処理エラーとする
4.外部リソースの入力ファイルの情報を確認
5.外部リソースに処理中のファイルの情報が存在
する場合、処理エラーとしmqsibackoutに退避
68
6.mqsibackoutに退避されたファイルを再入
力する場合は、再入力前に運用にて一時
ファイルと外部リソースの情報を削除
MQメッセージからファイルへの変換
複数のMQメッセージを1ファイルにまとめて出力するケース
MQメッセージに分割されたデータを1ファイルにマージして宛先に送信したい
ファイルのデータが全てそろってから処理を開始する、論理順序でメッセージを処理するなどの要件
がある場合、グループメッセージが有用
グループメッセージ
出力ファイル
Application
グループ・メッセージを使用した実装
MQInputノードにて、アプリケーションから送信されたグループメッセージを受信
グループ・メッセージをメッセージに付与されたシーケンス番号の順序で取得
–MQInputノードの「論理順序」にチェック
グループに属するすべてのメッセージが入力された後、処理を開始する
–MQInputノードの「すべてのメッセージが使用可能」にチェック
※グループ・メッセージ処理中に発生したエラーやフロー障害の処理に考慮が必要(後述)
69
エラー処理の考慮点(グループ・メッセージ⇒ファイル連携)
エラー処理の考慮点(グループ・メッセージ⇒ファイル連携)
グループ・メッセージ単位でエラー処理を実施する必要がある
フロー障害(プロセス障害など)が発生すると、入力キューに中途半端なグループ・メッセージが残される
グループ・メッセージの特性より、「すべてのメッセージが使用可能」がチェックされていると、
フローが再起動しても残されたメッセージは滞留し続ける
⇒グループ・メッセージの処理途中でエラーが発生した場合は、そのグループの全メッセージを退避
ファイル⇒ファイル連携同様、処理でエラーが発生した場合、書込み途中の出力ファイルが残存
デフォルトではmqsitransitディレクトリに一時ファイル、「出力ファイルへ直接書き込み」指定の場合は
出力ディレクトリに処理途中の出力ファイルが残存
⇒グループ・メッセージ再送信の前に、一時出力ファイルを破棄する必要がある
書き込み途中の一
時ファイルが残存
エラー発生
グループメッセージ
mqsitransit
一時出力
ファイル
Application
中途半端なグループメッセージが
残った場合、最処理時に
読み込まれない
70
エラー処理の考慮点(グループ・メッセージ⇒ファイル連携)
エラー処理(グループ・メッセージ⇒ファイル連携)
実装例 ①:出力ファイルにタイムスタンプを用いて、バックアウトメッセージを自動再処理する方法
グループ・メッセージ単位にUOWを設定する
–MQInputノードの「メッセージ・グループによるコミット」にチェック
–MQInputノードでFailureターミナルを使用しない
Failureターミナルではグループ・メッセージでも1件ごとにコミットされてしまう
⇒エラー発生時はグループの全てのメッセージがバックアウトされるため、中途半端なメッセージが残存しない
FileOutputで出力するファイル名に、タイムスタンプを付与する
– 一件目のグループ・メッセージが処理された場合にのみ、出力ファイル名をタイムスタンプ付で生成する
– 二件目以降のレコード処理では、一件目のファイル名を出力先に指定
⇒再度グループメッセージが処理された場合、異なるファイル名で出力ファイルの組み立てが再開されるため、
エラー発生前の一時出力ファイルへの追記が発生しない
–実装ポイントは、ファイル→ファイル連携の実装方法①と同様
考慮点
–連携先システムが、タイムスタンプ付きのファイル名を許容していることが前提
–残存した一時出力ファイルのクリーンアップが必要
–SHARED変数はスレッド間で共有されるため、マルチスレッドでの処理には対応できない
–パースエラーなど再処理する意義がないエラーの場合に、バックアウトが繰り返される可能性がある
71
エラー処理の考慮点(グループ・メッセージ⇒ファイル連携)
実装例 ②:メッセージの再入力を検知し処理を停止する方法
実装例①と同じく、グループ・メッセージ単位にUOWを設定する
–MQInputノードの「メッセージ・グループによるコミット」にチェック
–MQInputノードでFailureターミナルを使用しない
Failureターミナルではグループ・メッセージでも1件ごとにコミットされてしまう
⇒エラー発生時は全てのメッセージがバックアウトされるため、中途半端なメッセージが残存しない
正常フローにて、メッセージのバックアウトカウントをチェックする
–1メッセージ目の処理でバックアウトカウントが1以上の場合は、同じグループのメッセージをすべてエラー・キューに退避する
⇒エラー・キューにメッセージが退避された場合、再送信の前に運用で一時ファイルを削除
考慮点
–エラー発生時は運用での対応が必要になる
72
複数ファイルの順序制御
複数ファイルの処理順序の制御は不可
基本的には古い日付の順番でファイルが処理される
ファイル名順で処理をするという制御は不可
(※)ISEテスト環境にて確認する限り、ファイルは更新日付の順番で処理されます。
ただし、更新日時が同じファイルについては、処理順序は不定です。
厳密に処理順序を制御するためには、受信アプリケーション側での受信ファイルの制御が必要
アプリケーションで順番を並べ替えてファイルを処理など
アプリケーションで
順番を並べ替えて
ファイルを処理
ブローカーの処理順序は不定
B.txt
タイムスタンプ:
2008/12/01 10:00
①
A.txt
タイムスタンプ:
2008/12/01 10:10
②
①
①
B.txt
②
②
ファイル処理用
アプリ
A.txt
C.txt
タイムスタンプ:
2008/12/01 10:20
③
③
③
C.txt
73
複数ファイル単位での出力管理
複数ファイルをまとめて出力管理したいケース
複数ファイル単位で処理が正常終了したことを確認後、別アプリケーションの処理を開始したい
IIBの標準機能では複数ファイル単位での出力管理はできない
ファイル単位で処理が完結するため、複数ファイル単位での出力管理は不可
フローで制御する場合、複雑な実装が必要となる(次ページ)
通常は、後続のアプリケーションで関連するファイルの出力状況を確認し、処理を開始
複数ファイルで1つの
処理単位となる
IIB処理内は個別の
処理として実行
全ファイルの処理が成功したら、
送信先システムに送信したい
IBM Integration Bus
フローA
ファイル処理
アプリケーション
フローB
フローC
74
ファイル処理
アプリケーション
複数ファイル単位での出力管理
IIBで複数ファイル単位での出力管理を実装する場合
外部リソース(DB、キューなど)での情報管理が必要
ファイル送信前に制御ファイルや制御メッセージなどで制御するファイル数などの情報を
外部リソース(DB2,MQなど)に格納しておく(①)
各ファイルでは全レコードの処理後、外部リソースに正常終了情報を書き込む (②)
全ファイルが正常終了情報を書き込んでいたら、
全ファイルを正規のディレクトリに移動するスクリプトを起動する(③)
–サポート・パックIA9Zでスクリプト起動用のノードを提供 (Category2 AS-ISでの提供)
[Fileノードの出力先Dir]
ImageA_3.txt
ImageA_3.txt
ImageA_2.txt
[アプリ向け出力先Dir]
ImageA_3.txt
ImageA_2.txt
ImageA_1.txt
Out
ImageA_1.txt
In
メディエーション処理の実行
FileInput
ImageA_2.txt
ImageA_1.txt
FileOutput
End Of Data
Finish File
ファイル移動スクリプト
Out
①処理ファイルの情
Compute
報を事前に登録
更新&
参照
トランザクション管理DB
トランザクションID
入力ファイル数
処理完了ファイル数
TRAN_A0098
3
2
BatchKick
Kick
③ファイルを移動
Out1
②DBへの処理完了の登録と、トランザ
クション内の処理完了状況をチェック
入力ファイル数=処理完了ファイル数
→ファイルのクローズ後、ファイル移動用
スクリプトを起動
75
ファイル処理の実行開始制御
ファイル処理の実行タイミングを制御したいケース
ファイル処理をバッチジョブとしてスケジュール実行したい
ファイル転送が完了した旨の通知メッセージを受け取ってから、ファイル処理を開始したい
IIBでのファイル処理開始のトリガーは、入力ディレクトリへのファイル生成のみ
FileInputノードには入力端子がないため、ファイル処理の開始を制御できない
ファイル処理を開始したい時に、FileInputノードがモニタリングするディレクトリにファイルを移動するよ
うなスクリプトの実装が必要
OSのスケジューラー(cronなど)で起動
フロー内で起動させることも可能(次ページ)
※FileInputノードにトリガファイルを入力し、FileReadノードからディレクトリのファイルを読み込む
実装も考えられるが、以下の制約から実装が複雑になる
FileReadノードにて読み込み可能のファイル数は1つのみ
FileReadでは条件にマッチする1レコードのみを読み込み、後続処理に伝播
76
ファイル処理の実行開始制御
IIBでファイル処理の実行開始制御を実装する場合
ファイル処理実行時に、ファイルを入力ディレクトリに配置する
ファイル転送完了後(①)にファイル転送アプリケーションが、通知メッセージをキューに送信(②)
通知メッセージを受信したら、ファイル移動用のスクリプトを起動(③)
入力ディレクトリにファイルが配置されたのをトリガーに、フロー処理を開始(④)
先に実行されるフロー
制御メッセージを受け取り、ファイル
処理用のフローを起動
ファイル転送アプリケーション
BatchKick
MQ
Kick
②
ファイル移動用スクリプト
ファイルの移動
ファイルの転送
転送完了通知を
MQメッセージで送信
③
①
④
移動
[一時出力Dir]
[FileInput向けDir]
In
Out
メディエーション処理の実行
FileInput
End Of Data
ファイルが移動されると、
ファイル処理を開始
77
FileOutput
Finish File
Fly UP