[Mulgara-svn] r688 - branches/mgr-73

andrae at mulgara.org andrae at mulgara.org
Tue Mar 18 01:24:20 UTC 2008


Author: andrae
Date: 2008-03-17 18:24:19 -0700 (Mon, 17 Mar 2008)
New Revision: 688

Removed:
   branches/mgr-73/ExternalTransactionUnitTest.java
   branches/mgr-73/JotmTransactionUnitTest.java
Log:
refs #73
refs #85

Cleanup prior to legal review.



Deleted: branches/mgr-73/ExternalTransactionUnitTest.java
===================================================================
--- branches/mgr-73/ExternalTransactionUnitTest.java	2008-03-17 22:08:57 UTC (rev 687)
+++ branches/mgr-73/ExternalTransactionUnitTest.java	2008-03-18 01:24:19 UTC (rev 688)
@@ -1,347 +0,0 @@
-// Java 2 standard packages
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
-// Third party packages
-
-// Locally written packages
-import org.mulgara.query.*;
-import org.mulgara.query.rdf.Mulgara;
-import org.mulgara.query.rdf.URIReferenceImpl;
-import org.mulgara.query.rdf.TripleImpl;
-import org.mulgara.server.Session;
-import org.mulgara.server.SessionFactory;
-import org.mulgara.server.driver.SessionFactoryFinder;
-import org.mulgara.util.FileUtil;
-
-import org.mulgara.query.QueryException;
-import org.mulgara.server.JRDFSession;
-import org.mulgara.server.SessionFactory;
-import org.mulgara.server.driver.SessionFactoryFinder;
-
-public class ExternalTransactionUnitTest
-{
-  private static final URI databaseURI;
-
-  private static final URI systemModelURI;
-
-  private static final URI modelURI;
-  private static final URI model2URI;
-  private static final URI model3URI;
-  private static final URI model4URI;
-  private static final URI model5URI;
-
-  static {
-    try {
-      databaseURI    = new URI("rmi://localhost/server1");
-      systemModelURI = new URI("rmi://localhost/server1#");
-      modelURI       = new URI("rmi://localhost/server1#model");
-      model2URI      = new URI("rmi://localhost/server1#model2");
-      model3URI      = new URI("rmi://localhost/server1#model3");
-      model4URI      = new URI("rmi://localhost/server1#model4");
-      model5URI      = new URI("rmi://localhost/server1#model5");
-    } catch (URISyntaxException e) {
-      throw new Error("Bad hardcoded URI", e);
-    }
-  }
-
-  private SessionFactory sessionFactory;
-
-  public ExternalTransactionUnitTest() { }
-
-  public static void main(String[] args) throws Exception {
-    new ExternalTransactionUnitTest().run();
-  }
-
-  public void run() throws Exception {
-    System.out.println("Doing setup");
-    setup();
-    System.out.println("Doing OnePhase commit");
-    testSimpleOnePhaseCommit();
-    System.out.println("Doing TwoPhase commit");
-    testSimpleTwoPhaseCommit();
-    System.out.println("Doing Query");
-    testBasicQuery();
-    System.out.println("Doing Test isSameRM");
-    testIsSameRM();
-    System.out.println("Finished Tests");
-  }
-
-  public void setup() throws Exception {
-    this.sessionFactory = SessionFactoryFinder.newSessionFactory(databaseURI);
-  }
-
-  //
-  // Test cases
-  //
-
-  private static class TestXid implements Xid {
-    private int xid;
-    public TestXid(int xid) {
-      this.xid = xid;
-    }
-    
-    public int getFormatId() {
-      return 'X';
-    }
-
-    public byte[] getBranchQualifier() {
-      return new byte[] {
-        (byte)(xid >> 0x00),
-        (byte)(xid >> 0x08)
-      };
-    }
-
-    public byte[] getGlobalTransactionId() {
-      return new byte[] {
-        (byte)(xid >> 0x10),
-        (byte)(xid >> 0x18)
-      };
-    }
-  }
-
-  /**
-   * Test the {@link DatabaseSession#create} method.
-   * As a side-effect, creates the model required by the next tests.
-   */
-  public void testSimpleOnePhaseCommit() throws URISyntaxException
-  {
-    try {
-      Session session = sessionFactory.newSession();
-      XAResource resource = session.getXAResource();
-      Xid xid = new TestXid(1);
-      resource.start(xid, XAResource.TMNOFLAGS);
-      try {
-        session.createModel(modelURI, null);
-        resource.end(xid, XAResource.TMSUCCESS);
-        resource.commit(xid, true);
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  /**
-   * Test two phase commit.
-   * As a side-effect, loads the model required by the next tests.
-   */
-  public void testSimpleTwoPhaseCommit() throws URISyntaxException
-  {
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session = sessionFactory.newSession();
-      XAResource resource = session.getXAResource();
-      Xid xid = new TestXid(1);
-      resource.start(xid, XAResource.TMNOFLAGS);
-      try {
-        session.setModel(modelURI, new ModelResource(fileURI));
-        resource.end(xid, XAResource.TMSUCCESS);
-        resource.prepare(xid);
-        resource.commit(xid, false);
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  public void testBasicQuery() throws URISyntaxException {
-    try {
-      // Load some test data
-      Session session = sessionFactory.newSession();
-      try {
-        XAResource resource = session.getXAResource();
-        Xid xid = new TestXid(1);
-        resource.start(xid, XAResource.TMNOFLAGS);
-
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          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);
-        answer.close();
-
-        resource.end(xid, XAResource.TMSUCCESS);
-        resource.commit(xid, true);
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testIsSameRM() throws Exception {
-    URI serverURI = new URI("rmi://localhost/server1");
-    URI modelURI = new URI("rmi://localhost/server1#ri");
-
-    SessionFactory factory = SessionFactoryFinder.newSessionFactory(serverURI, true);
-    Session session1 = factory.newSession();
-    Session session2 = factory.newSession();
-
-    XAResource roResource1 = session1.getReadOnlyXAResource();
-    XAResource roResource2 = session2.getReadOnlyXAResource();
-    XAResource rwResource1 = session1.getXAResource();
-    XAResource rwResource2 = session2.getXAResource();
-    XAResource notResource = new DummyXAResource();
-
-    assertTrue(roResource1.isSameRM(roResource1));
-    assertTrue(roResource2.isSameRM(roResource2));
-    assertTrue(rwResource1.isSameRM(rwResource1));
-    assertTrue(rwResource2.isSameRM(rwResource2));
-    assertTrue(rwResource1.isSameRM(roResource1));
-    assertTrue(rwResource2.isSameRM(roResource2));
-    assertTrue(roResource1.isSameRM(rwResource1));
-    assertTrue(roResource2.isSameRM(rwResource2));
-
-    assertFalse(roResource1.isSameRM(roResource2));
-    assertFalse(rwResource1.isSameRM(roResource2));
-    assertFalse(roResource1.isSameRM(rwResource2));
-    assertFalse(rwResource1.isSameRM(rwResource2));
-    assertFalse(roResource2.isSameRM(roResource1));
-    assertFalse(rwResource2.isSameRM(roResource1));
-    assertFalse(roResource2.isSameRM(rwResource1));
-    assertFalse(rwResource2.isSameRM(rwResource1));
-
-    assertFalse(roResource1.isSameRM(notResource));
-    assertFalse(rwResource1.isSameRM(notResource));
-    assertFalse(roResource2.isSameRM(notResource));
-    assertFalse(rwResource2.isSameRM(notResource));
-  }
-
-  //
-  // Internal methods
-  //
-
-  private void compareResults(String[][] expected, Answer answer) throws Exception {
-    try {
-      answer.beforeFirst();
-      for (int i = 0; i < expected.length; i++) {
-        assertTrue("Answer short at row " + i, answer.next());
-        assertEquals(expected[i].length, answer.getNumberOfVariables());
-        for (int j = 0; j < expected[i].length; j++) {
-          URIReferenceImpl uri = new URIReferenceImpl(new URI(expected[i][j]));
-          assertEquals(uri, answer.getObject(j));
-        }
-      }
-      assertFalse(answer.next());
-    } catch (Exception e) {
-      System.out.println("Failed test - " + answer);
-      answer.close();
-      throw e;
-    }
-  }
-
-  private void compareResults(Answer answer1, Answer answer2) throws Exception {
-    answer1.beforeFirst();
-    answer2.beforeFirst();
-    assertEquals(answer1.getNumberOfVariables(), answer2.getNumberOfVariables());
-    while (answer1.next()) {
-      assertTrue(answer2.next());
-      for (int i = 0; i < answer1.getNumberOfVariables(); i++) {
-        assertEquals(answer1.getObject(i), answer2.getObject(i));
-      }
-    }
-    assertFalse(answer2.next());
-  }
-
-  private static class AssertionFailedException extends Exception {
-    public AssertionFailedException(String msg) {
-      super(msg);
-    }
-  }
-
-  private void assertTrue(boolean result) throws Exception { assertTrue("", result); }
-  private void assertTrue(String string, boolean result) throws Exception {
-    if (!result) {
-      throw new AssertionFailedException("AssertTrue Failed: " + string);
-    }
-  }
-
-  private void assertFalse(boolean result) throws Exception { assertFalse("", result); }
-  private void assertFalse(String string, boolean result) throws Exception {
-    if (result) {
-      throw new AssertionFailedException("AssertFalse Failed: " + string);
-    }
-  }
-
-  private void assertEquals(Object lhs, Object rhs) throws Exception {
-    if (!lhs.equals(rhs)) {
-      throw new AssertionFailedException("AssertEquals Failed: " + lhs + " , " + rhs);
-    }
-  }
-
-  /**
-   * Fail with an unexpected exception
-   */
-  private void fail(Throwable throwable)
-  {
-    StringWriter stringWriter = new StringWriter();
-    throwable.printStackTrace(new PrintWriter(stringWriter));
-    System.out.println(stringWriter.toString());
-  }
-
-  private static class DummyXAResource implements XAResource {
-    public void end(Xid xid, int flags) throws XAException {}
-    public void forget(Xid xid) throws XAException {}
-    public int getTransactionTimeout() throws XAException { return 0; }
-    public int prepare(Xid xid) throws XAException { return 0; }
-    public Xid[] recover(int flag) throws XAException { return new Xid[] {}; }
-    public void rollback(Xid xid) throws XAException {}
-    public boolean setTransactionTimeout(int seconds) throws XAException { return false; }
-    public void start(Xid xid, int flags) throws XAException {}
-    public void commit(Xid xid, boolean twophase) throws XAException {}
-    public boolean isSameRM(XAResource xa) { return xa == this; }
-  }
-}

Deleted: branches/mgr-73/JotmTransactionUnitTest.java
===================================================================
--- branches/mgr-73/JotmTransactionUnitTest.java	2008-03-17 22:08:57 UTC (rev 687)
+++ branches/mgr-73/JotmTransactionUnitTest.java	2008-03-18 01:24:19 UTC (rev 688)
@@ -1,2105 +0,0 @@
-// Java 2 standard packages
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
-// Third party packages
-import org.jrdf.graph.ObjectNode;
-import org.jrdf.graph.PredicateNode;
-import org.jrdf.graph.SubjectNode;
-import org.objectweb.jotm.Jotm;
-import org.objectweb.transaction.jta.TMService;
-
-// Locally written packages
-import org.mulgara.query.*;
-import org.mulgara.query.rdf.Mulgara;
-import org.mulgara.query.rdf.URIReferenceImpl;
-import org.mulgara.query.rdf.TripleImpl;
-import org.mulgara.server.Session;
-import org.mulgara.server.SessionFactory;
-import org.mulgara.server.driver.SessionFactoryFinder;
-import org.mulgara.util.FileUtil;
-
-import org.mulgara.query.QueryException;
-import org.mulgara.server.JRDFSession;
-import org.mulgara.server.SessionFactory;
-import org.mulgara.server.driver.SessionFactoryFinder;
-
-public class JotmTransactionUnitTest
-{
-  private static final URI databaseURI;
-
-  private static final URI systemModelURI;
-
-  private static final URI modelURI;
-  private static final URI model2URI;
-  private static final URI model3URI;
-  private static final URI model4URI;
-  private static final URI model5URI;
-
-  static {
-    try {
-      databaseURI    = new URI("rmi://localhost/server1");
-      systemModelURI = new URI("rmi://localhost/server1#");
-      modelURI       = new URI("rmi://localhost/server1#model");
-      model2URI      = new URI("rmi://localhost/server1#model2");
-      model3URI      = new URI("rmi://localhost/server1#model3");
-      model4URI      = new URI("rmi://localhost/server1#model4");
-      model5URI      = new URI("rmi://localhost/server1#model5");
-    } catch (URISyntaxException e) {
-      throw new Error("Bad hardcoded URI", e);
-    }
-  }
-
-  private SessionFactory sessionFactory;
-  private TMService txService;
-  private TransactionManager txManager;
-
-  public JotmTransactionUnitTest() { }
-
-  public static void main(String[] args) throws Exception {
-    new JotmTransactionUnitTest().run();
-    System.exit(0);
-  }
-
-  public void run() throws Exception {
-    System.out.println("Starting Tests");
-
-    setup();
-    try {
-      testTrivalExplicit();
-      testSessionCloseRollback();
-      testTrivialExplicitAgain();
-      testBasicQuery();
-      testMultipleEnlist();
-      testMultipleQuery();
-      testBasicReadOnlyQuery();
-      testConcurrentQuery();
-      testRepeatGetXAQuery();
-      testConcurrentReadWrite();
-      testSubqueryQuery();
-
-      testTrivalImplicit();
-    } finally {
-      cleanup();
-    }
-
-    System.out.println("Finished Tests");
-  }
-
-  public void setup() throws Exception {
-    System.out.println("Doing setup");
-    this.sessionFactory = SessionFactoryFinder.newSessionFactory(databaseURI);
-    this.txService = new Jotm(true, false); // local, unbound.
-    this.txManager = txService.getTransactionManager();
-  }
-
-  public void cleanup() throws Exception {
-    System.out.println("Doing cleanup");
-    this.txService.stop();
-  }
-
-  //
-  // Test cases
-  //
-
-  private static class TestXid implements Xid {
-    private int xid;
-    public TestXid(int xid) {
-      this.xid = xid;
-    }
-    
-    public int getFormatId() {
-      return 'X';
-    }
-
-    public byte[] getBranchQualifier() {
-      return new byte[] {
-        (byte)(xid >> 0x00),
-        (byte)(xid >> 0x08)
-      };
-    }
-
-    public byte[] getGlobalTransactionId() {
-      return new byte[] {
-        (byte)(xid >> 0x10),
-        (byte)(xid >> 0x18)
-      };
-    }
-  }
-
-  /**
-   * Test the {@link DatabaseSession#create} method.
-   * As a side-effect, creates the model required by the next tests.
-   */
-  public void testTrivalExplicit() throws URISyntaxException {
-    System.out.println("testing trivalExplicit");
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      txManager.getTransaction().enlistResource(session.getXAResource());
-
-      try {
-        session.createModel(modelURI, null);
-        txManager.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  public void testSessionCloseRollback() throws URISyntaxException {
-    System.out.println("Testing sessionCloseRollback");
-    try {
-      URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      txManager.getTransaction().enlistResource(session.getXAResource());
-
-      try {
-        try {
-          session.setModel(modelURI, new ModelResource(fileURI));
-        } finally {
-          session.close();
-        }
-      } finally {
-        try {
-          txManager.commit();
-        } catch (HeuristicRollbackException eh) { }
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testTrivialExplicitAgain() throws URISyntaxException {
-    System.out.println("Testing trivialExplicitAgain");
-    try {
-      URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      txManager.getTransaction().enlistResource(session.getXAResource());
-
-      try {
-        session.setModel(modelURI, new ModelResource(fileURI));
-        txManager.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testBasicQuery() throws URISyntaxException {
-    System.out.println("Testing basicQuery");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      try {
-        txManager.getTransaction().enlistResource(session.getXAResource());
-
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          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);
-        answer.close();
-
-        txManager.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  public void testMultipleEnlist() throws URISyntaxException {
-    System.out.println("Testing multipleEnlist");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      try {
-        txManager.getTransaction().enlistResource(session.getXAResource());
-        txManager.getTransaction().enlistResource(session.getXAResource());
-        txManager.getTransaction().enlistResource(session.getXAResource());
-
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          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);
-        answer.close();
-
-        txManager.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  public void testMultipleQuery() throws URISyntaxException {
-    System.out.println("Testing MultipleQuery");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      txManager.getTransaction().enlistResource(session.getXAResource());
-      try {
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer1 = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        Answer answer2 = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        compareResults(answer1, answer2);
-
-        answer1.close();
-        answer2.close();
-
-        txManager.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testBasicReadOnlyQuery() throws URISyntaxException {
-    System.out.println("Testing basicReadOnlyQuery");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      try {
-        txManager.getTransaction().enlistResource(session.getReadOnlyXAResource());
-
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          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);
-        answer.close();
-
-        txManager.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testConcurrentQuery() throws URISyntaxException {
-    System.out.println("Testing concurrentQuery");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      XAResource roResource = session.getReadOnlyXAResource();
-      Transaction tx1 = txManager.getTransaction();
-      tx1.enlistResource(roResource);
-
-      try {
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer1 = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-        
-        tx1 = txManager.suspend();
-
-        txManager.begin();
-        Transaction tx2 = txManager.getTransaction();
-        tx2.enlistResource(roResource);
-
-        Answer answer2 = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        tx2 = txManager.suspend();
-
-        compareResults(answer1, answer2);
-
-        answer1.close();
-        answer2.close();
-
-        txManager.resume(tx1);
-        txManager.commit();
-        // I believe JTA requires me to call end here - our implementation doesn't care.
-        tx2.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testRepeatGetXAQuery() throws URISyntaxException {
-    System.out.println("Testing RepeatGetXAQuery");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      Transaction tx1 = txManager.getTransaction();
-      tx1.enlistResource(session.getReadOnlyXAResource());
-
-      try {
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer1 = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-        
-        tx1 = txManager.suspend();
-
-        txManager.begin();
-        Transaction tx2 = txManager.getTransaction();
-        tx2.enlistResource(session.getReadOnlyXAResource());
-
-        Answer answer2 = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        tx2 = txManager.suspend();
-
-        compareResults(answer1, answer2);
-
-        answer1.close();
-        answer2.close();
-
-        txManager.resume(tx1);
-        txManager.commit();
-        // I believe JTA requires me to call end here - our implementation doesn't care.
-        tx2.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  //
-  // Note: What this test does is a really bad idea - there is no
-  //       isolation provided as each operation is within its own
-  //       transaction.  It does however provide a good test.
-  //
-  public void testConcurrentReadWrite() throws URISyntaxException {
-    System.out.println("Testing concurrentReadWrite");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      XAResource roResource = session.getReadOnlyXAResource();
-      XAResource rwResource = session.getXAResource();
-
-      txManager.getTransaction().enlistResource(rwResource);
-      session.createModel(model2URI, null);
-      Transaction tx1 = txManager.suspend();
-
-      try {
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        txManager.begin();
-        txManager.getTransaction().enlistResource(roResource);
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        Transaction tx2 = txManager.suspend();
-
-        answer.beforeFirst();
-        while (answer.next()) {
-          txManager.resume(tx1);
-          session.insert(model2URI, Collections.singleton(new TripleImpl(
-              (SubjectNode)answer.getObject(0),
-              (PredicateNode)answer.getObject(1),
-              (ObjectNode)answer.getObject(2))));
-          tx1 = txManager.suspend();
-        }
-        answer.close();
-
-        txManager.resume(tx1);
-        txManager.commit();
-
-        txManager.begin();
-        txManager.getTransaction().enlistResource(roResource);
-
-        Answer answer2 = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(model2URI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        Transaction tx3 = txManager.suspend();
-
-        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, answer2);
-        answer2.close();
-
-        txManager.begin();
-        txManager.getTransaction().enlistResource(rwResource);
-        session.removeModel(model2URI);
-        txManager.commit();
-
-        txManager.resume(tx2);
-        txManager.commit();
-        txManager.resume(tx3);
-        txManager.commit();
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testSubqueryQuery() throws URISyntaxException {
-    System.out.println("Testing subqueryQuery");
-
-    try {
-      txManager.begin();
-      Session session = sessionFactory.newSession();
-      txManager.getTransaction().enlistResource(session.getReadOnlyXAResource());
-
-      try {
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(new Subquery(new Variable("k0"), new Query(
-          Collections.singletonList(objectVariable),
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(objectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        )));
-
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-              new URIReferenceImpl(new URI("test:p03")),
-              objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        Transaction tx1 = txManager.suspend();
-
-        answer.beforeFirst();
-
-        assertTrue(answer.next());
-        assertEquals(new URIReferenceImpl(new URI("test:s01")),
-            answer.getObject(0));
-        Answer sub1 = (Answer)answer.getObject(1);
-        compareResults(new String[][] { new String[] { "test:o01" },
-                                        new String[] { "test:o02" } }, sub1);
-        sub1.close();
-
-        assertTrue(answer.next());
-        assertEquals(new URIReferenceImpl(new URI("test:s02")),
-            answer.getObject(0));
-        Answer sub2 = (Answer)answer.getObject(1);
-        compareResults(new String[][] { new String[] { "test:o02" },
-                                        new String[] { "test:o03" } }, sub2);
-        // Leave sub2 open.
-
-        assertFalse(answer.next());
-        answer.close();
-        sub2.close();
-
-        // Leave transaction to be closed on session close.
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-/*
-
-  public void testConcurrentSubqueryQuery() throws URISyntaxException {
-    logger.info("Testing concurrentSubqueryQuery");
-
-    try {
-      Session session = database.newSession();
-      XAResource rwResource = session.getXAResource();
-      Xid xid1 = new TestXid(1);
-      rwResource.start(xid1, XAResource.TMNOFLAGS);
-
-      try {
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(new Subquery(new Variable("k0"), new Query(
-          Collections.singletonList(objectVariable),
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(objectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        )));
-
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(modelURI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-              new URIReferenceImpl(new URI("test:p03")),
-              objectVariable),
-          null,                                             // HAVING
-          Collections.singletonList(                        // ORDER BY
-            new Order(subjectVariable, true)
-          ),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        answer.beforeFirst();
-
-        assertTrue(answer.next());
-        assertEquals(new URIReferenceImpl(new URI("test:s01")),
-            answer.getObject(0));
-        Answer sub1 = (Answer)answer.getObject(1);
-        assertTrue(answer.next());
-        assertEquals(new URIReferenceImpl(new URI("test:s02")),
-            answer.getObject(0));
-        Answer sub2 = (Answer)answer.getObject(1);
-        assertFalse(answer.next());
-
-        assertEquals(1, sub1.getNumberOfVariables());
-        assertEquals(1, sub2.getNumberOfVariables());
-        sub1.beforeFirst();
-        sub2.beforeFirst();
-        assertTrue(sub1.next());
-        assertTrue(sub2.next());
-        assertEquals(new URIReferenceImpl(new URI("test:o01")), sub1.getObject(0));
-        assertEquals(new URIReferenceImpl(new URI("test:o02")), sub2.getObject(0));
-
-        rwResource.end(xid1, XAResource.TMSUSPEND);
-
-        assertTrue(sub1.next());
-        assertTrue(sub2.next());
-        assertEquals(new URIReferenceImpl(new URI("test:o02")), sub1.getObject(0));
-        assertEquals(new URIReferenceImpl(new URI("test:o03")), sub2.getObject(0));
-        assertFalse(sub1.next());
-        assertFalse(sub2.next());
-
-        answer.close();
-
-        rwResource.end(xid1, XAResource.TMSUCCESS);
-        rwResource.commit(xid1, true);
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testExplicitIsolationQuerySingleSession() throws URISyntaxException
-  {
-    logger.info("testExplicitIsolationQuery");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session = database.newSession();
-      try {
-        XAResource roResource = session.getReadOnlyXAResource();
-        XAResource rwResource = session.getXAResource();
-        Xid xid1 = new TestXid(1); // Initial create model.
-        Xid xid2 = new TestXid(2); // Started before setModel.
-        Xid xid3 = new TestXid(3); // setModel.
-        Xid xid4 = new TestXid(4); // Started before setModel prepares
-        Xid xid5 = new TestXid(5); // Started before setModel commits
-        Xid xid6 = new TestXid(6); // Started after setModel commits
-        Xid xid7 = new TestXid(7); // Final remove model.
-
-        rwResource.start(xid1, XAResource.TMNOFLAGS);
-        session.createModel(model3URI, null);
-        rwResource.end(xid1, XAResource.TMSUCCESS);
-        rwResource.commit(xid1, true);
-
-        // Nothing visible.
-        roResource.start(xid2, XAResource.TMNOFLAGS);
-        assertChangeNotVisible(session);
-        roResource.end(xid2, XAResource.TMSUSPEND);
-
-        // Perform update
-        rwResource.start(xid3, XAResource.TMNOFLAGS);
-        session.setModel(model3URI, new ModelResource(fileURI));
-        rwResource.end(xid3, XAResource.TMSUSPEND);
-
-        // Check uncommitted change not visible
-        roResource.start(xid4, XAResource.TMNOFLAGS);
-        assertChangeNotVisible(session);
-        roResource.end(xid4, XAResource.TMSUSPEND);
-
-        // Check original phase unaffected.
-        roResource.start(xid2, XAResource.TMRESUME);
-        assertChangeNotVisible(session);
-        roResource.end(xid2, XAResource.TMSUSPEND);
-
-        // Check micro-commit visible to current-phase
-        rwResource.start(xid3, XAResource.TMRESUME);
-        assertChangeVisible(session);
-        // Perform prepare
-        rwResource.end(xid3, XAResource.TMSUCCESS);
-        rwResource.prepare(xid3);
-
-        // Check original phase unaffected
-        roResource.start(xid2, XAResource.TMRESUME);
-        assertChangeNotVisible(session);
-        roResource.end(xid2, XAResource.TMSUSPEND);
-
-        // Check pre-prepare phase unaffected
-        roResource.start(xid4, XAResource.TMRESUME);
-        assertChangeNotVisible(session);
-        roResource.end(xid4, XAResource.TMSUSPEND);
-
-        // Check committed phase unaffected.
-        roResource.start(xid5, XAResource.TMNOFLAGS);
-        assertChangeNotVisible(session);
-        roResource.end(xid5, XAResource.TMSUSPEND);
-
-        // Do commit
-        rwResource.commit(xid3, false);
-
-        // Check original phase
-        roResource.start(xid2, XAResource.TMRESUME);
-        assertChangeNotVisible(session);
-        roResource.end(xid2, XAResource.TMSUSPEND);
-
-        // Check pre-prepare
-        roResource.start(xid4, XAResource.TMRESUME);
-        assertChangeNotVisible(session);
-        roResource.end(xid4, XAResource.TMSUSPEND);
-
-        // Check pre-commit
-        roResource.start(xid5, XAResource.TMRESUME);
-        assertChangeNotVisible(session);
-        roResource.end(xid5, XAResource.TMSUSPEND);
-
-        // Check committed phase is now updated
-        roResource.start(xid6, XAResource.TMNOFLAGS);
-        assertChangeVisible(session);
-
-        // Cleanup transactions.
-        roResource.end(xid6, XAResource.TMSUCCESS);
-        roResource.end(xid2, XAResource.TMSUCCESS);
-        roResource.end(xid4, XAResource.TMSUCCESS);
-        roResource.end(xid5, XAResource.TMSUCCESS);
-        roResource.commit(xid2, true);
-        roResource.commit(xid4, true);
-        roResource.commit(xid5, true);
-        roResource.commit(xid6, true);
-
-        // Cleanup database
-        rwResource.start(xid7, XAResource.TMNOFLAGS);
-        session.removeModel(model3URI);
-        rwResource.end(xid7, XAResource.TMSUCCESS);
-        rwResource.commit(xid7, true);
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testExternalInternalIsolation() throws URISyntaxException
-  {
-    logger.info("testExplicitIsolationQuery");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session1 = database.newSession();
-      try {
-        Session session2 = database.newSession();
-        try {
-          XAResource roResource = session1.getReadOnlyXAResource();
-          XAResource rwResource = session1.getXAResource();
-          Xid xid1 = new TestXid(1); // Initial create model.
-          Xid xid2 = new TestXid(2); // Main Test.
-          Xid xid3 = new TestXid(3); // Cleanup test.
-
-          rwResource.start(xid1, XAResource.TMNOFLAGS);
-          session1.createModel(model3URI, null);
-          rwResource.end(xid1, XAResource.TMSUCCESS);
-          rwResource.commit(xid1, true);
-
-          // Nothing visible.
-          assertChangeNotVisible(session2);
-
-          // Perform update
-          rwResource.start(xid2, XAResource.TMNOFLAGS);
-          session1.setModel(model3URI, new ModelResource(fileURI));
-          rwResource.end(xid2, XAResource.TMSUSPEND);
-
-          // Check uncommitted change not visible
-          assertChangeNotVisible(session2);
-
-          // Check micro-commit visible to current-phase
-          rwResource.start(xid2, XAResource.TMRESUME);
-          assertChangeVisible(session1);
-          // Perform prepare
-          rwResource.end(xid2, XAResource.TMSUCCESS);
-          rwResource.prepare(xid2);
-
-          // Check original phase unaffected
-          assertChangeNotVisible(session2);
-
-          // Do commit
-          rwResource.commit(xid2, false);
-
-          // Check committed phase is now updated
-          assertChangeVisible(session2);
-
-          // Cleanup database
-          session2.removeModel(model3URI);
-        } finally {
-          session2.close();
-        }
-      } finally {
-        session1.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  public void testInternalExternalIsolation() throws URISyntaxException
-  {
-    logger.info("testExplicitIsolationQuery");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session1 = database.newSession();
-      try {
-        Session session2 = database.newSession();
-        try {
-          XAResource roResource = session2.getReadOnlyXAResource();
-          XAResource rwResource = session2.getXAResource();
-          Xid xid1 = new TestXid(1); // Pre-update
-          Xid xid2 = new TestXid(2); // Post-update/Pre-commit
-          Xid xid3 = new TestXid(3); // Post-commit
-
-          session1.createModel(model3URI, null);
-
-          // Nothing visible.
-          roResource.start(xid1, XAResource.TMNOFLAGS);
-          assertChangeNotVisible(session2);
-          roResource.end(xid1, XAResource.TMSUSPEND);
-
-          // Perform update with autocommit off
-          session1.setAutoCommit(false);
-          session1.setModel(model3URI, new ModelResource(fileURI));
-
-          // Check uncommitted change not visible
-          roResource.start(xid2, XAResource.TMNOFLAGS);
-          assertChangeNotVisible(session2);
-          roResource.end(xid2, XAResource.TMSUSPEND);
-
-          // Check original phase unaffected.
-          roResource.start(xid1, XAResource.TMRESUME);
-          assertChangeNotVisible(session2);
-          roResource.end(xid1, XAResource.TMSUSPEND);
-
-          // Check micro-commit visible to current-phase
-          assertChangeVisible(session1);
-          session1.setAutoCommit(true);
-
-          // Check original phase unaffected
-          roResource.start(xid1, XAResource.TMRESUME);
-          assertChangeNotVisible(session2);
-          roResource.end(xid1, XAResource.TMSUSPEND);
-
-          // Check pre-commit phase unaffected
-          roResource.start(xid2, XAResource.TMRESUME);
-          assertChangeNotVisible(session2);
-          roResource.end(xid2, XAResource.TMSUSPEND);
-
-          // Check committed phase is now updated and write-lock available
-          rwResource.start(xid3, XAResource.TMNOFLAGS);
-          assertChangeVisible(session2);
-          
-          // Check internal transaction read-only
-          assertChangeVisible(session1);
-
-          // Cleanup transactions.
-          rwResource.end(xid3, XAResource.TMSUCCESS);
-          roResource.end(xid2, XAResource.TMSUCCESS);
-          roResource.end(xid1, XAResource.TMSUCCESS);
-          roResource.commit(xid1, true);
-          roResource.commit(xid2, true);
-          rwResource.commit(xid3, true);
-
-          // Cleanup database (check write-lock available again)
-          session1.removeModel(model3URI);
-        } finally {
-          session2.close();
-        }
-      } finally {
-        session1.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  private void assertChangeVisible(Session session) throws Exception {
-    Variable subjectVariable   = new Variable("subject");
-    Variable predicateVariable = new Variable("predicate");
-    Variable objectVariable    = new Variable("object");
-
-    List selectList = new ArrayList(3);
-    selectList.add(subjectVariable);
-    selectList.add(predicateVariable);
-    selectList.add(objectVariable);
-
-    // Evaluate the query
-    Answer answer = session.query(new Query(
-      selectList,                                       // SELECT
-      new ModelResource(model3URI),                      // FROM
-      new ConstraintImpl(subjectVariable,               // WHERE
-                     predicateVariable,
-                     objectVariable),
-      null,                                             // HAVING
-      Arrays.asList(new Order[] {                       // ORDER BY
-        new Order(subjectVariable, true),
-        new Order(predicateVariable, true),
-        new Order(objectVariable, true)
-      }),
-      null,                                             // LIMIT
-      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);
-    answer.close();
-  }
-
-  private void assertChangeNotVisible(Session session) throws Exception {
-    Variable subjectVariable   = new Variable("subject");
-    Variable predicateVariable = new Variable("predicate");
-    Variable objectVariable    = new Variable("object");
-
-    List selectList = new ArrayList(3);
-    selectList.add(subjectVariable);
-    selectList.add(predicateVariable);
-    selectList.add(objectVariable);
-
-    // Evaluate the query
-    Answer answer = session.query(new Query(
-      selectList,                                       // SELECT
-      new ModelResource(model3URI),                      // FROM
-      new ConstraintImpl(subjectVariable,               // WHERE
-                     predicateVariable,
-                     objectVariable),
-      null,                                             // HAVING
-      Arrays.asList(new Order[] {                       // ORDER BY
-        new Order(subjectVariable, true),
-        new Order(predicateVariable, true),
-        new Order(objectVariable, true)
-      }),
-      null,                                             // LIMIT
-      0,                                                // OFFSET
-      new UnconstrainedAnswer()                         // GIVEN
-    ));
-    answer.beforeFirst();
-    assertFalse(answer.next());
-    answer.close();
-  }
-
-  //
-  // Test two simultaneous, explicit transactions, in two threads. The second one should block
-  // until the first one sets auto-commit back to true.
-  //
-  public void testConcurrentExplicitTxn() throws URISyntaxException
-  {
-    logger.info("testConcurrentExplicitTxn");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session1 = database.newSession();
-      try {
-        XAResource resource1 = session1.getXAResource();
-        resource1.start(new TestXid(1), XAResource.TMNOFLAGS);
-        session1.createModel(model3URI, null);
-        resource1.end(new TestXid(1), XAResource.TMSUCCESS);
-        resource1.commit(new TestXid(1), true);
-
-        resource1.start(new TestXid(2), XAResource.TMNOFLAGS);
-        session1.setModel(model3URI, new ModelResource(fileURI));
-
-        final boolean[] tx2Started = new boolean[] { false };
-
-        Thread t2 = new Thread("tx2Test") {
-          public void run() {
-            try {
-              Session session2 = database.newSession();
-              XAResource resource2 = session2.getXAResource();
-              try {
-                resource2.start(new TestXid(3), XAResource.TMNOFLAGS);
-
-                synchronized (tx2Started) {
-                  tx2Started[0] = true;
-                  tx2Started.notify();
-                }
-
-                Variable subjectVariable   = new Variable("subject");
-                Variable predicateVariable = new Variable("predicate");
-                Variable objectVariable    = new Variable("object");
-
-                List selectList = new ArrayList(3);
-                selectList.add(subjectVariable);
-                selectList.add(predicateVariable);
-                selectList.add(objectVariable);
-
-                // Evaluate the query
-                Answer answer = session2.query(new Query(
-                  selectList,                                       // SELECT
-                  new ModelResource(model3URI),                      // FROM
-                  new ConstraintImpl(subjectVariable,               // WHERE
-                                 predicateVariable,
-                                 objectVariable),
-                  null,                                             // HAVING
-                  Arrays.asList(new Order[] {                       // ORDER BY
-                    new Order(subjectVariable, true),
-                    new Order(predicateVariable, true),
-                    new Order(objectVariable, true)
-                  }),
-                  null,                                             // LIMIT
-                  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);
-                answer.close();
-
-                resource2.end(new TestXid(3), XAResource.TMSUCCESS);
-                resource2.commit(new TestXid(3), true);
-              } finally {
-                session2.close();
-              }
-            } catch (Exception e) {
-              fail(e);
-            }
-          }
-        };
-        t2.start();
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-          }
-          assertFalse("second transaction should still be waiting for write lock", tx2Started[0]);
-        }
-
-        resource1.commit(new TestXid(2), true);
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-            assertTrue("second transaction should've started", tx2Started[0]);
-          }
-        }
-
-        try {
-          t2.join(2000L);
-        } catch (InterruptedException ie) {
-          logger.error("wait for tx2-terminated interrupted", ie);
-          fail(ie);
-        }
-        assertFalse("second transaction should've terminated", t2.isAlive());
-
-        resource1.start(new TestXid(4), XAResource.TMNOFLAGS);
-        session1.removeModel(model3URI);
-        resource1.end(new TestXid(4), XAResource.TMSUCCESS);
-        resource1.commit(new TestXid(4), true);
-
-      } finally {
-        session1.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  //*
-  // Test two simultaneous transactions, in two threads. The second one should block
-  // until the first one sets auto-commit back to true.
-  ///
-  public void testExternalInternalConcurrentTxn() throws URISyntaxException
-  {
-    logger.info("testConcurrentExplicitTxn");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session1 = database.newSession();
-      try {
-        XAResource resource1 = session1.getXAResource();
-        resource1.start(new TestXid(1), XAResource.TMNOFLAGS);
-        session1.createModel(model3URI, null);
-        resource1.end(new TestXid(1), XAResource.TMSUCCESS);
-        resource1.commit(new TestXid(1), true);
-
-        resource1.start(new TestXid(2), XAResource.TMNOFLAGS);
-        session1.setModel(model3URI, new ModelResource(fileURI));
-
-        final boolean[] tx2Started = new boolean[] { false };
-
-        Thread t2 = new Thread("tx2Test") {
-          public void run() {
-            try {
-              Session session2 = database.newSession();
-              try {
-                session2.setAutoCommit(false);
-
-                synchronized (tx2Started) {
-                  tx2Started[0] = true;
-                  tx2Started.notify();
-                }
-
-                Variable subjectVariable   = new Variable("subject");
-                Variable predicateVariable = new Variable("predicate");
-                Variable objectVariable    = new Variable("object");
-
-                List selectList = new ArrayList(3);
-                selectList.add(subjectVariable);
-                selectList.add(predicateVariable);
-                selectList.add(objectVariable);
-
-                // Evaluate the query
-                Answer answer = session2.query(new Query(
-                  selectList,                                       // SELECT
-                  new ModelResource(model3URI),                      // FROM
-                  new ConstraintImpl(subjectVariable,               // WHERE
-                                 predicateVariable,
-                                 objectVariable),
-                  null,                                             // HAVING
-                  Arrays.asList(new Order[] {                       // ORDER BY
-                    new Order(subjectVariable, true),
-                    new Order(predicateVariable, true),
-                    new Order(objectVariable, true)
-                  }),
-                  null,                                             // LIMIT
-                  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);
-                answer.close();
-
-                session2.setAutoCommit(true);
-              } finally {
-                session2.close();
-              }
-            } catch (Exception e) {
-              fail(e);
-            }
-          }
-        };
-        t2.start();
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-          }
-          assertFalse("second transaction should still be waiting for write lock", tx2Started[0]);
-        }
-
-        resource1.commit(new TestXid(2), true);
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-            assertTrue("second transaction should've started", tx2Started[0]);
-          }
-        }
-
-        try {
-          t2.join(2000L);
-        } catch (InterruptedException ie) {
-          logger.error("wait for tx2-terminated interrupted", ie);
-          fail(ie);
-        }
-        assertFalse("second transaction should've terminated", t2.isAlive());
-
-        resource1.start(new TestXid(4), XAResource.TMNOFLAGS);
-        session1.removeModel(model3URI);
-        resource1.end(new TestXid(4), XAResource.TMSUCCESS);
-        resource1.commit(new TestXid(4), true);
-
-      } finally {
-        session1.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  //*
-  // Test two simultaneous transactions, in two threads. The second one should block
-  // until the first one sets auto-commit back to true.
-  ///
-  public void testInternalExternalConcurrentTxn() throws URISyntaxException
-  {
-    logger.info("testConcurrentExplicitTxn");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session1 = database.newSession();
-      try {
-        session1.createModel(model3URI, null);
-
-        session1.setAutoCommit(false);
-        session1.setModel(model3URI, new ModelResource(fileURI));
-
-        final boolean[] tx2Started = new boolean[] { false };
-
-        Thread t2 = new Thread("tx2Test") {
-          public void run() {
-            try {
-              Session session2 = database.newSession();
-              try {
-                XAResource resource = session2.getXAResource();
-                resource.start(new TestXid(1), XAResource.TMNOFLAGS);
-
-                synchronized (tx2Started) {
-                  tx2Started[0] = true;
-                  tx2Started.notify();
-                }
-
-                Variable subjectVariable   = new Variable("subject");
-                Variable predicateVariable = new Variable("predicate");
-                Variable objectVariable    = new Variable("object");
-
-                List selectList = new ArrayList(3);
-                selectList.add(subjectVariable);
-                selectList.add(predicateVariable);
-                selectList.add(objectVariable);
-
-                // Evaluate the query
-                Answer answer = session2.query(new Query(
-                  selectList,                                       // SELECT
-                  new ModelResource(model3URI),                      // FROM
-                  new ConstraintImpl(subjectVariable,               // WHERE
-                                 predicateVariable,
-                                 objectVariable),
-                  null,                                             // HAVING
-                  Arrays.asList(new Order[] {                       // ORDER BY
-                    new Order(subjectVariable, true),
-                    new Order(predicateVariable, true),
-                    new Order(objectVariable, true)
-                  }),
-                  null,                                             // LIMIT
-                  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);
-                answer.close();
-
-                resource.end(new TestXid(1), XAResource.TMSUCCESS);
-                resource.rollback(new TestXid(1));
-              } finally {
-                session2.close();
-              }
-            } catch (Exception e) {
-              fail(e);
-            }
-          }
-        };
-        t2.start();
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-          }
-          assertFalse("second transaction should still be waiting for write lock", tx2Started[0]);
-        }
-
-        session1.commit();
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-          }
-          assertFalse("second transaction should still be waiting for write lock", tx2Started[0]);
-        }
-
-        session1.setAutoCommit(true);
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-            assertTrue("second transaction should've started", tx2Started[0]);
-          }
-        }
-
-        try {
-          t2.join(2000L);
-        } catch (InterruptedException ie) {
-          logger.error("wait for tx2-terminated interrupted", ie);
-          fail(ie);
-        }
-        assertFalse("second transaction should've terminated", t2.isAlive());
-
-        session1.removeModel(model3URI);
-      } finally {
-        session1.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  //*
-  // Test two simultaneous transactions, in two threads. The second one should block
-  // until the first one sets auto-commit back to true.
-  ///
-  public void testExternalInternalConcurrentTxnRollback() throws URISyntaxException
-  {
-    logger.info("testConcurrentExplicitTxn");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session1 = database.newSession();
-      try {
-        XAResource resource1 = session1.getXAResource();
-        resource1.start(new TestXid(1), XAResource.TMNOFLAGS);
-        session1.createModel(model3URI, null);
-        resource1.end(new TestXid(1), XAResource.TMSUCCESS);
-        resource1.commit(new TestXid(1), true);
-
-        resource1.start(new TestXid(2), XAResource.TMNOFLAGS);
-        session1.setModel(model3URI, new ModelResource(fileURI));
-
-        final boolean[] tx2Started = new boolean[] { false };
-
-        Thread t2 = new Thread("tx2Test") {
-          public void run() {
-            try {
-              Session session2 = database.newSession();
-              try {
-                session2.setAutoCommit(false);
-
-                synchronized (tx2Started) {
-                  tx2Started[0] = true;
-                  tx2Started.notify();
-                }
-
-                Variable subjectVariable   = new Variable("subject");
-                Variable predicateVariable = new Variable("predicate");
-                Variable objectVariable    = new Variable("object");
-
-                List selectList = new ArrayList(3);
-                selectList.add(subjectVariable);
-                selectList.add(predicateVariable);
-                selectList.add(objectVariable);
-
-                // Evaluate the query
-                Answer answer = session2.query(new Query(
-                  selectList,                                       // SELECT
-                  new ModelResource(model3URI),                      // FROM
-                  new ConstraintImpl(subjectVariable,               // WHERE
-                                 predicateVariable,
-                                 objectVariable),
-                  null,                                             // HAVING
-                  Arrays.asList(new Order[] {                       // ORDER BY
-                    new Order(subjectVariable, true),
-                    new Order(predicateVariable, true),
-                    new Order(objectVariable, true)
-                  }),
-                  null,                                             // LIMIT
-                  0,                                                // OFFSET
-                  new UnconstrainedAnswer()                         // GIVEN
-                ));
-
-                answer.beforeFirst();
-                assertFalse(answer.next());
-                answer.close();
-
-                session2.setAutoCommit(true);
-              } finally {
-                session2.close();
-              }
-            } catch (Exception e) {
-              fail(e);
-            }
-          }
-        };
-        t2.start();
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-          }
-          assertFalse("second transaction should still be waiting for write lock", tx2Started[0]);
-        }
-
-        resource1.rollback(new TestXid(2));
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-            assertTrue("second transaction should've started", tx2Started[0]);
-          }
-        }
-
-        try {
-          t2.join(2000L);
-        } catch (InterruptedException ie) {
-          logger.error("wait for tx2-terminated interrupted", ie);
-          fail(ie);
-        }
-        assertFalse("second transaction should've terminated", t2.isAlive());
-
-        resource1.start(new TestXid(4), XAResource.TMNOFLAGS);
-        session1.removeModel(model3URI);
-        resource1.end(new TestXid(4), XAResource.TMSUCCESS);
-        resource1.commit(new TestXid(4), true);
-
-      } finally {
-        session1.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  //*
-  // Test two simultaneous transactions, in two threads. The second one should block
-  // until the first one sets auto-commit back to true.
-  ///
-  public void testInternalExternalConcurrentTxnRollback() throws URISyntaxException
-  {
-    logger.info("testConcurrentExplicitTxn");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session1 = database.newSession();
-      try {
-        session1.createModel(model3URI, null);
-
-        session1.setAutoCommit(false);
-        session1.setModel(model3URI, new ModelResource(fileURI));
-
-        final boolean[] tx2Started = new boolean[] { false };
-
-        Thread t2 = new Thread("tx2Test") {
-          public void run() {
-            try {
-              Session session2 = database.newSession();
-              try {
-                XAResource resource = session2.getXAResource();
-                resource.start(new TestXid(1), XAResource.TMNOFLAGS);
-
-                synchronized (tx2Started) {
-                  tx2Started[0] = true;
-                  tx2Started.notify();
-                }
-
-                Variable subjectVariable   = new Variable("subject");
-                Variable predicateVariable = new Variable("predicate");
-                Variable objectVariable    = new Variable("object");
-
-                List selectList = new ArrayList(3);
-                selectList.add(subjectVariable);
-                selectList.add(predicateVariable);
-                selectList.add(objectVariable);
-
-                // Evaluate the query
-                Answer answer = session2.query(new Query(
-                  selectList,                                       // SELECT
-                  new ModelResource(model3URI),                      // FROM
-                  new ConstraintImpl(subjectVariable,               // WHERE
-                                 predicateVariable,
-                                 objectVariable),
-                  null,                                             // HAVING
-                  Arrays.asList(new Order[] {                       // ORDER BY
-                    new Order(subjectVariable, true),
-                    new Order(predicateVariable, true),
-                    new Order(objectVariable, true)
-                  }),
-                  null,                                             // LIMIT
-                  0,                                                // OFFSET
-                  new UnconstrainedAnswer()                         // GIVEN
-                ));
-
-                answer.beforeFirst();
-                assertFalse(answer.next());
-                answer.close();
-
-                resource.end(new TestXid(1), XAResource.TMFAIL);
-                resource.rollback(new TestXid(1));
-              } finally {
-                session2.close();
-              }
-            } catch (Exception e) {
-              fail(e);
-            }
-          }
-        };
-        t2.start();
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-          }
-          assertFalse("second transaction should still be waiting for write lock", tx2Started[0]);
-        }
-
-        session1.rollback();
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-          }
-          assertFalse("second transaction should still be waiting for write lock", tx2Started[0]);
-        }
-
-        session1.setAutoCommit(true);
-
-        synchronized (tx2Started) {
-          if (!tx2Started[0]) {
-            try {
-              tx2Started.wait(2000L);
-            } catch (InterruptedException ie) {
-              logger.error("wait for tx2-started interrupted", ie);
-              fail(ie);
-            }
-            assertTrue("second transaction should've started", tx2Started[0]);
-          }
-        }
-
-        try {
-          t2.join(2000L);
-        } catch (InterruptedException ie) {
-          logger.error("wait for tx2-terminated interrupted", ie);
-          fail(ie);
-        }
-        assertFalse("second transaction should've terminated", t2.isAlive());
-
-        session1.removeModel(model3URI);
-      } finally {
-        session1.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-
-  public void testExplicitRollbackIsolationQuery() throws URISyntaxException {
-    logger.info("testExplicitRollbackIsolationQuery");
-    URI fileURI  = new File("data/xatest-model1.rdf").toURI();
-
-    try {
-      Session session = database.newSession();
-      XAResource roResource = session.getReadOnlyXAResource();
-      XAResource rwResource = session.getXAResource();
-      try {
-        rwResource.start(new TestXid(1), XAResource.TMNOFLAGS);
-        session.createModel(model3URI, null);
-        rwResource.end(new TestXid(1), XAResource.TMSUCCESS);
-        rwResource.commit(new TestXid(1), true);
-
-        rwResource.start(new TestXid(2), XAResource.TMNOFLAGS);
-        session.setModel(model3URI, new ModelResource(fileURI));
-        rwResource.end(new TestXid(2), XAResource.TMSUSPEND);
-
-        roResource.start(new TestXid(3), XAResource.TMNOFLAGS);
-
-        Variable subjectVariable   = new Variable("subject");
-        Variable predicateVariable = new Variable("predicate");
-        Variable objectVariable    = new Variable("object");
-
-        List selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        Answer answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(model3URI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-        answer.beforeFirst();
-        assertFalse(answer.next());
-        answer.close();
-
-        roResource.end(new TestXid(3), XAResource.TMSUCCESS);
-        roResource.commit(new TestXid(3), true);
-
-        rwResource.end(new TestXid(2), XAResource.TMFAIL);
-        rwResource.rollback(new TestXid(2));
-
-        roResource.start(new TestXid(4), XAResource.TMNOFLAGS);
-        selectList = new ArrayList(3);
-        selectList.add(subjectVariable);
-        selectList.add(predicateVariable);
-        selectList.add(objectVariable);
-
-        // Evaluate the query
-        answer = session.query(new Query(
-          selectList,                                       // SELECT
-          new ModelResource(model3URI),                      // FROM
-          new ConstraintImpl(subjectVariable,               // WHERE
-                         predicateVariable,
-                         objectVariable),
-          null,                                             // HAVING
-          Arrays.asList(new Order[] {                       // ORDER BY
-            new Order(subjectVariable, true),
-            new Order(predicateVariable, true),
-            new Order(objectVariable, true)
-          }),
-          null,                                             // LIMIT
-          0,                                                // OFFSET
-          new UnconstrainedAnswer()                         // GIVEN
-        ));
-
-        answer.beforeFirst();
-        assertFalse(answer.next());
-        answer.close();
-
-        roResource.end(new TestXid(4), XAResource.TMFAIL);
-        roResource.rollback(new TestXid(4));
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-*/
-
-  public void testTrivalImplicit() throws URISyntaxException
-  {
-    System.out.println("Doing Trival Implicit");
-    try {
-      Session session = sessionFactory.newSession();
-
-      try {
-        session.removeModel(modelURI);
-      } finally {
-        session.close();
-      }
-    } catch (Exception e) {
-      fail(e);
-    }
-  }
-
-  //
-  // Internal methods
-  //
-
-  private void compareResults(String[][] expected, Answer answer) throws Exception {
-    try {
-      answer.beforeFirst();
-      for (int i = 0; i < expected.length; i++) {
-        assertTrue("Answer short at row " + i, answer.next());
-        assertEquals(expected[i].length, answer.getNumberOfVariables());
-        for (int j = 0; j < expected[i].length; j++) {
-          URIReferenceImpl uri = new URIReferenceImpl(new URI(expected[i][j]));
-          assertEquals(uri, answer.getObject(j));
-        }
-      }
-      assertFalse(answer.next());
-    } catch (Exception e) {
-      System.out.println("Failed test - " + answer);
-      answer.close();
-      throw e;
-    }
-  }
-
-  private void compareResults(Answer answer1, Answer answer2) throws Exception {
-    answer1.beforeFirst();
-    answer2.beforeFirst();
-    assertEquals(answer1.getNumberOfVariables(), answer2.getNumberOfVariables());
-    while (answer1.next()) {
-      assertTrue(answer2.next());
-      for (int i = 0; i < answer1.getNumberOfVariables(); i++) {
-        assertEquals(answer1.getObject(i), answer2.getObject(i));
-      }
-    }
-    assertFalse(answer2.next());
-  }
-
-  private static class AssertionFailedException extends Exception {
-    public AssertionFailedException(String msg) {
-      super(msg);
-    }
-  }
-
-  private void assertTrue(boolean result) throws Exception { assertTrue("", result); }
-  private void assertTrue(String string, boolean result) throws Exception {
-    if (!result) {
-      throw new AssertionFailedException("AssertTrue Failed: " + string);
-    }
-  }
-
-  private void assertFalse(boolean result) throws Exception { assertFalse("", result); }
-  private void assertFalse(String string, boolean result) throws Exception {
-    if (result) {
-      throw new AssertionFailedException("AssertFalse Failed: " + string);
-    }
-  }
-
-  private void assertEquals(Object lhs, Object rhs) throws Exception {
-    if (!lhs.equals(rhs)) {
-      throw new AssertionFailedException("AssertEquals Failed: " + lhs + " , " + rhs);
-    }
-  }
-
-  /**
-   * Fail with an unexpected exception
-   */
-  private void fail(Throwable throwable)
-  {
-    StringWriter stringWriter = new StringWriter();
-    throwable.printStackTrace(new PrintWriter(stringWriter));
-    System.out.println(stringWriter.toString());
-  }
-
-  private static class DummyXAResource implements XAResource {
-    public void end(Xid xid, int flags) throws XAException {}
-    public void forget(Xid xid) throws XAException {}
-    public int getTransactionTimeout() throws XAException { return 0; }
-    public int prepare(Xid xid) throws XAException { return 0; }
-    public Xid[] recover(int flag) throws XAException { return new Xid[] {}; }
-    public void rollback(Xid xid) throws XAException {}
-    public boolean setTransactionTimeout(int seconds) throws XAException { return false; }
-    public void start(Xid xid, int flags) throws XAException {}
-    public void commit(Xid xid, boolean twophase) throws XAException {}
-    public boolean isSameRM(XAResource xa) { return xa == this; }
-  }
-}




More information about the Mulgara-svn mailing list