Wir arbeiten an Morphium 4.0

veröffentlicht am : Di, 17. 07. 2018 geändert am: Di, 17. 07. 2018

Kategorie: Allgemeines

Schlagworte: morphium java mongo


MongoDB hat in der letzten Woche die neueste und lang ersehnte Version 4.0 veröffentlicht. Da sind natürlich eine Menge Features verbaut, aber das, welches das meiste Aufsehen erregt hat ist eindeutig die Unterstützung von ACID-konformen Transaktionen!

Der Mongo-Treiber unterstützt das ab der Version 3.8.0 - und Morphium eben ab der Version 4.0.0. Die aktuelle V4.0.0-BETA1 sollte ab sofort via Maven Central (oder über github.com verfügbar sein.

Neue Features in Morphium 4.0.0

Transaction Support

Natürlich mussten wir dieses neue Feature auch in Morphium 4.0 einbauen. Der Support ist denkbar einfach:

//starten einer Transaction via
morphium.startTransaction();
//alle darauf folgenden Anfragen in diesem Thread sind im Transaktionskontext

morphium.commitTransaction()//commit
morphium.abortTransaction()//abort

MorphiumTransactionContext ctx=morphium.getTransaction();

//um aufrufe in einem anderen Thread an diese Transaktion zu "hängen" muss der Transaktionskontext in den thread übergeben werden
//Transaktionen sind aktuell ThreadLocal, also in einem anderen Thread muss dann der richtige Kontext gesetzt werden
morphium.setTransaction(ctx);

Achtung: die Transaktionen oder der Aufruf davon führt zu einem Fehler, wenn die Mongo nicht entsprechend konfiguriert ist.

verbessertes Messaging.

Wir haben viele Verbesserungen im Messaging gemacht, die Api an einigen stellen verschlankt, an anderen dafür mehr Features eingebaut. Auch die Unterstützung von "Push"-Messaging, wenn man mit einem Replicaset verbunden ist, wurde stark verbessert

Verbessertes Cluster-Aware Caching

Mit Hilfe der neuen watch-Funktion der MongoDB, welche ja eigentlich nichts weiter ist als eine neue Version des OpLog-Monitors, haben wir jetzt ein neues Feature in die Cache Synchronisation eingebaut: Push notification von der Datenbank und automatisches Aktualisieren der Cache Einträge.

Das funktioniert genauso, wie es via Messaging funktioniert hat, jedoch ohne den Umweg über Nachrichten zu gehen und berücksichtigt genauso die @Cache Annotation. Dazu wurde ein neuer Synchronizer eingeführt:

WatchingCacheSynchronizer sync = new WatchingCacheSynchronizer(morphium);
sync.start();

inMemoryDriver

Der inMemoryDriver macht es möglich, jeden Zugriff der sonst auf die Mongo ginge, in Mem auszuprobieren. Insbesondere im Umfeld von Tests ist das sehr praktisch.

MorphiumConfig cfg = new MorphiumConfig();
        cfg.addHostToSeed("inMem");
        cfg.setDatabase("test");
        cfg.setDriverClass(InMemoryDriver.class.getName());
        cfg.setReplicasetMonitoring(false);

Transaktionen funktionieren aktuell (noch) nicht mit dem InMem-Driver und Aggregation wird vermutlich erst in einer der nächsten Versionen eingebaut. Aber die anderen Funktionalitäten lassen sich mit dem Treiber wunderbar testen.

erstellt Stephan Bösebeck (stephan)