You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ak...@apache.org on 2007/10/14 17:19:59 UTC

svn commit: r584554 - /geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java

Author: akulshreshtha
Date: Sun Oct 14 08:19:58 2007
New Revision: 584554

URL: http://svn.apache.org/viewvc?rev=584554&view=rev
Log:
GERONIMO-3250 Adding counters to keep track of transaction activity, Patch by Viet H. Nguyen

Modified:
    geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java

Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java?rev=584554&r1=584553&r2=584554&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java Sun Oct 14 08:19:58 2007
@@ -29,6 +29,7 @@
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicLong;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.transaction.log.UnrecoverableLog;
@@ -53,6 +54,10 @@
     final Recovery recovery;
     private final CopyOnWriteArrayList transactionAssociationListeners = new CopyOnWriteArrayList();
     private List recoveryErrors = new ArrayList();
+    // statistics
+    private AtomicLong totalCommits = new AtomicLong(0);
+    private AtomicLong totalRollBacks = new AtomicLong(0);
+    private AtomicLong activeCount = new AtomicLong(0);
 
     public TransactionManagerImpl() throws XAException {
         this(DEFAULT_TIMEOUT,
@@ -79,7 +84,6 @@
         if (defaultTransactionTimeoutSeconds <= 0) {
             throw new IllegalArgumentException("defaultTransactionTimeoutSeconds must be positive: attempted value: " + defaultTransactionTimeoutSeconds);
         }
-
         this.defaultTransactionTimeoutMilliseconds = defaultTransactionTimeoutSeconds * 1000;
 
         if (transactionLog == null) {
@@ -111,6 +115,7 @@
         }
         threadTx.set(tx);
         fireThreadAssociated(tx);
+        activeCount.getAndIncrement();
     }
 
     private void unassociate() {
@@ -119,6 +124,7 @@
             associatedTransactions.remove(tx);
             threadTx.set(null);
             fireThreadUnassociated(tx);
+            activeCount.getAndDecrement();
         }
     }
 
@@ -240,6 +246,7 @@
         } finally {
             unassociate();
         }
+        totalCommits.getAndIncrement();
     }
 
     public void rollback() throws IllegalStateException, SecurityException, SystemException {
@@ -252,6 +259,7 @@
         } finally {
             unassociate();
         }
+        totalRollBacks.getAndIncrement();
     }
 
     //XidImporter implementation
@@ -285,6 +293,7 @@
                 throw (XAException) new XAException().initCause(e);
             }
         }
+        totalCommits.getAndIncrement();
     }
 
     public void forget(Transaction tx) throws XAException {
@@ -309,6 +318,7 @@
         } catch (SystemException e) {
             throw (XAException) new XAException().initCause(e);
         }
+        totalRollBacks.getAndIncrement();
     }
 
     long getTransactionTimeoutMilliseconds(long transactionTimeoutMilliseconds) {
@@ -368,5 +378,34 @@
                 log.warn("Error calling transaction association listener", e);
             }
         }
+    }
+
+    /**
+     * Returns the number of active transactions.
+     */
+    public long getActiveCount() {
+        return activeCount.longValue();
+    }
+
+    /**
+     * Return the number of total commits
+     */
+    public long getTotalCommits() {
+        return totalCommits.longValue();
+    }
+
+    /**
+     * Returns the number of total rollbacks
+     */
+    public long getTotalRollbacks() {
+        return totalRollBacks.longValue();
+    }
+
+    /**
+     * Reset statistics
+     */
+    public void resetStatistics() {
+        totalCommits.getAndSet(0);
+        totalRollBacks.getAndSet(0);
     }
 }