[Mulgara-svn] r129 - branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Thu Nov 9 02:30:39 UTC 2006


Author: andrae
Date: 2006-11-08 20:30:38 -0600 (Wed, 08 Nov 2006)
New Revision: 129

Modified:
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/Database.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransaction.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/OperationContext.java
   branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java
Log:
This is the previous commit with the fixes required to get resolver-test
passing.  Biggest problem was that I wasn't handling the writelock properly,
that should be fixed now.

Next step is to migrate the transaction initiation and termination logic into
either MTMgr or DOpC.  Transaction control logic into the manager,
transaction/operation setup/cleanup into the context.



Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -195,6 +195,7 @@
   * of the system model in the newly-created {@link Database}.
   */
   public void testQuery1() {
+    logger.info("TestQuery1");
     try {
       // Test querying the system model (#)
       Session session = database.newSession();
@@ -250,6 +251,7 @@
   */
   public void testSetModel() throws URISyntaxException
   {
+    logger.info("testSetModel");
     URI fileURI  = new File("data/dc.rdfs").toURI();
     URI modelURI = new URI("local:database#model");
 
@@ -277,7 +279,7 @@
   */
 
   public void testQuery2() throws URISyntaxException {
-    logger.debug("Testing testQuery2");
+    logger.info("Testing testQuery2");
     URI dcFileURI   = new File("data/dc.rdfs").toURI();
     URI rdfsFileURI = new File("data/rdfs.rdfs").toURI();
 

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/Database.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/Database.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/Database.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -670,6 +670,7 @@
       logger.debug("Added system resolver " + systemResolverFactoryClassName);
     }
 
+
     URI systemModelURI = new URI(uri.getScheme(), uri.getSchemeSpecificPart(), "");
     metadata =
       new DatabaseMetadataImpl(uri,
@@ -721,6 +722,7 @@
     if (logger.isDebugEnabled()) {
       logger.debug("Constructed database");
     }
+      logger.warn("Constructed database");
   }
 
 

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -915,4 +915,9 @@
   void setSystemResolver(SystemResolver systemResolver) {
     this.systemResolver = systemResolver;
   }
+
+  // !!FIXME: Temp hack for transactions.
+  public void endTransaction() throws QueryException {
+    databaseSession.endTransactionalBlock("Failed to end transaction");
+  }
 }

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -615,55 +615,53 @@
 
 
   public void setAutoCommit(boolean autoCommit) throws QueryException {
-    logger.warn("Entering setAutoCommit");
     try {
-    if (logger.isInfoEnabled()) {
-      logger.info("setAutoCommit(" + autoCommit + ") called with autoCommit = " + this.autoCommit);
-    }
+      if (logger.isInfoEnabled()) {
+        logger.info("setAutoCommit(" + autoCommit + ") called with autoCommit = " + this.autoCommit);
+      }
 
-    if (!this.autoCommit && autoCommit) { // Turning autoCommit on
-      try {
-        transaction.execute(new AnswerOperation() {
-          public void execute() {
-            try {
-              transaction.dereference();
-            } catch (MulgaraTransactionException em) {
-              logger.error("Dereference Failed", em);
-              throw new IllegalStateException("dereferenced failed");
+      if (!this.autoCommit && autoCommit) { // Turning autoCommit on
+        try {
+          transaction.execute(new AnswerOperation() {
+            public void execute() {
+              try {
+                transaction.dereference();
+              } catch (MulgaraTransactionException em) {
+                logger.error("Dereference Failed", em);
+                throw new IllegalStateException("dereferenced failed");
+              }
             }
-          }
-        });
-      } catch (TuplesException et) {
-        throw new QueryException("Failed to dereference transaction", et);
-      } finally {
-        this.autoCommit = true;
+          });
+        } catch (TuplesException et) {
+          throw new QueryException("Failed to dereference transaction", et);
+        } finally {
+          this.autoCommit = true;
+          this.inFailedTransaction = false;
+          // Guarentee transaction ends here.
+          cleanupTransaction();
+        }
+      } else if (this.autoCommit && !autoCommit) { // Turning autoCommit off
+        transaction = beginTransactionalBlock(true);
+        try {
+          transaction.reference();
+          operationContext.setSystemResolver(systemResolverFactory.newResolver(true));
+          operationContext.enlistResolver(operationContext.getSystemResolver());
+          transaction.tempDeactivate();
+          this.autoCommit = false;
+        } catch (QueryException eq) {
+          throw eq;
+        } catch (Throwable t) {
+          this.autoCommit = true;
+          logger.error("Failed to set autocommit off", t);
+          throw new QueryException("Failed to set autocommit off", t);
+        }
+      } else if (this.inFailedTransaction) { // Reset after failed autoCommit off based transaction.
         this.inFailedTransaction = false;
-        // FIXME: This is a problem
-        endTransactionalBlock("Extended transaction failed");
-        // Guarentee transaction ends here.
+      } else { // Leaving autoCommit the same
+        if (logger.isInfoEnabled()) {
+          logger.info("Invalid call to setAutoCommit(" + autoCommit + ") called with autoCommit = " + this.autoCommit);
+        }
       }
-    } else if (this.autoCommit && !autoCommit) { // Turning autoCommit off
-      transaction = beginTransactionalBlock(true);
-      try {
-        transaction.reference();
-        operationContext.setSystemResolver(systemResolverFactory.newResolver(true));
-        operationContext.enlistResolver(operationContext.getSystemResolver());
-        transaction.tempDeactivate();
-        this.autoCommit = false;
-      } catch (QueryException eq) {
-        throw eq;
-      } catch (Throwable t) {
-        this.autoCommit = true;
-        logger.error("Failed to set autocommit off", t);
-        throw new QueryException("Failed to set autocommit off", t);
-      }
-    } else if (this.inFailedTransaction) { // Reset after failed autoCommit off based transaction.
-      this.inFailedTransaction = false;
-    } else { // Leaving autoCommit the same
-      if (logger.isInfoEnabled()) {
-        logger.info("Invalid call to setAutoCommit(" + autoCommit + ") called with autoCommit = " + this.autoCommit);
-      }
-    }
     } catch (QueryException eq) {
       logger.error("Threw exception in autoCommit:", eq);
       throw eq;
@@ -708,11 +706,7 @@
       throw new QueryException("Rollback failed", et);
     } finally {
       synchronized (DatabaseSession.class) {
-        try {
-          endTransactionalBlock("Rollback failed, ending transaction");
-        } catch (Throwable th) {
-          throw new QueryException("Rollback failed", th);
-        }
+        cleanupTransaction();
         setAutoCommit(false);
       }
     }
@@ -947,18 +941,7 @@
         throw new QueryException(failureMessage, e);
       }
     } finally {
-      transaction.tempDeactivate();
-      transaction = null;
-
-      releaseWriteLock();
-      enlistedResolverMap.clear();
-      outstandingAnswers.clear();
-      clearCache();
-      operationContext.clearSystemModelCache();
-
-      operationContext.setSystemResolver(null);
-      explicitRollback = false;
-      autoCommit = true;
+      cleanupTransaction();
     }
   }
 
@@ -1199,7 +1182,10 @@
     // will handle begin vs. resume.
     if (transaction == null) {
       transaction = beginTransactionalBlock(operation.isWriteOperation());
+    } else {
+      transaction.tempActivate();
     }
+
     //
     // activate needs to worry about resume here.
     //
@@ -1207,10 +1193,25 @@
       transaction.execute(operation, resolverSessionFactory, metadata);
     } catch (MulgaraTransactionException em) {
       throw new QueryException(errorString, em);
+    } finally {
+      transaction.tempDeactivate();
     }
   }
 
   OperationContext getOperationContext() {
     return operationContext;
   }
