このセクションでは、BatchLocalFile OTD の機能を使用する方法を説明します。
BatchLocalFile OTD で実行できる呼び出しは、特定の順序である必要はありません。ただし、1 つのコラボレーションルールの実行で複数の転送を行う場合、1 つの転送が終了するごとに reset() を呼び出す必要があります。複数のファイルを転送する動的なバッチ順はこのケースに当てはまります。
Java コラボレーションを使用して、BatchLocalFile インタフェースを使用しながらシーケンス番号を持つ複数のファイルを生成している場合は、reset() メソッドを呼び出して、1 つのファイルの終わりと、次のファイルの開始を示してください。
BatchLocalFile OTD を使用してローカルファイルからレコードを読み取ることには、次の利点があります。
データストリーミング: BatchFTP OTD またはレコード処理 OTD と組み合わせて使用すると、アプリケーションにおいて、ローカルファイルシステムとの間でデータを直接ストリームできます。この機能によって、ファイル全体がメモリーにロードされることがないため、大規模ファイルを読み取るときに必要な RAM を最小限に抑えることができます。
読み取りの再開: データストリーミングを使用しているときに、アプリケーションにおいて大規模ファイルを後続の複数のビジネスルールの実行で読み取ることができます。この処理は、現在の成功したファイル読み取り処理についての情報を維持し、最後に格納された位置から次の読み取り処理を再開することで実現されます。
アダプタには、実際のファイル転送の直前または直後にアクションを実行できる機能があります。これらの設定をアダプタの設定パラメータ、または対象の OTD の Configuration ノードに入力できます。
これらの機能は、BatchLocalFile OTD と BatchFTP OTD の両方で使用できます。
転送前コマンド
インバウンド転送の場合、ターゲットシステムをポーリングしている他のクライアントに対して、同じディレクトリおよびファイルパターンまたは名前でファイルを使用できないようにすることができます (Rename)。アウトバウンド転送の場合、既存のファイルの自動バックアップを作成できます (Copy)。
次の転送前オプションがあります。
Rename: ターゲットファイルの名前を保護または復旧のために変更します。希望するディレクトリ名およびファイル名を指定します。まだ存在しないディレクトリは作成されます。
Copy: バックアップまたは復旧のためにターゲットファイルをコピーします。希望するディレクトリ名およびファイル名を入力します。
None: 何もしません。
Rename を使用している場合に、転送先ファイルがすでに存在すると、FTP サーバーによって動作が異なることがあります。たとえば、一部の UNIX FTP サーバーでは、転送先ファイルが必ず上書きされます。つまり、エラーメッセージや警告メッセージは表示されません。Windows XP サーバーなどの他の FTP サーバーでは、システムによってエラーが生成され、呼び出された OTD メソッドで例外がスローされます。該当する FTP サーバー固有の動作をよく確認してください。不確かな場合は、コマンドプロンプトでアクションを試してください。アクションによってエラーメッセージが表示された場合、コラボレーションで例外がスローされると考えられます。
適切に保護、バックアップ、または復旧を行うには、目的にかなった適切な設定を選択します。たとえば、アウトバウンドの追加転送での失敗から復旧する場合は、Copy 設定を使用します。ファイル名およびディレクトリ名を指定するときに、正規表現、特殊文字のいずれか、または両方を使用できます。
転送後コマンド
インバウンド転送の場合、自動バックアップを作成することで、転送済みファイルを「消費済み」として指定したり (Rename)、永久に破棄したり (Delete) することができます。アウトバウンド転送の場合、転送済みファイルの名前を変更することで、そのファイルを他のクライアントで使用できるようにすることができます。ファイル名およびディレクトリ名を指定するときに、正規表現、特殊文字のいずれか、または両方を使用できます。
次の転送後オプションがあります。
Rename: 転送済みファイルの名前を変更します。希望するディレクトリおよびファイル名を指定します。
Delete: 転送済みファイルを削除します (インバウンド転送のみ)。
None: 何もしません。
アウトバウンド転送 (パブリッシング) の場合、まだ存在しないディレクトリは作成されます。
転送前コマンドおよび転送後コマンドの詳細は、次を参照してください。
BatchFTP OTD
転送前 (BatchFTP 接続マップ)
転送後 (BatchFTP 接続マップ)
BatchLocalFile OTD
転送前 (BatchLocalFile 接続マップ)
転送後 (BatchLocalFile 接続マップ)
フィールド要素に加えて、BatchLocalFile OTD の Client ノードには、アダプタのクライアントインタフェース機能を拡張するメソッドが含まれます。これらのメソッドは、OTD の適切な使用に不可欠です。メソッドは次のとおりです。
get(): ローカルファイルを取得し、その内容をデータペイロードとして格納します。このメソッドは、Target Directory Name および Target File Name パラメータに基づいて一致する最初のファイルを取得し、その内容をデータペイロード (バイト配列) として格納します。次にすべての転送後コマンドを実行します。
このメソッドを呼び出した後に、メソッド getPayload() を介してペイロードの内容を取得できます。
put(): データペイロードを (バイト配列として) ファイルに格納します。次にすべての転送後コマンドを実行します。
このメソッド呼び出しを使用する前に、メソッド setPayload() を使用してファイルの内容を設定してください。
このメソッドは、エラーが発生すると、例外 (LocalFileException) をスローします。
reset(): Client ノードを前に実行した初期設定の直後の状態に戻します。
reset() メソッドは、BatchFTP OTD と BatchLocalFile OTD の両方で使用できます。reset() メソッドは、同一の executeBusinessRules() の実行中に別の転送に OTD を再使用しなければならない場合に呼び出してください (たとえば、動的構成機能を使用しているとき)。reset() メソッドは、OTD 全体をリセットせずに、Client ノードの内容をリセットします。
この機能の目的は、アプリケーションで、大規模ファイル全体を 1 度に処理するのではなく、分けて読み取れるようにすることです。読み取りの再開を使用すると、データストリーミングを使用しているときに、システムにおいてファイルを後続の複数のビジネスルールの実行で読み取ることができます。
全体の処理
読み取りの再開機能の処理は、現在の成功したファイル読み取り処理、ブレークについての持続的な情報を維持し、最後に格納されたブレーク位置から次の読み取り処理を再開することで実現されます。その結果、現在のファイルは分けて読み取られ、各部分の開始および終了は、定義済みのブレーク条件によって判断されます。
ブレーク条件は、ビジネスルールの定義を通じて決定します。読み取りの再開機能は、1 つのビジネスルールで 1 度にファイルの一部分を読み取ることを基本として動作するため、これらのルールでブレークを決定します。各ビジネスルールは、ファイルの一部分の読み取りを実行し、ブレークして、次のルールに移動します。次のルールは、次の部分をブレークまで読み取り、以降、ファイル全体が読み取られるまで続けられます。
ブレーク条件は、コラボレーションルールで決定する、任意の種類の停止ポイントにすることができます。たとえば、この条件は、一定数のレコードにしたり、区切り記号にしたり、または特定の文字列に到達したときにしたりできます。
OTD の Client ノードには読み取り専用のプロパティー (ResumeReadingInProgress ノード) があり、進行中の読み取りの再開処理があるかどうかを示します。このノードは、情報提供のみを目的としています。また、読み取りの再開機能は、データストリーミングモードでのみ使用できます。
この機能には、アダプタの設定オプションを設定するほかには、特別な処理上の要件はありません。アダプタ設定には、この機能を有効または無効にするオプションがあります。このオプションには、実行時にもアクセスできます。
この機能を有効にすると、アダプタは、常に、進行中の読み取りの再開処理があるかどうかを最初に確認します。この機能が進行中でない場合、アダプタは、アダプタの設定に基づいて次のファイルを判断します。
段階ごとの処理
図 1–11 は、読み取りの再開機能がファイルの転送前/転送後コマンドと同調して処理を実行する方法を示しています。この例では、コラボレーションは、同じビジネスルールを 4 回実行します。ビジネスルールが実行されるごとに、コラボレーションはファイルの別のセクションを読み取ります。コラボレーションは、最後のレコードを読み取ると、転送後コマンドを実行します。
この例では、読み取りは次の段階で起こります。
アダプタは、ファイルの読み取りを開始し、データを部分的に読み取った後 (パート 1 の終わり) でブレーク条件に達します。アダプタの転送前コマンドはすでに実行されています。読み取りの再開状態が格納され、転送後コマンドは実行されません。アダプタは、ビジネスルールの次の実行を待機します。
読み取りの再開処理は進行中ですが、データの部分的な読み取りを達成しただけです。アダプタは、1 つのブレーク条件から次のブレーク条件までを読み取ります (図のパート 2 とパート 3)。それぞれのケースで読み取りの再開状態が格納され、アダプタは、1 部分読み取るごとに 1 回ビジネスルールを実行します。
読み取りの再開処理は進行中で、ビジネスルールの最後の実行時にデータの読み取りを完了します (パート 4)。アダプタは、ブレーク条件からファイルの末尾までを読み取ります。読み取りの再開状態は格納されず、次にすべての転送後コマンドが実行されます。
前のすべての段階で、ビジネスルールは繰り返し実行され、ファイルの現在の読み取り位置は、実行ごとに変化します。ファイルが図のパート 1 よりも小さい場合、アダプタはブレーク条件に達しません。通常の処理が行われ、読み取りの再開状態は格納されません。転送前コマンドおよび転送後コマンドが実行されます。
読み取りの再開を無効にした場合の処理
読み取りの再開機能を無効にすると、次のようになります。
データの読み取りを停止し、その後再開: ファイルの終わりにある未読み取りのデータは無視されます。
進行中の読み取りを再開: 前の実行からの進行中の読み取りの再開処理がある場合、エラーが生成され、例外がスローされます。
進行中の読み取りの再開処理がある場合、中断はできないため、完了してください。ファイルを完全に消費するためには、executeBusinessRules() メソッドを十分な回数呼び出します。つまり、ファイルが完全に消費されるまで、ファイルの処理を中断しないでください。
読み取りの再開状態を格納しない
読み取りの再開機能が有効になっていても、部分的なデータストリームの読み取りが必要な場合があります。たとえば、レコードパーサーの上位になんらかのアプリケーションロジックがあり、このロジックが、破壊されたレコードがあるためにファイルの残りを放棄して、ファイルの内容を一部だけ読み取った後にファイルを正常に閉じることがあります。
この場合、finish() を呼び出す前に、LocalFileOTD.Configuration.ResumeReading ノードを False に設定します。この設定は、BatchLocalFile OTD に対して、読み取りの再開状態を格納せずに処理を完了するように指示します。必要に応じて、この後に通知を送信したり、他の処理を実行するようにコラボレーションルールを設定できます。
BatchLocalFile OTD を使用して、アダプタのデータストリーミング機能を実装できます。この機能は、FTP OTD およびレコード処理 OTD にも備わっています。ただし、BatchLocalFile OTD はデータストリームアダプタプロバイダである一方、他の 2 つの OTD はコンシューマに過ぎません。OTD のデータストリーミング機能の使用方法については、「コンポーネント間でのデータのストリーミング」セクションを参照してください。
BatchLocalFile OTD のシーケンス番号付けは、BatchFTP OTD のシーケンス番号付けと同様に動作します。詳細は、「シーケンス番号付け」を参照してください。
シーケンス番号付けを使用した複数ファイルの生成
Java コラボレーションを使用して、BatchLocalFile インタフェースを使用しながらシーケンス番号を持つ複数のファイルを生成している場合は、reset() を呼び出して、1 つのファイルの終わりと、次のファイルの開始を示してください。
この OTD のこの機能は、BatchFTP OTD の型変換と同様に動作します。詳細は、「型変換の処理」を参照してください。