JOOQ & Transaktionen
Ich ve wurde Lesen über Transaktionen & jooq aber ich kämpfen, um zu sehen, wie die Umsetzung in der Praxis.
Let ' s sagen, die ich mit JOOQ eine benutzerdefinierte ConnectionProvider
was geschieht, eine Verbindung zu verwenden pool mit autocommit auf false gesetzt.
Die Umsetzung ist in etwa so:
@Override public Connection acquire() throws DataAccessException {
return pool.getConnection();
}
@Override public void release(Connection connection) throws DataAccessException {
connection.commit();
connection.close();
}
Wie würde ich mich über die Verpackung zwei jooq-Abfragen in einer einzigen Transaktion?
Ist es leicht mit der DefaultConnectionProvider, weil es nur eine Verbindung - aber mit einem pool bin ich mir nicht sicher wie Sie gehen über es.
InformationsquelleAutor assylias | 2013-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
jOOQ 3.4 Transaction API
Mit jOOQ 3.4 transaction API wurde Hinzugefügt, um Abstrakt über JDBC, Spring, oder JTA Transaktion Manager. Dieses API verwendet werden kann, die mit Java 8 als solche:
Oder mit pre-Java 8-syntax
Die Idee ist, dass der lambda-Ausdruck (oder eine anonyme Klasse) bilden die Transaktions-code:
Den
org.jooq.TransactionProvider
SPI kann verwendet werden, um das überschreiben der default-Verhalten, das die nestbare Transaktionen, die über JDBC mitSicherungspunkt
.Eine Feder Beispiel
Die aktuelle Dokumentation zeigt ein Beispiel bei Verwendung von Spring für die transaktionsbearbeitung:
Diesem Beispiel im wesentlichen darauf an, die mithilfe einer Feder
TransactionAwareDataSourceProxy
Einem ausgeführten Beispiel ist von GitHub hier:
Ein Spring und Guice Beispiel
Obwohl ich persönlich würde es nicht empfehlen, einige Benutzer haben Erfolg gehabt, ersetzen einen Teil der Frühling s DI von Guice und Transaktionen mit Guice. Es ist auch ein integration-geprüft Beispiel auf GitHub für diesen use-case:
InformationsquelleAutor Lukas Eder
Dies ist wahrscheinlich nicht der beste Weg, aber es scheint zu funktionieren. Der Nachteil ist, dass es nicht die
release
aber diecommit
- Methode schließt die Verbindung und gibt Sie an den pool, der ist ziemlich verwirrend und könnte zu Problemen führen, wenn ein code "vergisst" zu Begehen...So dass der client-code sieht wie folgt aus:
Und der ConnectionProvider:
PostgresConnectionProvider
, die erkennen würde, wenn es eine unerwidert Verbindung? Ich werde darüber nachdenken, über diese Dinge ein bisschen mehr auf meiner Seite. Ich habe ein paar Ideen, die ich erklärte in diesem thread auf die user-groupJa, gute Idee. Und danke für den link: ich hatte gesehen, wie ein paar Diskussionen, aber nicht, dass man.
InformationsquelleAutor assylias
Einfachste Weg,(habe ich gefunden) zu nutzen Spring, Transaktionen mit jOOQ, ist hier gegeben: http://blog.liftoffllc.in/2014/06/jooq-and-transactions.html
Im Grunde implementieren wir eine
ConnectionProvider
verwendetorg.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(ds)
Methode zu finden, und wieder die DB-Verbindung, die hält Transaktion erstellt von Frühling.Erstellen Sie eine
TransactionManager
Bohne für IhreDataSource
Beispiel unten gezeigt:Nun können Sie kommentieren alle Klassen oder Methoden, die verwendet jOOQ ist
DSLContext
mitUnd während der Erstellung der
DSLContext
Objekt jOOQ nutzen der Transaktion erstellt von Frühling.InformationsquelleAutor CodePredator