[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