この機能の目的は、アプリケーションで、大規模ファイル全体を 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 に対して、読み取りの再開状態を格納せずに処理を完了するように指示します。必要に応じて、この後に通知を送信したり、他の処理を実行するようにコラボレーションルールを設定できます。