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 2015/12/15 14:07:22 UTC

[2/4] jena git commit: Introduce interface TransactionalComponent.

Introduce interface TransactionalComponent.

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

Branch: refs/heads/master
Commit: a086675b27d0875126493bdd9f1e4247b87a2bb2
Parents: 39cf986
Author: Andy Seaborne <an...@seaborne.org>
Authored: Mon Dec 14 12:48:18 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Mon Dec 14 12:48:18 2015 +0000

----------------------------------------------------------------------
 .../sparql/core/TransactionalComponent.java     | 46 ++++++++++++++++++++
 .../apache/jena/sparql/core/mem/HexTable.java   | 25 ++++-------
 .../jena/sparql/core/mem/PMapTupleTable.java    | 14 +-----
 .../apache/jena/sparql/core/mem/TriTable.java   | 18 ++------
 .../apache/jena/sparql/core/mem/TupleTable.java |  4 +-
 5 files changed, 60 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/a086675b/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalComponent.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalComponent.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalComponent.java
new file mode 100644
index 0000000..5b6ffd7
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalComponent.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.sparql.core;
+
+import org.apache.jena.query.ReadWrite ;
+
+
+/** Interface that encapulsated the transaction lifecycle for a component in a transaction.
+ *  This is the system interface. {@link Transactional} is the application view of a set of 
+ *  collection of components that together provide transactions.
+ */
+public interface TransactionalComponent 
+{
+    // This interface may evolve in the future.
+    // Having it isolates such changes from the applications usage of Transactional.
+    // One example is the introduction of an explicit Transaction object.
+    
+    /** Start either a READ or WRITE transaction */ 
+    public void begin(ReadWrite readWrite) ;
+    
+    /** Commit a transaction - finish the transaction and make any changes permanent (if a "write" transaction) */  
+    public void commit() ;
+    
+    /** Abort a transaction - finish the transaction and undo any changes (if a "write" transaction) */  
+    public void abort() ;
+    
+    /** Finish the transaction - if a write transaction and commit() has not been called, then abort */  
+    public void end() ;
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/a086675b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/HexTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/HexTable.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/HexTable.java
index a0997cf..b8dffe0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/HexTable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/HexTable.java
@@ -18,12 +18,17 @@
 
 package org.apache.jena.sparql.core.mem;
 
-import static java.lang.ThreadLocal.withInitial;
 import static java.util.EnumSet.noneOf;
 import static java.util.Objects.nonNull;
 import static java.util.stream.Collectors.toMap;
-import static org.apache.jena.sparql.core.mem.QuadTableForm.*;
-import static org.apache.jena.sparql.core.mem.TupleSlot.*;
+import static org.apache.jena.sparql.core.mem.QuadTableForm.GSPO ;
+import static org.apache.jena.sparql.core.mem.QuadTableForm.SPOG ;
+import static org.apache.jena.sparql.core.mem.QuadTableForm.chooseFrom ;
+import static org.apache.jena.sparql.core.mem.QuadTableForm.tableForms ;
+import static org.apache.jena.sparql.core.mem.TupleSlot.GRAPH ;
+import static org.apache.jena.sparql.core.mem.TupleSlot.OBJECT ;
+import static org.apache.jena.sparql.core.mem.TupleSlot.PREDICATE ;
+import static org.apache.jena.sparql.core.mem.TupleSlot.SUBJECT ;
 
 import java.util.EnumMap;
 import java.util.Map;
@@ -42,17 +47,6 @@ import org.apache.jena.sparql.core.Quad;
  */
 public class HexTable implements QuadTable {
 
-    private final ThreadLocal<Boolean> isInTransaction = withInitial(() -> false);
-
-    @Override
-    public boolean isInTransaction() {
-        return isInTransaction.get();
-    }
-
-    protected void isInTransaction(final boolean b) {
-        isInTransaction.set(b);
-    }
-
     private final Map<QuadTableForm, QuadTable> indexBlock = new EnumMap<QuadTableForm, QuadTable>(
         tableForms().collect(toMap(x -> x, QuadTableForm::get)));
 
@@ -102,20 +96,17 @@ public class HexTable implements QuadTable {
 
     @Override
     public void begin(final ReadWrite rw) {
-        isInTransaction(true);
         indexBlock().values().forEach(table -> table.begin(rw));
     }
 
     @Override
     public void end() {
         indexBlock().values().forEach(QuadTable::end);
-        isInTransaction.remove();
     }
 
     @Override
     public void commit() {
         indexBlock().values().forEach(QuadTable::commit);
-        isInTransaction(false);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/a086675b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTupleTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTupleTable.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTupleTable.java
index e70b0a0..33d81c7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTupleTable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTupleTable.java
@@ -61,17 +61,6 @@ public abstract class PMapTupleTable<TupleMapType, TupleType> implements TupleTa
         return local;
     }
 
-    private final ThreadLocal<Boolean> isInTransaction = withInitial(() -> false);
-
-    @Override
-    public boolean isInTransaction() {
-        return isInTransaction.get();
-    }
-
-    protected void isInTransaction(final boolean b) {
-        isInTransaction.set(b);
-    }
-
     private final String tableName;
 
     /**
@@ -93,14 +82,13 @@ public abstract class PMapTupleTable<TupleMapType, TupleType> implements TupleTa
 
     @Override
     public void begin(final ReadWrite rw) {
-        isInTransaction(true);
+        // local is never used.
     }
 
     @Override
     public void end() {
         debug("Abandoning transactional reference.");
         local.remove();
-        isInTransaction.remove();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/a086675b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TriTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TriTable.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TriTable.java
index e5ad562..35544c5 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TriTable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TriTable.java
@@ -18,13 +18,14 @@
 
 package org.apache.jena.sparql.core.mem;
 
-import static java.lang.ThreadLocal.withInitial;
 import static java.util.EnumSet.noneOf;
 import static java.util.Objects.nonNull;
 import static java.util.stream.Collectors.toMap;
 import static org.apache.jena.sparql.core.mem.TripleTableForm.chooseFrom;
 import static org.apache.jena.sparql.core.mem.TripleTableForm.tableForms;
-import static org.apache.jena.sparql.core.mem.TupleSlot.*;
+import static org.apache.jena.sparql.core.mem.TupleSlot.OBJECT ;
+import static org.apache.jena.sparql.core.mem.TupleSlot.PREDICATE ;
+import static org.apache.jena.sparql.core.mem.TupleSlot.SUBJECT ;
 
 import java.util.EnumMap;
 import java.util.Map;
@@ -51,17 +52,6 @@ public class TriTable implements TripleTable {
         return indexBlock;
     }
 
-    private final ThreadLocal<Boolean> isInTransaction = withInitial(() -> false);
-
-    @Override
-    public boolean isInTransaction() {
-        return isInTransaction.get();
-    }
-
-    protected void isInTransaction(final boolean b) {
-        isInTransaction.set(b);
-    }
-
     @Override
     public void commit() {
         indexBlock().values().forEach(TripleTable::commit);
@@ -77,7 +67,6 @@ public class TriTable implements TripleTable {
     @Override
     public void end() {
         indexBlock().values().forEach(TripleTable::end);
-        isInTransaction.remove();
     }
 
     @Override
@@ -106,7 +95,6 @@ public class TriTable implements TripleTable {
 
     @Override
     public void begin(final ReadWrite rw) {
-        isInTransaction(true);
         indexBlock().values().forEach(table -> table.begin(rw));
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/a086675b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TupleTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TupleTable.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TupleTable.java
index ad22f6c..4ac4909 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TupleTable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/TupleTable.java
@@ -18,14 +18,14 @@
 
 package org.apache.jena.sparql.core.mem;
 
-import org.apache.jena.sparql.core.Transactional;
+import org.apache.jena.sparql.core.TransactionalComponent ;
 
 /**
  * A mutable table of tuples. The expectation is that some kind of query functionality will be provided by subtypes.
  *
  * @param <TupleType> the type of tuple stored herein
  */
-public interface TupleTable<TupleType> extends Transactional {
+public interface TupleTable<TupleType> extends TransactionalComponent {
 
     /**
      * Add a tuple to the table