+
+  void cleanupTransaction() {
+    releaseWriteLock();
+    transaction = null;
+    explicitRollback = false;
+    autoCommit = true;
+
+    operationContext.setSystemResolver(null);
+    outstandingAnswers.clear();
+    enlistedResolverMap.clear();
+    clearCache();
+    operationContext.clearSystemModelCache();
+  }
 }

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransaction.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransaction.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransaction.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -167,9 +167,19 @@
       if (using == 0) {
         report("Completing Transaction");
         // END TRANSACTION HERE.  But commit might fail.
-//        manager.transactionComplete(this);
+        try {
+//          manager.transactionComplete(this);
+          context.endTransaction();
+//        } catch (MulgaraTransactionException em) {
+//          logger.warn("Error committing transaction", em);
+//          throw em;
+        } catch (QueryException eq) {
+          logger.warn("Error committing transaction", eq);
+          throw new MulgaraTransactionException("Failed to commit transaciton", eq); 
+        } finally {
           manager = null;
           transaction = null;
+        }
       } else {
         report("Suspending Transaction");
         // What happens if suspend fails?
@@ -368,7 +378,15 @@
     try {
       deactivate();
     } catch (MulgaraTransactionException em) {
-      throw new QueryException("Failed to dereference in bootstrap", em);
+      throw new QueryException("Failed to deactivate", em);
     }
   }
+
+  public void tempActivate() throws QueryException {
+    try {
+      activate();
+    } catch (MulgaraTransactionException em) {
+      throw new QueryException("Failed to activate", em);
+    }
+  }
 }

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionManager.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -234,6 +234,7 @@
   public synchronized Transaction transactionStart(MulgaraTransaction transaction)
       throws MulgaraTransactionException {
     try {
+      logger.info("Beginning Transaction: ", new Throwable());
       transactionManager.begin();
       Transaction jtaTrans = transactionManager.getTransaction();
 
@@ -285,9 +286,9 @@
       throws MulgaraTransactionException {
     try {
       transactionManager.commit();
-      if (transaction == userTransaction) {
-        releaseWriteLock();
-      }
+//      if (transaction == userTransaction) {
+//        releaseWriteLock();
+//      }
     } catch (Exception e) {
       throw new MulgaraTransactionException("Commit Failed", e);
     } finally {
@@ -333,6 +334,7 @@
   }
 
   void begin() throws Exception {
+    logger.info("Beginning Transaction:", new Throwable());
     transactionManager.begin();
   }
 }

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/OperationContext.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/OperationContext.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/OperationContext.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -123,4 +123,7 @@
   public Answer doQuery(Query query) throws Exception;
 
   public SystemResolver getSystemResolver(); // FIXME: Scaffolding for transactions.
+
+  // !!FIXME: Transactions hack
+  public void endTransaction() throws QueryException;
 }

Modified: branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java
===================================================================
--- branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java	2006-11-07 05:35:52 UTC (rev 128)
+++ branches/xafix-impl/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswerUnitTest.java	2006-11-09 02:30:38 UTC (rev 129)
@@ -206,5 +206,7 @@
     throws Exception { return null; }
 
     public SystemResolver getSystemResolver() { return null; } // FIXME: Scaffolding for transactions.
+
+    public void endTransaction () { }
   }
 }




More information about the Mulgara-svn mailing list