ItemStream
ItemReader
と ItemWriter
は両方ともそれぞれの目的を十分に果たしますが、別のインターフェースを必要とする共通の懸念が両方にあります。一般に、バッチジョブの範囲の一部として、リーダーとライターを開いて閉じ、状態を保持するメカニズムが必要です。次の例に示すように、ItemStream
インターフェースはその目的を果たします。
public interface ItemStream {
void open(ExecutionContext executionContext) throws ItemStreamException;
void update(ExecutionContext executionContext) throws ItemStreamException;
void close() throws ItemStreamException;
}
各メソッドを説明する前に、ExecutionContext
にメンションする必要があります。ItemStream
も実装する ItemReader
のクライアントは、read
を呼び出す前に open
を呼び出して、ファイルなどのリソースを開いたり、接続を取得したりする必要があります。同様の制限が、ItemStream
を実装する ItemWriter
に適用されます。第 2 章で記述されていたように、予想されるデータが ExecutionContext
で見つかった場合、それを使用して ItemReader
または ItemWriter
を初期状態以外の場所で開始することができます。逆に、close
は、オープン中に割り当てられたリソースが安全に解放されるようにするために呼び出されます。update
は主に、現在保持されている状態が提供された ExecutionContext
にロードされることを保証するために呼び出されます。このメソッドは、コミット前に呼び出され、コミット前に現在の状態がデータベースに保持されるようにします。
ItemStream
のクライアントが Step
(Spring Batch コアから)である特別な場合、StepExecution ごとに ExecutionContext
が作成され、同じ JobInstance
が返された場合にユーザーが特定の実行の状態を保存できるようになります。再び開始されます。Quartz に精通している人にとって、セマンティクスは Quartz JobDataMap
と非常に似ています。