Blog

Transaktionale Einheitstests über mehrere Datenquellen

Lars Vonk

Aktualisiert Oktober 23, 2025
2 Minuten

Vor kurzem musste ich einen Integrationstest schreiben, der eine Transaktion über mehrere SessionFactories und verschiedene Datenquellen abdeckt. Ich wollte, dass es ein Test außerhalb des Containers ist und brauchte daher eine Möglichkeit, Transaktionen über mehrere Datenquellen durchzuführen, ohne dass ein J2EE-Container dafür erforderlich ist. Einen guten Ausgangspunkt für das Schreiben von Transaktionsprüfungen finden Sie wie üblich in Spring. Sie müssen nur die Klasse AbstractTransactionSpringContextTests erweitern und der Rest ist ein Kinderspiel. Nun stellt sich die Frage, wie Sie dies für mehrere Datenquellen verkabeln?

Für den Anfang brauchen wir einen Transaktionsmanager und Datenquellen, die XA-Transaktionen unterstützen, die ich in meinem Test verwenden möchte. Dank meines Kollegen Maarten Winkels bin ich auf diesen hervorragenden Beitrag auf javaeye.com gestoßen, der ein Beispiel für die Konfiguration von Spring, Hibernate und JOTM enthält. JOTM ist ein in Java geschriebener Open-Source-Transaktionsmanager. Spring bietet über die JotmFactoryBean auch Unterstützung für die Verwendung von JOTM.Interessanterweise wird die von der JotmFactoryBean erstellte Klasse, die Jotm-Klasse, sowohl für die UserTransaction als auch für den TransactionManager verwendet, so dass wir hinsichtlich des Transaktionsteils fertig sind.Jetzt brauchen wir nur noch eine XA-konforme Datenquelle. Sowohl in den Spring-Dokumenten der JotmFactoryBean als auch im Beitrag auf javaeye.com wird das XAPool verwendet. Um das Ganze nun in Spring xml zu verdrahten, müssen Sie etwas wie folgt definieren (vorausgesetzt, Sie benötigen zwei Datenquellen):

    

    

  WEB-INF/hibernate-cfg-1.xml

  org.hibernate.cfg.AnnotationConfiguration

  org.hibernate.dialect.PostgreSQLDialect

  WEB-INF/hibernate-cfg-2.xml

  org.hibernate.cfg.AnnotationConfiguration

  org.hibernate.dialect.PostgreSQLDialect

    

Und für die Maven-Benutzer: Alle Abhängigkeiten befinden sich im Maven-Repository. Fügen Sie also einfach die folgenden Abhängigkeiten zu Ihrem pom hinzu und los geht's!

        
  jotm
  jotm
  2.0.10

  com.experlog
  xapool
  1.5.0

Viel Spaß!

Verfasst von

Lars Vonk

Contact

Let’s discuss how we can support your journey.