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