レコード・ストアにおけるクライアント読取り状態の維持

getLastCommittedGenerationId()およびsetLastReadGenerationId()メソッドを使用して、クライアントが最後に読み取ったGenerationIdを保存します。

レコード・ストアでクライアント読取り状態を維持するには:

  1. create()メソッドをコールし、ServiceAddressオブジェクトおよびレコード・ストア・インスタンス名を渡して、レコード・ストア・サーバーへの接続を作成します。
    ServiceAddress address = new ServiceAddress(host, port, contextPath); 
    RecordStoreLocator locator = RecordStoreLocator.create(address, instanceName);
  2. getService()メソッドをコールして、レコード・ストア・インスタンスを作成します。
    RecordStore recordStore = locator.getService();
  3. startTransaction()メソッドをコールして、READトランザクションを開始します。
    TransactionId transactionId = recordStore.startTransaction(TransactionType.READ);
  4. getLastCommittedGenerationId()メソッドをコールして、最後にコミットされた生成を取得します。
    GenerationId gid = recordStore.getLastCommittedGenerationId(transactionId);
  5. startBaselineRead()メソッドをコールして、ReadCursorIdオブジェクトを返します。
    ReadCursorId readCursorId = recordStore.startBaselineRead(transactionId, gid);
  6. 読取りカーソルからのすべてのレコードが読み取られるまで、readRecords()によって返されるレコードをループ処理します。
    List<Record> records;
    
    do {
    
        records = recordStore.readRecords(readCursorId, numRecordsPerFetch);
        // do something with the records
    
    } while (!records.isEmpty());
  7. endRead()メソッドをコールして、READトランザクションを終了します。
    recordStore.endRead(readCursorId);
  8. setLastReadGenerationId()メソッドをコールして、最後に読み取った生成IDを設定します。
    recordStore.setLastReadGenerationId(transactionId, clientId, gid);
  9. commitTransaction()メソッドをコールして、トランザクションをコミットします。
    recordStore.commitTransaction(transactionId);
  10. 後で、startTransaction()メソッドをコールして、増分読取りのためのREADトランザクションを開始します。
    TransactionId transactionId = recordStore.startTransaction(TransactionType.READ);
  11. getLastCommittedGenerationId()メソッドをコールして、最後にコミットされた生成を取得します。
    GenerationId gid = recordStore.getLastCommittedGenerationId(transactionId);
  12. startDeltaRead()メソッドをコールして、ReadCursorIdオブジェクトを作成します。
    ReadCursorId readCursorId = recordStore.startDeltaRead(transactionId, startGeneration, endGeneration);
  13. 読取りカーソルからのすべてのレコードが読み取られるまで、readRecords()によって返されるレコードをループ処理します。
    List<Record> records;
    
    do {
    
        records = recordStore.readRecords(readCursorId, numRecordsPerFetch);
    
        // do something with the records
    
    } while (!records.isEmpty());
  14. endRead()メソッドをコールして、READトランザクションを終了します。
    recordStore.endRead(readCursorId);
  15. setLastReadGenerationId()メソッドをコールして、クライアント状態を設定します。
    recordStore.setLastReadGenerationId(transactionId, clientId, endGenerationId);
  16. commitTransaction()メソッドをコールして、トランザクションをコミットします。
    recordStore.commitTransaction(transactionId);

レコード・ストアでクライアント読取り状態を維持する例

ServiceAddress address = new ServiceAddress(host, port, contextPath); 
RecordStoreLocator locator = RecordStoreLocator.create(address, instanceName);

RecordStore recordStore = locator.getService();
// Run a baseline read

TransactionId transactionId = recordStore.startTransaction(TransactionType.READ);

GenerationId gid = recordStore.getLastCommittedGenerationId(transactionId);

ReadCursorId readCursorId = recordStore.startBaselineRead(transactionId, gid);

List<Record> records;

do {

    records = recordStore.readRecords(readCursorId, numRecordsPerFetch);

    // do something with the records

} while (!records.isEmpty());

recordStore.endRead(readCursorId);

recordStore.setLastReadGenerationId(transactionId, clientId, gid);

recordStore.commitTransaction(transactionId);


...
 

// Run a delta read at a later point

TransactionId transactionId = recordStore.startTransaction(TransactionType.READ);

GenerationId startGenerationId = recordStore.getLastReadGenerationId(transactionId, clientId);

GenerationId endGenerationId = recordStore.getLastCommittedGenerationId(transactionId);

ReadCursorId readCursorId = recordStore.startDeltaRead(transactionId, startGenerationId, endGenerationId);

List<Record> records;

do {

    records = recordStore.readRecords(readCursorId, numRecordsPerFetch);

    // do something with the records

} while (!records.isEmpty());

recordStore.endRead(readCursorId);

recordStore.setLastReadGenerationId(transactionId, clientId, endGenerationId);

recordStore.commitTransaction(transactionId);