MongoDB: Transaktionen mit Java

Folgendes Beispiel soll den Umgang mit Transaktionen verdeutlichen, welche ab Version 4 von MongoDB unterstützt werden. Dafür muss über eine ClientSession eine Transaktion geöffnet werden. Alle Operationen, welche an dieser Transaktion teilnehmen sollen, müssen diese als Parameter im Aufruf enthalten.

Voraussetzung

  • JDK 1.8
  • MongoDB 4.x
  • ReplicaSet

Interessant dabei ist, dass die Transaktion sogar Collections in unterschiedlichen Datenbanken umfassen kann.

MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));

MongoDatabase db1 = mongoClient.getDatabase("test1");
MongoDatabase db2 = mongoClient.getDatabase("test2");

MongoCollection<Document> collection1 = db1.getCollection("testcollection");
MongoCollection<Document> collection2 = db2.getCollection("testcollection");#

try (ClientSession session = mongoClient.startSession()) {
    session.startTransaction();

    collection1.insertOne(session, new Document("test", "123"));
    collection2.insertOne(session, new Document("test", "456"));

    session.commitTransaction();
}