From c974a26894c7b2b046ebd12fae2af04d9cf50f8e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 6 May 2014 15:02:14 +0200 Subject: [PATCH] [#3229] Improved API --- .../src/main/java/org/jooq/TransactionContext.java | 14 +++++++++++++- .../main/java/org/jooq/TransactionProvider.java | 3 +-- .../main/java/org/jooq/impl/DefaultDSLContext.java | 5 ++--- .../org/jooq/impl/DefaultTransactionContext.java | 12 ++++++++++++ .../org/jooq/impl/DefaultTransactionProvider.java | 4 +--- .../java/org/jooq/impl/NoTransactionProvider.java | 3 +-- 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/TransactionContext.java b/jOOQ/src/main/java/org/jooq/TransactionContext.java index 5cbd73cc98..818c4485d1 100644 --- a/jOOQ/src/main/java/org/jooq/TransactionContext.java +++ b/jOOQ/src/main/java/org/jooq/TransactionContext.java @@ -54,17 +54,29 @@ public interface TransactionContext { Configuration configuration(); /** - * A user-defined transaction object, obtained from + * A user-defined transaction object, possibly obtained from * {@link TransactionProvider#begin(TransactionContext)}. * * @return The transaction object. May be null. */ Transaction transaction(); + /** + * Set the user-defined transaction object to the current transaction + * context. + */ + TransactionContext transaction(Transaction transaction); + /** * The exception that has caused the rollback. * * @return The exception. May be null. */ Exception cause(); + + /** + * Set the exception that has caused the rollback to the current transaction + * context. + */ + TransactionContext cause(Exception cause); } diff --git a/jOOQ/src/main/java/org/jooq/TransactionProvider.java b/jOOQ/src/main/java/org/jooq/TransactionProvider.java index f37be678ab..dfaf8f69a1 100644 --- a/jOOQ/src/main/java/org/jooq/TransactionProvider.java +++ b/jOOQ/src/main/java/org/jooq/TransactionProvider.java @@ -77,11 +77,10 @@ public interface TransactionProvider { * * @param Configuration the configuration scoped to this transaction and its * nested transactions. - * @return A user-defined transaction object. May be null. * @throws DataAccessException Any exception issued by the underlying * database. */ - Transaction begin(TransactionContext ctx) throws DataAccessException; + void begin(TransactionContext ctx) throws DataAccessException; /** * @param Configuration the configuration scoped to this transaction and its diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 689b1dc605..9294159232 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -298,13 +298,12 @@ public class DefaultDSLContext implements DSLContext, Serializable { TransactionProvider provider = configuration.derive().transactionProvider(); try { - ctx.transaction = provider.begin(ctx); + provider.begin(ctx); result = transactional.run(configuration.derive()); provider.commit(ctx); } catch (Exception cause) { - ctx.cause = cause; - provider.rollback(ctx); + provider.rollback(ctx.cause(cause)); if (cause instanceof RuntimeException) { throw (RuntimeException) cause; diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionContext.java index efd500573b..326a099b2c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionContext.java @@ -67,8 +67,20 @@ class DefaultTransactionContext implements TransactionContext { return transaction; } + @Override + public final TransactionContext transaction(Transaction t) { + transaction = t; + return this; + } + @Override public final Exception cause() { return cause; } + + @Override + public final TransactionContext cause(Exception c) { + cause = c; + return this; + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionProvider.java b/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionProvider.java index ee4f169074..1c495a4deb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionProvider.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultTransactionProvider.java @@ -50,7 +50,6 @@ import java.util.Stack; import org.jooq.Configuration; import org.jooq.ConnectionProvider; -import org.jooq.Transaction; import org.jooq.TransactionContext; import org.jooq.TransactionProvider; @@ -109,7 +108,7 @@ public class DefaultTransactionProvider implements TransactionProvider { } @Override - public final Transaction begin(TransactionContext ctx) { + public final void begin(TransactionContext ctx) { Stack savepoints = savepoints(ctx.configuration()); // This is the top-level transaction @@ -118,7 +117,6 @@ public class DefaultTransactionProvider implements TransactionProvider { } savepoints.push(connection(ctx.configuration()).setSavepoint()); - return null; } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/NoTransactionProvider.java b/jOOQ/src/main/java/org/jooq/impl/NoTransactionProvider.java index 50ac67df7a..d89e092e05 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NoTransactionProvider.java +++ b/jOOQ/src/main/java/org/jooq/impl/NoTransactionProvider.java @@ -40,7 +40,6 @@ */ package org.jooq.impl; -import org.jooq.Transaction; import org.jooq.TransactionContext; import org.jooq.TransactionProvider; @@ -52,7 +51,7 @@ import org.jooq.TransactionProvider; public class NoTransactionProvider implements TransactionProvider { @Override - public final Transaction begin(TransactionContext ctx) { + public final void begin(TransactionContext ctx) { throw new UnsupportedOperationException("No transaction provider configured"); }