[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