変更前イメージのストリーミングを使用するNoSQLSubscriberの例

Oracle NoSQL Database Streams APIを使用して、変更前イメージおよび関連するフィールド情報を取得する方法について説明します。

変更前イメージが有効な場合は、次のコード例に示すように、変更前イメージおよび関連する情報を取得して、標準出力に出力できます。変更前イメージが表示されるように操作を正常に実装するには、対象の表で変更前イメージが有効であるかどうか、変更前イメージがストリーミングされるようにサブスクリプションが構成されているかどうか、および変更前イメージが有効期限内にあるかどうかを確認する必要があります。

行オブジェクトには、操作の前後の行の状態が含まれています。

    @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 rowAfter = pe.getRow();
                // Print after-image
                System.out.println("\nAfter-images streaming \n" + rowAfter.toJsonString(true));                     
 
                System.out.println("\nBefore-images enabled = " + t.isBeforeImageEnabled());                     
                System.out.println("\nBefore-images subscribed = " + t.includeBeforeImage());  
               // Check if before-images is enabled, subscribed, and within the expiry date 
                if (t.isBeforeImageEnabled() && t.includeBeforeImage() && (!t.isBeforeImageExpired())) {              
                    Row rowBefore = t.getBeforeImage();
                    System.out.println("\nBefore-images streaming \n" + rowBefore.toJsonString(true));  
                }                  
                else
                    System.out.println("Before-images is not streamed");
                break;

            case DELETE:
                streamOps++;
                System.out.println("\nFound a delete. Row is:");
                System.out.println(t);
                break;

            default:
                throw new 
                    IllegalStateException("Receive unsupported " +
                        "stream operation from shard " +
                                t.getRepGroupId() +
                                ", seq: " + t.getSequenceId());
        }
        if (streamOps == numOps) {
            getSubscription().cancel();
            System.out.println("Subscription cancelled after " +
                    "receiving " + numOps + " operations.");
        }
    }