[Mulgara-svn] r233 - in trunk/src/jar: resolver/java/org/mulgara/resolver resolver-store/java/org/mulgara/resolver/store

andrae at mulgara.org andrae at mulgara.org
Wed Apr 18 05:06:40 UTC 2007


Author: andrae
Date: 2007-04-18 00:06:40 -0500 (Wed, 18 Apr 2007)
New Revision: 233

Modified:
   trunk/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreXAResource.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/InternalResolver.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java
Log:
Merge from revision 211:220 of branches/lostphasetokens.

This is the fix for Lost phase tokens, http://mulgara.org/jira/browse/MGR-46.



Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/InternalResolver.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/InternalResolver.java	2007-04-18 05:02:30 UTC (rev 232)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/InternalResolver.java	2007-04-18 05:06:40 UTC (rev 233)
@@ -226,18 +226,22 @@
       assert resolution != null;
 
       // Check the solution and extract the model type (if any) from it
-      resolution.beforeFirst();
-      if (resolution.next()) {
-        long modelType = resolution.getColumnValue(
-                           resolution.getColumnIndex(modelTypeVariable));
-        if (resolution.next()) {           throw new ResolverException("Model " + model + " has more than one type!");
+      try {
+        resolution.beforeFirst();
+        if (resolution.next()) {
+          long modelType = resolution.getColumnValue(
+                             resolution.getColumnIndex(modelTypeVariable));
+          if (resolution.next()) {           throw new ResolverException("Model " + model + " has more than one type!");
+          }
+
+          return modelType;
         }
-
-        return modelType;
+        else {
+          return NodePool.NONE;
+        }
+      } finally {
+        resolution.close();
       }
-      else {
-        return NodePool.NONE;
-      }
     }
     catch (QueryException e) {
       throw new ResolverException("Unable to determine model type of "+model, e);

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java	2007-04-18 05:02:30 UTC (rev 232)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java	2007-04-18 05:06:40 UTC (rev 233)
@@ -283,7 +283,9 @@
 
   public void rollback() throws SimpleXAResourceException
   {
-    logger.debug("Rollback phase on StringPoolSession " + System.identityHashCode(this));
+    if (logger.isDebugEnabled()) {
+      logger.debug("Rollback phase on StringPoolSession " + System.identityHashCode(this));
+    }
     if (state == RELEASE) {
       throw new SimpleXAResourceException("Attempting to rollback phase outside transaction");
     }
@@ -298,7 +300,9 @@
 
   public void release() throws SimpleXAResourceException
   {
-    logger.debug("Release phase on StringPoolSession " + System.identityHashCode(this));
+    if (logger.isDebugEnabled()) {
+      logger.debug("Release phase on StringPoolSession " + System.identityHashCode(this));
+    }
     if (state == RELEASE) {
       return;
     } else if (state != COMMIT && state != ROLLBACK) {

Modified: trunk/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreXAResource.java
===================================================================
--- trunk/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreXAResource.java	2007-04-18 05:02:30 UTC (rev 232)
+++ trunk/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreXAResource.java	2007-04-18 05:06:40 UTC (rev 233)
@@ -204,7 +204,7 @@
       }
       try {
         if (onePhase) {
-          // Check return value is XA_OK.
+          // Currently prepare only returns XA_OK, and throws an exception on failure.
           prepare(xid);
         }
       } catch (Throwable th) {
@@ -223,13 +223,7 @@
         throw new XAException(XAException.XAER_RMERR);
       }
     } finally {
-      synchronized(preparing) {
-        if (preparing.contains(session)) {
-          preparing.remove(session);
-        } else {
-          logger.debug("Already committed in this transaction");
-        }
-      }
+      cleanup("commit");
     }
 
   }
@@ -247,12 +241,13 @@
       logger.debug("Forget xid=" + System.identityHashCode(xid));
     }
     try {
-      if (logger.isDebugEnabled()) {
-        logger.debug("Releasing session " + session);
+      synchronized(preparing) {
+        if (preparing.contains(session)) {
+          rollback(xid);
+        }
       }
-      session.release();
-    } catch (SimpleXAResourceException es) {
-      logger.debug("Attempt to release store failed", es);
+    } finally {
+      cleanup("forget");
     }
   }
 
@@ -301,6 +296,8 @@
       // Make sure the exception is logged.
       logger.fatal("Failed to rollback resource in transaction " + xid, th);
       fatalError = true;
+    } finally {
+      cleanup("rollback");
     }
 
     if (fatalError) {
@@ -366,4 +363,27 @@
 
     return buffer.toString();
   }
+
+
+  private void cleanup(String operation) {
+    try {
+      synchronized(preparing) {
+        if (preparing.contains(session)) {
+          preparing.remove(session);
+        } else {
+          logger.debug("Already committed/rolledback in this transaction");
+        }
+      }
+    } finally {
+      try {
+        if (logger.isDebugEnabled()) {
+          logger.debug("Releasing session after " + operation + " " + session);
+        }
+        session.release();
+        session = null;
+      } catch (SimpleXAResourceException es) {
+        logger.error("Attempt to release store failed", es);
+      }
+    }
+  }
 }




More information about the Mulgara-svn mailing list