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 2012/09/06 17:40:12 UTC

svn commit: r1381644 - /jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTransaction.java

Author: andy
Date: Thu Sep  6 15:40:11 2012
New Revision: 1381644

URL: http://svn.apache.org/viewvc?rev=1381644&view=rev
Log:
Support a close operation - and check for it.

Modified:
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTransaction.java

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTransaction.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTransaction.java?rev=1381644&r1=1381643&r2=1381644&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTransaction.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTransaction.java Thu Sep  6 15:40:11 2012
@@ -38,6 +38,7 @@ public class DatasetGraphTransaction ext
      * inside transactions. 
      */
     
+    
     // Two per-thread state variables:
     //   txn: ThreadLocalTxn -- the transactional , one time use dataset
     //   isInTransactionB: ThreadLocalBoolean -- flags true between begin and commit/abort, and end for read transactions.
@@ -62,6 +63,7 @@ public class DatasetGraphTransaction ext
     private ThreadLocalBoolean inTransaction = new ThreadLocalBoolean() ;
     
     private final StoreConnection sConn ;
+    private boolean isClosed = false ; 
 
     public DatasetGraphTransaction(Location location)
     {
@@ -72,11 +74,13 @@ public class DatasetGraphTransaction ext
     
     public DatasetGraphTDB getDatasetGraphToQuery()
     {
+        checkNotClosed() ;
         return get() ;
     }
     
     public DatasetGraphTDB getBaseDatasetGraph()
     {
+        checkNotClosed() ;
         return sConn.getBaseDataset() ;
     }
 
@@ -101,6 +105,7 @@ public class DatasetGraphTransaction ext
     @Override
     protected void checkActive()
     {
+        checkNotClosed() ;
         if ( sConn.haveUsedInTransaction() && ! isInTransaction() )
             throw new JenaTransactionException("Not in a transaction ("+getLocation()+")") ;
     }
@@ -108,16 +113,26 @@ public class DatasetGraphTransaction ext
     @Override
     protected void checkNotActive()
     {
+        checkNotClosed() ;
         if ( sConn.haveUsedInTransaction() && isInTransaction() )
             throw new JenaTransactionException("Currently in a transaction ("+getLocation()+")") ;
     }
     
+    protected void checkNotClosed()
+    {
+        if ( isClosed )
+            throw new JenaTransactionException("Already closed") ;
+    }
+    
     @Override
     public boolean isInTransaction()    
     { 
+        checkNotClosed() ;
         return inTransaction.get() ;
     }
 
+    public boolean isClosed()
+    { return isClosed ; }
     
     public void syncIfNotTransactional()
     {
@@ -129,6 +144,7 @@ public class DatasetGraphTransaction ext
     @Override
     protected void _begin(ReadWrite readWrite)
     {
+        checkNotClosed() ;
         DatasetGraphTxn dsgTxn = sConn.begin(readWrite) ;
         txn.set(dsgTxn) ;
         inTransaction.set(true) ;
@@ -137,6 +153,7 @@ public class DatasetGraphTransaction ext
     @Override
     protected void _commit()
     {
+        checkNotClosed() ;
         txn.get().commit() ;
         inTransaction.set(false) ;
     }
@@ -144,6 +161,7 @@ public class DatasetGraphTransaction ext
     @Override
     protected void _abort()
     {
+        checkNotClosed() ;
         txn.get().abort() ;
         inTransaction.set(false) ;
     }
@@ -151,13 +169,13 @@ public class DatasetGraphTransaction ext
     @Override
     protected void _end()
     {
+        checkNotClosed() ;
         DatasetGraphTxn dsg = txn.get() ;
         // It's null if end() already called.
         if ( dsg  == null )
         {
             TDB.logInfo.warn("Transaction already ended") ;
             return ;
-            // throw new TDBTransactionException("Transaction already ended") ;
         }
         txn.get().end() ;
         // May already be false due to .commit/.abort.
@@ -178,6 +196,9 @@ public class DatasetGraphTransaction ext
     @Override
     protected void _close()
     {
+        if ( isClosed )
+            return ;
+        
         if ( ! sConn.haveUsedInTransaction() && get() != null )
         {
             // Non-transactional behaviour.
@@ -185,5 +206,16 @@ public class DatasetGraphTransaction ext
             dsg.sync() ;
             dsg.close() ;
         }
+        
+        if ( isInTransaction() )
+        {
+            TDB.logInfo.warn("Attempt to close a DatasetGraphTransaction while a transaction is active - ignored close ("+getLocation()+")") ;
+            return ; 
+        }
+        isClosed = true ;
+        txn.remove() ;
+        inTransaction.remove() ;
     }
+    
+    
 }