Updated Branches: refs/heads/master a34a8ed3e -> fab97551a
DELTASPIKE-507 cleanup Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/fab97551 Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/fab97551 Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/fab97551 Branch: refs/heads/master Commit: fab97551a801747d35ff890242a425969a26da59 Parents: a34a8ed Author: gpetracek <[email protected]> Authored: Tue Jan 21 18:12:20 2014 +0100 Committer: gpetracek <[email protected]> Committed: Tue Jan 21 18:22:00 2014 +0100 ---------------------------------------------------------------------- .../BeanManagedUserTransactionStrategy.java | 52 ++++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/fab97551/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/BeanManagedUserTransactionStrategy.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/BeanManagedUserTransactionStrategy.java b/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/BeanManagedUserTransactionStrategy.java index 660bf0f..700b224 100644 --- a/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/BeanManagedUserTransactionStrategy.java +++ b/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/BeanManagedUserTransactionStrategy.java @@ -83,13 +83,7 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction { UserTransaction userTransaction = resolveUserTransaction(); - if (userTransaction == null) - { - // if there is a CMT EJB call active, then we do not set any timeout - return; - } - - if (userTransaction.getStatus() != Status.STATUS_ACTIVE) + if (userTransaction != null && userTransaction.getStatus() != Status.STATUS_ACTIVE) { userTransaction.setTransactionTimeout(transactionTimeout); } @@ -182,7 +176,7 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction { return JndiUtils.lookup(USER_TRANSACTION_JNDI_NAME, UserTransaction.class); } - catch (Exception ne) + catch (Exception e) { // do nothing it was just a try return null; @@ -197,7 +191,8 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction private class UserTransactionAdapter implements EntityTransaction { private final UserTransaction userTransaction; - private TransactionSynchronizationRegistry transactionSynchronizationRegistry = null; + //needed for calls through an EJB with CMT + private final TransactionSynchronizationRegistry transactionSynchronizationRegistry; public UserTransactionAdapter() { @@ -205,13 +200,18 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction if (this.userTransaction == null) { - transactionSynchronizationRegistry = resolveTransactionRegistry(); + this.transactionSynchronizationRegistry = resolveTransactionRegistry(); - if (transactionSynchronizationRegistry.getTransactionStatus() != Status.STATUS_ACTIVE) + if (this.transactionSynchronizationRegistry.getTransactionStatus() != Status.STATUS_ACTIVE) { - throw new RuntimeException("invalid state/badly configured JTA datasource"); + throw new IllegalStateException( + "The CMT is not active. Please check the config of the Data-Source."); } } + else + { + this.transactionSynchronizationRegistry = null; + } } /** @@ -222,10 +222,9 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction @Override public void begin() { - if (this.userTransaction == null) { - throw new IllegalStateException("cannot begin UserTransaction in CMT environment"); + throw new UnsupportedOperationException("A CMT is active. This operation is only supported with BMT."); } try @@ -257,10 +256,9 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction { if (this.userTransaction == null) { - throw new IllegalStateException("cannot commit UserTransaction in CMT environment"); + throw new UnsupportedOperationException("A CMT is active. This operation is only supported with BMT."); } - try { if (isTransactionReadyToCommit()) @@ -290,7 +288,7 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction { if (this.userTransaction == null) { - throw new IllegalStateException("cannot rollback UserTransaction in CMT environment"); + throw new UnsupportedOperationException("A CMT is active. This operation is only supported with BMT."); } try @@ -332,7 +330,7 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction { try { - return this.getStatus() == Status.STATUS_MARKED_ROLLBACK; + return getTransactionStatus() == Status.STATUS_MARKED_ROLLBACK; } catch (SystemException e) { @@ -349,8 +347,8 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction //we can't use the status of the overall try { - return this.getStatus() != Status.STATUS_NO_TRANSACTION && - this.getStatus() != Status.STATUS_UNKNOWN; //TODO re-visit it + return this.getTransactionStatus() != Status.STATUS_NO_TRANSACTION && + this.getTransactionStatus() != Status.STATUS_UNKNOWN; //TODO re-visit it } catch (SystemException e) { @@ -362,19 +360,19 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction { //if the following gets changed, it needs to be tested with different constellations //(normal exception, timeout,...) as well as servers - return this.getStatus() != Status.STATUS_COMMITTED && - this.getStatus() != Status.STATUS_NO_TRANSACTION && - this.getStatus() != Status.STATUS_UNKNOWN; + return this.getTransactionStatus() != Status.STATUS_COMMITTED && + this.getTransactionStatus() != Status.STATUS_NO_TRANSACTION && + this.getTransactionStatus() != Status.STATUS_UNKNOWN; } protected boolean isTransactionReadyToCommit() throws SystemException { - return this.getStatus() == Status.STATUS_ACTIVE || - this.getStatus() == Status.STATUS_PREPARING || - this.getStatus() == Status.STATUS_PREPARED; + return getTransactionStatus() == Status.STATUS_ACTIVE || + getTransactionStatus() == Status.STATUS_PREPARING || + getTransactionStatus() == Status.STATUS_PREPARED; } - protected int getStatus() throws SystemException + protected int getTransactionStatus() throws SystemException { if (this.userTransaction != null) {
