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 2016/09/09 15:00:28 UTC
[2/4] jena git commit: JENA-1231: Modernize executeInTransaction.
JENA-1231: Modernize executeInTransaction.
Use execute/calculate style naming in Txn.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/976625b9
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/976625b9
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/976625b9
Branch: refs/heads/master
Commit: 976625b9bf81dd9158e2921c1cf0f09f0f6b2e4f
Parents: 9d5f675
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Sep 8 16:38:02 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Sep 9 12:23:39 2016 +0100
----------------------------------------------------------------------
.../main/java/org/apache/jena/system/Txn.java | 8 +--
.../java/org/apache/jena/system/TestTxn.java | 52 ++++++++++----------
.../apache/jena/system/TestTxnLifecycle.java | 24 ++++-----
.../org/apache/jena/system/TestTxnThread.java | 4 +-
.../apache/jena/graph/TransactionHandler.java | 43 +++++++++++-----
.../jena/graph/impl/TransactionHandlerBase.java | 51 ++++++++++++++-----
.../java/org/apache/jena/rdf/model/Model.java | 26 +++++++---
.../apache/jena/rdf/model/impl/ModelCom.java | 17 +++++++
.../graph/TransactionHandlerContractTest.java | 52 ++++++++++++++------
.../jena/graph/test/AbstractTestGraph.java | 18 +++----
.../jena/rdf/model/test/AbstractTestModel.java | 15 +++---
.../apache/jena/rdf/model/test/TestModel.java | 19 ++-----
.../org/apache/jena/fuseki/cmd/FusekiCmd.java | 2 +-
.../fuseki/embedded/TestEmbeddedFuseki.java | 4 +-
.../jena/sdb/graph/TransactionHandlerSDB.java | 26 ++--------
.../org/apache/jena/sdb/sql/SDBConnection.java | 13 ++++-
.../jena/tdb/transaction/TestTransControl.java | 20 ++++----
.../jena/tdb/transaction/TestTransPromote.java | 4 +-
18 files changed, 235 insertions(+), 163 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-arq/src/main/java/org/apache/jena/system/Txn.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/system/Txn.java b/jena-arq/src/main/java/org/apache/jena/system/Txn.java
index 5db5e6c..4aa3527 100644
--- a/jena-arq/src/main/java/org/apache/jena/system/Txn.java
+++ b/jena-arq/src/main/java/org/apache/jena/system/Txn.java
@@ -34,7 +34,7 @@ import org.apache.jena.sparql.core.Transactional ;
public class Txn {
/** Execute the Runnable in a read transaction. */
- public static <T extends Transactional> void execRead(T txn, Runnable r) {
+ public static <T extends Transactional> void executeRead(T txn, Runnable r) {
boolean b = txn.isInTransaction() ;
if ( !b )
txn.begin(ReadWrite.READ) ;
@@ -48,7 +48,7 @@ public class Txn {
}
/** Execute and return a value in a read transaction */
- public static <T extends Transactional, X> X execReadRtn(T txn, Supplier<X> r) {
+ public static <T extends Transactional, X> X calculateRead(T txn, Supplier<X> r) {
boolean b = txn.isInTransaction() ;
if ( !b )
txn.begin(ReadWrite.READ) ;
@@ -64,7 +64,7 @@ public class Txn {
}
/** Execute the Runnable in a write transaction */
- public static <T extends Transactional> void execWrite(T txn, Runnable r) {
+ public static <T extends Transactional> void executeWrite(T txn, Runnable r) {
boolean b = txn.isInTransaction() ;
if ( !b )
txn.begin(ReadWrite.WRITE) ;
@@ -82,7 +82,7 @@ public class Txn {
}
/** Execute and return a value in a write transaction. */
- public static <T extends Transactional, X> X execWriteRtn(Transactional txn, Supplier<X> r) {
+ public static <T extends Transactional, X> X calculateWrite(Transactional txn, Supplier<X> r) {
boolean b = txn.isInTransaction() ;
if ( !b )
txn.begin(ReadWrite.WRITE) ;
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java b/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
index d9a9546..2ef2718 100644
--- a/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
+++ b/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
@@ -31,14 +31,14 @@ public class TestTxn {
@Test public void txn_basic_01() {
long v1 = counter.get() ;
assertEquals(0, v1) ;
- Txn.execRead(counter, () -> {
+ Txn.executeRead(counter, () -> {
assertEquals(0, counter.get()) ;
}) ;
}
@Test public void txn_basic_02() {
long x =
- Txn.execReadRtn(counter, () -> {
+ Txn.calculateRead(counter, () -> {
assertEquals("In R, value()", 0, counter.value()) ;
assertEquals("In R, get()", 0, counter.get()) ;
return counter.get() ;
@@ -47,9 +47,9 @@ public class TestTxn {
}
@Test public void txn_basic_03() {
- Txn.execWrite(counter, counter::inc) ;
+ Txn.executeWrite(counter, counter::inc) ;
long x =
- Txn.execReadRtn(counter, () -> {
+ Txn.calculateRead(counter, () -> {
assertEquals("In R, value()", 1, counter.value()) ;
assertEquals("In R, get()", 1, counter.get()) ;
return counter.get() ;
@@ -59,7 +59,7 @@ public class TestTxn {
@Test public void txn_basic_05() {
long x =
- Txn.execWriteRtn(counter, () -> {
+ Txn.calculateWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 0, counter.value()) ;
assertEquals("In W, get()",1, counter.get()) ;
@@ -70,7 +70,7 @@ public class TestTxn {
@Test public void txn_write_01() {
long x =
- Txn.execWriteRtn(counter, () -> {
+ Txn.calculateWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 0, counter.value()) ;
assertEquals("In W, get()",1, counter.get()) ;
@@ -83,7 +83,7 @@ public class TestTxn {
@Test public void txn_write_02() {
long x =
- Txn.execWriteRtn(counter, () -> {
+ Txn.calculateWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 0, counter.value()) ;
assertEquals("In W, get()",1, counter.get()) ;
@@ -95,7 +95,7 @@ public class TestTxn {
}
@Test public void txn_write_03() {
- Txn.execWrite(counter, () -> {
+ Txn.executeWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 0, counter.value()) ;
assertEquals("In W, get()",1, counter.get()) ;
@@ -105,7 +105,7 @@ public class TestTxn {
}
@Test public void txn_write_04() {
- Txn.execWrite(counter, () -> {
+ Txn.executeWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 0, counter.value()) ;
assertEquals("In W, get()",1, counter.get()) ;
@@ -117,7 +117,7 @@ public class TestTxn {
@Test public void txn_rw_1() {
assertEquals(0, counter.get()) ;
- Txn.execWrite(counter, () -> {
+ Txn.executeWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 0, counter.value()) ;
assertEquals("In W, get()",1, counter.get()) ;
@@ -126,19 +126,19 @@ public class TestTxn {
assertEquals("Direct value()", 1, counter.value()) ;
assertEquals("Direct get()", 1, counter.get()) ;
- Txn.execRead(counter, () -> {
+ Txn.executeRead(counter, () -> {
assertEquals("In R, value()", 1, counter.value()) ;
assertEquals("In R, get()", 1, counter.get()) ;
}) ;
}
@Test public void txn_rw_2() {
- Txn.execRead(counter, () -> {
+ Txn.executeRead(counter, () -> {
assertEquals("In R, value()", 0, counter.value()) ;
assertEquals("In R, get()", 0, counter.get()) ;
}) ;
- Txn.execWrite(counter, () -> {
+ Txn.executeWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 0, counter.value()) ;
assertEquals("In W, get()",1, counter.get()) ;
@@ -147,20 +147,20 @@ public class TestTxn {
assertEquals("Direct value()", 1, counter.get()) ;
assertEquals("Direct get()", 1, counter.get()) ;
- Txn.execRead(counter, () -> {
+ Txn.executeRead(counter, () -> {
assertEquals("In R, value()", 1, counter.value()) ;
assertEquals("In R, get()", 1, counter.get()) ;
}) ;
}
@Test public void txn_continue_1() {
- Txn.execWrite(counter, ()->counter.set(91)) ;
+ Txn.executeWrite(counter, ()->counter.set(91)) ;
- Txn.execWrite(counter, ()-> {
+ Txn.executeWrite(counter, ()-> {
assertEquals("In txn, value()", 91, counter.value()) ;
assertEquals("In txn, read()", 91, counter.read()) ;
counter.inc();
- Txn.execWrite(counter, ()->{
+ Txn.executeWrite(counter, ()->{
assertEquals("In txn, value()", 91, counter.value()) ;
assertEquals("In txn, get()", 92, counter.read()) ;
}) ;
@@ -169,13 +169,13 @@ public class TestTxn {
}
@Test public void txn_continue_2() {
- Txn.execWrite(counter, ()->counter.set(91)) ;
+ Txn.executeWrite(counter, ()->counter.set(91)) ;
- Txn.execWrite(counter, ()-> {
+ Txn.executeWrite(counter, ()-> {
assertEquals("In txn, value()", 91, counter.value()) ;
assertEquals("In txn, read()", 91, counter.read()) ;
counter.inc();
- Txn.execWrite(counter, ()->{
+ Txn.executeWrite(counter, ()->{
assertEquals("In txn, value()", 91, counter.value()) ;
assertEquals("In txn, get()", 92, counter.read()) ;
counter.inc();
@@ -189,9 +189,9 @@ public class TestTxn {
@Test(expected=ExceptionFromTest.class)
public void txn_exception_01() {
- Txn.execWrite(counter, counter::inc) ;
+ Txn.executeWrite(counter, counter::inc) ;
- Txn.execWrite(counter, () -> {
+ Txn.executeWrite(counter, () -> {
counter.inc() ;
assertEquals("In W, value()", 1, counter.value()) ;
assertEquals("In W, get()",2, counter.get()) ;
@@ -201,10 +201,10 @@ public class TestTxn {
@Test
public void txn_exception_02() {
- Txn.execWrite(counter, ()->counter.set(8)) ;
+ Txn.executeWrite(counter, ()->counter.set(8)) ;
try {
- Txn.execWrite(counter, () -> {
+ Txn.executeWrite(counter, () -> {
counter.inc();
assertEquals("In W, value()", 8, counter.value());
assertEquals("In W, get()", 9, counter.get());
@@ -217,10 +217,10 @@ public class TestTxn {
@Test
public void txn_exception_03() {
- Txn.execWrite(counter, ()->counter.set(9)) ;
+ Txn.executeWrite(counter, ()->counter.set(9)) ;
try {
- Txn.execRead(counter, () -> {
+ Txn.executeRead(counter, () -> {
assertEquals("In W, value()", 9, counter.value());
assertEquals("In W, get()", 9, counter.get());
throw new ExceptionFromTest();
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java b/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
index 3cfa82b..8be8ae9 100644
--- a/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
+++ b/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
@@ -37,53 +37,53 @@ public class TestTxnLifecycle {
private Transactional trans = TransactionalLock.createMRSW() ;
@Test public void txn_lifecycle_01() {
- Txn.execRead(trans, ()->{}) ;
+ Txn.executeRead(trans, ()->{}) ;
}
@Test public void txn_lifecycle_02() {
- Txn.execWrite(trans, ()->{}) ;
+ Txn.executeWrite(trans, ()->{}) ;
}
@Test public void txn_lifecycle_03() {
- int x = Txn.execReadRtn(trans, ()->4) ;
+ int x = Txn.calculateRead(trans, ()->4) ;
assertEquals(4,x) ;
}
@Test public void txn_lifecycle_04() {
- int x = Txn.execWriteRtn(trans, ()->5) ;
+ int x = Txn.calculateWrite(trans, ()->5) ;
assertEquals(5,x) ;
}
@Test public void txn_lifecycle_05() {
- int x = Txn.execWriteRtn(trans, ()-> {
+ int x = Txn.calculateWrite(trans, ()-> {
// Continues outer transaction.
- return Txn.execWriteRtn(trans, ()->56) ;
+ return Txn.calculateWrite(trans, ()->56) ;
});
assertEquals(56,x) ;
}
@Test(expected=ExceptionFromTest.class)
public void txn_lifecycle_06() {
- int x = Txn.execWriteRtn(trans, ()-> {
- Txn.execWriteRtn(trans, ()-> {throw new ExceptionFromTest() ; }) ;
+ int x = Txn.calculateWrite(trans, ()-> {
+ Txn.calculateWrite(trans, ()-> {throw new ExceptionFromTest() ; }) ;
return 45 ;
});
fail("Should not be here!") ;
}
@Test public void txn_lifecycle_07() {
- Txn.execWrite(trans, ()->trans.commit()) ;
+ Txn.executeWrite(trans, ()->trans.commit()) ;
}
@Test public void txn_lifecycle_08() {
- Txn.execWrite(trans, ()->trans.abort()) ;
+ Txn.executeWrite(trans, ()->trans.abort()) ;
}
@Test public void txn_lifecycle_09() {
- Txn.execRead(trans, ()->trans.commit()) ;
+ Txn.executeRead(trans, ()->trans.commit()) ;
}
@Test public void txn_lifecycle_10() {
- Txn.execRead(trans, ()->trans.abort()) ;
+ Txn.executeRead(trans, ()->trans.abort()) ;
}
static void async(Runnable runnable) {
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-arq/src/test/java/org/apache/jena/system/TestTxnThread.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/system/TestTxnThread.java b/jena-arq/src/test/java/org/apache/jena/system/TestTxnThread.java
index d5dc58d..d3bf4ec 100644
--- a/jena-arq/src/test/java/org/apache/jena/system/TestTxnThread.java
+++ b/jena-arq/src/test/java/org/apache/jena/system/TestTxnThread.java
@@ -59,7 +59,7 @@ public class TestTxnThread {
@Test public void txnThread_11() {
long x1 = counter.get() ;
- Txn.execWrite(counter, ()->{
+ Txn.executeWrite(counter, ()->{
counter.inc();
// Read the "before" state
ThreadAction t = ThreadTxn.threadTxnRead(counter, ()->{
@@ -79,7 +79,7 @@ public class TestTxnThread {
long z1 = counter.get() ;
assertEquals("Thread", x1, z1) ;
}) ;
- Txn.execWrite(counter, ()->counter.inc()) ;
+ Txn.executeWrite(counter, ()->counter.inc()) ;
t.run() ;
long x2 = counter.get() ;
assertEquals("after", x1+1, x2) ;
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/main/java/org/apache/jena/graph/TransactionHandler.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/graph/TransactionHandler.java b/jena-core/src/main/java/org/apache/jena/graph/TransactionHandler.java
index ac3231f..1850333 100644
--- a/jena-core/src/main/java/org/apache/jena/graph/TransactionHandler.java
+++ b/jena-core/src/main/java/org/apache/jena/graph/TransactionHandler.java
@@ -18,45 +18,62 @@
package org.apache.jena.graph;
-import org.apache.jena.shared.* ;
+import java.util.function.Supplier ;
+
+import org.apache.jena.shared.Command ;
/**
Preliminary interface for graphs supporting transactions.
*/
public interface TransactionHandler
- {
+{
/**
Does this handler support transactions at all?
-
+
@return true iff begin/abort/commit are implemented and make sense.
- */
+ */
boolean transactionsSupported();
-
+
/**
If transactions are supported, begin a new transaction. If tranactions are
not supported, or they are but this tranaction is nested and nested transactions
are not supported, throw an UnsupportedOperationException.
- */
+ */
void begin();
-
+
/**
If transactions are supported and there is a tranaction in progress, abort
it. If transactions are not supported, or there is no transaction in progress,
throw an UnsupportedOperationException.
- */
+ */
void abort();
-
+
/**
If transactions are supported and there is a tranaction in progress, commit
it. If transactions are not supported, , or there is no transaction in progress,
throw an UnsupportedOperationException.
- */
+ */
void commit();
-
+
+
+
/**
If transactions are supported, execute the command c within a transaction
and return its result. If not, throw an UnsupportedOperationException.
- */
+ @deprecated use {@link #execute(Runnable)} or {@link #calculate(Supplier)}
+ */
Object executeInTransaction( Command c );
- }
+
+ /**
+ * Execute the runnable <code>action</code> within a transaction. If it completes normally,
+ * commit the transaction, otherwise abort the transaction.
+ */
+ void execute( Runnable action );
+
+ /**
+ * Execute the supplier <code>action</code> within a transaction. If it completes normally,
+ * commit the transaction and return the result, otherwise abort the transaction.
+ */
+ <T> T calculate( Supplier<T> action ) ;
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/main/java/org/apache/jena/graph/impl/TransactionHandlerBase.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/graph/impl/TransactionHandlerBase.java b/jena-core/src/main/java/org/apache/jena/graph/impl/TransactionHandlerBase.java
index 5f0191d..3c7b507 100644
--- a/jena-core/src/main/java/org/apache/jena/graph/impl/TransactionHandlerBase.java
+++ b/jena-core/src/main/java/org/apache/jena/graph/impl/TransactionHandlerBase.java
@@ -18,12 +18,16 @@
package org.apache.jena.graph.impl;
-import org.apache.jena.graph.* ;
-import org.apache.jena.shared.* ;
+import java.util.function.Supplier ;
+
+import org.apache.jena.graph.TransactionHandler ;
+import org.apache.jena.shared.Command ;
+import org.apache.jena.shared.JenaException ;
/**
- * A base for transaction handlers - all it does is provide the
- * canonical implementation of executeInTransaction.
+ * A base for transaction handlers; provide implementations of execute* operations
+ * using the fundamental begin-commit-abort.
+ * (This class predates java8 default methods.)
*/
public abstract class TransactionHandlerBase implements TransactionHandler {
public TransactionHandlerBase() {
@@ -36,21 +40,44 @@ public abstract class TransactionHandlerBase implements TransactionHandler {
*/
@Override
public Object executeInTransaction(Command c) {
+ return calculate( () -> c.execute() ) ;
+ }
+
+ /* Abort but don't let problems with the transaction system itself cause loss of the exception */
+ private void abort(Throwable e) {
+ try { abort() ; }
+ catch (Throwable th) { e.addSuppressed(th); }
+ }
+
+ /**
+ * Execute the runnable <code>action</code> within a transaction. If it completes normally,
+ * commit the transaction, otherwise abort the transaction.
+ */
+ @Override
+ public void execute( Runnable action ) {
begin() ;
- Object result ;
try {
- result = c.execute() ;
+ action.run();
commit() ;
- return result ;
}
catch (JenaException e) { abort(e) ; throw e ; }
catch (Throwable e) { abort(e) ; throw new JenaException(e) ; }
}
-
- /* Abort but don't let problems with the transaction system itself cause loss of the exception */
- private void abort(Throwable e) {
- try { abort() ; }
- catch (Throwable th) { e.addSuppressed(th); }
+
+ /**
+ * Execute the supplier <code>action</code> within a transaction. If it completes normally,
+ * commit the transaction and return the result, otherwise abort the transaction.
+ */
+ @Override
+ public <T> T calculate( Supplier<T> action ) {
+ begin() ;
+ try {
+ T result = action.get() ;
+ commit() ;
+ return result ;
+ }
+ catch (JenaException e) { abort(e) ; throw e ; }
+ catch (Throwable e) { abort(e) ; throw new JenaException(e) ; }
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java b/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
index 16109f0..c3ca922 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
@@ -20,6 +20,7 @@ package org.apache.jena.rdf.model;
import java.io.*;
import java.util.*;
+import java.util.function.Supplier ;
import org.apache.jena.datatypes.* ;
import org.apache.jena.shared.* ;
@@ -897,13 +898,26 @@ public interface Model
*/
Model commit() ;
- /**
- Execute the command <code>cmd</code> inside a transaction. If it
- completes, commit the transaction and return the result; if it fails
- (by throwing an exception), abort the transaction and throw an
- exception.
- */
+ /**
+ If transactions are supported, execute the command c within a transaction
+ and return its result. If not, throw an UnsupportedOperationException.
+ @deprecated use {@link #calculateInTxn(Supplier)} or migrate to {@link #executeInTxn(Runnable)}.
+ */
+ @Deprecated
Object executeInTransaction( Command cmd );
+
+
+ /**
+ * Execute the runnable <code>action</code> within a transaction. If it completes normally,
+ * commit the transaction, otherwise abort the transaction.
+ */
+ void executeInTxn( Runnable action );
+
+ /**
+ * Execute the supplier <code>action</code> within a transaction. If it completes normally,
+ * commit the transaction and return the result, otherwise abort the transaction.
+ */
+ <T> T calculateInTxn( Supplier<T> action ) ;
/** Determine whether this model is independent.
*
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
index 5810f5a..2303321 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
@@ -21,6 +21,8 @@ package org.apache.jena.rdf.model.impl;
import java.io.* ;
import java.net.URL ;
import java.util.* ;
+import java.util.function.Supplier ;
+
import org.apache.jena.datatypes.DatatypeFormatException ;
import org.apache.jena.datatypes.RDFDatatype ;
import org.apache.jena.datatypes.TypeMapper ;
@@ -1329,6 +1331,7 @@ implements Model, PrefixMapping, Lock
public Model commit()
{ getTransactionHandler().commit(); return this; }
+ @SuppressWarnings("deprecation")
@Override
public Object executeInTransaction( Command cmd )
{ return getTransactionHandler().executeInTransaction( cmd ); }
@@ -1337,6 +1340,20 @@ implements Model, PrefixMapping, Lock
{ return getGraph().getTransactionHandler(); }
@Override
+ public void executeInTxn( Runnable action ) {
+ getTransactionHandler().execute( action );
+ }
+
+ /**
+ * Execute the supplier <code>action</code> within a transaction. If it completes normally,
+ * commit the transaction and return the result, otherwise abort the transaction.
+ */
+ @Override
+ public <T> T calculateInTxn( Supplier<T> action ) {
+ return getTransactionHandler().calculate( action );
+ }
+
+ @Override
public boolean independent()
{ return true; }
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/test/java/org/apache/jena/graph/TransactionHandlerContractTest.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/graph/TransactionHandlerContractTest.java b/jena-core/src/test/java/org/apache/jena/graph/TransactionHandlerContractTest.java
index 8ffddbc..b8d592f 100644
--- a/jena-core/src/test/java/org/apache/jena/graph/TransactionHandlerContractTest.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/TransactionHandlerContractTest.java
@@ -61,23 +61,26 @@ public class TransactionHandlerContractTest {
* Test that Graphs have transaction support methods, and that if they fail
* on some g they fail because they do not support the operation.
*/
- @ContractTest
+ @SuppressWarnings("deprecation")
+ @ContractTest
public void testTransactionsExistAsPerTransactionSupported() {
- Command cmd = new Command() {
- @Override
- public Object execute() {
- return null;
- }
- };
+ // Write out explicitly
+ Command cmd = new Command() {
+ @Override
+ public Object execute() { return null; }
+ };
- TransactionHandler th = getTransactionHandlerProducer().newInstance();
+ TransactionHandler th = getTransactionHandlerProducer().newInstance();
if (th.transactionsSupported()) {
th.begin();
th.abort();
th.begin();
th.commit();
- th.executeInTransaction(cmd);
+ th.execute( ()->{} ) ;
+ th.calculate(()->null);
+ th.executeInTransaction(cmd) ;
+ th.executeInTransaction( ()->null ) ;
} else {
try {
th.begin();
@@ -97,14 +100,26 @@ public class TransactionHandlerContractTest {
}
/* */
try {
- th.executeInTransaction(cmd);
+ th.execute(()->{});
fail("Should have thrown UnsupportedOperationException");
- } catch (UnsupportedOperationException x) {
- }
+ } catch (UnsupportedOperationException x) { }
+ try {
+ th.calculate(()->null);
+ fail("Should have thrown UnsupportedOperationException");
+ } catch (UnsupportedOperationException x) { }
+ try {
+ th.executeInTransaction(cmd);
+ fail("Should have thrown UnsupportedOperationException");
+ } catch (UnsupportedOperationException x) { }
+ try {
+ th.executeInTransaction(()->null);
+ fail("Should have thrown UnsupportedOperationException");
+ } catch (UnsupportedOperationException x) { }
}
}
- @ContractTest
+ @SuppressWarnings("deprecation")
+ @ContractTest
public void testExecuteInTransactionCatchesThrowable() {
TransactionHandler th = getTransactionHandlerProducer().newInstance();
@@ -118,8 +133,15 @@ public class TransactionHandlerContractTest {
try {
th.executeInTransaction(cmd);
fail("Should have thrown JenaException");
- } catch (JenaException x) {
- }
+ } catch (JenaException x) { }
+ try {
+ th.execute(()-> { throw new Error() ; });
+ fail("Should have thrown JenaException");
+ } catch (JenaException x) { }
+ try {
+ th.calculate(()->{ throw new Error() ; });
+ fail("Should have thrown JenaException");
+ } catch (JenaException x) { }
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java
index 9f5deba..3e3612e 100644
--- a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java
@@ -275,21 +275,17 @@ public abstract class AbstractTestGraph extends GraphTestBase
Command cmd = new Command()
{ @Override
public Object execute() { return null; } };
- try { th.executeInTransaction( cmd ); }
+ try { th.execute( ()->{} ); }
catch (UnsupportedOperationException x) {}
}
- public void testExecuteInTransactionCatchesThrowable()
- {Graph g = getGraph();
- TransactionHandler th = g.getTransactionHandler();
- if (th.transactionsSupported())
- {
- Command cmd = new Command()
- { @Override
- public Object execute() throws Error { throw new Error(); } };
- try { th.executeInTransaction( cmd ); }
+ public void testExecuteInTransactionCatchesThrowable() {
+ Graph g = getGraph();
+ TransactionHandler th = g.getTransactionHandler();
+ if (th.transactionsSupported()) {
+ try { th.execute( ()-> { throw new Error() ; } ); }
catch (JenaException x) {}
- }
+ }
}
static final Triple [] tripleArray = tripleArray( "S P O; A R B; X Q Y" );
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestModel.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestModel.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestModel.java
index 99bb767..451f205 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestModel.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestModel.java
@@ -18,11 +18,11 @@
package org.apache.jena.rdf.model.test;
-import org.apache.jena.graph.* ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
import org.apache.jena.graph.test.NodeCreateUtils ;
import org.apache.jena.rdf.model.* ;
import org.apache.jena.rdf.model.impl.ModelCom ;
-import org.apache.jena.shared.* ;
public abstract class AbstractTestModel extends ModelTestBase
{
@@ -41,13 +41,10 @@ public abstract class AbstractTestModel extends ModelTestBase
public void tearDown()
{ model.close(); }
- public void testTransactions()
- {
- Command cmd = new Command()
- { @Override
- public Object execute() { return null; } };
- if (model.supportsTransactions()) model.executeInTransaction( cmd );
- }
+ public void testTransactions() {
+ if ( model.supportsTransactions() )
+ model.executeInTxn(() -> {}) ;
+ }
public void testCreateResourceFromNode()
{
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModel.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModel.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModel.java
index 973c169..986dffa 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModel.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModel.java
@@ -25,7 +25,6 @@ import org.apache.jena.graph.test.NodeCreateUtils ;
import org.apache.jena.rdf.model.* ;
import org.apache.jena.rdf.model.test.helpers.ModelHelper ;
import org.apache.jena.rdf.model.test.helpers.TestingModelFactory ;
-import org.apache.jena.shared.Command ;
import org.apache.jena.test.JenaTestBase ;
import org.junit.Assert;
@@ -229,20 +228,10 @@ public class TestModel extends AbstractModelTestBase
Assert.assertEquals(GraphTestBase.node("b"), s.getObject().asNode());
}
- public void testTransactions()
- {
- final Command cmd = new Command() {
- @Override
- public Object execute()
- {
- return null;
- }
- };
- if (model.supportsTransactions())
- {
- model.executeInTransaction(cmd);
- }
- }
+ public void testTransactions() {
+ if ( model.supportsTransactions() )
+ model.executeInTxn(() -> {}) ;
+ }
public void testURINodeAsResource()
{
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
index b1db216..4be63b8 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
@@ -243,7 +243,7 @@ public class FusekiCmd {
Lang language = RDFLanguages.filenameToLang(filename) ;
if ( language == null )
throw new CmdException("Can't guess language for file: " + filename) ;
- Txn.execWrite(cmdLineConfig.dsg, ()->RDFDataMgr.read(cmdLineConfig.dsg, filename)) ;
+ Txn.executeWrite(cmdLineConfig.dsg, ()->RDFDataMgr.read(cmdLineConfig.dsg, filename)) ;
}
if ( contains(argMemTDB) ) {
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestEmbeddedFuseki.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestEmbeddedFuseki.java b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestEmbeddedFuseki.java
index cbc0adb..581edaa 100644
--- a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestEmbeddedFuseki.java
+++ b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestEmbeddedFuseki.java
@@ -103,7 +103,7 @@ public class TestEmbeddedFuseki {
server.start() ;
try {
// Add while live.
- Txn.execWrite(dsg, ()->{
+ Txn.executeWrite(dsg, ()->{
Quad q = SSE.parseQuad("(_ :s :p _:b)") ;
dsg.add(q);
}) ;
@@ -118,7 +118,7 @@ public class TestEmbeddedFuseki {
@Test public void embedded_04() {
DatasetGraph dsg = dataset() ;
- Txn.execWrite(dsg, ()->{
+ Txn.executeWrite(dsg, ()->{
Quad q = SSE.parseQuad("(_ :s :p _:b)") ;
dsg.add(q);
}) ;
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-sdb/src/main/java/org/apache/jena/sdb/graph/TransactionHandlerSDB.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/graph/TransactionHandlerSDB.java b/jena-sdb/src/main/java/org/apache/jena/sdb/graph/TransactionHandlerSDB.java
index d10aecb..efc73ef 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/graph/TransactionHandlerSDB.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/graph/TransactionHandlerSDB.java
@@ -21,22 +21,19 @@ package org.apache.jena.sdb.graph;
import java.sql.Connection;
import java.sql.SQLException;
-import org.apache.jena.graph.TransactionHandler ;
+import org.apache.jena.graph.impl.TransactionHandlerBase ;
import org.apache.jena.sdb.SDBException ;
import org.apache.jena.sdb.sql.SDBConnection ;
import org.apache.jena.sdb.sql.SDBExceptionSQL ;
-import org.apache.jena.shared.Command ;
-import org.apache.jena.shared.JenaException ;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-public class TransactionHandlerSDB implements TransactionHandler
+public class TransactionHandlerSDB extends TransactionHandlerBase
{
static private Logger log = LoggerFactory.getLogger(TransactionHandlerSDB.class) ;
- Connection sqlConnection ;
- boolean inTransaction ;
+ protected Connection sqlConnection ;
+ protected volatile boolean inTransaction ;
public TransactionHandlerSDB(SDBConnection connection)
{
@@ -103,19 +100,4 @@ public class TransactionHandlerSDB implements TransactionHandler
public void abortSilent()
{ try { abortFinally() ; } catch (SDBExceptionSQL ex) {} }
-
-
- @Override
- public Object executeInTransaction(Command c)
- {
- try {
- begin() ;
- Object result = c.execute();
- commit();
- return result;
- }
- catch (SDBExceptionSQL e) { abortFinally() ; throw e ; }
- catch (JenaException e) { abortFinally() ; throw e ; }
- catch (Throwable e) { abortFinally() ; throw new SDBException(e) ; } // Pass Graph tests.
- }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-sdb/src/main/java/org/apache/jena/sdb/sql/SDBConnection.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/sql/SDBConnection.java b/jena-sdb/src/main/java/org/apache/jena/sdb/sql/SDBConnection.java
index 654626f..006d586 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/sql/SDBConnection.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/sql/SDBConnection.java
@@ -27,6 +27,7 @@ import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
+import java.util.function.Supplier ;
import javax.sql.DataSource;
@@ -136,7 +137,17 @@ public class SDBConnection
{ throw ex ; }
}
- public Object executeInTransaction(Command c) { return getTransactionHandler().executeInTransaction(c) ; }
+ public Object executeInTransaction(Command c) {
+ return getTransactionHandler().executeInTransaction(c) ;
+ }
+
+ public void execute(Runnable action) {
+ getTransactionHandler().execute(action) ;
+ }
+
+ public <T> T executeRtn(Supplier<T> action) {
+ return getTransactionHandler().calculate(action) ;
+ }
public Object executeSQL(final SQLCommand c)
{
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransControl.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransControl.java b/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransControl.java
index 3a597346..385f181 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransControl.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransControl.java
@@ -106,7 +106,7 @@ public class TestTransControl {
DatasetGraph dsg = create() ;
TransactionManager tMgr = TDBInternal.getTransactionManager(dsg) ;
- Txn.execWrite(dsg, ()->{}); // About 20 bytes.
+ Txn.executeWrite(dsg, ()->{}); // About 20 bytes.
assertEquals(1, tMgr.getQueueLength()) ;
}
@@ -131,7 +131,7 @@ public class TestTransControl {
DatasetGraph dsg = create() ;
TransactionManager tMgr = TDBInternal.getTransactionManager(dsg) ;
- Txn.execWrite(dsg, ()->{}); // About 20 bytes.
+ Txn.executeWrite(dsg, ()->{}); // About 20 bytes.
assertEquals(1, tMgr.getQueueLength()) ;
txnAddData(dsg) ;
assertEquals(0, tMgr.getQueueLength()) ;
@@ -145,9 +145,9 @@ public class TestTransControl {
DatasetGraph dsg = create() ;
TransactionManager tMgr = TDBInternal.getTransactionManager(dsg) ;
- Txn.execWrite(dsg, ()->{});
+ Txn.executeWrite(dsg, ()->{});
assertEquals(0, tMgr.getQueueLength()) ;
- Txn.execWrite(dsg, ()->{});
+ Txn.executeWrite(dsg, ()->{});
assertEquals(0, tMgr.getQueueLength()) ;
}
@@ -157,9 +157,9 @@ public class TestTransControl {
DatasetGraph dsg = create() ;
TransactionManager tMgr = TDBInternal.getTransactionManager(dsg) ;
- Txn.execWrite(dsg, ()->{});
+ Txn.executeWrite(dsg, ()->{});
assertEquals(1, tMgr.getQueueLength()) ;
- Txn.execWrite(dsg, ()->{});
+ Txn.executeWrite(dsg, ()->{});
assertEquals(0, tMgr.getQueueLength()) ;
}
@@ -185,9 +185,9 @@ public class TestTransControl {
DatasetGraph dsg = create() ;
TransactionManager tMgr = TDBInternal.getTransactionManager(dsg) ;
- Txn.execWrite(dsg, ()->{});
+ Txn.executeWrite(dsg, ()->{});
assertEquals(1, tMgr.getQueueLength()) ;
- Txn.execWrite(dsg, ()->{});
+ Txn.executeWrite(dsg, ()->{});
assertEquals(0, tMgr.getQueueLength()) ;
}
@@ -201,13 +201,13 @@ public class TestTransControl {
assertEquals(1, tMgr.getQueueLength()) ;
txnAddData(dsg) ;
assertEquals(2, tMgr.getQueueLength()) ;
- Txn.execWrite(dsg, ()->{});
+ Txn.executeWrite(dsg, ()->{});
assertEquals(0, tMgr.getQueueLength()) ;
}
private static void txnAddData(DatasetGraph dsg) {
// Unique blank node.
Quad q = SSE.parseQuad("(_ _:b :p 1)") ;
- Txn.execWrite(dsg, ()->dsg.add(q));
+ Txn.executeWrite(dsg, ()->dsg.add(q));
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/976625b9/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransPromote.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransPromote.java b/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransPromote.java
index d264aa8..1d1d686 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransPromote.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/transaction/TestTransPromote.java
@@ -199,7 +199,7 @@ public class TestTransPromote {
Semaphore sema = new Semaphore(0) ;
Thread t = new Thread(() -> {
sema.release() ;
- Txn.execWrite(dsg, () -> dsg.add(q3)) ;
+ Txn.executeWrite(dsg, () -> dsg.add(q3)) ;
sema.release() ;
}) ;
@@ -255,7 +255,7 @@ public class TestTransPromote {
dsg.add(q2) ;
dsg.commit() ;
dsg.end() ;
- Txn.execRead(dsg, () -> {
+ Txn.executeRead(dsg, () -> {
long x = Iter.count(dsg.find()) ;
assertEquals(2, x) ;
}) ;