トランザクション・イベントのストリーミングを使用するNoSQLSubscriberの例
Oracle NoSQL Database Streams APIを使用して、トランザクション・イベント関連の情報を取得する方法について説明します。
ストリーミング・トランザクション・イベントが有効な場合は、次のコード・サンプルに示すように、トランザクション・イベントのすべてのコミットされた書込みおよび関連する情報を取得できます。トランザクション・イベントを表示するためのコードを正常に実装するには、トランザクション・イベントをストリーミングするようにサブスクリプションが構成されていることを確認する必要があります。詳細は、「トランザクション・イベントのストリーミングの構成」を参照してください。
TransactionEventオブジェクトは、トランザクションID、トランザクション・タイプ、トランザクション内の書込み数、およびトランザクション操作に対してコミットされた書込みのストリームを返します。
@Override
public void onNext(StreamOperation t) {
switch (t.getType()) {
case PUT:
streamOps++;
System.out.println("\nFound a put. Row is:");
StreamOperation.PutEvent pe = t.asPut();
Row row = pe.getRow();
break;
case DELETE:
streamOps++;
System.out.println("\nFound a delete. Row is:");
System.out.println(t);
break;
case TRANSACTION:
streamOps++;
System.out.println("\nFound a transaction. Details are:");
StreamOperation.TransactionEvent te = t.asTransaction();
TransactionIdImpl TxnID = te.getTransactionId();
List<StreamOperation> TxnOps = te.getOperations();
System.out.println("\ntransactionID=" + TxnID.toString() + "\ntransactionType" + te.getTransactionType() + "\nTotalWrites" + te.getNumOperations());
System.out.println("\nPrinting writes in the transaction:" );
int opsNum = 1;
for (ListIterator<StreamOperation> iterator = TxnOps.listIterator(); iterator.hasNext(); ) {
System.out.println("\nWrite operation ["+ opsNum +"]: " + iterator.next());
opsNum++;
}
break;
default:
throw new
IllegalStateException("Receive unsupported " +
"stream operation from shard " +
t.getRepGroupId() +
", seq: " + t.getSequenceId());
}