[Mulgara-svn] r800 - trunk/src/jar/resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Fri Apr 18 08:44:31 UTC 2008


Author: andrae
Date: 2008-04-18 01:44:31 -0700 (Fri, 18 Apr 2008)
New Revision: 800

Modified:
   trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java
Log:
#refs 100

Fixes bug in transaction logic that could release the writelock prematurely if a
pre-existing query from the same session was completed.



Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2008-04-18 04:43:27 UTC (rev 799)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2008-04-18 08:44:31 UTC (rev 800)
@@ -94,6 +94,7 @@
 
   private static final URI databaseURI = URI.create("local:database");
 
+  private static final URI systemModelURI = URI.create("local:database#");
   private static final URI modelURI = URI.create("local:database#model");
   private static final URI model2URI = URI.create("local:database#model2");
   private static final URI model3URI = URI.create("local:database#model3");
@@ -691,7 +692,7 @@
         // Evaluate the query
         Answer answer = session.query(new Query(
           selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
+          new ModelResource(systemModelURI),                      // FROM
           new ConstraintImpl(subjectVariable,               // WHERE
                          predicateVariable,
                          objectVariable),
@@ -705,21 +706,6 @@
           0,                                                // OFFSET
           new UnconstrainedAnswer()                         // GIVEN
         ));
-        String[][] results = {
-          { "test:s01", "test:p01", "test:o01" },
-          { "test:s01", "test:p02", "test:o01" },
-          { "test:s01", "test:p02", "test:o02" },
-          { "test:s01", "test:p03", "test:o02" },
-          { "test:s02", "test:p03", "test:o02" },
-          { "test:s02", "test:p04", "test:o02" },
-          { "test:s02", "test:p04", "test:o03" },
-          { "test:s02", "test:p05", "test:o03" },
-          { "test:s03", "test:p01", "test:o01" },
-          { "test:s03", "test:p05", "test:o03" },
-          { "test:s03", "test:p06", "test:o01" },
-          { "test:s03", "test:p06", "test:o03" },
-        };
-        compareResults(results, answer);
 
         session.setAutoCommit(false);
 

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java	2008-04-18 04:43:27 UTC (rev 799)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java	2008-04-18 08:44:31 UTC (rev 800)
@@ -365,14 +365,16 @@
     acquireMutex();
     try {
       logger.debug("Transaction Complete");
-      DatabaseSession session = sessionXAMap.get1(transaction);
-      if (session == null) {
-        throw new MulgaraTransactionException("No associated session found for transaction");
+      if (transaction == writeTransaction) {
+        DatabaseSession session = sessionXAMap.get1(transaction);
+        if (session == null) {
+          throw new MulgaraTransactionException("No associated session found for write transaction");
+        }
+        if (manager.isHoldingWriteLock(session)) {
+          manager.releaseWriteLock(session);
+          writeTransaction = null;
+        }
       }
-      if (manager.isHoldingWriteLock(session)) {
-        manager.releaseWriteLock(session);
-        writeTransaction = null;
-      }
 
       sessionXAMap.removeN(transaction);
       activeTransactions.remove(Thread.currentThread());




More information about the Mulgara-svn mailing list