@Before
  public void setUp() throws Exception {
    sail = createSail();

    con = sail.getConnection();

    // Create values
    vf = sail.getValueFactory();

    painter = vf.createURI(EXAMPLE_NS, PAINTER);
    paints = vf.createURI(EXAMPLE_NS, PAINTS);
    painting = vf.createURI(EXAMPLE_NS, PAINTING);
    picasso = vf.createURI(EXAMPLE_NS, PICASSO);
    guernica = vf.createURI(EXAMPLE_NS, GUERNICA);
    rembrandt = vf.createURI(EXAMPLE_NS, REMBRANDT);
    nightwatch = vf.createURI(EXAMPLE_NS, NIGHTWATCH);

    context1 = vf.createURI(EXAMPLE_NS, CONTEXT_1);
    context2 = vf.createURI(EXAMPLE_NS, CONTEXT_2);
  }
 @After
 public void tearDown() throws Exception {
   try {
     if (con.isOpen()) {
       con.rollback();
       con.close();
     }
   } finally {
     sail.shutDown();
     sail = null;
   }
 }
  @Test
  public void testDualConnections() throws Exception {
    SailConnection con2 = sail.getConnection();
    try {
      assertEquals(0, countAllElements());
      con.begin();
      con.addStatement(painter, RDF.TYPE, RDFS.CLASS);
      con.addStatement(painting, RDF.TYPE, RDFS.CLASS);
      con.addStatement(picasso, RDF.TYPE, painter, context1);
      con.addStatement(guernica, RDF.TYPE, painting, context1);
      con.commit();
      assertEquals(4, countAllElements());
      con2.begin();
      con2.addStatement(RDF.NIL, RDF.TYPE, RDF.LIST);
      String query = "SELECT S, P, O FROM {S} P {O}";
      ParsedTupleQuery tupleQuery =
          QueryParserUtil.parseTupleQuery(QueryLanguage.SERQL, query, null);
      assertEquals(
          5,
          countElements(
              con2.evaluate(
                  tupleQuery.getTupleExpr(), null, EmptyBindingSet.getInstance(), false)));
      Runnable clearer =
          new Runnable() {

            public void run() {
              try {
                con.begin();
                con.clear();
                con.commit();
              } catch (SailException e) {
                throw new RuntimeException(e);
              }
            }
          };
      Thread thread = new Thread(clearer);
      thread.start();
      Thread.yield();
      Thread.yield();
      con2.commit();
      thread.join();
    } finally {
      con2.close();
    }
  }