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