You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2012/08/04 16:21:43 UTC

[1/2] git commit: DELTASPIKE-256 support a custom transaction-timeout (first step)

Updated Branches:
  refs/heads/master b8bafcf7e -> b553192c9


DELTASPIKE-256 support a custom transaction-timeout (first step)


Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/b553192c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/b553192c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/b553192c

Branch: refs/heads/master
Commit: b553192c97f755e5c41a626f13a642b87c1666c2
Parents: 4b38f5e
Author: gpetracek <gp...@apache.org>
Authored: Sat Aug 4 15:58:12 2012 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Sat Aug 4 16:16:27 2012 +0200

----------------------------------------------------------------------
 .../BeanManagedUserTransactionStrategy.java        |   39 ++++++++++++++-
 .../EnvironmentAwareTransactionStrategy.java       |    4 ++
 2 files changed, 42 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/b553192c/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 1aa27b1..91b3d7d 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
@@ -31,6 +31,8 @@ import javax.transaction.Status;
 import javax.transaction.SystemException;
 import javax.transaction.UserTransaction;
 import java.lang.annotation.Annotation;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * <p>{@link org.apache.deltaspike.jpa.spi.TransactionStrategy} for using JTA (bean-managed-)transactions
@@ -48,13 +50,43 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction
 
     private static final long serialVersionUID = -2432802805095533499L;
 
+    private static final Logger LOGGER = Logger.getLogger(BeanManagedUserTransactionStrategy.class.getName());
+
     @Override
     protected EntityManagerEntry createEntityManagerEntry(
         EntityManager entityManager, Class<? extends Annotation> qualifier)
     {
+        applyTransactionTimeout(); //needs to be done before UserTransaction#begin - TODO move this call
         return new JtaAwareEntityManagerEntry(entityManager, qualifier);
     }
 
+    protected void applyTransactionTimeout()
+    {
+        Integer transactionTimeout = getDefaultTransactionTimeoutInSeconds();
+
+        if (transactionTimeout == null)
+        {
+            //the default configured for the container will be used
+            return;
+        }
+
+        try
+        {
+            UserTransaction userTransaction = resolveUserTransaction();
+            userTransaction.setTransactionTimeout(transactionTimeout);
+        }
+        catch (SystemException e)
+        {
+            LOGGER.log(Level.WARNING, "UserTransaction#setTransactionTimeout failed", e);
+        }
+    }
+
+    protected Integer getDefaultTransactionTimeoutInSeconds()
+    {
+        //override it and provide a custom value - if needed - TODO discuss a type-safe module-config for DELTASPIKE-256
+        return null;
+    }
+
     @Override
     protected EntityTransaction getTransaction(EntityManagerEntry entityManagerEntry)
     {
@@ -88,6 +120,11 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction
         entityManagerEntry.getEntityManager().joinTransaction();
     }
 
+    protected UserTransaction resolveUserTransaction()
+    {
+        return JndiUtils.lookup(USER_TRANSACTION_JNDI_NAME, UserTransaction.class);
+    }
+
     private class UserTransactionAdapter implements EntityTransaction
     {
         private final UserTransaction userTransaction;
@@ -95,7 +132,7 @@ public class BeanManagedUserTransactionStrategy extends ResourceLocalTransaction
 
         public UserTransactionAdapter(EntityManager entityManager)
         {
-            this.userTransaction = JndiUtils.lookup(USER_TRANSACTION_JNDI_NAME, UserTransaction.class);
+            this.userTransaction = resolveUserTransaction();
             this.entityManager = entityManager;
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/b553192c/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/EnvironmentAwareTransactionStrategy.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/EnvironmentAwareTransactionStrategy.java b/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/EnvironmentAwareTransactionStrategy.java
index 7c83fee..6fdf1fc 100644
--- a/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/EnvironmentAwareTransactionStrategy.java
+++ b/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/EnvironmentAwareTransactionStrategy.java
@@ -91,6 +91,10 @@ public class EnvironmentAwareTransactionStrategy extends SimpleEnvironmentAwareT
                     "you could also use the default strategy " + ResourceLocalTransactionStrategy.class.getName());
         }
 
+        if (isTransactionTypeJta)
+        {
+            applyTransactionTimeout(); //needs to be done before UserTransaction#begin - TODO move this call
+        }
         return new JtaAwareEntityManagerEntry(entityManager, qualifier, isTransactionTypeJta);
     }