You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2017/09/28 11:08:26 UTC

[10/50] [abbrv] jena git commit: Expel datasets based on container/storage location.

Expel datasets based on container/storage location.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/d8fd29aa
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/d8fd29aa
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/d8fd29aa

Branch: refs/heads/jena-tdb2
Commit: d8fd29aa36e5d4e5da71c7f06f149ea2aa349e7b
Parents: 10f2bb1
Author: Andy Seaborne <an...@seaborne.org>
Authored: Sun Sep 3 17:14:56 2017 +0100
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Sun Sep 3 17:14:56 2017 +0100

----------------------------------------------------------------------
 .../java/org/seaborne/tdb2/DatabaseMgr.java     |   4 +-
 .../tdb2/store/DatasetGraphSwitchable.java      |  12 +-
 .../seaborne/tdb2/sys/DatabaseConnection.java   |  12 +-
 .../java/org/seaborne/tdb2/sys/DatabaseOps.java |   4 +-
 .../org/seaborne/tdb2/sys/StoreConnection.java  |  10 +-
 .../java/org/seaborne/tdb2/sys/SystemTDB.java   |  33 +++---
 .../java/org/seaborne/tdb2/sys/TDBInternal.java |  20 +++-
 .../tdb2/graph/TestDatasetGraphAccessorTDB.java |  15 ++-
 .../tdb2/graph/TestDatasetGraphTDB.java         |  18 ++-
 .../tdb2/graph/TestGraphOverDatasetTDB.java     |  20 +++-
 .../org/seaborne/tdb2/graph/TestGraphsTDB1.java |  15 ++-
 .../test/java/org/seaborne/tdb2/junit/TL.java   |  39 ++++---
 .../tdb2/setup/TestStoreParamsCreate.java       |  26 +++--
 .../org/seaborne/tdb2/solver/TestSolverTDB.java |   4 +-
 .../org/seaborne/tdb2/solver/TestStats.java     |  69 +++++------
 .../org/seaborne/tdb2/store/TestDatasetTDB.java |   6 +-
 .../tdb2/store/TestDatasetTDBPersist.java       | 114 +++++++++----------
 .../tdb2/store/TestDynamicDatasetTDB.java       |   7 +-
 .../seaborne/tdb2/store/TestGraphNamedTDB.java  |   8 +-
 .../org/seaborne/tdb2/store/TestGraphTDB.java   |   6 +-
 .../seaborne/tdb2/store/TestTransactions.java   |   2 +-
 .../org/seaborne/tdb2/sys/TestDatabaseOps.java  |   2 -
 22 files changed, 273 insertions(+), 173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/main/java/org/seaborne/tdb2/DatabaseMgr.java
----------------------------------------------------------------------
diff --git a/tdb2/src/main/java/org/seaborne/tdb2/DatabaseMgr.java b/tdb2/src/main/java/org/seaborne/tdb2/DatabaseMgr.java
index b4dfd23..098a646 100644
--- a/tdb2/src/main/java/org/seaborne/tdb2/DatabaseMgr.java
+++ b/tdb2/src/main/java/org/seaborne/tdb2/DatabaseMgr.java
@@ -90,9 +90,9 @@ public class DatabaseMgr {
         return TDBInternal.isBackedByTDB(datasetGraph);
     }
 
