see on GitHub

Changes API: How to subscribe to document changes?

Following methods allow you to subscribe to document changes:

ForDocument

Single document changes can be observed using forDocument method.

Syntax

public IObservable<DocumentChangeNotification> forDocument(String docId);

Parameters
docId String Id of a document for which notifications will be processed.
Return Value
IObservable<DocumentChangeNotification> Observable that allows to add subscriptions to notifications for given document.

Example

Closeable subscription = store
  .changes()
  .forDocument("employees/1")
  .subscribe(Observers.create(new Action1<DocumentChangeNotification>() {
    @Override
    public void apply(DocumentChangeNotification change) {
      switch (change.getType()) {
        case PUT:
          // do something
          break;
        case DELETE:
          // do something
          break;
        default:
          break;
      }
    }
  }));

ForDocumentsInCollection

To observe all document changes in particular collection use forDocumentInCollection method. This method filters documents by Raven-Entity-Name metadata property value.

Syntax

public IObservable<DocumentChangeNotification> forDocumentsInCollection(String collectionName);

public IObservable<DocumentChangeNotification> forDocumentsInCollection(Class<?> clazz);

Parameters
collectionName String Name of document collection for which notifications will be processed.
Return Value
IObservable<DocumentChangeNotification> Observable that allows to add subscriptions to notifications for given document collection name.

Information

Overload with Class uses Conventions.getTypeTagName to get collection name.

Example

Closeable subscription = store
  .changes()
  .forDocumentsInCollection(Employee.class)
  .subscribe(Observers.create(new Action1<DocumentChangeNotification>() {
    @Override
    public void apply(DocumentChangeNotification change) {
      System.out.println(change.getType() + " on document " + change.getId());
    }
  }));

or

String collectionName = store.getConventions().getTypeTagName(Employee.class);
Closeable subscription = store
  .changes()
  .forDocumentsInCollection(collectionName)
  .subscribe(Observers.create(new Action1<DocumentChangeNotification>() {
    @Override
    public void apply(DocumentChangeNotification change) {
      System.out.println(change.getType() + " on document " + change.getId());
    }
  }));

ForDocumentsOfType

To observe all document changes for given type use forDocumentsOfType method. This method filters documents by Raven-Clr-Type metadata property value.

Syntax

public IObservable<DocumentChangeNotification> forDocumentsOfType(String typeName);

public IObservable<DocumentChangeNotification> forDocumentsOfType(Class<?> clazz);

Parameters
typeName or clazz String or Class Name of class or class for which notifications will be processed. If default conventions are used then full type name without version information should be passed.
Return Value
IObservable<DocumentChangeNotification> Observable that allows to add subscriptions to notifications for given document type name.

Information

Overload with Class uses Conventions.findClrTypeName to get type name.

Example

Closeable subscription = store
  .changes()
  .forDocumentsOfType(Employee.class)
  .subscribe(Observers.create(new Action1<DocumentChangeNotification>() {
    @Override
    public void apply(DocumentChangeNotification change) {
      System.out.println(change.getType() + " on document " + change.getId());
    }
  }));

or

String typeName = store.getConventions().getFindJavaClassName().find(Employee.class);
Closeable subscription = store
  .changes()
  .forDocumentsOfType(typeName)
  .subscribe(Observers.create(new Action1<DocumentChangeNotification>() {
    @Override
    public void apply(DocumentChangeNotification change) {
      System.out.println(change.getType() + " on document " + change.getId());
    }
  }));

ForDocumentsStartingWith

To observe all document changes for documents with Id that contains given prefix use forDocumentsStartingWith method.

Syntax

public IObservable<DocumentChangeNotification> forDocumentsStartingWith(String docIdPrefix);

Parameters
docIdPrefix String Document Id prefix for which notifications will be processed.
Return Value
IObservable<DocumentChangeNotification> Observable that allows to add subscriptions to notifications for given document Id prefix.

Example

Closeable subscription = store
  .changes()
  .forDocumentsStartingWith("employees/1") // employees/1, employees/10, employees/11, etc.
  .subscribe(Observers.create(new Action1<DocumentChangeNotification>() {
    @Override
    public void apply(DocumentChangeNotification change) {
      System.out.println(change.getType() + " on document " + change.getId());
    }
  }));

ForAllDocuments

To observe all document changes use forAllDocuments method.

Syntax

public IObservable<DocumentChangeNotification> forAllDocuments();

Return Value
IObservable<DocumentChangeNotification> Observable that allows to add subscriptions to notifications for all documents.

Example

Closeable subscription = store
  .changes()
  .forAllDocuments() // employees/1, orders/1, customers/1, etc.
  .subscribe(Observers.create(new Action1<DocumentChangeNotification>() {
    @Override
    public void apply(DocumentChangeNotification change) {
      System.out.println(change.getType() + " on document " + change.getId());
    }
  }));