[Mulgara-svn] r633 - branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Mon Feb 11 07:20:20 UTC 2008


Author: andrae
Date: 2008-02-10 23:20:19 -0800 (Sun, 10 Feb 2008)
New Revision: 633

Modified:
   branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java
   branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java
   branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
Log:
Removes explicit handling of writeTransaction from
MulgaraExternalTransactionFactory in preference to the abstract class.
Similarly removed the redundancy in InternalTransactionFactory.  The result is
the ability to ensure writeTransaction is updated correctly on sessionClose
within the abstract super-class.



Modified: branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java
===================================================================
--- branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java	2008-02-11 07:16:53 UTC (rev 632)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java	2008-02-11 07:20:19 UTC (rev 633)
@@ -55,15 +55,12 @@
 
   private Map<DatabaseSession, MulgaraXAResourceContext> xaResources;
 
-  private MulgaraExternalTransaction writeTransaction;
-
   public MulgaraExternalTransactionFactory(MulgaraTransactionManager manager) {
     super(manager);
 
     this.associatedTransaction = new HashMap<DatabaseSession, MulgaraExternalTransaction>();
     this.sessionXAMap = new Assoc1toNMap<DatabaseSession, MulgaraExternalTransaction>();
     this.xaResources = new HashMap<DatabaseSession, MulgaraXAResourceContext>();
-    this.writeTransaction = null;
   }
 
   public MulgaraTransaction getTransaction(final DatabaseSession session, boolean write)
@@ -102,11 +99,12 @@
             }
           });
         try {
-          writeTransaction = new MulgaraExternalTransaction(this, xid, session.newOperationContext(true));
-          associatedTransaction.put(session, writeTransaction);
-          sessionXAMap.put(session, writeTransaction);
+          MulgaraExternalTransaction xa = new MulgaraExternalTransaction(this, xid, session.newOperationContext(true));
+          writeTransaction = xa;
+          associatedTransaction.put(session, xa);
+          sessionXAMap.put(session, xa);
 
-          return writeTransaction;
+          return xa;
         } catch (Throwable th) {
           manager.releaseWriteLock(session);
           throw new MulgaraTransactionException("Error initiating write transaction", th);

Modified: branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java
===================================================================
--- branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java	2008-02-11 07:16:53 UTC (rev 632)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java	2008-02-11 07:20:19 UTC (rev 633)
@@ -72,8 +72,6 @@
 
   private final TransactionManager transactionManager;
 
-  private MulgaraInternalTransaction internalWriteTransaction;
-
   public MulgaraInternalTransactionFactory(MulgaraTransactionManager manager, TransactionManagerFactory transactionManagerFactory) {
     super(manager);
     this.autoCommit = true;
@@ -81,7 +79,6 @@
     this.failedSessions = new HashSet<DatabaseSession>();
     this.activeTransactions = new HashMap<Thread, MulgaraTransaction>();
     this.sessionXAMap = new Assoc1toNMap<DatabaseSession, MulgaraTransaction>();
-    this.internalWriteTransaction = null;
 
     this.transactionManager = transactionManagerFactory.newTransactionManager();
   }
@@ -104,7 +101,7 @@
           });
           try {
             assert writeTransaction == null;
-            writeTransaction = internalWriteTransaction = transaction = 
+            writeTransaction = transaction = 
                 new MulgaraInternalTransaction(this, session.newOperationContext(true));
           } catch (Throwable th) {
             manager.releaseWriteLock(session);
@@ -222,8 +219,8 @@
                 public void execute() throws MulgaraTransactionException {
                   writeTransaction.execute(new TransactionOperation() {
                     public void execute() throws MulgaraTransactionException {
-                      internalWriteTransaction.dereference();
-                      internalWriteTransaction.commitTransaction();
+                      writeTransaction.dereference();
+                      ((MulgaraInternalTransaction)writeTransaction).commitTransaction();
                     }
                   });
                 }
@@ -368,7 +365,6 @@
       if (manager.isHoldingWriteLock(session)) {
         manager.releaseWriteLock(session);
         writeTransaction = null;
-        internalWriteTransaction = null;
       }
 
       sessionXAMap.removeN(transaction);
@@ -407,9 +403,9 @@
   void abortWriteTransaction() throws MulgaraTransactionException {
     acquireMutex();
     try {
-      if (internalWriteTransaction != null) {
-        internalWriteTransaction.abortTransaction("Explicit abort requested by write-lock manager", new Throwable());
-        internalWriteTransaction = null;
+      if (writeTransaction != null) {
+        writeTransaction.abortTransaction("Explicit abort requested by write-lock manager", new Throwable());
+        writeTransaction = null;
       }
     } finally {
       releaseMutex();

Modified: branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
===================================================================
--- branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java	2008-02-11 07:16:53 UTC (rev 632)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java	2008-02-11 07:20:19 UTC (rev 633)
@@ -111,24 +111,25 @@
       try {
         Throwable error = null;
 
-        try {
-          if (manager.isHoldingWriteLock(session)) {
-            try {
-              if (writeTransaction != null) {
-                logger.warn("Terminating session while holding writelock:" + session + ": " + writeTransaction);
-                writeTransaction.execute(new TransactionOperation() {
-                    public void execute() throws MulgaraTransactionException {
-                      writeTransaction.heuristicRollback("Session closed while holding write lock");
-                    }
-                });
-              }
-            } finally {
-              manager.releaseWriteLock(session);
+        if (manager.isHoldingWriteLock(session)) {
+          try {
+            if (writeTransaction != null) {
+              logger.warn("Terminating session while holding writelock:" + session + ": " + writeTransaction);
+              writeTransaction.execute(new TransactionOperation() {
+                  public void execute() throws MulgaraTransactionException {
+                    writeTransaction.heuristicRollback("Session closed while holding write lock");
+                  }
+              });
             }
+          } catch (Throwable th) {
+            if (writeTransaction != null) {
+              requiresAbort.put(writeTransaction, th);
+              error = th;
+            }
+          } finally {
+            manager.releaseWriteLock(session);
+            writeTransaction = null;
           }
-        } catch (Throwable th) {
-          requiresAbort.put(writeTransaction, th);
-          error = th;
         }
 
         for (MulgaraTransaction transaction : getTransactionsForSession(session)) {




More information about the Mulgara-svn mailing list