-    /** Return the location of a DatasetGraph if it is backed by TDB, else null */
+    /** Return the location of a DatasetGraph if it is backed by TDB, else null. */
     public static Location location(DatasetGraph datasetGraph) {
-        DatasetGraphTDB dsg = requireDirect(datasetGraph);
+        DatasetGraphSwitchable dsg = requireSwitchable(datasetGraph);
         if ( dsg == null )
             return null ;
         return dsg.getLocation();

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/main/java/org/seaborne/tdb2/store/DatasetGraphSwitchable.java
----------------------------------------------------------------------
diff --git a/tdb2/src/main/java/org/seaborne/tdb2/store/DatasetGraphSwitchable.java b/tdb2/src/main/java/org/seaborne/tdb2/store/DatasetGraphSwitchable.java
index 115b304..9469a1d 100644
--- a/tdb2/src/main/java/org/seaborne/tdb2/store/DatasetGraphSwitchable.java
+++ b/tdb2/src/main/java/org/seaborne/tdb2/store/DatasetGraphSwitchable.java
@@ -27,7 +27,9 @@ import org.apache.jena.graph.Graph;
 import org.apache.jena.graph.Node;
 import org.apache.jena.shared.PrefixMapping;
 import org.apache.jena.shared.impl.PrefixMappingImpl;
-import org.apache.jena.sparql.core.*;
+import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.sparql.core.DatasetPrefixStorage ;
+import org.seaborne.dboe.base.file.Location ;
 
 final
 public class DatasetGraphSwitchable extends DatasetGraphWrapperTxn /* Until ARQ catches up with promote */ 
@@ -43,12 +45,14 @@ public class DatasetGraphSwitchable extends DatasetGraphWrapperTxn /* Until ARQ
     private final AtomicReference<DatasetGraph> dsgx = new AtomicReference<>();
     // Null for in-memory datasets.
     private final Path basePath;
+    private final Location location ;
     
-    public DatasetGraphSwitchable(Path base, DatasetGraph dsg) {
+    public DatasetGraphSwitchable(Path base, Location location, DatasetGraph dsg) {
         // Don't use the slot in datasetGraphWrapper - use the AtomicReference
         super(null) ;
         dsgx.set(dsg);
-        this.basePath = base;  
+        this.basePath = base;
+        this.location = location; 
     }
 
     /** Is this {@code DatasetGraphSwitchable} just a holder for a {@code DatasetGraph}?
@@ -58,6 +62,8 @@ public class DatasetGraphSwitchable extends DatasetGraphWrapperTxn /* Until ARQ
     
     public Path getContainerPath() { return basePath; }
     
+    public Location getLocation() { return location; }
+
     /** The dataset to use for redirection - can be overridden.
      *  It is also guaranteed that this is called only once per
      *  delegated call.  Changes to the wrapped object can be

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseConnection.java
----------------------------------------------------------------------
diff --git a/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseConnection.java b/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseConnection.java
index 0e22f8f..e9e6c27 100644
--- a/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseConnection.java
+++ b/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseConnection.java
@@ -114,16 +114,13 @@ public class DatabaseConnection {
      * Does not expel from {@link StoreConnection}.
      */
     public static synchronized void internalExpel(Location location, boolean force) {
+        // ** Check it is a container location 
         DatabaseConnection dbConn = cache.get(location) ;
-        if (dbConn == null) return ;
-        cache.remove(location) ;
+        if ( dbConn == null )
+            return ;
         dbConn.isValid = false;
         //dbConn.datasetGraph = null;
         //dbConn.datasetGraphSwitchable = null;
-        
-        //    if (!force && sConn.transactionManager.activeTransactions()) 
-        //        throw new TDBTransactionException("Can't expel: Active transactions for location: " + location) ;
-
         cache.remove(location) ;
         // Release the lock after the cache is emptied.
         if (SystemTDB.DiskLocationMultiJvmUsagePrevention && ! location.isMem() ) {
@@ -144,10 +141,11 @@ public class DatabaseConnection {
         Set<Location> x = new HashSet<>(cache.keySet()) ;
         for (Location loc : x)
             internalExpel(loc, true) ;
+        if ( ! cache.isEmpty() )
+            System.err.println("DatabaseConnection: Cache not empty!");
         cache.clear() ;
     }
     
-    
     // One of the other.
     private final DatasetGraphSwitchable   datasetGraphSwitchable;
     private final DatasetGraph             datasetGraph;

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseOps.java
----------------------------------------------------------------------
diff --git a/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseOps.java b/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseOps.java
index b985798..bb34ed3 100644
--- a/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseOps.java
+++ b/tdb2/src/main/java/org/seaborne/tdb2/sys/DatabaseOps.java
@@ -81,7 +81,7 @@ public class DatabaseOps {
     private static DatasetGraphSwitchable createSwitchable(Location location) {
         if ( location.isMem() ) {
             DatasetGraph dsg = StoreConnection.connectCreate(location).getDatasetGraph();
-            return new DatasetGraphSwitchable(null, dsg);
+            return new DatasetGraphSwitchable(null, location, dsg);
         }
         // Exists?
        if ( ! location.exists() )
@@ -97,7 +97,7 @@ public class DatabaseOps {
        }
        Location loc2 = IOX.asLocation(db);
        DatasetGraphTDB dsg = StoreConnection.connectCreate(loc2).getDatasetGraphTDB();
-       DatasetGraphSwitchable appDSG = new DatasetGraphSwitchable(path, dsg);
+       DatasetGraphSwitchable appDSG = new DatasetGraphSwitchable(path, location, dsg);
        return appDSG;
     }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/main/java/org/seaborne/tdb2/sys/StoreConnection.java
----------------------------------------------------------------------
diff --git a/tdb2/src/main/java/org/seaborne/tdb2/sys/StoreConnection.java b/tdb2/src/main/java/org/seaborne/tdb2/sys/StoreConnection.java
index 54d863b..21d5377 100644
--- a/tdb2/src/main/java/org/seaborne/tdb2/sys/StoreConnection.java
+++ b/tdb2/src/main/java/org/seaborne/tdb2/sys/StoreConnection.java
@@ -32,6 +32,8 @@ import org.seaborne.dboe.base.file.ChannelManager ;
 import org.seaborne.dboe.base.file.Location ;
 import org.seaborne.dboe.base.file.ProcessFileLock;
 import org.seaborne.dboe.sys.Names;
+import org.seaborne.dboe.transaction.txn.TransactionCoordinator ;
+import org.seaborne.dboe.transaction.txn.TransactionException ;
 import org.seaborne.tdb2.setup.StoreParams ;
 import org.seaborne.tdb2.setup.TDBBuilder ;
 import org.seaborne.tdb2.store.DatasetGraphTDB ;
@@ -124,14 +126,16 @@ public class StoreConnection
         StoreConnection sConn = cache.get(location) ;
         if (sConn == null) return ;
 
-        //    if (!force && sConn.transactionManager.activeTransactions()) 
-        //        throw new TDBTransactionException("Can't expel: Active transactions for location: " + location) ;
+        TransactionCoordinator txnCoord = sConn.getDatasetGraphTDB().getTxnSystem().getTxnMgr();
+        if (!force && txnCoord.countActive() > 0 ) 
+            throw new TransactionException("Can't expel: Active transactions for location: " + location) ;
 
         // No transactions at this point 
         // (or we don't care and are clearing up forcefully.)
         
-        sConn.getDatasetGraphTDB().getTxnSystem().getTxnMgr().shutdown();
         sConn.getDatasetGraphTDB().shutdown() ;
+        // Done by DatasetGraphTDB()
+        //txnCoord.shutdown();
         
         sConn.isValid = false ;
         cache.remove(location) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/main/java/org/seaborne/tdb2/sys/SystemTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/main/java/org/seaborne/tdb2/sys/SystemTDB.java b/tdb2/src/main/java/org/seaborne/tdb2/sys/SystemTDB.java
index 6531310..51ef995 100644
--- a/tdb2/src/main/java/org/seaborne/tdb2/sys/SystemTDB.java
+++ b/tdb2/src/main/java/org/seaborne/tdb2/sys/SystemTDB.java
@@ -25,9 +25,6 @@ import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.lib.PropertyUtils ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.query.ARQ ;
-import org.apache.jena.query.Dataset ;
-import org.apache.jena.query.ReadWrite ;
-import org.apache.jena.sparql.core.DatasetGraph ;
 import org.apache.jena.sparql.engine.optimizer.reorder.ReorderLib ;
 import org.apache.jena.sparql.engine.optimizer.reorder.ReorderTransformation ;
 import org.apache.jena.sparql.util.Symbol ;
@@ -38,7 +35,6 @@ import org.seaborne.dboe.base.record.RecordFactory ;
 import org.seaborne.dboe.sys.Sys;
 import org.seaborne.tdb2.TDB2 ;
 import org.seaborne.tdb2.TDBException ;
-import org.seaborne.tdb2.store.DatasetGraphTxn ;
 import org.seaborne.tdb2.store.NodeId ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
@@ -402,20 +398,19 @@ public class SystemTDB
         throw new TDBException("Unrecognized file mode (not one of 'default', 'direct' or 'mapped': "+x) ;
     }
 
-    public static Dataset setNonTransactional(Dataset dataset) {
-        if ( dataset.isInTransaction() )
-            return dataset ;    // And hope it's a write transaction.
-        dataset.begin(ReadWrite.WRITE);
-        //Or wrap DatasetGraphTDB?
-        return dataset ;
-    }
-    
-    public static DatasetGraph setNonTransactional(DatasetGraph dataset) {
-        DatasetGraphTxn dsgx = (DatasetGraphTxn)dataset ;
-        if ( dsgx.isInTransaction() )
-            return dataset ;
-        dsgx.begin(ReadWrite.WRITE);
-        return dataset ;
-    }
+//    public static Dataset setNonTransactional(Dataset dataset) {
+//        if ( dataset.isInTransaction() )
+//            return dataset ;    // And hope it's a write transaction.
+//        dataset.begin(ReadWrite.WRITE);
+//        //Or wrap DatasetGraphTDB?
+//        return dataset ;
+//    }
+//    
+//    public static DatasetGraph setNonTransactional(DatasetGraph dataset) {
+//        if ( dataset.isInTransaction() )
+//            return dataset ;
+//        dataset.begin(ReadWrite.WRITE);
+//        return dataset ;
+//    }
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/main/java/org/seaborne/tdb2/sys/TDBInternal.java
----------------------------------------------------------------------
diff --git a/tdb2/src/main/java/org/seaborne/tdb2/sys/TDBInternal.java b/tdb2/src/main/java/org/seaborne/tdb2/sys/TDBInternal.java
index 25c1688..3bd7427 100644
--- a/tdb2/src/main/java/org/seaborne/tdb2/sys/TDBInternal.java
+++ b/tdb2/src/main/java/org/seaborne/tdb2/sys/TDBInternal.java
@@ -129,12 +129,22 @@ public class TDBInternal {
         return null;
     }
 
-    /** Stop managing a location. Use with great care (testing only). */
-    public static synchronized void expel(Location location, boolean force) {
-        DatabaseConnection.internalExpel(location, force);
-        StoreConnection.internalExpel(location, force);
+    /** Stop managing a DatasetGraph. Use with great care (testing only). */
+    public static synchronized void expel(DatasetGraph dsg) {
+        Location locContainer = null;
+        Location locStorage = null;
+        
+        if ( dsg instanceof DatasetGraphSwitchable ) {
+            locContainer = ((DatasetGraphSwitchable)dsg).getLocation();
+            dsg = ((DatasetGraphSwitchable)dsg).getWrapped();
+        }
+        if ( dsg instanceof DatasetGraphTDB )
+            locStorage = ((DatasetGraphTDB)dsg).getLocation();
+        
+        DatabaseConnection.internalExpel(locContainer, false);
+        StoreConnection.internalExpel(locStorage, false);
     }
-    
+
     /** 
      * Reset the whole TDB system.      
      * Use with great care.

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphAccessorTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphAccessorTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphAccessorTDB.java
index 327ca47..8184154 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphAccessorTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphAccessorTDB.java
@@ -18,17 +18,30 @@
 package org.seaborne.tdb2.graph;
 
 import org.apache.jena.query.DatasetAccessorFactory ;
+import org.apache.jena.query.ReadWrite ;
 import org.apache.jena.sparql.core.DatasetGraph ;
 import org.apache.jena.web.AbstractTestDatasetGraphAccessor ;
 import org.apache.jena.web.DatasetGraphAccessor ;
+import org.junit.After ;
+import org.junit.Before ;
 import org.seaborne.tdb2.junit.TL ;
 
 public class TestDatasetGraphAccessorTDB extends AbstractTestDatasetGraphAccessor
 {
+    DatasetGraph dsg = TL.createTestDatasetGraphMem() ;
+    @Before public void before() {
+        dsg.begin(ReadWrite.WRITE);
+    }
+    
+    @After public void after() {
+        dsg.abort();
+        dsg.end();
+        TL.expel(dsg);
+    }
+
     @Override
     protected DatasetGraphAccessor getDatasetUpdater()
     {
-        DatasetGraph dsg = TL.createTestDatasetGraphMem() ;
         return DatasetAccessorFactory.make(dsg) ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphTDB.java
index 12092fb..0cd2bca 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestDatasetGraphTDB.java
@@ -17,16 +17,32 @@
 
 package org.seaborne.tdb2.graph;
 
+import org.apache.jena.query.ReadWrite ;
 import org.apache.jena.sparql.core.AbstractDatasetGraphTests ;
 import org.apache.jena.sparql.core.DatasetGraph ;
+import org.junit.After ;
+import org.junit.Before ;
 import org.junit.Test ;
 import org.seaborne.tdb2.junit.TL ;
 
 // Quad tests
 public class TestDatasetGraphTDB extends AbstractDatasetGraphTests
 {
+    DatasetGraph dsg = TL.createTestDatasetGraphMem() ;
+    @Before public void before() {
+        dsg.begin(ReadWrite.WRITE);
+    }
+    
+    @After public void after() {
+        dsg.abort();
+        dsg.end();
+        TL.expel(dsg);
+    }
+    
     @Override
-    protected DatasetGraph emptyDataset() { return TL.createTestDatasetGraphMem() ; }
+    protected DatasetGraph emptyDataset() {
+        return dsg ;
+    }
 
     @Override
     // Empty graph tests: N/A

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphOverDatasetTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphOverDatasetTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphOverDatasetTDB.java
index 20a0577..de01a86 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphOverDatasetTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphOverDatasetTDB.java
@@ -19,15 +19,33 @@ package org.seaborne.tdb2.graph;
 
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
+import org.apache.jena.query.ReadWrite ;
 import org.apache.jena.sparql.core.AbstractTestGraphOverDataset ;
 import org.apache.jena.sparql.core.DatasetGraph ;
+import org.junit.After ;
 import org.seaborne.tdb2.junit.TL ;
 
 /** This is the view-graph test suite run over a TDB DatasetGraph to check compatibility */
 public class TestGraphOverDatasetTDB extends AbstractTestGraphOverDataset
 {
+    DatasetGraph dsg = null;
+    @After public void after2() {
+        if ( dsg == null )
+            return;
+        dsg.abort();
+        dsg.end();
+        TL.expel(dsg);
+    }
+    
     @Override
-    protected DatasetGraph createBaseDSG() { return TL.createTestDatasetGraphMem() ; }
+    protected DatasetGraph createBaseDSG() {
+        // Called in initialization.
+        if ( dsg == null ) {
+            dsg = TL.createTestDatasetGraphMem() ;
+            dsg.begin(ReadWrite.WRITE);
+        }
+        return dsg ;
+    }
     
     @Override
     protected Graph makeNamedGraph(DatasetGraph dsg, Node gn)

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphsTDB1.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphsTDB1.java b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphsTDB1.java
index e6638a3..3f703e5 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphsTDB1.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/graph/TestGraphsTDB1.java
@@ -18,12 +18,25 @@
 package org.seaborne.tdb2.graph;
 
 import org.apache.jena.query.Dataset ;
+import org.apache.jena.query.ReadWrite ;
+import org.junit.After ;
+import org.junit.Before ;
 import org.seaborne.tdb2.junit.TL ;
 
 public class TestGraphsTDB1 extends AbstractTestGraphsTDB
 {
+    Dataset ds = TL.createTestDatasetMem();
+    @Before public void before() {
+        ds.begin(ReadWrite.WRITE);
+    }
+    
+    @After public void after() {
+        ds.abort();
+        ds.end();
+        TL.expel(ds);
+    }
     @Override
     protected Dataset createDataset() {
-        return TL.createTestDatasetMem() ;
+        return ds ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/junit/TL.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/junit/TL.java b/tdb2/src/test/java/org/seaborne/tdb2/junit/TL.java
index 7385354..4ff4ae6 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/junit/TL.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/junit/TL.java
@@ -21,28 +21,37 @@ import java.util.function.Consumer ;
 
 import org.apache.jena.query.Dataset ;
 import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.system.Txn ;
 import org.seaborne.dboe.base.file.Location ;
 import org.seaborne.tdb2.ConfigTest ;
 import org.seaborne.tdb2.DatabaseMgr ;
 import org.seaborne.tdb2.TDB2Factory ;
-import org.seaborne.tdb2.sys.SystemTDB ;
 import org.seaborne.tdb2.sys.TDBInternal ;
 
-/** Execute a test with a fresh dataset in a write transaction */
+/** Support for tests to be less "transaction-y" */
 public class TL {
     
     public static void exec(Consumer<Dataset> action) {
-        Dataset dataset = createTestDataset() ;
-        action.accept(dataset);
-        releaseDataset(dataset) ;
-        TDBInternal.reset() ;
+        Dataset dataset = createTestDataset();
+        try { 
+            Txn.executeWrite(dataset, ()->action.accept(dataset));
+            //TDBInternal.reset();
+            
+        } finally { expel(dataset); } 
     }
     
     public static void execMem(Consumer<Dataset> action) {
         Dataset dataset = createTestDatasetMem() ;
-        action.accept(dataset);
-        releaseDataset(dataset);
-        TDBInternal.reset();
+        Txn.executeWrite(dataset, ()->action.accept(dataset));
+        expel(dataset);
+    }
+    
+    public static void expel(Dataset dataset) {
+        expel(dataset.asDatasetGraph());
+    }
+
+    public static void expel(DatasetGraph dataset) {
+        TDBInternal.expel(dataset);
     }
 
     // Or use these for @Before, @After style.
@@ -56,30 +65,24 @@ public class TL {
         return location ;
     }
     
-    public static void releaseDataset(Dataset dataset) {
+    private static void releaseDataset(Dataset dataset) {
         dataset.abort() ;
-        TDBInternal.reset() ;
+        expel(dataset);
     }
 
-    public static Dataset createTestDataset() {
+    private static Dataset createTestDataset() {
         Location location = cleanLocation() ;
         Dataset dataset = TDB2Factory.connectDataset(location) ;
-        // Non-transactional tests
-        dataset = SystemTDB.setNonTransactional(dataset) ;
         return dataset ;
     }
     
     public static Dataset createTestDatasetMem() {
         Dataset dataset = TDB2Factory.createDataset() ;
-        // Non-transactional tests
-        dataset = SystemTDB.setNonTransactional(dataset) ;
         return dataset ;
     }
 
     public static DatasetGraph createTestDatasetGraphMem() {
         DatasetGraph dataset = DatabaseMgr.createDatasetGraph() ;
-        // Non-transactional tests
-        dataset = SystemTDB.setNonTransactional(dataset) ;
         return dataset ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/setup/TestStoreParamsCreate.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/setup/TestStoreParamsCreate.java b/tdb2/src/test/java/org/seaborne/tdb2/setup/TestStoreParamsCreate.java
index 44aacfb..071b135 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/setup/TestStoreParamsCreate.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/setup/TestStoreParamsCreate.java
@@ -17,13 +17,19 @@
 
 package org.seaborne.tdb2.setup;
 
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertFalse ;
+import static org.junit.Assert.assertNotEquals ;
+import static org.junit.Assert.assertNotNull ;
+import static org.junit.Assert.assertNull ;
+import static org.junit.Assert.assertTrue ;
+
 import java.nio.file.Files ;
 import java.nio.file.Path ;
 import java.nio.file.Paths ;
 
 import org.apache.jena.atlas.json.JSON ;
 import org.apache.jena.atlas.json.JsonObject ;
-import static org.junit.Assert.*;
 import org.apache.jena.atlas.lib.FileOps ;
 import org.junit.After ;
 import org.junit.Before ;
@@ -31,7 +37,6 @@ import org.junit.Test ;
 import org.seaborne.dboe.base.file.Location ;
 import org.seaborne.dboe.sys.Names;
 import org.seaborne.tdb2.ConfigTest ;
-import org.seaborne.tdb2.sys.DatabaseConnection ;
 import org.seaborne.tdb2.sys.StoreConnection ;
 import org.seaborne.tdb2.sys.TDBInternal ;
 
@@ -40,6 +45,7 @@ import org.seaborne.tdb2.sys.TDBInternal ;
  * calls and can be noticably slow.
  */
 public class TestStoreParamsCreate {
+    // Thse tests work on storage locations.
     private final String DB_DIR = ConfigTest.getCleanDir() ;
     private final Path db = Paths.get(DB_DIR) ;
     private final Path cfg = Paths.get(DB_DIR, Names.TDB_CONFIG_FILE) ;
@@ -52,14 +58,18 @@ public class TestStoreParamsCreate {
         .blockReadCacheSize(4)
         .build();
     
+    private void expel() {
+        StoreConnection.internalExpel(loc, true);
+    }
+    
     @Before public void clearupTest() { 
         // Flush and clean.
-        DatabaseConnection.internalExpel(loc, true);
-        FileOps.clearAll(DB_DIR);
+        TDBInternal.reset();
+        FileOps.clearAll(loc.getDirectoryPath());
     }
 
     @After public void expelDatabase() { 
-        TDBInternal.expel(loc, true) ;
+        expel();
     }
     
     @Test public void params_create_01() {
@@ -83,7 +93,7 @@ public class TestStoreParamsCreate {
         // Create.
         StoreConnection.connectCreate(loc) ;
         // Drop.
-        TDBInternal.expel(loc, true) ;
+        expel();
         // Reconnect
         StoreConnection.connectCreate(loc, null) ;
         StoreParams pLoc = StoreParamsCodec.read(loc) ;
@@ -100,7 +110,7 @@ public class TestStoreParamsCreate {
         // Create.
         StoreConnection.connectCreate(loc, null) ;
         // Drop.
-        TDBInternal.expel(loc, true) ;
+        expel();
         // Reconnect
         StoreConnection.connectCreate(loc, pSpecial) ;
         //StoreParams pLoc = StoreParamsCodec.read(loc) ;
@@ -125,7 +135,7 @@ public class TestStoreParamsCreate {
         // Create.
         StoreConnection.connectCreate(loc, pApp) ;
         // Drop.
-        TDBInternal.expel(loc, true) ;
+        expel();
         // Reconnect
         StoreConnection.connectCreate(loc, pSpecial) ;
         //StoreParams pLoc = StoreParamsCodec.read(loc) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/solver/TestSolverTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/solver/TestSolverTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/solver/TestSolverTDB.java
index d94252e..43ef56d 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/solver/TestSolverTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/solver/TestSolverTDB.java
@@ -54,6 +54,7 @@ public class TestSolverTDB
     @BeforeClass static public void beforeClass()
     { 
         dataset = TL.createTestDatasetMem() ;
+        dataset.begin(ReadWrite.WRITE);
         graphData = ConfigTest.getTestingDataRoot()+"/Data/solver-data.ttl" ;
         RDFDataMgr.read(dataset, graphData) ;
         graph = dataset.asDatasetGraph().getDefaultGraph() ;
@@ -63,7 +64,8 @@ public class TestSolverTDB
     
     
     @AfterClass static public void afterClass() {
-        TL.releaseDataset(dataset);
+        dataset.abort();
+        TL.expel(dataset);
     }
             
     static private void addAll(Graph srcGraph, Graph dstGraph)

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/solver/TestStats.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/solver/TestStats.java b/tdb2/src/test/java/org/seaborne/tdb2/solver/TestStats.java
index 8bb3ae7..a9dfe92 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/solver/TestStats.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/solver/TestStats.java
@@ -17,14 +17,16 @@
 
 package org.seaborne.tdb2.solver;
 
+import static org.junit.Assert.assertEquals ;
+
 import java.util.Iterator ;
 
-import static org.junit.Assert.*;
 import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.sparql.core.Quad ;
 import org.apache.jena.sparql.sse.SSE ;
 import org.junit.Test ;
+import org.seaborne.dboe.jenax.Txn ;
 import org.seaborne.tdb2.junit.TL ;
 import org.seaborne.tdb2.solver.stats.StatsCollectorNodeId ;
 import org.seaborne.tdb2.solver.stats.StatsResults ;
@@ -46,42 +48,45 @@ public class TestStats
     static Quad q3 = SSE.parseQuad("(<g2> <s> <p> 9)") ; 
     static Quad q4 = SSE.parseQuad("(_    <s> <p> 1)") ; 
     static {
-        dsg.add(q1) ;
-        dsg.add(q2) ;
-        dsg.add(q3) ;
-        dsg.add(q4) ;
+        Txn.executeWrite(dsg, ()->{
+            dsg.add(q1) ;
+            dsg.add(q2) ;
+            dsg.add(q3) ;
+            dsg.add(q4) ;
+        });
     }
-
     
-    private StatsResults statsForGraph(NodeId gid)
-    {
-        Iterator<Tuple<NodeId>> iter = quads.find(gid, null, null, null) ;
-        
-        StatsCollectorNodeId stats = new StatsCollectorNodeId(nt) ;
-        for ( ; iter.hasNext(); )
-        {
-            Tuple<NodeId> t = iter.next() ;
-            stats.record(t.get(0), t.get(1), t.get(2), t.get(3)) ;
-        }
-        
-        return stats.results() ;
+    private StatsResults statsForGraph(NodeId gid) {
+        // StatsCollectorNodeId writes nodes for rdf:type (this is not good).
+        return Txn.calculateWrite(dsg, ()-> {
+            Iterator<Tuple<NodeId>> iter = quads.find(gid, null, null, null) ;
+
+            StatsCollectorNodeId stats = new StatsCollectorNodeId(nt) ;
+            for ( ; iter.hasNext() ; ) {
+                Tuple<NodeId> t = iter.next() ;
+                stats.record(t.get(0), t.get(1), t.get(2), t.get(3)) ;
+            }
+
+            return stats.results() ;
+        }) ;
     }
-    
-    private StatsResults statsForDftGraph()
-    {
-        Iterator<Tuple<NodeId>> iter = triples.findAll() ;
-        
-        StatsCollectorNodeId stats = new StatsCollectorNodeId(nt) ;
-        for ( ; iter.hasNext(); )
-        {
-            Tuple<NodeId> t = iter.next() ;
-            stats.record(null, t.get(0), t.get(1), t.get(2)) ;
-        }
-        
-        return stats.results() ;
+
+    private StatsResults statsForDftGraph() {
+        // StatsCollectorNodeId writes nodes for rdf:type (this is not good).
+        return Txn.calculateWrite(dsg, ()-> {
+            Iterator<Tuple<NodeId>> iter = triples.findAll() ;
+
+            StatsCollectorNodeId stats = new StatsCollectorNodeId(nt) ;
+            for ( ; iter.hasNext() ; ) {
+                Tuple<NodeId> t = iter.next() ;
+                stats.record(null, t.get(0), t.get(1), t.get(2)) ;
+            }
+
+            return stats.results() ;
+        }) ;
     }
 
-    @Test public void stats_01() { 
+    @Test public void stats_01() {
         StatsResults r = statsForDftGraph() ;
         assertEquals(1, r.getCount()) ; 
         assertEquals(1, r.getPredicates().keySet().size()) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDB.java
index 48fd7fb..1ff5387 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDB.java
@@ -40,10 +40,14 @@ public class TestDatasetTDB
     
     @Before public void before() {
         dataset = TL.createTestDatasetMem() ;
+        dataset.begin(ReadWrite.WRITE);
     }
     
     @After public void after() {
-        TL.releaseDataset(dataset);
+        dataset.abort();
+        dataset.end();
+        TL.expel(dataset);
+        
     }
     
     private Dataset dataset() {

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDBPersist.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDBPersist.java b/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDBPersist.java
index fe928a0..81a5dd5 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDBPersist.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/store/TestDatasetTDBPersist.java
@@ -17,18 +17,12 @@
 
 package org.seaborne.tdb2.store;
 
-import static org.junit.Assert.assertEquals ;
 import static org.junit.Assert.assertFalse ;
 import static org.junit.Assert.assertTrue ;
 
-import java.util.Arrays ;
-import java.util.List ;
-
-import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
-import org.apache.jena.sparql.sse.SSE ;
 import org.apache.jena.sparql.util.NodeFactoryExtra ;
 import org.junit.Test ;
 import org.seaborne.tdb2.junit.TL ;
@@ -60,58 +54,58 @@ public class TestDatasetTDBPersist
         }) ;
     }
 
-    @Test
-    public void dataset3() {
-        TL.exec((ds) -> {
-            Graph g1 = ds.getDefaultModel().getGraph() ;
-            // Sometimes, under windows, deleting the files by
-            // clearDirectory does not work.
-            // Needed for safe tests on windows.
-            g1.clear() ;
-
-            Graph g2 = ds.getNamedModel("http://example/").getGraph() ;
-            g2.add(new Triple(n0, n1, n2)) ;
-            assertTrue(g2.contains(n0, n1, n2)) ;
-            assertFalse(g1.contains(n0, n1, n2)) ;
-        }) ;
-    }
-
-    @Test
-    public void dataset4() {
-        String graphName = "http://example/" ;
-        Triple triple = SSE.parseTriple("(<x> <y> <z>)") ;
-        Node gn = org.apache.jena.graph.NodeFactory.createURI(graphName) ;
-
-        TL.exec((ds) -> {
-            // ?? See TupleLib.
-            ds.asDatasetGraph().deleteAny(gn, null, null, null) ;
-
-            Graph g2 = ds.asDatasetGraph().getGraph(gn) ;
-
-            // Graphs only exists if they have a triple in them
-            assertFalse(ds.containsNamedModel(graphName)) ;
-
-            List<String> names = Iter.toList(ds.listNames()) ;
-            assertEquals(0, names.size()) ;
-            assertEquals(0, ds.asDatasetGraph().size()) ;
-        }) ;
-    }
-    
-    @Test
-    public void dataset5() {
-        String graphName = "http://example/" ;
-        Triple triple = SSE.parseTriple("(<x> <y> <z>)") ;
-        TL.exec((ds) -> {
-            Graph g2 = ds.asDatasetGraph().getGraph(org.apache.jena.graph.NodeFactory.createURI(graphName)) ;
-            // Graphs only exists if they have a triple in them
-            g2.add(triple) ;
-
-            assertTrue(ds.containsNamedModel(graphName)) ;
-            List<String> x = Iter.toList(ds.listNames()) ;
-            List<String> y = Arrays.asList(graphName) ;
-            assertEquals(x, y) ;
-
-            assertEquals(1, ds.asDatasetGraph().size()) ;
-        }) ;
-        }
+//    @Test
+//    public void dataset3() {
+//        TL.exec((ds) -> {
+//            Graph g1 = ds.getDefaultModel().getGraph() ;
+//            // Sometimes, under windows, deleting the files by
+//            // clearDirectory does not work.
+//            // Needed for safe tests on windows.
+//            g1.clear() ;
+//
+//            Graph g2 = ds.getNamedModel("http://example/").getGraph() ;
+//            g2.add(new Triple(n0, n1, n2)) ;
+//            assertTrue(g2.contains(n0, n1, n2)) ;
+//            assertFalse(g1.contains(n0, n1, n2)) ;
+//        }) ;
+//    }
+//
+//    @Test
+//    public void dataset4() {
+//        String graphName = "http://example/" ;
+//        Triple triple = SSE.parseTriple("(<x> <y> <z>)") ;
+//        Node gn = org.apache.jena.graph.NodeFactory.createURI(graphName) ;
+//
+//        TL.exec((ds) -> {
+//            // ?? See TupleLib.
+//            ds.asDatasetGraph().deleteAny(gn, null, null, null) ;
+//
+//            Graph g2 = ds.asDatasetGraph().getGraph(gn) ;
+//
+//            // Graphs only exists if they have a triple in them
+//            assertFalse(ds.containsNamedModel(graphName)) ;
+//
+//            List<String> names = Iter.toList(ds.listNames()) ;
+//            assertEquals(0, names.size()) ;
+//            assertEquals(0, ds.asDatasetGraph().size()) ;
+//        }) ;
+//    }
+//
+//    @Test
+//    public void dataset5() {
+//        String graphName = "http://example/" ;
+//        Triple triple = SSE.parseTriple("(<x> <y> <z>)") ;
+//        TL.exec((ds) -> {
+//            Graph g2 = ds.asDatasetGraph().getGraph(org.apache.jena.graph.NodeFactory.createURI(graphName)) ;
+//            // Graphs only exists if they have a triple in them
+//            g2.add(triple) ;
+//
+//            assertTrue(ds.containsNamedModel(graphName)) ;
+//            List<String> x = Iter.toList(ds.listNames()) ;
+//            List<String> y = Arrays.asList(graphName) ;
+//            assertEquals(x, y) ;
+//
+//            assertEquals(1, ds.asDatasetGraph().size()) ;
+//        }) ;
+//    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/store/TestDynamicDatasetTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/store/TestDynamicDatasetTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/store/TestDynamicDatasetTDB.java
index fbcfc48..d0376e9 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/store/TestDynamicDatasetTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/store/TestDynamicDatasetTDB.java
@@ -18,6 +18,7 @@
 package org.seaborne.tdb2.store;
 
 import org.apache.jena.query.Dataset ;
+import org.apache.jena.query.ReadWrite ;
 import org.apache.jena.sparql.core.AbstractTestDynamicDataset ;
 import org.seaborne.tdb2.TDB2 ;
 import org.seaborne.tdb2.junit.TL ;
@@ -27,11 +28,13 @@ public class TestDynamicDatasetTDB extends AbstractTestDynamicDataset
     @Override
     protected Dataset createDataset()
     {
-        return TL.createTestDatasetMem() ;
+        Dataset ds = TL.createTestDatasetMem() ;
+        ds.begin(ReadWrite.WRITE);
+        return ds;
     }
     
     @Override
-    protected void releaseDataset(Dataset ds) { TL.releaseDataset(ds); }
+    protected void releaseDataset(Dataset ds) { ds.abort(); TL.expel(ds); }
 
     protected void startDynamicAndUnionTest()    { TDB2.getContext().setTrue(TDB2.symUnionDefaultGraph) ; }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphNamedTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphNamedTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphNamedTDB.java
index 99c933e..d844c5a 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphNamedTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphNamedTDB.java
@@ -20,6 +20,7 @@ package org.seaborne.tdb2.store;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.query.Dataset ;
+import org.apache.jena.query.ReadWrite ;
 import org.apache.jena.sparql.graph.AbstractTestGraph2 ;
 import org.apache.jena.sparql.util.NodeFactoryExtra ;
 import org.junit.After ;
@@ -36,14 +37,17 @@ public class TestGraphNamedTDB extends AbstractTestGraph2
     @Before
     public void before() {
         dataset = TL.createTestDatasetMem() ;
+        dataset.begin(ReadWrite.WRITE);
         graph = dataset.asDatasetGraph().getGraph(graphNode) ;
     }
 
     @After
     public void after() {
-        TL.releaseDataset(dataset) ;
+        dataset.abort();
+        dataset.end();
+        TL.expel(dataset) ;
     }
-
+    
     @Override
     protected Graph emptyGraph() {
         graph.clear() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphTDB.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphTDB.java b/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphTDB.java
index 0317cc5..7f941eb 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphTDB.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/store/TestGraphTDB.java
@@ -19,6 +19,7 @@ package org.seaborne.tdb2.store;
 
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.query.Dataset ;
+import org.apache.jena.query.ReadWrite ;
 import org.apache.jena.sparql.graph.AbstractTestGraph2 ;
 import org.junit.After ;
 import org.junit.Before ;
@@ -33,12 +34,15 @@ public class TestGraphTDB extends AbstractTestGraph2
     @Before
     public void before() {
         dataset = TL.createTestDatasetMem() ;
+        dataset.begin(ReadWrite.WRITE);
         graph = dataset.getDefaultModel().getGraph() ;
     }
 
     @After
     public void after() {
-        TL.releaseDataset(dataset) ;
+        dataset.abort();
+        dataset.end();
+        TL.expel(dataset) ;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/store/TestTransactions.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/store/TestTransactions.java b/tdb2/src/test/java/org/seaborne/tdb2/store/TestTransactions.java
index 47bc3e5..1aed0a6 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/store/TestTransactions.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/store/TestTransactions.java
@@ -83,7 +83,7 @@ public class TestTransactions
 
     @After public void after() {
         dataset.close() ;
-        TDBInternal.expel(location, true);
+        TDBInternal.expel(dataset.asDatasetGraph());
     }
 
     // Models across transactions

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fd29aa/tdb2/src/test/java/org/seaborne/tdb2/sys/TestDatabaseOps.java
----------------------------------------------------------------------
diff --git a/tdb2/src/test/java/org/seaborne/tdb2/sys/TestDatabaseOps.java b/tdb2/src/test/java/org/seaborne/tdb2/sys/TestDatabaseOps.java
index 67883a4..09b9804 100644
--- a/tdb2/src/test/java/org/seaborne/tdb2/sys/TestDatabaseOps.java
+++ b/tdb2/src/test/java/org/seaborne/tdb2/sys/TestDatabaseOps.java
@@ -90,8 +90,6 @@ public class TestDatabaseOps
         Txn.executeWrite(dsgOld, ()->dsgOld.delete(quad1));
         Txn.executeRead(dsg,     ()->assertTrue(dsg.contains(quad1)) );
         Txn.executeRead(dsg2,    ()->assertTrue(dsg2.contains(quad1)) ) ;
-        
-        TDBInternal.expel(loc1, true);
     }
 
 //    @Test public void compact_2() {