[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