public class DatabaseTableQueueReader extends Object implements DataReader<SqlRow>
#hasNext(nablarch.fw.ExecutionContext)
は
常にtrue
を返却し、処理対象が存在するように振る舞う。
これにより、データが存在しない場合でも#read(nablarch.fw.ExecutionContext)
が呼び出され、
テーブルの最新情報を取得し直すことが可能となる。
本リーダは、処理対象レコードが存在しない場合、再度最新の情報を取得する。
この際に、他のスレッドで処理中のレコードが未処理のまま残っている可能性がある。
このため、各スレッドで処理中のレコードをヒープ上に保持し、
読み込んだ対象が他のスレッドで処理中のレコードではないことを確認する。
対象のレコードが、他のスレッドで処理中である場合には、次のレコードを読み込み再度チェックを行う。
対象のレコードが、他のスレッドで処理中でない場合には、読み込んだレコードをクライアントに返却する。DatabaseRecordReader
DataReader.NoMoreRecord
コンストラクタと説明 |
---|
DatabaseTableQueueReader(DatabaseRecordReader originalReader,
int waitTime,
String... primaryKeys)
データベースをキューとして扱うリーダを生成する。
|
修飾子とタイプ | メソッドと説明 |
---|---|
protected static void |
writeLog(nablarch.fw.reader.DatabaseTableQueueReader.InputDataIdentifier inputDataIdentifier)
要求の識別情報をログに出力する。
|
close, hasNext, read
@Published public DatabaseTableQueueReader(DatabaseRecordReader originalReader, int waitTime, String... primaryKeys)
originalReader
- データベースレコードリーダwaitTime
- データが存在しない場合の待機時間(ミリ秒)primaryKeys
- レコードを一意に識別する主キーのカラム名