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 2018/03/06 16:29:51 UTC
[01/12] jena git commit: Skolemization function
Repository: jena
Updated Branches:
refs/heads/master 81cd7a1c1 -> 10aa1397f
Skolemization function
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/4a819f41
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/4a819f41
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/4a819f41
Branch: refs/heads/master
Commit: 4a819f41ac8d19cb9bc043e58f9997b55143f54a
Parents: 7a11a6b
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Feb 27 23:22:01 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Feb 27 23:23:30 2018 +0000
----------------------------------------------------------------------
.../src/main/java/org/apache/jena/riot/system/RiotLib.java | 6 ++++++
1 file changed, 6 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/4a819f41/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
index 769f8af..8966735 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
@@ -50,6 +50,7 @@ import org.apache.jena.sparql.ARQConstants;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.jena.sparql.core.DatasetGraphFactory;
import org.apache.jena.sparql.core.Quad;
+import org.apache.jena.sparql.expr.nodevalue.NodeFunctions;
import org.apache.jena.sparql.util.Context;
import org.apache.jena.util.iterator.ExtendedIterator;
@@ -74,6 +75,11 @@ public class RiotLib
}
return NodeFactory.createURI(iri);
}
+
+ /** "Skolemize": BlankNode to IRI else return node unchanged. */
+ public static Node blankNodeToIri(Node node) {
+ return NodeFunctions.blankNodeToIri(node);
+ }
/** Test whether a IRI is a ARQ-encoded blank node. */
public static boolean isBNodeIRI(String iri) {
[11/12] jena git commit: JENA-1492: Merge commit 'refs/pull/369/head'
of https://github.com/apache/jena
Posted by an...@apache.org.
JENA-1492: Merge commit 'refs/pull/369/head' of https://github.com/apache/jena
This closes #369.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/642a17ce
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/642a17ce
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/642a17ce
Branch: refs/heads/master
Commit: 642a17cef8e4db9b722c1782a706d91c6b35e924
Parents: 4100e44 1f14950
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Mar 6 16:16:08 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Mar 6 16:16:08 2018 +0000
----------------------------------------------------------------------
.../arq/examples/riot/ExJsonLD.java | 14 +-
.../org/apache/jena/query/DatasetFactory.java | 32 ++-
.../jena/query/QueryExecutionFactory.java | 4 +-
.../org/apache/jena/riot/system/RiotLib.java | 25 +-
.../org/apache/jena/sparql/algebra/Algebra.java | 4 +-
.../jena/sparql/core/DatasetGraphFactory.java | 21 +-
.../jena/sparql/core/DatasetGraphMapLink.java | 101 ++++----
.../jena/sparql/core/DatasetGraphOne.java | 51 ++--
.../jena/sparql/core/DatasetGraphWithLock.java | 10 +-
.../jena/sparql/core/DatasetGraphZero.java | 1 +
.../apache/jena/sparql/core/DatasetImpl.java | 6 +-
.../org/apache/jena/sparql/core/DatasetOne.java | 84 +++++++
.../jena/sparql/core/TransactionalLock.java | 12 +-
.../jena/sparql/core/TxnDataset2Graph.java | 241 +++++++++++++++++++
.../sparql/core/assembler/AssemblerUtils.java | 12 +-
.../core/assembler/DatasetAssemblerVocab.java | 8 +-
.../core/assembler/DatasetNullAssembler.java | 59 +++++
.../core/assembler/DatasetOneAssembler.java | 82 +++++++
.../org/apache/jena/sparql/graph/GraphZero.java | 9 +-
.../apache/jena/sparql/util/QueryExecUtils.java | 2 +-
.../query/TestParameterizedSparqlString.java | 2 +-
.../jena/riot/lang/ParserTestBaseLib.java | 2 +-
.../jena/riot/writer/TestJsonLDWriter.java | 4 +-
.../sparql/api/TestQueryExecutionTimeout1.java | 2 +-
.../sparql/api/TestQueryExecutionTimeout2.java | 2 +-
.../jena/sparql/resultset/TestResultSet.java | 9 +-
.../transaction/TestTransactionSupport.java | 16 +-
.../jena/dboe/trans/bplustree/BPTreeNode.java | 18 --
.../txn/TransactionalComponentByLock.java | 127 ++++++++++
.../dboe/transaction/txn/TransactionalMRSW.java | 137 -----------
.../jena/tdb2/setup/AbstractTDBBuilder.java | 2 +-
.../apache/jena/tdb2/store/DatasetGraphTDB.java | 32 ++-
.../jena/tdb2/store/DatasetPrefixesTDB.java | 8 +
.../jena/tdb2/store/GraphViewSwitchable.java | 11 +
.../org/apache/jena/tdb2/store/StorageTDB.java | 5 +-
.../jena/test/assembler/TS_Assembler.java | 31 +++
.../test/assembler/TestDatasetAssembler.java | 145 +++++++++++
.../rdfconnection/TestRDFConnectionRemote.java | 3 +-
.../jena/test/txn/TS_TranactionIntegration.java | 31 +++
.../apache/jena/test/txn/TestDataset2Graph.java | 160 ++++++++++++
.../testing/Assembler/assem_dsg1_1.ttl | 11 +
.../testing/Assembler/assem_dsg1_2.ttl | 15 ++
.../testing/Assembler/assem_dsg1_3.ttl | 15 ++
.../testing/Assembler/assem_dsg1_bad_1.ttl | 15 ++
.../testing/Assembler/assem_dsg1_inf_tdb1.ttl | 31 +++
.../testing/Assembler/assem_dsg1_inf_tdb2.ttl | 30 +++
.../testing/Assembler/assem_dsg_sink.ttl | 11 +
.../testing/Assembler/assem_dsg_zero.ttl | 9 +
.../testing/Assembler/data.ttl | 5 +
.../jena/rdfconnection/RDFConnection.java | 2 -
.../jena/rdfconnection/RDFConnectionLocal.java | 3 +-
51 files changed, 1352 insertions(+), 320 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/642a17ce/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
----------------------------------------------------------------------
[09/12] jena git commit: JENA-1498: Fuseki backup script
Posted by an...@apache.org.
JENA-1498: Fuseki backup script
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/1cb843be
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/1cb843be
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/1cb843be
Branch: refs/heads/master
Commit: 1cb843be5435a65e99538faa1f4d7eaaeee1d92d
Parents: 7f40b79
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Mar 5 18:54:22 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Mar 5 18:54:22 2018 +0000
----------------------------------------------------------------------
jena-fuseki2/apache-jena-fuseki/backup | 22 --------------
jena-fuseki2/apache-jena-fuseki/fuseki-backup | 34 ++++++++++++++++++++++
2 files changed, 34 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/1cb843be/jena-fuseki2/apache-jena-fuseki/backup
----------------------------------------------------------------------
diff --git a/jena-fuseki2/apache-jena-fuseki/backup b/jena-fuseki2/apache-jena-fuseki/backup
deleted file mode 100755
index a3cb0b1..0000000
--- a/jena-fuseki2/apache-jena-fuseki/backup
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# 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.
-
-DB="ds"
-
-curl -v -XPOST 'http://localhost:3030/$/sleep?interval=10000'
-
-curl -v 'http://localhost:3030/$/tasks'
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/1cb843be/jena-fuseki2/apache-jena-fuseki/fuseki-backup
----------------------------------------------------------------------
diff --git a/jena-fuseki2/apache-jena-fuseki/fuseki-backup b/jena-fuseki2/apache-jena-fuseki/fuseki-backup
new file mode 100755
index 0000000..4a1df6b
--- /dev/null
+++ b/jena-fuseki2/apache-jena-fuseki/fuseki-backup
@@ -0,0 +1,34 @@
+#!/bin/bash
+# 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.
+
+# Simple backup script for Fuseki - adapt as needed.
+# You may need to set the URL for example.
+# This script trigger the backup. It does not wait for it to complete.
+# Backups are placed in the /backups/ directory.
+
+if [[ $# != 1 ]]
+then
+ echo "Usage : $(basename $0) NAME" 1>&2
+ exit 1
+fi
+
+NAME="$1"
+
+curl -XPOST "http://localhost:3030/\$/backup/${NAME}"
+
+# You can track the background task with:
+#curl 'http://localhost:3030/$/tasks'
[05/12] jena git commit: Trigger promotion when prefix changes are
made.
Posted by an...@apache.org.
Trigger promotion when prefix changes are made.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/41e2eb1b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/41e2eb1b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/41e2eb1b
Branch: refs/heads/master
Commit: 41e2eb1b067f0f8217e665590071e8d18c085685
Parents: 4e724c2
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Mar 4 14:26:13 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Mar 4 14:26:13 2018 +0000
----------------------------------------------------------------------
.../apache/jena/tdb2/setup/AbstractTDBBuilder.java | 2 +-
.../org/apache/jena/tdb2/store/DatasetGraphTDB.java | 15 +++++----------
.../apache/jena/tdb2/store/DatasetPrefixesTDB.java | 8 ++++++++
.../java/org/apache/jena/tdb2/store/StorageTDB.java | 5 ++---
4 files changed, 16 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/41e2eb1b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/setup/AbstractTDBBuilder.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/setup/AbstractTDBBuilder.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/setup/AbstractTDBBuilder.java
index 6bcb2f5..82f56c9 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/setup/AbstractTDBBuilder.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/setup/AbstractTDBBuilder.java
@@ -189,7 +189,7 @@ public abstract class AbstractTDBBuilder {
NodeTupleTable prefixTable = new NodeTupleTableConcrete(primary.length(),
prefixIndexes,
prefixNodes);
- DatasetPrefixesTDB prefixes = new DatasetPrefixesTDB(prefixTable);
+ DatasetPrefixesTDB prefixes = new DatasetPrefixesTDB(prefixTable);
log().debug("Prefixes: "+primary+" :: "+String.join(",", indexes));
return prefixes;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/41e2eb1b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
index 2148930..904bc50 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
@@ -73,7 +73,7 @@ public class DatasetGraphTDB extends DatasetGraphTriplesQuads
/** Application should not create a {@code DatasetGraphTDB} directly */
public DatasetGraphTDB(TransactionalSystem txnSystem,
- TripleTable tripleTable, QuadTable quadTable, DatasetPrefixStorage prefixes,
+ TripleTable tripleTable, QuadTable quadTable, DatasetPrefixesTDB prefixes,
ReorderTransformation transform, Location location, StoreParams params) {
reset(txnSystem, tripleTable, quadTable, prefixes, location, params) ;
this.transform = transform ;
@@ -81,16 +81,9 @@ public class DatasetGraphTDB extends DatasetGraphTriplesQuads
}
public void reset(TransactionalSystem txnSystem,
- TripleTable tripleTable, QuadTable quadTable, DatasetPrefixStorage prefixes,
+ TripleTable tripleTable, QuadTable quadTable, DatasetPrefixesTDB prefixes,
Location location, StoreParams params) {
-// this.tripleTable = tripleTable ;
-// this.quadTable = quadTable ;
-// this.location = location ;
-// this.prefixes = prefixes ;
-// this.storeParams = params ;
this.txnSystem = txnSystem ;
- // XXX Threading?
- // XXX (re)set transaction components in TransactionCoordinator??
this.storage = new StorageTDB(tripleTable, quadTable, prefixes, location, params);
this.defaultGraphTDB = getDefaultGraphTDB();
}
@@ -171,7 +164,7 @@ public class DatasetGraphTDB extends DatasetGraphTriplesQuads
}
// Promotion
- private void requireWriteTxn() {
+ /*package*/ void requireWriteTxn() {
Transaction txn = txnSystem.getThreadTransaction() ;
if ( txn == null )
throw new TransactionException("Not in a transaction") ;
@@ -300,6 +293,8 @@ public class DatasetGraphTDB extends DatasetGraphTriplesQuads
public DatasetPrefixStorage getPrefixes() {
checkNotClosed();
+ // Need for requireWriteTxn
+ storage.prefixes.setDatasetGraphTDB(this);
return storage.prefixes;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/41e2eb1b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetPrefixesTDB.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetPrefixesTDB.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetPrefixesTDB.java
index e1b7e7b..982e8da 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetPrefixesTDB.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetPrefixesTDB.java
@@ -44,11 +44,17 @@ public class DatasetPrefixesTDB implements DatasetPrefixStorage
static final String unamedGraphURI = "" ;
private final NodeTupleTable nodeTupleTable ;
+ private DatasetGraphTDB dataset = null;
public DatasetPrefixesTDB(NodeTupleTable nodeTupleTable) {
this.nodeTupleTable = nodeTupleTable ;
}
+ // Needed because DatasetPrefixesTDB is created before DatasetGraphTDB
+ /*package*/ void setDatasetGraphTDB(DatasetGraphTDB dsg) {
+ this.dataset = dsg;
+ }
+
@Override
public void loadPrefixMapping(String graphName, PrefixMapping pmap) {
Node g = NodeFactory.createURI(graphName) ;
@@ -62,6 +68,7 @@ public class DatasetPrefixesTDB implements DatasetPrefixStorage
@Override
public synchronized void insertPrefix(String graphName, String prefix, String uri) {
+ dataset.requireWriteTxn();
Node g = NodeFactory.createURI(graphName) ;
Node p = NodeFactory.createLiteral(prefix) ;
Node u = NodeFactory.createURI(uri) ;
@@ -141,6 +148,7 @@ public class DatasetPrefixesTDB implements DatasetPrefixStorage
/** Remove by pattern */
private synchronized void removeAll(Node g, Node p, Node uri) {
+ dataset.requireWriteTxn();
Iterator<Tuple<Node>> iter = nodeTupleTable.find(g, p, uri) ;
List<Tuple<Node>> list = Iter.toList(iter) ; // Materialize.
Iter.close(iter) ;
http://git-wip-us.apache.org/repos/asf/jena/blob/41e2eb1b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/StorageTDB.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/StorageTDB.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/StorageTDB.java
index f4d7ac6..4998838 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/StorageTDB.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/StorageTDB.java
@@ -19,18 +19,17 @@
package org.apache.jena.tdb2.store;
import org.apache.jena.dboe.base.file.Location;
-import org.apache.jena.sparql.core.DatasetPrefixStorage;
import org.apache.jena.tdb2.setup.StoreParams;
public class StorageTDB {
/*package*/ final TripleTable tripleTable;
/*package*/ final QuadTable quadTable;
- /*package*/ final DatasetPrefixStorage prefixes;
+ /*package*/ final DatasetPrefixesTDB prefixes;
/*package*/ final Location location;
/*package*/ final StoreParams storeParams;
- public StorageTDB(TripleTable tripleTable, QuadTable quadTable, DatasetPrefixStorage prefixes, Location location, StoreParams params) {
+ public StorageTDB(TripleTable tripleTable, QuadTable quadTable, DatasetPrefixesTDB prefixes, Location location, StoreParams params) {
super();
this.tripleTable = tripleTable;
this.quadTable = quadTable;
[02/12] jena git commit: Align to the style of
sparql.core.TransactionalLock.
Posted by an...@apache.org.
Align to the style of sparql.core.TransactionalLock.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/e58cbcb0
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/e58cbcb0
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/e58cbcb0
Branch: refs/heads/master
Commit: e58cbcb043ed0c18f9df0f26b2da66c8745e3963
Parents: b75fcce
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Feb 26 16:42:03 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Feb 27 23:23:30 2018 +0000
----------------------------------------------------------------------
.../txn/TransactionalComponentByLock.java | 127 +++++++++++++++++
.../dboe/transaction/txn/TransactionalMRSW.java | 137 -------------------
2 files changed, 127 insertions(+), 137 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/e58cbcb0/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalComponentByLock.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalComponentByLock.java b/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalComponentByLock.java
new file mode 100644
index 0000000..879548d
--- /dev/null
+++ b/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalComponentByLock.java
@@ -0,0 +1,127 @@
+/*
+ * 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.dboe.transaction.txn;
+
+import java.nio.ByteBuffer ;
+
+import org.apache.jena.atlas.logging.Log ;
+
+import org.apache.jena.query.ReadWrite ;
+import org.apache.jena.shared.Lock;
+import org.apache.jena.shared.LockMRSW;
+
+// ** Not used currently **
+/** Implementation of the component interface for {@link TransactionalComponent}.
+ * Useful for in-memory transactions that do not provide durability or abort (undo).
+ * When retro fitting to other systems, that may be the best that can be done.
+ */
+public class TransactionalComponentByLock extends TransactionalComponentLifecycle<Object> {
+ //See org.apache.jena.sparql.core.TransactionalLock
+ private Lock lock = new LockMRSW();
+
+ private TransactionalComponentByLock(ComponentId componentId) {
+ super(componentId) ;
+ }
+
+ // ---- Recovery phase
+ @Override
+ public void startRecovery() {}
+
+ @Override
+ public void recover(ByteBuffer ref) {
+ Log.warn(this, "Called to recover a transaction (ignored)") ;
+ }
+
+ @Override
+ public void finishRecovery() { }
+
+ @Override
+ public void cleanStart() {}
+
+ @Override
+ protected Object _begin(ReadWrite readWrite, TxnId thisTxnId) {
+ if ( isWriteTxn() )
+ startWriteTxn();
+ else
+ startReadTxn();
+ return createState();
+ }
+
+ private Object createState() {
+ return new Object();
+ }
+
+ @Override
+ protected Object _promote(TxnId txnId, Object state) {
+ // We have a read lock, the transaction coordinator has said
+ // it's OK (from it's point-of-view) to promote so this should succeed.
+ // We have a read lock - there are no other writers.
+
+ // No lock promotion.
+ // Best we can do is unlock and lock again:-(
+ // This is "read committed"
+ if ( isReadTxn() ) {
+ finishReadTxn();
+ startWriteTxn();
+ }
+ return createState();
+ }
+
+ protected void startReadTxn() { lock.enterCriticalSection(Lock.READ); }
+ protected void startWriteTxn() { lock.enterCriticalSection(Lock.WRITE); }
+ protected void finishReadTxn() { lock.leaveCriticalSection(); }
+ protected void finishWriteTxn() { lock.leaveCriticalSection(); }
+
+ @Override
+ protected ByteBuffer _commitPrepare(TxnId txnId, Object obj) {
+ return null ;
+ }
+
+ @Override
+ protected void _commit(TxnId txnId, Object obj) {
+ clearup() ;
+ }
+
+ @Override
+ protected void _commitEnd(TxnId txnId, Object obj) {
+ clearup() ;
+ }
+
+ @Override
+ protected void _abort(TxnId txnId, Object obj) {
+ clearup() ;
+ }
+
+ @Override
+ protected void _complete(TxnId txnId, Object obj) {
+ }
+
+ @Override
+ protected void _shutdown() {
+ lock = null ;
+ }
+
+ private void clearup() {
+ if ( isWriteTxn() )
+ finishWriteTxn();
+ else
+ finishReadTxn();
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/e58cbcb0/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalMRSW.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalMRSW.java b/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalMRSW.java
deleted file mode 100644
index 0aa741a..0000000
--- a/jena-db/jena-dboe-transaction/src/main/java/org/apache/jena/dboe/transaction/txn/TransactionalMRSW.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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.dboe.transaction.txn;
-
-import java.nio.ByteBuffer ;
-import java.util.concurrent.locks.Lock ;
-import java.util.concurrent.locks.ReadWriteLock ;
-import java.util.concurrent.locks.ReentrantReadWriteLock ;
-
-import org.apache.jena.atlas.logging.Log ;
-
-import org.apache.jena.query.ReadWrite ;
-
-/** Implementation of the component interface for {@link TransactionalComponent}.
- * Useful for in-memory transactions that do not provide durability or abort (undo).
- * When retro fitting to other systems, that may be the best that can be done.
- */
-public class TransactionalMRSW extends TransactionalComponentLifecycle<Object> {
- // MRSW implementation of TransactionMVCC
- // XXX Update to Jena style TransactionalLock
- private ReadWriteLock lock = new ReentrantReadWriteLock() ;
-
- public TransactionalMRSW(ComponentId componentId) {
- super(componentId) ;
- }
-
- // ---- Recovery phase
- @Override
- public void startRecovery() {}
-
- @Override
- public void recover(ByteBuffer ref) {
- Log.warn(this, "Called to recover a transaction (ignored)") ;
- }
-
- @Override
- public void finishRecovery() { }
-
- @Override
- public void cleanStart() {}
-
- private Lock getLock() {
- return ( ReadWrite.WRITE.equals(getReadWriteMode()) ) ? lock.writeLock() : lock.readLock() ;
- }
-
- @Override
- protected Object _begin(ReadWrite readWrite, TxnId thisTxnId) {
- Lock lock = getLock() ;
- // This is the point that makes this MRSW (readers OR writer), not MR+SW (readers and a writer)
- lock.lock();
- if ( isWriteTxn() )
- startWriteTxn();
- else
- startReadTxn();
- return createState();
- }
-
- private Object createState() {
- return new Object();
- }
-
- @Override
- protected Object _promote(TxnId txnId, Object state) {
- // We have a read lock, the transaction coordinator has said
- // it's OK (from it's point-of-view) to promote so this should succeed.
- // We have a read lock - theer are no other writers.
- boolean b = lock.writeLock().tryLock();
- if ( ! b ) {
- Log.warn(this, "Failed to promote");
- return false;
- }
- lock.readLock().unlock();
- return createState();
- }
-
- // Checks.
-
- protected void startReadTxn() {}
- protected void startWriteTxn() {}
- protected void finishReadTxn() {}
- protected void finishWriteTxn() {}
-
- @Override
- protected ByteBuffer _commitPrepare(TxnId txnId, Object obj) {
- return null ;
- }
-
- @Override
- protected void _commit(TxnId txnId, Object obj) {
- clearup() ;
- }
-
- @Override
- protected void _commitEnd(TxnId txnId, Object obj) {
- clearup() ;
- }
-
- @Override
- protected void _abort(TxnId txnId, Object obj) {
- clearup() ;
- }
-
- @Override
- protected void _complete(TxnId txnId, Object obj) {
- }
-
- @Override
- protected void _shutdown() {
- lock = null ;
- }
-
- private void clearup() {
- Lock lock = getLock() ;
- if ( isWriteTxn() )
- finishWriteTxn();
- else
- finishReadTxn();
- lock.unlock();
- }
-}
-
[06/12] jena git commit: Add assemblers for the lesser cases of Zero
and Sink datasets.
Posted by an...@apache.org.
Add assemblers for the lesser cases of Zero and Sink datasets.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/4744cfc8
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/4744cfc8
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/4744cfc8
Branch: refs/heads/master
Commit: 4744cfc82cc355b67152d73192b53ebb12942205
Parents: 41e2eb1
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Mar 4 15:40:11 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Mar 4 15:40:23 2018 +0000
----------------------------------------------------------------------
.../jena/sparql/core/TxnDataset2Graph.java | 17 ++--
.../sparql/core/assembler/AssemblerUtils.java | 12 ++-
.../core/assembler/DatasetAssemblerVocab.java | 5 +-
.../assembler/DatasetGraphOneAssembler.java | 82 --------------------
.../core/assembler/DatasetNullAssembler.java | 59 ++++++++++++++
.../core/assembler/DatasetOneAssembler.java | 82 ++++++++++++++++++++
.../jena/sparql/resultset/TestResultSet.java | 9 ++-
7 files changed, 168 insertions(+), 98 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/4744cfc8/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
index d03cc6e..027d1ed 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
@@ -55,13 +55,16 @@ import org.apache.jena.sparql.JenaTransactionException;
* @See {@link DatasetGraphOne}
*/
public class TxnDataset2Graph extends TransactionalLock {
- /** Control whether to pass down transactions from the dataset to the graph in the dataset.
- * This should be set to "true".
- * This is temporary flag during the transition because the change at Jena 3.7.0
- * needs to be proven in real deployments as well as testing.
- * "false" restores the Jena 3.6.0 and before behaviour (transactions not passed down).
- * See JENA-1492.
- * @deprecated This flag will be removed.
+ /**
+ * Control whether to pass down transactions from the dataset to the graph in the
+ * dataset. This should be set to "true"; setting it "false" causes the onld,
+ * no-transaction passing behaviour.
+ * <p>
+ * This is temporary flag during the transition because the change at Jena 3.7.0 needs
+ * to be proven in real deployments as well as testing. "false" restores the Jena
+ * 3.6.0 and before behaviour (transactions not passed down). See JENA-1492.
+ *
+ * @deprecated This flag will be removed.
*/
@Deprecated
public static boolean TXN_DSG_GRAPH = true;
http://git-wip-us.apache.org/repos/asf/jena/blob/4744cfc8/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
index d80d02c..a9aa7bb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
@@ -37,6 +37,7 @@ import org.apache.jena.sparql.util.TypeNotUniqueException ;
import org.apache.jena.sparql.util.graph.GraphUtils ;
import org.apache.jena.system.JenaSystem ;
import org.apache.jena.vocabulary.RDFS ;
+import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.*;
public class AssemblerUtils
{
@@ -56,9 +57,12 @@ public class AssemblerUtils
if ( initialized )
return ;
initialized = true ;
- registerDataset(DatasetAssemblerVocab.tDataset, new DatasetAssembler()) ;
- registerDataset(DatasetAssemblerVocab.tMemoryDataset, new InMemDatasetAssembler()) ;
- registerDataset(DatasetAssemblerVocab.tDatasetTxnMem, new InMemDatasetAssembler()) ;
+ registerDataset(tDataset, new DatasetAssembler()) ;
+ registerDataset(tDatasetOne, new DatasetOneAssembler()) ;
+ registerDataset(tDatasetZero, new DatasetNullAssembler(tDatasetZero)) ;
+ registerDataset(tDatasetSink, new DatasetNullAssembler(tDatasetSink)) ;
+ registerDataset(tMemoryDataset, new InMemDatasetAssembler()) ;
+ registerDataset(tDatasetTxnMem, new InMemDatasetAssembler()) ;
}
private static Model modelExtras = ModelFactory.createDefaultModel() ;
@@ -118,7 +122,7 @@ public class AssemblerUtils
return null ;
} catch (TypeNotUniqueException ex)
- { throw new ARQException("Multiple types for: "+DatasetAssemblerVocab.tDataset) ; }
+ { throw new ARQException("Multiple types for: "+tDataset) ; }
return Assembler.general.open(root) ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4744cfc8/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
index 5d26abe..d55d7d1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
@@ -35,8 +35,11 @@ public class DatasetAssemblerVocab
// In-memory dataset
public static final Resource tDatasetTxnMem = ResourceFactory.createResource(NS+"DatasetTxnMem") ;
+
+ // Specialised datasets
public static final Resource tMemoryDataset = ResourceFactory.createResource(NS+"MemoryDataset") ;
- public static final Resource tDatasetNull = ResourceFactory.createResource(NS+"DatasetNull") ;
+ public static final Resource tDatasetZero = ResourceFactory.createResource(NS+"RDFDatasetZero") ;
+ public static final Resource tDatasetSink = ResourceFactory.createResource(NS+"RDFDatasetSink") ;
public static final Property pDefaultGraph = ResourceFactory.createProperty(NS, "defaultGraph") ;
public static final Property pNamedGraph = ResourceFactory.createProperty(NS, "namedGraph") ;
http://git-wip-us.apache.org/repos/asf/jena/blob/4744cfc8/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java
deleted file mode 100644
index ed33ebf..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.assembler;
-
-import java.util.List;
-
-import org.apache.jena.assembler.Assembler;
-import org.apache.jena.assembler.Mode;
-import org.apache.jena.assembler.assemblers.AssemblerBase;
-import org.apache.jena.assembler.exceptions.AssemblerException;
-import org.apache.jena.query.Dataset;
-import org.apache.jena.query.DatasetFactory;
-import org.apache.jena.rdf.model.Model;
-import org.apache.jena.rdf.model.RDFNode;
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.sparql.graph.GraphFactory;
-import org.apache.jena.sparql.util.graph.GraphUtils;
-
-/**
- * An assembler that creates a dataset around a single graph. The dataset created is
- * fixed; graphs can not be added or removed. The wrapped graph is the default graph of
- * the dataset.
- * <p>
- * General datasets and SPARQL Update can create graphs by inserting a quad.
- * The dataset returned by this assembler does not support that.
- *
- * @see DatasetAssembler {@code DatasetAssembler}, for a general dataset.
- * @see InMemDatasetAssembler {@code InMemDatasetAssembler}, for a fully transactional, in-memory dataset.
- */
-public class DatasetGraphOneAssembler extends AssemblerBase {
- public static Resource getType() {
- return DatasetAssemblerVocab.tDatasetOne;
- }
-
- @Override
- public Object open(Assembler a, Resource root, Mode mode) {
- Dataset ds = createDataset(a, root, mode);
- return ds;
- }
-
- public Dataset createDataset(Assembler a, Resource root, Mode mode) {
- // Can use ja:graph or ja:defaultGraph but not both.
- Resource dftGraphDesc1 = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pDefaultGraph);
- Resource dftGraphDesc2 = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pGraph);
-
- if ( dftGraphDesc1 != null && dftGraphDesc2 != null )
- throw new AssemblerException(root, "Found both ja:graph and ja:defaultGraph");
-
- Resource graphDesc = ( dftGraphDesc1 != null) ? dftGraphDesc1 : dftGraphDesc2 ;
- Model model;
- if ( graphDesc != null )
- model = a.openModel(graphDesc);
- else
- // Assembler description did not define one.
- model = GraphFactory.makeDefaultModel();
- Dataset ds = DatasetFactory.wrap(model);
-
- List<RDFNode> nodes = GraphUtils.multiValue(root, DatasetAssemblerVocab.pNamedGraph);
- if ( ! nodes.isEmpty() ) {
- String x = DatasetAssemblerVocab.tDatasetOne.getLocalName();
- throw new AssemblerException(root, "A "+x+" dataset can only hold a default graph, and no named graphs");
- }
- AssemblerUtils.setContext(root, ds.getContext());
- return ds;
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/4744cfc8/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetNullAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetNullAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetNullAssembler.java
new file mode 100644
index 0000000..f82d869
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetNullAssembler.java
@@ -0,0 +1,59 @@
+/*
+ * 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.assembler;
+
+import org.apache.jena.assembler.Assembler;
+import org.apache.jena.assembler.Mode;
+import org.apache.jena.assembler.assemblers.AssemblerBase;
+import org.apache.jena.atlas.lib.InternalErrorException;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.sparql.core.DatasetGraph;
+import org.apache.jena.sparql.core.DatasetGraphSink;
+import org.apache.jena.sparql.core.DatasetGraphZero;
+
+/**
+ * An assembler that creates datasets that do nothing, either a sink or a always empty one.
+
+ * @see DatasetGraphSink
+ * @see DatasetGraphZero
+ */
+
+public class DatasetNullAssembler extends AssemblerBase {
+ private final Resource tDataset;
+
+ public DatasetNullAssembler(Resource tDataset) {
+ this.tDataset = tDataset;
+ }
+
+ @Override
+ public Object open(Assembler a, Resource root, Mode mode) {
+ DatasetGraph dsg;
+ if ( DatasetAssemblerVocab.tDatasetSink.equals(tDataset) )
+ dsg = new DatasetGraphSink();
+ else if ( DatasetAssemblerVocab.tDatasetZero.equals(tDataset) )
+ dsg = new DatasetGraphZero();
+ else
+ throw new InternalErrorException();
+ Dataset ds = DatasetFactory.wrap(dsg);
+ AssemblerUtils.setContext(root, ds.getContext());
+ return ds;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/4744cfc8/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetOneAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetOneAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetOneAssembler.java
new file mode 100644
index 0000000..70002d5
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetOneAssembler.java
@@ -0,0 +1,82 @@
+/*
+ * 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.assembler;
+
+import java.util.List;
+
+import org.apache.jena.assembler.Assembler;
+import org.apache.jena.assembler.Mode;
+import org.apache.jena.assembler.assemblers.AssemblerBase;
+import org.apache.jena.assembler.exceptions.AssemblerException;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.sparql.graph.GraphFactory;
+import org.apache.jena.sparql.util.graph.GraphUtils;
+
+/**
+ * An assembler that creates a dataset around a single graph. The dataset created is
+ * fixed; graphs can not be added or removed. The wrapped graph is the default graph of
+ * the dataset.
+ * <p>
+ * General datasets and SPARQL Update can create graphs by inserting a quad.
+ * The dataset returned by this assembler does not support that.
+ *
+ * @see DatasetAssembler {@code DatasetAssembler}, for a general dataset.
+ * @see InMemDatasetAssembler {@code InMemDatasetAssembler}, for a fully transactional, in-memory dataset.
+ */
+public class DatasetOneAssembler extends AssemblerBase {
+ public static Resource getType() {
+ return DatasetAssemblerVocab.tDatasetOne;
+ }
+
+ @Override
+ public Object open(Assembler a, Resource root, Mode mode) {
+ Dataset ds = createDataset(a, root, mode);
+ return ds;
+ }
+
+ public Dataset createDataset(Assembler a, Resource root, Mode mode) {
+ // Can use ja:graph or ja:defaultGraph but not both.
+ Resource dftGraphDesc1 = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pDefaultGraph);
+ Resource dftGraphDesc2 = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pGraph);
+
+ if ( dftGraphDesc1 != null && dftGraphDesc2 != null )
+ throw new AssemblerException(root, "Found both ja:graph and ja:defaultGraph");
+
+ Resource graphDesc = ( dftGraphDesc1 != null) ? dftGraphDesc1 : dftGraphDesc2 ;
+ Model model;
+ if ( graphDesc != null )
+ model = a.openModel(graphDesc);
+ else
+ // Assembler description did not define one.
+ model = GraphFactory.makeDefaultModel();
+ Dataset ds = DatasetFactory.wrap(model);
+
+ List<RDFNode> nodes = GraphUtils.multiValue(root, DatasetAssemblerVocab.pNamedGraph);
+ if ( ! nodes.isEmpty() ) {
+ String x = DatasetAssemblerVocab.tDatasetOne.getLocalName();
+ throw new AssemblerException(root, "A "+x+" dataset can only hold a default graph, and no named graphs");
+ }
+ AssemblerUtils.setContext(root, ds.getContext());
+ return ds;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/4744cfc8/jena-arq/src/test/java/org/apache/jena/sparql/resultset/TestResultSet.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/resultset/TestResultSet.java b/jena-arq/src/test/java/org/apache/jena/sparql/resultset/TestResultSet.java
index cca2235..11c15c3 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/resultset/TestResultSet.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/resultset/TestResultSet.java
@@ -166,28 +166,29 @@ public class TestResultSet extends BaseTest
}
// Into some format.
+ private static String DIR = "testing/ResultSet/";
@Test public void test_RS_7()
{
- ResultSet rs = ResultSetFactory.load("testing/ResultSet/output.srx") ;
+ ResultSet rs = ResultSetFactory.load(DIR+"output.srx") ;
test_RS_fmt(rs, ResultsFormat.FMT_RS_XML, true) ;
}
@Test public void test_RS_8()
{
- ResultSet rs = ResultSetFactory.load("testing/ResultSet/output.srx") ;
+ ResultSet rs = ResultSetFactory.load(DIR+"output.srx") ;
test_RS_fmt(rs, ResultsFormat.FMT_RS_JSON, true) ;
}
@Test public void test_RS_9()
{
- ResultSet rs = ResultSetFactory.load("testing/ResultSet/output.srx") ;
+ ResultSet rs = ResultSetFactory.load(DIR+"output.srx") ;
test_RS_fmt(rs, ResultsFormat.FMT_RDF_XML, false) ;
}
@Test public void test_RS_10()
{
- ResultSet rs = ResultSetFactory.load("testing/ResultSet/output.srx") ;
+ ResultSet rs = ResultSetFactory.load(DIR+"output.srx") ;
for ( ; rs.hasNext(); rs.next()) { }
// We should be able to call hasNext() as many times as we want!
assertFalse(rs.hasNext());
[04/12] jena git commit: JENA-1492: Pass transactions down from
general datasets
Posted by an...@apache.org.
JENA-1492: Pass transactions down from general datasets
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/4e724c2f
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/4e724c2f
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/4e724c2f
Branch: refs/heads/master
Commit: 4e724c2f82f7b9ef38dbeca4294c42ea6aa919a1
Parents: 4a819f4
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Mar 3 16:25:48 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Mar 4 00:21:08 2018 +0000
----------------------------------------------------------------------
.../arq/examples/riot/ExJsonLD.java | 14 +-
.../org/apache/jena/query/DatasetFactory.java | 32 ++-
.../jena/query/QueryExecutionFactory.java | 4 +-
.../org/apache/jena/riot/system/RiotLib.java | 19 +-
.../org/apache/jena/sparql/algebra/Algebra.java | 4 +-
.../jena/sparql/core/DatasetGraphFactory.java | 21 +-
.../jena/sparql/core/DatasetGraphMap.java | 2 +-
.../jena/sparql/core/DatasetGraphMapLink.java | 101 ++++-----
.../jena/sparql/core/DatasetGraphOne.java | 22 +-
.../apache/jena/sparql/core/DatasetImpl.java | 6 +-
.../org/apache/jena/sparql/core/DatasetOne.java | 84 +++++++
.../jena/sparql/core/TxnDataset2Graph.java | 224 +++++++++++++++++++
.../core/assembler/DatasetAssemblerVocab.java | 3 +
.../assembler/DatasetGraphOneAssembler.java | 82 +++++++
.../apache/jena/sparql/util/QueryExecUtils.java | 2 +-
.../query/TestParameterizedSparqlString.java | 2 +-
.../jena/riot/lang/ParserTestBaseLib.java | 2 +-
.../jena/riot/writer/TestJsonLDWriter.java | 4 +-
.../sparql/api/TestQueryExecutionTimeout1.java | 2 +-
.../sparql/api/TestQueryExecutionTimeout2.java | 2 +-
.../transaction/TestTransactionSupport.java | 4 +-
.../jena/dboe/trans/bplustree/BPTreeNode.java | 18 --
.../apache/jena/tdb2/store/DatasetGraphTDB.java | 17 +-
.../jena/tdb2/store/GraphViewSwitchable.java | 11 +
.../jena/test/txn/TS_TranactionIntegration.java | 31 +++
.../apache/jena/test/txn/TestDataset2Graph.java | 157 +++++++++++++
.../jena/rdfconnection/RDFConnection.java | 2 -
.../jena/rdfconnection/RDFConnectionLocal.java | 3 +-
28 files changed, 750 insertions(+), 125 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src-examples/arq/examples/riot/ExJsonLD.java
----------------------------------------------------------------------
diff --git a/jena-arq/src-examples/arq/examples/riot/ExJsonLD.java b/jena-arq/src-examples/arq/examples/riot/ExJsonLD.java
index 677e584..21e5d67 100644
--- a/jena-arq/src-examples/arq/examples/riot/ExJsonLD.java
+++ b/jena-arq/src-examples/arq/examples/riot/ExJsonLD.java
@@ -23,6 +23,8 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
+import com.github.jsonldjava.core.JsonLdOptions;
+
import org.apache.jena.query.DatasetFactory;
import org.apache.jena.rdf.model.Model ;
import org.apache.jena.rdf.model.ModelFactory;
@@ -38,8 +40,6 @@ import org.apache.jena.sparql.util.Context;
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
-import com.github.jsonldjava.core.JsonLdOptions;
-
/** Example writing as JSON-LD */
public class ExJsonLD
{
@@ -123,7 +123,7 @@ public class ExJsonLD
// the write method takes a DatasetGraph as input to represent the data that we want to output
// Let's create one from our model:
- DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
+ DatasetGraph g = DatasetFactory.wrap(m).asDatasetGraph();
// and let's use the write method to output the data in json-ld compact format,
// passing a null Context for the moment
@@ -161,7 +161,7 @@ public class ExJsonLD
Model m = aSimpleModel();
m.setNsPrefix("ex", "http://www.ex.com/");
m.setNsPrefix("sh", "http://schema.org/");
- DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
+ DatasetGraph g = DatasetFactory.wrap(m).asDatasetGraph();
JsonLDWriteContext ctx = new JsonLDWriteContext();
// When no value for the "@context" is provided,
@@ -199,7 +199,7 @@ public class ExJsonLD
// "@context" : "http://schema.org/"
Model m = aModelThatOnlyUsesSchemaDotOrg();
- DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
+ DatasetGraph g = DatasetFactory.wrap(m).asDatasetGraph();
JsonLDWriteContext ctx = new JsonLDWriteContext();
// The following should work, but unfortunately it doesn't (with JSONLD-java 0.8.3):
@@ -270,7 +270,7 @@ public class ExJsonLD
m.add(s, m.createProperty(ns + "name"), "Not a person");
m.add(s, RDF.type, m.createResource(ns + "Event"));
- DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
+ DatasetGraph g = DatasetFactory.wrap(m).asDatasetGraph();
JsonLDWriteContext ctx = new JsonLDWriteContext();
// only output the persons using a frame
@@ -289,7 +289,7 @@ public class ExJsonLD
Model m = aSimpleModel();
m.setNsPrefix("ex", "http://www.ex.com/");
m.setNsPrefix("sh", "http://schema.org/");
- DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
+ DatasetGraph g = DatasetFactory.wrap(m).asDatasetGraph();
JsonLDWriteContext ctx = new JsonLDWriteContext();
JsonLdOptions opts = new JsonLdOptions();
ctx.setOptions(opts);
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java b/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java
index 7ec58b8..45dac4a 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/DatasetFactory.java
@@ -28,6 +28,7 @@ import org.apache.jena.sparql.ARQException;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.jena.sparql.core.DatasetGraphFactory;
import org.apache.jena.sparql.core.DatasetImpl;
+import org.apache.jena.sparql.core.DatasetOne;
import org.apache.jena.sparql.core.assembler.DatasetAssembler;
import org.apache.jena.sparql.util.DatasetUtils;
import org.apache.jena.sparql.util.graph.GraphUtils;
@@ -109,9 +110,15 @@ public class DatasetFactory {
}
/**
- * @param model The model for the default graph
- * @return a dataset with the given model as the default graph
- */
+ * Create a dataset, starting with the model argument as the default graph of the
+ * dataset. Named graphs can be added.
+ * <p>
+ * Use {@link #wrap(Model)} to put dataset functionality around a single
+ * model when named graphs will not be added.
+ *
+ * @param model The model for the default graph
+ * @return a dataset with the given model as the default graph
+ */
public static Dataset create(Model model) {
Objects.requireNonNull(model, "Default model must be provided") ;
return new DatasetImpl(model);
@@ -135,11 +142,26 @@ public class DatasetFactory {
* @return Dataset
*/
public static Dataset wrap(DatasetGraph dataset) {
- Objects.requireNonNull(dataset, "Can't wrap a null reference") ;
+ Objects.requireNonNull(dataset, "Can't wrap a null DatasetGraph reference") ;
return DatasetImpl.wrap(dataset);
}
- /**
+ /**
+ * Wrap a {@link Model} to make a dataset; the model is the default graph of the RDF Dataset.
+ *
+ * This dataset can not have additional models
+ * added to it, including indirectly through SPARQL Update
+ * adding new graphs.
+ *
+ * @param model
+ * @return Dataset
+ */
+ public static Dataset wrap(Model model) {
+ Objects.requireNonNull(model, "Can't wrap a null Model reference") ;
+ return DatasetOne.create(model);
+ }
+
+ /**
* Wrap a {@link DatasetGraph} to make a dataset
*
* @param dataset DatasetGraph
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/query/QueryExecutionFactory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/QueryExecutionFactory.java b/jena-arq/src/main/java/org/apache/jena/query/QueryExecutionFactory.java
index 7e2adf1..2414d3a 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/QueryExecutionFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/QueryExecutionFactory.java
@@ -126,7 +126,7 @@ public class QueryExecutionFactory
static public QueryExecution create(Query query, Model model) {
checkArg(query) ;
checkArg(model) ;
- return make(query, DatasetFactory.create(model)) ;
+ return make(query, DatasetFactory.wrap(model)) ;
}
/** Create a QueryExecution to execute over the Model.
@@ -201,7 +201,7 @@ public class QueryExecutionFactory
*/
static public QueryExecution create(Query query, Model model, QuerySolution initialBinding) {
checkArg(model) ;
- return create(query, DatasetFactory.create(model), initialBinding) ;
+ return create(query, DatasetFactory.wrap(model), initialBinding) ;
}
/** Create a QueryExecution to execute over the Model,
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
index 8966735..359f746 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
@@ -327,14 +327,17 @@ public class RiotLib
}
}
- /** Returns dataset that wraps a graph */
- public static DatasetGraph dataset(Graph graph)
- {
- return DatasetGraphFactory.createOneGraph(graph);
+ /** Returns dataset that wraps a graph
+ * @deprecated Use {@link DatasetGraphFactory#wrap(Graph)}
+ * @param graph
+ * @return DatasetGraph
+ */
+ @Deprecated
+ public static DatasetGraph xdataset(Graph graph) {
+ return DatasetGraphFactory.wrap(graph);
}
- public static PrefixMap prefixMap(DatasetGraph dsg)
- {
+ public static PrefixMap prefixMap(DatasetGraph dsg) {
return PrefixMapFactory.create(dsg.getDefaultGraph().getPrefixMapping());
}
@@ -413,10 +416,10 @@ public class RiotLib
@Override
public void write(OutputStream out, Graph graph, PrefixMap prefixMap, String baseURI, Context context)
- { writer.write(out, RiotLib.dataset(graph), prefixMap, baseURI, context); }
+ { writer.write(out, DatasetGraphFactory.wrap(graph), prefixMap, baseURI, context); }
@Override
public void write(Writer out, Graph graph, PrefixMap prefixMap, String baseURI, Context context)
- { writer.write(out, RiotLib.dataset(graph), prefixMap, baseURI, context); }
+ { writer.write(out, DatasetGraphFactory.wrap(graph), prefixMap, baseURI, context); }
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
index ed3af57..7657c6d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
@@ -136,7 +136,7 @@ public class Algebra
static public QueryIterator exec(Op op, Graph graph)
{
- return exec(op, DatasetGraphFactory.createOneGraph(graph)) ;
+ return exec(op, DatasetGraphFactory.wrap(graph)) ;
}
static public QueryIterator exec(Op op, DatasetGraph ds)
@@ -160,7 +160,7 @@ public class Algebra
static public QueryIterator execRef(Op op, Graph graph)
{
- return execRef(op, DatasetGraphFactory.createOneGraph(graph)) ;
+ return execRef(op, DatasetGraphFactory.wrap(graph)) ;
}
static public QueryIterator execRef(Op op, DatasetGraph dsg)
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java
index 18060fc..29af401 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java
@@ -36,7 +36,8 @@ public class DatasetGraphFactory
* <p>
* This implementation copies models when {@link Dataset#addNamedModel(String, Model)} is called.
* <p>
- * This implementation does not support serialized transactions (it only provides MRSW locking).
+ * This implementation provides "best effort" transactions; it only provides MRSW locking.
+ * Use {@link #createTxnMem} for a proper in-memeory transactional {@code DatasetGraph}.
*
* @see #createTxnMem
*/
@@ -45,7 +46,7 @@ public class DatasetGraphFactory
}
/**
- * Create an in-memory. transactional {@link Dataset}.
+ * Create an in-memory, transactional {@link Dataset}.
* <p>
* This fully supports transactions, including abort to roll-back changes.
* It provides "autocommit" if operations are performed
@@ -60,7 +61,7 @@ public class DatasetGraphFactory
/**
* Create a general-purpose {@link Dataset}.<br/>
- * Any graphs needed are in-memory unless explciitly added with {@link Dataset#addNamedModel}.
+ * Any graphs needed are in-memory unless explicitly added with {@link Dataset#addNamedModel}.
* </p>
* This dataset type can contain graphs from any source when added via {@link Dataset#addNamedModel}.
* These are held as links to the supplied graph and not copied.
@@ -73,7 +74,9 @@ public class DatasetGraphFactory
* @see #createTxnMem
* @return a general-purpose Dataset
*/
- public static DatasetGraph createGeneral() { return new DatasetGraphMapLink(graphMakerMem) ; }
+ public static DatasetGraph createGeneral() {
+ return new DatasetGraphMapLink(graphMakerMem.create(null), graphMakerMem) ;
+ }
/** Create an in-memory {@link Dataset}.
* <p>
@@ -137,7 +140,15 @@ public class DatasetGraphFactory
/**
* Create a DatasetGraph which only ever has a single default graph.
*/
- public static DatasetGraph createOneGraph(Graph graph) { return new DatasetGraphOne(graph) ; }
+ public static DatasetGraph wrap(Graph graph) { return DatasetGraphOne.create(graph) ; }
+
+
+ /**
+ * Create a DatasetGraph which only ever has a single default graph.
+ * @deprecated Use {#wrap(Graph)}
+ */
+ @Deprecated
+ public static DatasetGraph createOneGraph(Graph graph) { return wrap(graph) ; }
/** Interface for making graphs when a dataset needs to add a new graph.
* Return null for no graph created.
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
index 6eebbcf..c01f250 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
@@ -152,7 +152,7 @@ public class DatasetGraphMap extends DatasetGraphTriplesQuads
if ( g == null ) {
g = getGraphCreate(graphNode);
if ( g != null )
- addGraph(graphNode, g);
+ graphs.put(graphNode, g);
}
return g;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMapLink.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMapLink.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMapLink.java
index 90efd0e..a0d834c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMapLink.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMapLink.java
@@ -28,11 +28,12 @@ import org.apache.jena.query.ReadWrite ;
import org.apache.jena.query.TxnType;
import org.apache.jena.sparql.SystemARQ ;
import org.apache.jena.sparql.core.DatasetGraphFactory.GraphMaker ;
+import org.apache.jena.sparql.graph.GraphFactory;
import org.apache.jena.sparql.graph.GraphUnionRead ;
+import org.apache.jena.sparql.graph.GraphZero;
-/** Implementation of a DatasetGraph as an extensible set of graphs.
- * <p>
- * Graphs are held by reference. Care is needed when manipulating their contents
+/** Implementation of a DatasetGraph as an extensible set of graphs where graphs are held by reference.
+ * Care is needed when manipulating their contents
* especially if they are also in another {@code DatasetGraph}.
* <p>
* See {@link DatasetGraphMap} for an implementation that copies graphs
@@ -44,11 +45,13 @@ import org.apache.jena.sparql.graph.GraphUnionRead ;
*/
public class DatasetGraphMapLink extends DatasetGraphCollection
{
-
private final GraphMaker graphMaker ;
private final Map<Node, Graph> graphs = new HashMap<>() ;
private Graph defaultGraph ;
+ private final Transactional txn;
+ private final TxnDataset2Graph txnDsg2Graph;
+ private static GraphMaker dftGraphMaker = (name) -> GraphFactory.createDefaultGraph();
/**
* Create a new {@code DatasetGraph} that copies the dataset structure of default
@@ -56,7 +59,7 @@ public class DatasetGraphMapLink extends DatasetGraphCollection
* Any new graphs needed are separate from the original dataset and created in-memory.
*/
public static DatasetGraph cloneStructure(DatasetGraph dsg) {
- return new DatasetGraphMapLink(dsg);
+ return cloneStructure(dsg, dftGraphMaker);
}
/**
@@ -66,64 +69,44 @@ public class DatasetGraphMapLink extends DatasetGraphCollection
* to the {@link GraphMaker}.
*/
public static DatasetGraph cloneStructure(DatasetGraph dsg, GraphMaker graphMaker) {
- return new DatasetGraphMapLink(dsg, graphMaker);
+ DatasetGraphMapLink dsg2 = new DatasetGraphMapLink((Graph)null, graphMaker);
+ linkGraphs(dsg, dsg2);
+ return dsg2;
}
- /** Create a new DatasetGraph that initially shares the graphs of the
- * given DatasetGraph. Adding/removing graphs will only affect this
- * object, not the argument DatasetGraph but changes to shared
- * graphs are seen by both objects.
- */
- private DatasetGraphMapLink(DatasetGraph dsg, GraphMaker graphMaker) {
- this.graphMaker = graphMaker ;
- this.defaultGraph = dsg.getDefaultGraph() ;
- for ( Iterator<Node> names = dsg.listGraphNodes() ; names.hasNext() ; ) {
+ private static void linkGraphs(DatasetGraph srcDsg, DatasetGraphMapLink dstDsg) {
+ dstDsg.defaultGraph = srcDsg.getDefaultGraph();
+ for ( Iterator<Node> names = srcDsg.listGraphNodes() ; names.hasNext() ; ) {
Node gn = names.next() ;
- addGraph(gn, dsg.getGraph(gn)) ;
+ dstDsg.addGraph(gn, srcDsg.getGraph(gn)) ;
}
}
- /**
- * A {@code DatasetGraph} with graphs for default and named graphs as given
- * but new graphs are created in memory.
- */
- private DatasetGraphMapLink(DatasetGraph dsg) {
- this(dsg, DatasetGraphFactory.graphMakerMem) ;
- }
-
- private DatasetGraphMapLink(Graph dftGraph, GraphMaker graphMaker) {
- this.graphMaker = graphMaker;
- this.defaultGraph = dftGraph ;
- }
-
-// /** A {@code DatasetGraph} with in-memory graphs for default and named graphs as needed */
-// private DatasetGraphMapLink() {
-// this(DatasetGraphFactory.memGraphMaker) ;
-// }
-
- /**
- * A {@code DatasetGraph} with graph from the gve {@link GraphMaker} for default and
- * named graphs as needed. This is the constructor used for
- * DatasetFactory.createGeneral.
- */
- /*package*/ DatasetGraphMapLink(GraphMaker graphMaker) {
- this(graphMaker.create(null), graphMaker) ;
- }
-
/** A {@code DatasetGraph} that uses the given graph for the default graph
* and create in-memory graphs for named graphs as needed
*/
public DatasetGraphMapLink(Graph dftGraph) {
- this.defaultGraph = dftGraph ;
- this.graphMaker = DatasetGraphFactory.graphMakerMem ;
+ this(dftGraph, dftGraphMaker);
}
- // ----
- private final Transactional txn = TransactionalLock.createMRSW() ;
+ // This is the root constructor.
+ @SuppressWarnings("deprecation")
+ /*package*/DatasetGraphMapLink(Graph dftGraph, GraphMaker graphMaker) {
+ this.graphMaker = graphMaker;
+ this.defaultGraph = dftGraph;
+ if ( TxnDataset2Graph.TXN_DSG_GRAPH ) {
+ txnDsg2Graph = new TxnDataset2Graph(dftGraph);
+ txn = txnDsg2Graph;
+ } else {
+ txnDsg2Graph = null;
+ txn = TransactionalLock.createMRSW();
+ }
+ }
@Override
public void commit() {
- SystemARQ.sync(this);
+ if ( txnDsg2Graph == null )
+ SystemARQ.sync(this);
txn.commit() ;
}
@@ -131,7 +114,7 @@ public class DatasetGraphMapLink extends DatasetGraphCollection
@Override public void begin(TxnType txnType) { txn.begin(txnType); }
@Override public void begin(ReadWrite mode) { txn.begin(mode); }
@Override public boolean promote(Promote txnType) { return txn.promote(txnType); }
- //@Override public void commit() { txn.commit(); }
+ //Above: commit()
@Override public void abort() { txn.abort(); }
@Override public boolean isInTransaction() { return txn.isInTransaction(); }
@Override public void end() { txn.end(); }
@@ -155,7 +138,7 @@ public class DatasetGraphMapLink extends DatasetGraphCollection
@Override
public Graph getGraph(Node graphNode) {
- // Same as DatasetMap.getGraph but we inherit differently.
+ // Same as DatasetGraphMap.getGraph but we inherit differently.
if ( Quad.isUnionGraph(graphNode) )
return new GraphUnionRead(this) ;
if ( Quad.isDefaultGraph(graphNode))
@@ -165,30 +148,40 @@ public class DatasetGraphMapLink extends DatasetGraphCollection
if ( g == null ) {
g = getGraphCreate(graphNode);
if ( g != null )
- graphs.put(graphNode, g);
+ addGraph(graphNode, g);
}
return g;
}
- /** Called from getGraph when a nonexistent graph is asked for.
+ /**
+ * Called from getGraph when a nonexistent graph is asked for.
* Return null for "nothing created as a graph"
*/
- protected Graph getGraphCreate(Node graphNode) {
+ protected Graph getGraphCreate(Node graphNode) {
return graphMaker.create(graphNode) ;
}
@Override
public void addGraph(Node graphName, Graph graph) {
+ if ( txnDsg2Graph != null )
+ txnDsg2Graph.addGraph(graph);
graphs.put(graphName, graph);
}
@Override
public void removeGraph(Node graphName) {
- graphs.remove(graphName);
+ Graph g = graphs.remove(graphName);
+ if ( g != null && txnDsg2Graph != null )
+ txnDsg2Graph.removeGraph(g);
}
@Override
public void setDefaultGraph(Graph g) {
+ if ( g == null )
+ // Always have a default graph of some kind.
+ g = GraphZero.instance();
+ if ( txnDsg2Graph != null )
+ txnDsg2Graph.addGraph(g);
defaultGraph = g;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
index 89d76cb..faf37c7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
@@ -32,10 +32,11 @@ import org.apache.jena.query.TxnType;
/** DatasetGraph of a single graph as default graph.
* <p>
- * Fixed as one graph (the default) - can not add named graphs.
+ * Fixed as one graph (the default) - named graphs can notbe added nor the default graph changed, only the contents modified.
* <p>
- * Passes transactions down to a nominated backing {@link DatasetGraph}
- *
+ * Ths dataset passes transactions down to a nominated backing {@link DatasetGraph}
+ * <p>
+ * It is particular suitable for use with an interference graph.
*/
public class DatasetGraphOne extends DatasetGraphBaseFind {
private final Graph graph;
@@ -43,21 +44,30 @@ public class DatasetGraphOne extends DatasetGraphBaseFind {
private final Transactional txn;
private final boolean supportsAbort;
- public DatasetGraphOne(Graph graph, DatasetGraph backing) {
+ public static DatasetGraph create(Graph graph) {
+ return new DatasetGraphOne(graph);
+ }
+
+ private DatasetGraphOne(Graph graph, DatasetGraph backing) {
this.graph = graph;
backingDGS = backing;
supportsAbort = backing.supportsTransactionAbort();
txn = backing;
}
- public DatasetGraphOne(Graph graph) {
+ @SuppressWarnings("deprecation")
+ private DatasetGraphOne(Graph graph) {
this.graph = graph;
if ( graph instanceof GraphView ) {
backingDGS = ((GraphView)graph).getDataset();
txn = backingDGS;
supportsAbort = backingDGS.supportsTransactionAbort();
} else {
- txn = TransactionalLock.createMRSW();
+ // JENA-1492 - pass down transactions.
+ if ( TxnDataset2Graph.TXN_DSG_GRAPH )
+ txn = new TxnDataset2Graph(graph);
+ else
+ txn = TransactionalLock.createMRSW();
backingDGS = null;
supportsAbort = false;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetImpl.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetImpl.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetImpl.java
index 2a145b1..614b82f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetImpl.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetImpl.java
@@ -63,8 +63,7 @@ public class DatasetImpl implements Dataset
/** Create a Dataset with the model as default model.
* Named models must be explicitly added to identify the storage to be used.
*/
- public DatasetImpl(Model model)
- {
+ public DatasetImpl(Model model) {
this.dsg = DatasetGraphFactory.create(model.getGraph()) ;
this.transactional = dsg ;
}
@@ -73,8 +72,7 @@ public class DatasetImpl implements Dataset
* while sharing the graphs themselves.
*/
@Deprecated
- public DatasetImpl(Dataset ds)
- {
+ public DatasetImpl(Dataset ds) {
this(DatasetGraphFactory.cloneStructure(ds.asDatasetGraph())) ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetOne.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetOne.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetOne.java
new file mode 100644
index 0000000..27b597a
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetOne.java
@@ -0,0 +1,84 @@
+/*
+ * 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.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.sparql.core.DatasetGraphOne;
+import org.apache.jena.sparql.core.DatasetImpl;
+
+/**
+ * A dataset that just hold a single model as the default graph.
+ * It is particularly appropriate for use with inference models.
+ *
+ * @apiNote
+ * This class makes the use of DatasetImpl with one fixed model clearer. It may
+ * become useful to have a separate implementation altogether at some time.
+ */
+public class DatasetOne extends DatasetImpl {
+ public static Dataset create(Model model) {
+ return new DatasetOne(model);
+ }
+
+ private final Model defaultModel;
+
+ public DatasetOne(Model model) {
+ super(DatasetGraphOne.create(model.getGraph()));
+ this.defaultModel = model;
+ }
+
+
+ @Override
+ public Model getDefaultModel() {
+ return defaultModel;
+ }
+
+ @Override
+ public Dataset setDefaultModel(Model model) {
+ throw new UnsupportedOperationException("Can not set the default model after a DatasetOne has been created");
+ }
+
+ @Override
+ public Model getNamedModel(String uri) {
+ checkGraphName(uri) ;
+ Node n = NodeFactory.createURI(uri) ;
+ return graph2model(dsg.getGraph(n)) ;
+ }
+
+ @Override
+ public Dataset addNamedModel(String uri, Model model) {
+ throw new UnsupportedOperationException("Can not add a named mode to DatasetOne");
+ }
+
+ @Override
+ public Dataset removeNamedModel(String uri) {
+ return this;
+ }
+
+ @Override
+ public Dataset replaceNamedModel(String uri, Model model) {
+ throw new UnsupportedOperationException("Can not replace a named model in DatasetOne");
+ }
+ @Override
+ public boolean containsNamedModel(String uri) {
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
new file mode 100644
index 0000000..d03cc6e
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
@@ -0,0 +1,224 @@
+/*
+ * 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 java.util.*;
+import java.util.function.Consumer;
+
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.TransactionHandler;
+import org.apache.jena.query.ReadWrite;
+import org.apache.jena.query.TxnType;
+import org.apache.jena.reasoner.InfGraph;
+import org.apache.jena.shared.LockMRSW;
+import org.apache.jena.sparql.JenaTransactionException;
+
+/**
+ * A {@link Transactional} that passes the transaction operations down to transactions on
+ * independent graphs.
+ * <p>
+ * There are limitations:
+ * <ul>
+ * <li>we can't atomically do all the commits together in the crash situation.
+ * <li>This {@code Transactional} maintains a MRSW policy because that is all that is
+ * required of graphs in general.
+ * </ul>
+ * It does cover the important case of one graph ({@link DatasetGraphOne}) where the one
+ * graph is an InfGraph and should work when the graphs in the dataset is not changing or
+ * when a new memory graph is added mid-transaction.
+ * <p>
+ * This is not "nested transactions" - theer is no overall "commit" or "abort". If
+ * failure/restart occurs, some graphs may have commited and others not. It is the best
+ * that can be done given for an arbitrary collection of graphs, backed by different
+ * storage and having different capabilities.
+ * <p>
+ * Best practice is to change the graph membership outside of any transaction,
+ * ideally at setup time of the object using this class. (Caution: SPARQL Update
+ * can create graphs.
+ * @See {@link DatasetGraphMapLink}
+ * @See {@link DatasetGraphOne}
+ */
+public class TxnDataset2Graph extends TransactionalLock {
+ /** Control whether to pass down transactions from the dataset to the graph in the dataset.
+ * This should be set to "true".
+ * This is temporary flag during the transition because the change at Jena 3.7.0
+ * needs to be proven in real deployments as well as testing.
+ * "false" restores the Jena 3.6.0 and before behaviour (transactions not passed down).
+ * See JENA-1492.
+ * @deprecated This flag will be removed.
+ */
+ @Deprecated
+ public static boolean TXN_DSG_GRAPH = true;
+
+ private Graph primary;
+ // Object key may be a graph or a DSG is the graph is a GraphView.
+ // This avoids starting a tranasction on the same storage unit twice.
+ private Map<Object, TransactionHandler> handlers = new HashMap<>();
+
+ private Object lock = new Object();
+
+ public TxnDataset2Graph(Graph primaryGraph, Graph ... otherGraphs) {
+ super(new LockMRSW());
+ primary = primaryGraph;
+ handlers = buildHandlerSet(primary, Arrays.asList(otherGraphs));
+ }
+
+ private static Map<Object, TransactionHandler> buildHandlerSet(Graph primary, Collection<Graph> graphs) {
+ Map<Object, TransactionHandler> handlers = new HashMap<>();
+ addHandler(handlers, primary);
+ graphs.forEach(g->addHandler(handlers,g));
+ return handlers;
+ }
+
+ private static void addHandler(Map<Object, TransactionHandler> handlers, Graph graph) {
+ TransactionHandler th = graph.getTransactionHandler();
+ if ( ! th.transactionsSupported() )
+ return;
+ Object key = calcKey(graph);
+ if ( th.transactionsSupported() )
+ handlers.put(key, th) ;
+ }
+
+ // Determine the key - an object that is the unit of transactions.
+ // For two graphs form the same DatasetGraph, i.e. GraphView, there should be one transaction.
+ private static Object calcKey(Graph graph) {
+ if ( graph instanceof GraphView )
+ // Use the database as the key so that transactions are started once-per-storage.
+ // This the case of a graph from some storage being plavced in a general dataset.
+ return ((GraphView)graph).getDataset();
+ if ( graph instanceof InfGraph )
+ // InfGraph does actual pass done in its TransactionHandler.
+ // This allows the base graph to be included in the dataset as well as the InfGraph.
+ return calcKey(((InfGraph)graph).getRawGraph());
+
+// if ( graph instanceof GraphWrapper )
+// return calcKey(((GraphWrapper)graph).get());
+// if ( graph instanceof WrappedGraph )
+// return calcKey(((WrappedGraph)graph).getWrapped());
+ return graph;
+ }
+
+ private static void removeHandler(Map<Object, TransactionHandler> handlers, Graph graph) {
+ Object key = calcKey(graph);
+ handlers.remove(graph);
+ }
+
+ // Attempt to manage the graph transactions during a transaction.
+ // Imperfect for removal, we don't know whether to call commit() or abort().
+ // Works for adding.
+ // Generally better not to change the graphs during a transaction, just set them once
+ // on creation.
+
+ public void addGraph(Graph graph) {
+ checkNotReadMode();
+ if ( graph == null )
+ return;
+ if ( ! handlers.containsKey(graph) ) {
+ // Add if new.
+ addHandler(handlers, graph) ;
+ if ( super.isInTransaction() ) {
+ // If we are in a transaction, start the subtransaction.
+ TransactionHandler th = handlers.get(graph);
+ if ( th != null )
+ th.begin();
+ }
+ }
+ }
+
+ public void removeGraph(Graph graph) {
+ checkNotReadMode();
+ if ( graph == null )
+ return;
+ if ( ! super.isInTransaction() ) {
+ // Not in transaction, do now.
+ removeHandler(handlers, graph);
+ return;
+ }
+ // Queue to be removed at the end.
+ Set<Graph> toBeRemoved = removedGraphs.get();
+ if ( toBeRemoved == null ) {
+ // Lazy set of the HashSet.
+ toBeRemoved = new HashSet<>();
+ removedGraphs.set(toBeRemoved);
+ }
+ removedGraphs.get().add(graph);
+ }
+
+ public void setPrimaryGraph(Graph graph) {
+ checkNotReadMode();
+ if ( graph == null )
+ return;
+ removeGraph(graph);
+ addGraph(graph);
+ }
+
+ private void handlers(Consumer<TransactionHandler> action) {
+ synchronized (lock) {
+ handlers.forEach((g,th)->action.accept(th));
+ }
+ }
+
+ private void checkNotReadMode() {
+ if ( !super.isInTransaction() )
+ return;
+ if ( super.isTransactionMode(ReadWrite.READ) )
+ throw new JenaTransactionException("In READ mode in transaction");
+ }
+
+ private ThreadLocal<Set<Graph>> removedGraphs = ThreadLocal.withInitial(()->null);
+ private void start() {}
+ private void finish() {
+ if ( ! super.isTransactionMode(ReadWrite.WRITE) )
+ return;
+ // This is called inside the lock of super.
+ Set<Graph> toBeRemoved = removedGraphs.get();
+ removedGraphs.remove();
+ if ( toBeRemoved == null )
+ return ;
+ toBeRemoved.forEach(g->removeHandler(handlers, g));
+ }
+
+ // TransactionalLock.begin(ReadWrite) calls begin(TxnType)
+ @Override
+ public void begin(TxnType type) {
+ super.begin(type);
+ // Whatever the type. Graph Transactions do not allow for "read-only".
+ start();
+ handlers(h->h.begin());
+ }
+
+ // The MRSW lock means this isn't possible. See super.promote.
+// @Override
+// public boolean promote(Promote mode)
+
+ @Override
+ public void commit() {
+ handlers(h->h.commit());
+ // Before super.commit - we stil hold the lock.
+ finish();
+ super.commit();
+ }
+
+ @Override
+ public void abort() {
+ handlers(h -> h.abort());
+ finish();
+ super.abort();
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
index 17d13c0..5d26abe 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssemblerVocab.java
@@ -30,6 +30,9 @@ public class DatasetAssemblerVocab
// General dataset
public static final Resource tDataset = ResourceFactory.createResource(NS+"RDFDataset") ;
+ // Dataset to hold exactly one model.
+ public static final Resource tDatasetOne = ResourceFactory.createResource(NS+"RDFDatasetOne") ;
+
// In-memory dataset
public static final Resource tDatasetTxnMem = ResourceFactory.createResource(NS+"DatasetTxnMem") ;
public static final Resource tMemoryDataset = ResourceFactory.createResource(NS+"MemoryDataset") ;
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java
new file mode 100644
index 0000000..ed33ebf
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetGraphOneAssembler.java
@@ -0,0 +1,82 @@
+/*
+ * 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.assembler;
+
+import java.util.List;
+
+import org.apache.jena.assembler.Assembler;
+import org.apache.jena.assembler.Mode;
+import org.apache.jena.assembler.assemblers.AssemblerBase;
+import org.apache.jena.assembler.exceptions.AssemblerException;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.sparql.graph.GraphFactory;
+import org.apache.jena.sparql.util.graph.GraphUtils;
+
+/**
+ * An assembler that creates a dataset around a single graph. The dataset created is
+ * fixed; graphs can not be added or removed. The wrapped graph is the default graph of
+ * the dataset.
+ * <p>
+ * General datasets and SPARQL Update can create graphs by inserting a quad.
+ * The dataset returned by this assembler does not support that.
+ *
+ * @see DatasetAssembler {@code DatasetAssembler}, for a general dataset.
+ * @see InMemDatasetAssembler {@code InMemDatasetAssembler}, for a fully transactional, in-memory dataset.
+ */
+public class DatasetGraphOneAssembler extends AssemblerBase {
+ public static Resource getType() {
+ return DatasetAssemblerVocab.tDatasetOne;
+ }
+
+ @Override
+ public Object open(Assembler a, Resource root, Mode mode) {
+ Dataset ds = createDataset(a, root, mode);
+ return ds;
+ }
+
+ public Dataset createDataset(Assembler a, Resource root, Mode mode) {
+ // Can use ja:graph or ja:defaultGraph but not both.
+ Resource dftGraphDesc1 = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pDefaultGraph);
+ Resource dftGraphDesc2 = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pGraph);
+
+ if ( dftGraphDesc1 != null && dftGraphDesc2 != null )
+ throw new AssemblerException(root, "Found both ja:graph and ja:defaultGraph");
+
+ Resource graphDesc = ( dftGraphDesc1 != null) ? dftGraphDesc1 : dftGraphDesc2 ;
+ Model model;
+ if ( graphDesc != null )
+ model = a.openModel(graphDesc);
+ else
+ // Assembler description did not define one.
+ model = GraphFactory.makeDefaultModel();
+ Dataset ds = DatasetFactory.wrap(model);
+
+ List<RDFNode> nodes = GraphUtils.multiValue(root, DatasetAssemblerVocab.pNamedGraph);
+ if ( ! nodes.isEmpty() ) {
+ String x = DatasetAssemblerVocab.tDatasetOne.getLocalName();
+ throw new AssemblerException(root, "A "+x+" dataset can only hold a default graph, and no named graphs");
+ }
+ AssemblerUtils.setContext(root, ds.getContext());
+ return ds;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
index 61f2730..e2cbcef 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
@@ -302,7 +302,7 @@ public class QueryExecUtils {
* that one RDFNode
*/
public static RDFNode getExactlyOne(String qs, Model model) {
- return getExactlyOne(qs, DatasetFactory.create(model)) ;
+ return getExactlyOne(qs, DatasetFactory.wrap(model)) ;
}
/**
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java b/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
index 7335f75..81e4ad7 100644
--- a/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
+++ b/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
@@ -245,7 +245,7 @@ public class TestParameterizedSparqlString {
bnode.addProperty(RDF.type, OWL.Thing);
Assert.assertEquals(1, model.size());
- Dataset ds = DatasetFactory.create(model);
+ Dataset ds = DatasetFactory.wrap(model);
// Use a parameterized query to check the data can be found
ParameterizedSparqlString pq = new ParameterizedSparqlString();
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java
index fbe32ed..00e851e 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java
@@ -43,7 +43,7 @@ class ParserTestBaseLib {
static DatasetGraph parseDataset(Lang lang, String ...strings) {
DatasetGraph dsg = DatasetGraphFactory.create() ;
StreamRDF dest = StreamRDFLib.dataset(dsg) ;
- parse(lang, dest, strings) ;
+ parse(lang, dest, strings);
return dsg ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/test/java/org/apache/jena/riot/writer/TestJsonLDWriter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/writer/TestJsonLDWriter.java b/jena-arq/src/test/java/org/apache/jena/riot/writer/TestJsonLDWriter.java
index cc8aff9..77a41fe 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/writer/TestJsonLDWriter.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/writer/TestJsonLDWriter.java
@@ -507,7 +507,7 @@ public class TestJsonLDWriter extends BaseTest {
m.setNsPrefix("", ns);
- DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
+ DatasetGraph g = DatasetFactory.wrap(m).asDatasetGraph();
PrefixMap pm = RiotLib.prefixMap(g);
String base = null;
Context jenaContext = null;
@@ -551,7 +551,7 @@ public class TestJsonLDWriter extends BaseTest {
private String toString(Model m, RDFFormat f, Context jenaContext) {
try(ByteArrayOutputStream out = new ByteArrayOutputStream()) {
WriterDatasetRIOT w = RDFDataMgr.createDatasetWriter(f) ;
- DatasetGraph g = DatasetFactory.create(m).asDatasetGraph();
+ DatasetGraph g = DatasetFactory.wrap(m).asDatasetGraph();
PrefixMap pm = RiotLib.prefixMap(g);
String base = null;
w.write(out, g, pm, base, jenaContext) ;
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout1.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout1.java b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout1.java
index c6fa162..c23f08e 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout1.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout1.java
@@ -38,7 +38,7 @@ import org.junit.Test ;
public class TestQueryExecutionTimeout1 extends BaseTest
{
static Graph g = SSE.parseGraph("(graph (<s> <p> <o1>) (<s> <p> <o2>) (<s> <p> <o3>))") ;
- static DatasetGraph dsg = DatasetGraphFactory.createOneGraph(g) ;
+ static DatasetGraph dsg = DatasetGraphFactory.wrap(g) ;
static Dataset ds = DatasetFactory.wrap(dsg) ;
private static final String ns = "http://example/ns#" ;
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java
index 49d562d..71c0e61 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java
@@ -51,7 +51,7 @@ public class TestQueryExecutionTimeout2
" (<s> <p> 11)" +
" (<s> <p> 12)" +
")") ;
- static DatasetGraph dsg = DatasetGraphFactory.createOneGraph(g) ;
+ static DatasetGraph dsg = DatasetGraphFactory.wrap(g) ;
static Dataset ds = DatasetFactory.wrap(dsg) ;
private static void noException(ResultSet rs)
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
index 46c955a..3b8d880 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
@@ -48,9 +48,9 @@ public class TestTransactionSupport {
x.add(new Object[] {"create",
(Creator<DatasetGraph>)()->DatasetGraphFactory.create(),
true, false}) ;
- x.add(new Object[] {"createOneGraph" ,
+ x.add(new Object[] {"wrap" ,
(Creator<DatasetGraph>)()->
- DatasetGraphFactory.createOneGraph(GraphFactory.createDefaultGraph()),
+ DatasetGraphFactory.wrap(GraphFactory.createDefaultGraph()),
true, true}) ;
x.add(new Object[] {"createZeroGraph" ,
(Creator<DatasetGraph>)()->new DatasetGraphZero(),
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNode.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNode.java b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNode.java
index e3f0533..f808cb9 100644
--- a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNode.java
+++ b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNode.java
@@ -138,24 +138,6 @@ public final class BPTreeNode extends BPTreePage
// Other set by BPTreeNodeMgr.formatBPTreeNode
}
- // ---- [[TXN]] ** work for transactions.
- void checkTxn() {}
- void checkWriteTxn() {}
-
-// static BPTreeNode xensureModifiableRoot(BPTreeNode root, Object state) {
-// BPTreeNode root2 = promote1(root, root, NO_ID)(null, root) ;
-// if ( root != root2 && root.getId() != root2.getId() ) {
-// System.err.println("Cloned root") ;
-// if ( state == null )
-// System.err.println("... no state") ;
-// // [[TXN]] ** Root clone
-// // get state and update root.
-// }
-// return root2 ;
-// }
-
- // ----
-
@Override
public void reset(Block block) {
this.block = block ;
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
index 42690b2..2148930 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/DatasetGraphTDB.java
@@ -39,6 +39,7 @@ import org.apache.jena.graph.Node ;
import org.apache.jena.graph.Triple ;
import org.apache.jena.query.ReadWrite ;
import org.apache.jena.query.TxnType;
+import org.apache.jena.sparql.JenaTransactionException;
import org.apache.jena.sparql.core.* ;
import org.apache.jena.sparql.engine.optimizer.reorder.ReorderTransformation ;
import org.apache.jena.tdb2.TDBException;
@@ -392,14 +393,28 @@ public class DatasetGraphTDB extends DatasetGraphTriplesQuads
public Location getLocation() { return storage.location ; }
+ /**
+ * Cause an exception to be thrown if sync is called.
+ * For TDB2, which is transactional only, so sync isn't a useful operation.
+ * It is implemented for completness and no more.
+ */
+ public static boolean exceptionOnSync = true ;
+
@Override
public void sync() {
+ if ( exceptionOnSync )
+ throw new JenaTransactionException("sync called");
checkNotClosed();
+ syncStorage();
+ }
+
+ // Sync for internal puposes.
+ public void syncStorage() {
storage.tripleTable.sync();
storage.quadTable.sync();
storage.prefixes.sync();
}
-
+
@Override
public void setDefaultGraph(Graph g) {
throw new UnsupportedOperationException("Can't set default graph on a TDB-backed dataset") ;
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/GraphViewSwitchable.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/GraphViewSwitchable.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/GraphViewSwitchable.java
index cd5f561..760d9e4 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/GraphViewSwitchable.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/GraphViewSwitchable.java
@@ -21,11 +21,13 @@ package org.apache.jena.tdb2.store;
import java.util.Map ;
import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.TransactionHandler;
import org.apache.jena.shared.PrefixMapping ;
import org.apache.jena.shared.impl.PrefixMappingImpl ;
import org.apache.jena.sparql.core.DatasetPrefixStorage;
import org.apache.jena.sparql.core.GraphView;
import org.apache.jena.sparql.core.Quad;
+import org.apache.jena.sparql.core.TransactionHandlerView;
import org.apache.jena.sparql.expr.nodevalue.NodeFunctions;
/**
@@ -45,9 +47,13 @@ public class GraphViewSwitchable extends GraphView {
private final DatasetGraphSwitchable dsgx;
protected DatasetGraphSwitchable getx() { return dsgx; }
+ private TransactionHandler transactionHandler = null;
+
protected GraphViewSwitchable(DatasetGraphSwitchable dsg, Node gn) {
super(dsg, gn) ;
this.dsgx = dsg;
+ // Goes to the switchable DatasetGraph
+ this.transactionHandler = new TransactionHandlerView(dsgx);
}
@Override
@@ -63,6 +69,11 @@ public class GraphViewSwitchable extends GraphView {
}
return prefixMapping(gn);
}
+
+ @Override
+ public TransactionHandler getTransactionHandler() {
+ return transactionHandler;
+ }
/** Return the {@code DatasetGraphSwitchable} we are viewing. */
@Override
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TS_TranactionIntegration.java
----------------------------------------------------------------------
diff --git a/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TS_TranactionIntegration.java b/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TS_TranactionIntegration.java
new file mode 100644
index 0000000..e390ad2
--- /dev/null
+++ b/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TS_TranactionIntegration.java
@@ -0,0 +1,31 @@
+/*
+ * 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.test.txn;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+ TestDataset2Graph.class
+})
+
+public class TS_TranactionIntegration {
+
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java
----------------------------------------------------------------------
diff --git a/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java b/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java
new file mode 100644
index 0000000..38e1e55
--- /dev/null
+++ b/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java
@@ -0,0 +1,157 @@
+/*
+ * 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.test.txn;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.jena.atlas.iterator.Iter;
+import org.apache.jena.atlas.lib.Creator;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.query.*;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdfconnection.RDFConnection;
+import org.apache.jena.rdfconnection.RDFConnectionFactory;
+import org.apache.jena.reasoner.rulesys.RDFSRuleReasonerFactory;
+import org.apache.jena.sparql.core.Quad;
+import org.apache.jena.sparql.core.TxnDataset2Graph;
+import org.apache.jena.sparql.sse.SSE;
+import org.apache.jena.system.Txn;
+import org.apache.jena.tdb.TDBFactory;
+import org.apache.jena.tdb2.TDB2Factory;
+import org.apache.jena.tdb2.store.DatasetGraphTDB;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+// Tests - programmatic construct, assembler construct. Good and bad.
+// TestDataset2Graph - TS_Transactions.
+// DatasetFactory.wrap
+// DatasetOne, DatasetGraphOne. <-- Flag needed.
+// DatasetImpl
+
+/** Additional testing for "Dataset over Graph" transaction mapping */
+
+@RunWith(Parameterized.class)
+public class TestDataset2Graph {
+ private static boolean txn_dsg_graph;
+ private static boolean tdb2_no_sync;
+ // TXN_DSG_GRAPH must be true.
+ @SuppressWarnings("deprecation")
+ @BeforeClass public static void beforeClass() {
+ txn_dsg_graph = TxnDataset2Graph.TXN_DSG_GRAPH;
+ TxnDataset2Graph.TXN_DSG_GRAPH = true;
+ // Make sure sync isn't called.
+ tdb2_no_sync = DatasetGraphTDB.exceptionOnSync;
+ DatasetGraphTDB.exceptionOnSync = true;
+ }
+
+ @SuppressWarnings("deprecation")
+ @AfterClass public static void afterClass() {
+ TxnDataset2Graph.TXN_DSG_GRAPH = txn_dsg_graph;
+ DatasetGraphTDB.exceptionOnSync = tdb2_no_sync;
+ }
+
+ @Parameters(name = "{index}: {0}")
+ public static Collection<Object[]> data() {
+ Creator<Dataset> datasetPlainMaker = ()-> DatasetFactory.createTxnMem() ;
+ Creator<Dataset> datasetTxnMemMaker = ()-> DatasetFactory.createTxnMem() ;
+ Creator<Dataset> datasetTDB1 = ()-> TDBFactory.createDataset();
+ Creator<Dataset> datasetTDB2 = ()-> TDB2Factory.createDataset();
+ return Arrays.asList(new Object[][] {
+ { "Plain", datasetPlainMaker },
+ { "TIM", datasetTxnMemMaker },
+ { "TDB1", datasetTDB1 },
+ { "TDB2", datasetTDB2 }
+ });
+ }
+
+ private final Creator<Dataset> creator;
+
+ public TestDataset2Graph(String name, Creator<Dataset> creator) {
+ this.creator = creator;
+ }
+
+ @Test public void dsgGraph_model() {
+ testInfModel(creator.create());
+ }
+
+ @Test public void dsgGraphTxnTDB_dataset_wrap() {
+ testOverDS(creator.create(), true);
+ }
+
+ @Test public void dsgGraphTxnTDB_dataset_create() {
+ testOverDS(creator.create(), false);
+ }
+ private static void testInfModel(Dataset ds0) {
+ Txn.executeWrite(ds0, ()->{});
+ Model baseModel = ds0.getDefaultModel();
+ Model model = ModelFactory.createInfModel(RDFSRuleReasonerFactory.theInstance().create(null), baseModel);
+ if ( model.getGraph().getTransactionHandler().transactionsSupported() ) {
+ // InfModels do not support transactions per se - they particpate if includes in a suitabel dataset.
+ model.begin();
+ long x = Iter.count(model.listStatements());
+ model.commit();
+ assertTrue(x > 10);
+ }
+ }
+
+ private static void testOverDS(Dataset ds0, boolean wrap) {
+ // Force to transactions / verify the DSG is transactional.
+ Txn.executeWrite(ds0, ()->{});
+ Model baseModel = ds0.getDefaultModel();
+ Model model = ModelFactory.createInfModel(RDFSRuleReasonerFactory.theInstance().create(null), baseModel);
+ Dataset ds1 = wrap ? DatasetFactory.wrap(model) : DatasetFactory.create(model);
+
+ try ( RDFConnection conn = RDFConnectionFactory.connect(ds1) ) {
+
+ conn.querySelect("SELECT (count(*) AS ?C) { ?s ?p ?o } HAVING (?C = 0)", (qs)-> fail("Didn't expect any query solutions"));
+
+ // Necessary
+ Txn.exec(conn, TxnType.READ, ()->{
+ try ( QueryExecution qExec = conn.query("SELECT * { ?s ?p ?o }") ) {
+ long x = ResultSetFormatter.consume(qExec.execSelect());
+ assertTrue(x > 10); // About106
+ }
+ });
+ }
+
+ Triple t = SSE.parseTriple("(:s :p :o)");
+ Quad q = Quad.create(Quad.defaultGraphIRI, t);
+
+ // Now write via top.
+ Txn.executeWrite(ds1, ()->{
+ ds1.asDatasetGraph().add(q);
+ });
+
+ // And get it back again from storage.
+ Txn.exec(ds0, TxnType.READ, ()->{
+ assertEquals(1, ds0.asDatasetGraph().getDefaultGraph().size());
+ assertTrue(ds0.getDefaultModel().getGraph().contains(t));
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnection.java
----------------------------------------------------------------------
diff --git a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnection.java b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnection.java
index 3c5e374..2cd7e08 100644
--- a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnection.java
+++ b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnection.java
@@ -110,8 +110,6 @@ public interface RDFConnection extends
*/
@Override
public default void querySelect(String query, Consumer<QuerySolution> rowAction) {
- //Parse local: querySelect(QueryFactory.create(query), rowAction);
- // XXX Parse point.
Txn.executeRead(this, ()->{
try ( QueryExecution qExec = query(query) ) {
qExec.execSelect().forEachRemaining(rowAction);
http://git-wip-us.apache.org/repos/asf/jena/blob/4e724c2f/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java
----------------------------------------------------------------------
diff --git a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java
index 2db693e..767ed3f 100644
--- a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java
+++ b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionLocal.java
@@ -70,7 +70,8 @@ public class RDFConnectionLocal implements RDFConnection {
@Override
public QueryExecution query(Query query) {
checkOpen();
- return Txn.calculateRead(dataset, ()->QueryExecutionFactory.create(query, dataset));
+ // There is no point doing this in a transaction because the QueryExecution is passed out.
+ return QueryExecutionFactory.create(query, dataset);
}
@Override
[12/12] jena git commit: Include fuseki-backup in the distribution
Posted by an...@apache.org.
Include fuseki-backup in the distribution
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/10aa1397
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/10aa1397
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/10aa1397
Branch: refs/heads/master
Commit: 10aa1397f6616d2267e1de9acfd4307eac4f63c4
Parents: 642a17c
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Mar 6 16:27:38 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Mar 6 16:27:38 2018 +0000
----------------------------------------------------------------------
jena-fuseki2/apache-jena-fuseki/assembly-dist.xml | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/10aa1397/jena-fuseki2/apache-jena-fuseki/assembly-dist.xml
----------------------------------------------------------------------
diff --git a/jena-fuseki2/apache-jena-fuseki/assembly-dist.xml b/jena-fuseki2/apache-jena-fuseki/assembly-dist.xml
index f59b655..a5dfc40 100644
--- a/jena-fuseki2/apache-jena-fuseki/assembly-dist.xml
+++ b/jena-fuseki2/apache-jena-fuseki/assembly-dist.xml
@@ -87,6 +87,7 @@
<include>log4j.properties</include>
<include>fuseki</include>
<include>fuseki-server</include>
+ <include>fuseki-backup</include>
<include>fuseki-server.bat</include>
<include>bin/*</include>
</includes>
[10/12] jena git commit: JENA-1498: Merge commit 'refs/pull/371/head'
of https://github.com/apache/jena
Posted by an...@apache.org.
JENA-1498: Merge commit 'refs/pull/371/head' of https://github.com/apache/jena
This closes #371.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/4100e44d
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/4100e44d
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/4100e44d
Branch: refs/heads/master
Commit: 4100e44da6ea531c8188105c52d66e725e08253e
Parents: 81cd7a1 1cb843b
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Mar 6 16:15:21 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Mar 6 16:15:21 2018 +0000
----------------------------------------------------------------------
jena-fuseki2/apache-jena-fuseki/backup | 22 --------------
jena-fuseki2/apache-jena-fuseki/fuseki-backup | 34 ++++++++++++++++++++++
2 files changed, 34 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
[07/12] jena git commit: Integration tests for dataset/graphs and
some assemblers.
Posted by an...@apache.org.
Integration tests for dataset/graphs and some assemblers.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/41eefd40
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/41eefd40
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/41eefd40
Branch: refs/heads/master
Commit: 41eefd40e298b00fa35ff5b4b4cf3ec0aebccdf0
Parents: 4744cfc
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Mar 4 15:41:04 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Mar 5 14:50:50 2018 +0000
----------------------------------------------------------------------
.../jena/sparql/core/DatasetGraphOne.java | 41 +++---
.../jena/sparql/core/TransactionalLock.java | 4 +-
.../jena/sparql/core/TxnDataset2Graph.java | 15 +-
.../transaction/TestTransactionSupport.java | 16 +-
.../jena/test/assembler/TS_Assembler.java | 31 ++++
.../test/assembler/TestDatasetAssembler.java | 145 +++++++++++++++++++
.../rdfconnection/TestRDFConnectionRemote.java | 3 +-
.../apache/jena/test/txn/TestDataset2Graph.java | 19 ++-
.../testing/Assembler/assem_dsg1_1.ttl | 11 ++
.../testing/Assembler/assem_dsg1_2.ttl | 15 ++
.../testing/Assembler/assem_dsg1_3.ttl | 15 ++
.../testing/Assembler/assem_dsg1_bad_1.ttl | 15 ++
.../testing/Assembler/assem_dsg1_inf_tdb1.ttl | 31 ++++
.../testing/Assembler/assem_dsg1_inf_tdb2.ttl | 30 ++++
.../testing/Assembler/assem_dsg_sink.ttl | 11 ++
.../testing/Assembler/assem_dsg_zero.ttl | 9 ++
.../testing/Assembler/data.ttl | 5 +
17 files changed, 373 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
index faf37c7..29a486b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
@@ -45,6 +45,12 @@ public class DatasetGraphOne extends DatasetGraphBaseFind {
private final boolean supportsAbort;
public static DatasetGraph create(Graph graph) {
+ if ( graph instanceof GraphView ) {
+ // This becomes a simple class that passes all transaction operations the
+ // underlying dataset and masks the fact here are other graphs in the storage.
+ return new DatasetGraphOne(graph, ((GraphView)graph).getDataset());
+ }
+
return new DatasetGraphOne(graph);
}
@@ -57,30 +63,18 @@ public class DatasetGraphOne extends DatasetGraphBaseFind {
@SuppressWarnings("deprecation")
private DatasetGraphOne(Graph graph) {
+ // Not GraphView which was hanled in create(Graph).
this.graph = graph;
- if ( graph instanceof GraphView ) {
- backingDGS = ((GraphView)graph).getDataset();
- txn = backingDGS;
- supportsAbort = backingDGS.supportsTransactionAbort();
- } else {
- // JENA-1492 - pass down transactions.
- if ( TxnDataset2Graph.TXN_DSG_GRAPH )
- txn = new TxnDataset2Graph(graph);
- else
- txn = TransactionalLock.createMRSW();
- backingDGS = null;
- supportsAbort = false;
- }
- }
-
- public DatasetGraphOne(Graph graph, Transactional transactional) {
- this.graph = graph;
- backingDGS = null;
- if ( transactional == null )
- txn = TransactionalLock.createMRSW();
+ // JENA-1492 - pass down transactions.
+ if ( TxnDataset2Graph.TXN_DSG_GRAPH )
+ txn = new TxnDataset2Graph(graph);
else
- txn = transactional;
- supportsAbort = false;
+ txn = TransactionalLock.createMRSW();
+ backingDGS = null;
+ // Don't advertise the fact but TxnDataset2Graph tries to provide abort.
+ // We can not guarantee it though because a plain, non-TIM,
+ // memory graph does not support abort.
+ supportsAbort = false;
}
@Override public void begin(TxnType txnType) { txn.begin(txnType); }
@@ -93,8 +87,7 @@ public class DatasetGraphOne extends DatasetGraphBaseFind {
@Override public ReadWrite transactionMode() { return txn.transactionMode(); }
@Override public TxnType transactionType() { return txn.transactionType(); }
@Override public boolean supportsTransactions() { return true; }
- // Because there are never any changes, abort() means "finish".
- @Override public boolean supportsTransactionAbort() { return true; }
+ @Override public boolean supportsTransactionAbort() { return supportsAbort; }
@Override
public boolean containsGraph(Node graphNode) {
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
index 930f9e2..1c0ce6f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
@@ -161,7 +161,7 @@ public class TransactionalLock implements Transactional {
endOnce() ;
}
- private void endOnce() {
+ protected void endOnce() {
if ( isInTransaction() ) {
lock.leaveCriticalSection() ;
txnMode.set(null);
@@ -173,7 +173,7 @@ public class TransactionalLock implements Transactional {
}
}
- private void error(String msg) {
+ protected void error(String msg) {
throw new JenaTransactionException(msg) ;
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
index 027d1ed..564c1db 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
@@ -220,8 +220,21 @@ public class TxnDataset2Graph extends TransactionalLock {
@Override
public void abort() {
- handlers(h -> h.abort());
+ handlers(h->h.abort());
finish();
super.abort();
}
+
+ @Override
+ public void end() {
+ if ( isTransactionMode(ReadWrite.WRITE) )
+ error("Write transaction - no commit or abort before end()") ;
+ // Need to put this in between the two parts of end().
+ if ( super.isInTransaction() ) {
+ // Must be READ at this point.
+ handlers(h->h.commit());
+ finish();
+ }
+ super.endOnce();
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
index 3b8d880..2208c6d 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/TestTransactionSupport.java
@@ -24,6 +24,7 @@ import java.util.List ;
import org.apache.jena.atlas.lib.Creator ;
import org.apache.jena.sparql.core.DatasetGraph ;
import org.apache.jena.sparql.core.DatasetGraphFactory ;
+import org.apache.jena.sparql.core.DatasetGraphSink;
import org.apache.jena.sparql.core.DatasetGraphZero;
import org.apache.jena.sparql.graph.GraphFactory ;
import org.junit.Assert ;
@@ -48,16 +49,17 @@ public class TestTransactionSupport {
x.add(new Object[] {"create",
(Creator<DatasetGraph>)()->DatasetGraphFactory.create(),
true, false}) ;
- x.add(new Object[] {"wrap" ,
- (Creator<DatasetGraph>)()->
- DatasetGraphFactory.wrap(GraphFactory.createDefaultGraph()),
- true, true}) ;
- x.add(new Object[] {"createZeroGraph" ,
+ x.add(new Object[] {"wrap(Graph)" ,
+ (Creator<DatasetGraph>)()->DatasetGraphFactory.wrap(GraphFactory.createDefaultGraph()),
+ true, false}) ;
+ x.add(new Object[] {"zero" ,
(Creator<DatasetGraph>)()->new DatasetGraphZero(),
true, true}) ;
+ x.add(new Object[] {"sink" ,
+ (Creator<DatasetGraph>)()->new DatasetGraphSink(),
+ true, true}) ;
x.add(new Object[] {"create(Graph)",
- (Creator<DatasetGraph>)()->
- DatasetGraphFactory.create(GraphFactory.createDefaultGraph()),
+ (Creator<DatasetGraph>)()->DatasetGraphFactory.create(GraphFactory.createDefaultGraph()),
true, false}) ;
return x ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TS_Assembler.java
----------------------------------------------------------------------
diff --git a/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TS_Assembler.java b/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TS_Assembler.java
new file mode 100644
index 0000000..053f322
--- /dev/null
+++ b/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TS_Assembler.java
@@ -0,0 +1,31 @@
+/*
+ * 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.test.assembler;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+ TestDatasetAssembler.class
+})
+
+public class TS_Assembler {
+
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TestDatasetAssembler.java
----------------------------------------------------------------------
diff --git a/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TestDatasetAssembler.java b/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TestDatasetAssembler.java
new file mode 100644
index 0000000..c1a8e62
--- /dev/null
+++ b/jena-integration-tests/src/test/java/org/apache/jena/test/assembler/TestDatasetAssembler.java
@@ -0,0 +1,145 @@
+/*
+ * 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.test.assembler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.jena.assembler.exceptions.AssemblerException;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.query.ARQ;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.TxnType;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.Property;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.sparql.core.DatasetOne;
+import org.apache.jena.sparql.core.TxnDataset2Graph;
+import org.apache.jena.sparql.core.assembler.AssemblerUtils;
+import org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab;
+import org.apache.jena.system.JenaSystem;
+import org.apache.jena.system.Txn;
+import org.apache.jena.test.txn.TestDataset2Graph;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Tests of building datasets with assemblers.
+ */
+public class TestDatasetAssembler {
+ static { JenaSystem.init(); }
+
+ @SuppressWarnings("deprecation")
+ @BeforeClass public static void beforeClass() {
+ if ( ! TxnDataset2Graph.TXN_DSG_GRAPH )
+ Log.warn(TestDataset2Graph.class, "**** TxnDataset2Graph.TXN_DSG_GRAPH is false in the system setup ****");
+ }
+
+ protected static String DIR = "testing/Assembler/";
+
+ static private Model data = RDFDataMgr.loadModel(DIR + "data.ttl");
+ static private Resource s = data.createResource("http://example/data/s");
+ static private Property p = data.createProperty("http://example/data/p");
+ static private Resource o = data.createResource("http://example/data/o");
+ static private Statement stmt = data.createStatement(s, p, o);
+
+ // See also jena-arq/etc/...
+
+ // ---- Null dataset assemblers
+
+ @Test public void dsg_zero() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg_zero.ttl", DatasetAssemblerVocab.tDatasetZero);
+ assertNotNull(ds);
+ try {
+ ds.getDefaultModel().add(stmt);
+ } catch (UnsupportedOperationException ex) {}
+ }
+
+ @Test public void dsg_sink() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg_sink.ttl", DatasetAssemblerVocab.tDatasetSink);
+ assertNotNull(ds);
+ assertTrue(ds.getContext().isDefined(ARQ.queryTimeout));
+ ds.getDefaultModel().add(stmt);
+ assertEquals(0, ds.getDefaultModel().size());
+ }
+
+ // ---- DatasetOneAssembler
+
+ @Test public void dsg1_1() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg1_1.ttl", DatasetAssemblerVocab.tDatasetOne);
+ assertNotNull(ds);
+ assertNotNull(ds.getDefaultModel());
+ assertTrue(ds instanceof DatasetOne);
+ useIt(ds);
+ }
+
+ @Test public void dsg1_2() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg1_2.ttl", DatasetAssemblerVocab.tDatasetOne);
+ assertNotNull(ds);
+ assertNotNull(ds.getDefaultModel());
+ assertTrue(ds instanceof DatasetOne);
+ readIt(ds);
+ }
+
+ @Test public void dsg1_3() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg1_3.ttl", DatasetAssemblerVocab.tDatasetOne);
+ assertNotNull(ds);
+ assertNotNull(ds.getDefaultModel());
+ assertTrue(ds instanceof DatasetOne);
+ readIt(ds);
+ }
+
+ @Test(expected=AssemblerException.class)
+ public void dsg1_bad_1() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg1_bad_1.ttl", DatasetAssemblerVocab.tDatasetOne);
+ assertNotNull(ds);
+ }
+
+ @Test public void dsg1_inf_tdb1_1() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg1_inf_tdb1.ttl", DatasetAssemblerVocab.tDatasetOne);
+ assertNotNull(ds);
+ assertNotNull(ds.getDefaultModel());
+ assertTrue(ds instanceof DatasetOne);
+ useIt(ds);
+ }
+
+ @Test public void dsg1_inf_tdb1_2() {
+ Dataset ds = (Dataset)AssemblerUtils.build(DIR+"assem_dsg1_inf_tdb2.ttl", DatasetAssemblerVocab.tDatasetOne);
+ assertNotNull(ds);
+ assertNotNull(ds.getDefaultModel());
+ assertTrue(ds instanceof DatasetOne);
+ useIt(ds);
+ }
+
+ private void readIt(Dataset ds) {
+ Txn.exec(ds, TxnType.READ, ()->{
+ assertTrue(ds.getDefaultModel().contains(stmt));
+ });
+ }
+
+ private void useIt(Dataset ds) {
+ Txn.executeWrite(ds, ()->{
+ ds.getDefaultModel().add(data);
+ });
+ readIt(ds);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
----------------------------------------------------------------------
diff --git a/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java b/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
index ef86755..d064b6d 100644
--- a/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
+++ b/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
@@ -35,10 +35,11 @@ import org.junit.BeforeClass ;
public class TestRDFConnectionRemote extends AbstractTestRDFConnection {
private static FusekiServer server ;
private static DatasetGraph serverdsg = DatasetGraphFactory.createTxnMem() ;
- protected static int PORT = FusekiLib.choosePort();
+ protected static int PORT;
@BeforeClass
public static void beforeClass() {
+ PORT = FusekiLib.choosePort();
server = FusekiServer.create()
.setPort(PORT)
.add("/ds", serverdsg)
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java
----------------------------------------------------------------------
diff --git a/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java b/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java
index 38e1e55..4d515b6 100644
--- a/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java
+++ b/jena-integration-tests/src/test/java/org/apache/jena/test/txn/TestDataset2Graph.java
@@ -20,13 +20,13 @@ package org.apache.jena.test.txn;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.Collection;
import org.apache.jena.atlas.iterator.Iter;
import org.apache.jena.atlas.lib.Creator;
+import org.apache.jena.atlas.logging.Log;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.*;
import org.apache.jena.rdf.model.Model;
@@ -63,6 +63,9 @@ public class TestDataset2Graph {
// TXN_DSG_GRAPH must be true.
@SuppressWarnings("deprecation")
@BeforeClass public static void beforeClass() {
+ if ( ! TxnDataset2Graph.TXN_DSG_GRAPH )
+ Log.warn(TestDataset2Graph.class, "**** TxnDataset2Graph.TXN_DSG_GRAPH is false in the system setup ****");
+
txn_dsg_graph = TxnDataset2Graph.TXN_DSG_GRAPH;
TxnDataset2Graph.TXN_DSG_GRAPH = true;
// Make sure sync isn't called.
@@ -78,13 +81,13 @@ public class TestDataset2Graph {
@Parameters(name = "{index}: {0}")
public static Collection<Object[]> data() {
- Creator<Dataset> datasetPlainMaker = ()-> DatasetFactory.createTxnMem() ;
+ Creator<Dataset> datasetPlainMaker = ()-> DatasetFactory.createGeneral() ;
Creator<Dataset> datasetTxnMemMaker = ()-> DatasetFactory.createTxnMem() ;
Creator<Dataset> datasetTDB1 = ()-> TDBFactory.createDataset();
Creator<Dataset> datasetTDB2 = ()-> TDB2Factory.createDataset();
return Arrays.asList(new Object[][] {
- { "Plain", datasetPlainMaker },
- { "TIM", datasetTxnMemMaker },
+ { "Plain", datasetPlainMaker },
+ { "TIM", datasetTxnMemMaker },
{ "TDB1", datasetTDB1 },
{ "TDB2", datasetTDB2 }
});
@@ -96,15 +99,15 @@ public class TestDataset2Graph {
this.creator = creator;
}
- @Test public void dsgGraph_model() {
+ @Test public void dsgGraphTxn_model() {
testInfModel(creator.create());
}
- @Test public void dsgGraphTxnTDB_dataset_wrap() {
+ @Test public void dsgGraphTxn_dataset_wrap() {
testOverDS(creator.create(), true);
}
- @Test public void dsgGraphTxnTDB_dataset_create() {
+ @Test public void dsgGraphTxn_dataset_create() {
testOverDS(creator.create(), false);
}
private static void testInfModel(Dataset ds0) {
@@ -129,7 +132,7 @@ public class TestDataset2Graph {
try ( RDFConnection conn = RDFConnectionFactory.connect(ds1) ) {
- conn.querySelect("SELECT (count(*) AS ?C) { ?s ?p ?o } HAVING (?C = 0)", (qs)-> fail("Didn't expect any query solutions"));
+ //conn.querySelect("SELECT (count(*) AS ?C) { ?s ?p ?o } HAVING (?C = 0)", (qs)-> fail("Didn't expect any query solutions"));
// Necessary
Txn.exec(conn, TxnType.READ, ()->{
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg1_1.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg1_1.ttl b/jena-integration-tests/testing/Assembler/assem_dsg1_1.ttl
new file mode 100644
index 0000000..046659a
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg1_1.ttl
@@ -0,0 +1,11 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+# No default graph specified means add an in-memory one.
+<#dataset> rdf:type ja:RDFDatasetOne .
+
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg1_2.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg1_2.ttl b/jena-integration-tests/testing/Assembler/assem_dsg1_2.ttl
new file mode 100644
index 0000000..00c3324
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg1_2.ttl
@@ -0,0 +1,15 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+<#dataset> rdf:type ja:RDFDatasetOne ;
+ ja:defaultGraph <#graph> .
+
+<#graph> a ja:MemoryModel ;
+ ja:content [ja:externalContent <file:data.ttl> ] ;
+ .
+
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg1_3.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg1_3.ttl b/jena-integration-tests/testing/Assembler/assem_dsg1_3.ttl
new file mode 100644
index 0000000..af8d98c
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg1_3.ttl
@@ -0,0 +1,15 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+<#dataset> rdf:type ja:RDFDatasetOne ;
+ ja:graph <#graph> .
+
+<#graph> a ja:MemoryModel ;
+ ja:content [ja:externalContent <file:data.ttl> ] ;
+ .
+
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg1_bad_1.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg1_bad_1.ttl b/jena-integration-tests/testing/Assembler/assem_dsg1_bad_1.ttl
new file mode 100644
index 0000000..5ab7911
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg1_bad_1.ttl
@@ -0,0 +1,15 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+<#dataset> rdf:type ja:RDFDatasetOne ;
+ ## Illegal
+ ja:namedGraph [ ja:graphName <http://example/graph1> ;
+ ja:graph :data1 ] ;
+ .
+
+<#graph> a ja:MemoryModel .
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb1.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb1.ttl b/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb1.ttl
new file mode 100644
index 0000000..00cd419
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb1.ttl
@@ -0,0 +1,31 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+## Assembler for a dataset of a single inference model,
+## with the base storage in TDB1.
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+<#dataset> rdf:type ja:RDFDatasetOne ;
+ ja:defaultGraph <#model_inf> ;
+ .
+
+<#model_inf> a ja:InfModel ;
+ ja:baseModel <#tdbGraph> ;
+ ja:reasoner [
+ ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
+ ] .
+
+## Graph from TDB
+<#tdbGraph> rdf:type tdb:GraphTDB ;
+ tdb:dataset <#tdbDataset> .
+
+
+## Base data in TDB.
+<#tdbDataset> rdf:type tdb:DatasetTDB ;
+ tdb:location "--mem--" ;
+ .
+
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb2.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb2.ttl b/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb2.ttl
new file mode 100644
index 0000000..76c5010
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg1_inf_tdb2.ttl
@@ -0,0 +1,30 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+## Assembler for a dataset of a single inference model,
+## with the base storage in TDB2.
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb2: <http://jena.apache.org/2016/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+<#dataset> rdf:type ja:RDFDatasetOne ;
+ ja:defaultGraph <#model_inf> ;
+ .
+
+<#model_inf> a ja:InfModel ;
+ ja:baseModel <#tdbGraph> ;
+ ja:reasoner [
+ ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
+ ] .
+
+## Graph from the database
+<#tdbGraph> rdf:type tdb2:GraphTDB2 ;
+ tdb2:dataset <#tdbDataset> .
+
+## Base data in TDB2.
+<#tdbDataset> rdf:type tdb2:DatasetTDB2 ;
+ tdb2:location "--mem--" ;
+ .
+
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg_sink.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg_sink.ttl b/jena-integration-tests/testing/Assembler/assem_dsg_sink.ttl
new file mode 100644
index 0000000..58f608c
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg_sink.ttl
@@ -0,0 +1,11 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+<#dataset> rdf:type ja:RDFDatasetSink ;
+ ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "300" ] ;
+ .
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/assem_dsg_zero.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/assem_dsg_zero.ttl b/jena-integration-tests/testing/Assembler/assem_dsg_zero.ttl
new file mode 100644
index 0000000..ba76fc2
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/assem_dsg_zero.ttl
@@ -0,0 +1,9 @@
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+PREFIX : <#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>
+PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
+
+<#dataset> rdf:type ja:RDFDatasetZero .
http://git-wip-us.apache.org/repos/asf/jena/blob/41eefd40/jena-integration-tests/testing/Assembler/data.ttl
----------------------------------------------------------------------
diff --git a/jena-integration-tests/testing/Assembler/data.ttl b/jena-integration-tests/testing/Assembler/data.ttl
new file mode 100644
index 0000000..e0d78e9
--- /dev/null
+++ b/jena-integration-tests/testing/Assembler/data.ttl
@@ -0,0 +1,5 @@
+PREFIX : <http://example/data/>
+
+:s :p :o .
+:s :q 12 .
+:s :q 12.0 .
[03/12] jena git commit: isTransactionType -> isTransactionMode
Posted by an...@apache.org.
isTransactionType -> isTransactionMode
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/7a11a6b8
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/7a11a6b8
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/7a11a6b8
Branch: refs/heads/master
Commit: 7a11a6b8090e0218ab02f364e2c3153edbced5b8
Parents: e58cbcb
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Feb 26 16:42:32 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Feb 27 23:23:30 2018 +0000
----------------------------------------------------------------------
.../java/org/apache/jena/sparql/core/DatasetGraphMap.java | 2 +-
.../org/apache/jena/sparql/core/DatasetGraphWithLock.java | 10 ++++++++--
.../org/apache/jena/sparql/core/DatasetGraphZero.java | 1 +
.../org/apache/jena/sparql/core/TransactionalLock.java | 8 ++++----
.../main/java/org/apache/jena/sparql/graph/GraphZero.java | 9 +++++----
5 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/7a11a6b8/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
index c01f250..6eebbcf 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
@@ -152,7 +152,7 @@ public class DatasetGraphMap extends DatasetGraphTriplesQuads
if ( g == null ) {
g = getGraphCreate(graphNode);
if ( g != null )
- graphs.put(graphNode, g);
+ addGraph(graphNode, g);
}
return g;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/7a11a6b8/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphWithLock.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphWithLock.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphWithLock.java
index ff79e97..ff173b0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphWithLock.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphWithLock.java
@@ -91,8 +91,14 @@ public class DatasetGraphWithLock extends DatasetGraphTrackActive implements Syn
return transactional.isInTransaction() ;
}
- protected boolean isTransactionType(ReadWrite readWriteType) {
- return transactional.isTransactionType(readWriteType) ;
+ protected boolean isTransactionMode(ReadWrite readWriteMode) {
+ return transactional.isTransactionMode(readWriteMode) ;
+ }
+
+ /** @deprecated Use {@link #isTransactionMode} */
+ @Deprecated
+ protected boolean isTransactionType(ReadWrite readWriteMode) {
+ return transactional.isTransactionMode(readWriteMode) ;
}
@Override
http://git-wip-us.apache.org/repos/asf/jena/blob/7a11a6b8/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphZero.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphZero.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphZero.java
index 4612179..702f7bb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphZero.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphZero.java
@@ -34,6 +34,7 @@ import org.apache.jena.sparql.graph.GraphZero;
*/
public class DatasetGraphZero extends DatasetGraphBaseFind {
+ // Invariant DatasetGraph; it does have tarnsaction state so new object here.
public static DatasetGraph create() { return new DatasetGraphZero(); }
private Graph dftGraph = GraphZero.instance();
http://git-wip-us.apache.org/repos/asf/jena/blob/7a11a6b8/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
index 3db630e..930f9e2 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/TransactionalLock.java
@@ -89,7 +89,7 @@ public class TransactionalLock implements Transactional {
return create(new LockMutex()) ;
}
- private TransactionalLock(Lock lock) {
+ protected TransactionalLock(Lock lock) {
this.lock = lock ;
}
@@ -124,7 +124,7 @@ public class TransactionalLock implements Transactional {
return Lib.readThreadLocal(txnType) ;
}
- // Lock propmotion required (Ok for mutex)
+ // Lock promotion required (Ok for mutex)
@Override
public boolean promote(Promote txnType) {
@@ -148,7 +148,7 @@ public class TransactionalLock implements Transactional {
return inTransaction.get();
}
- public boolean isTransactionType(ReadWrite mode) {
+ public boolean isTransactionMode(ReadWrite mode) {
if ( ! isInTransaction() )
return false;
return Lib.readThreadLocal(txnMode) == mode;
@@ -156,7 +156,7 @@ public class TransactionalLock implements Transactional {
@Override
public void end() {
- if ( isTransactionType(ReadWrite.WRITE) )
+ if ( isTransactionMode(ReadWrite.WRITE) )
error("Write transaction - no commit or abort before end()") ;
endOnce() ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/7a11a6b8/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphZero.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphZero.java b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphZero.java
index aba5cac..479340b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphZero.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphZero.java
@@ -28,14 +28,14 @@ import org.apache.jena.shared.PrefixMapping;
import org.apache.jena.util.iterator.ExtendedIterator;
import org.apache.jena.util.iterator.NullIterator;
-/** Immutable empty graph.
+/** Invariant empty graph.
* @see GraphSink
*/
public class GraphZero extends GraphBase {
- private static Graph graph = new GraphZero();
public static Graph instance() {
- return graph;
+ // It has transaction state do unsafe to share one object on one thread.
+ return new GraphZero();
}
private GraphZero() {}
@@ -45,10 +45,11 @@ public class GraphZero extends GraphBase {
return NullIterator.instance();
}
+ private TransactionHandler transactionHandler = new TransactionHandlerNull();
@Override
public TransactionHandler getTransactionHandler() {
- return new TransactionHandlerNull();
+ return transactionHandler;
}
@Override
[08/12] jena git commit: Fix typos
Posted by an...@apache.org.
Fix typos
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/1f149507
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/1f149507
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/1f149507
Branch: refs/heads/master
Commit: 1f149507a811174b15150b6ed119a748fe48f99b
Parents: 41eefd4
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Mar 5 18:39:19 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Mar 5 18:39:19 2018 +0000
----------------------------------------------------------------------
.../jena/sparql/core/TxnDataset2Graph.java | 21 ++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/1f149507/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
index 564c1db..4d84b70 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/TxnDataset2Graph.java
@@ -50,15 +50,15 @@ import org.apache.jena.sparql.JenaTransactionException;
* <p>
* Best practice is to change the graph membership outside of any transaction,
* ideally at setup time of the object using this class. (Caution: SPARQL Update
- * can create graphs.
+ * can create graphs.)
* @See {@link DatasetGraphMapLink}
* @See {@link DatasetGraphOne}
*/
public class TxnDataset2Graph extends TransactionalLock {
/**
* Control whether to pass down transactions from the dataset to the graph in the
- * dataset. This should be set to "true"; setting it "false" causes the onld,
- * no-transaction passing behaviour.
+ * dataset. This should be set to "true"; setting it "false" causes the old,
+ * non-transaction passing behaviour.
* <p>
* This is temporary flag during the transition because the change at Jena 3.7.0 needs
* to be proven in real deployments as well as testing. "false" restores the Jena
@@ -99,17 +99,18 @@ public class TxnDataset2Graph extends TransactionalLock {
}
// Determine the key - an object that is the unit of transactions.
- // For two graphs form the same DatasetGraph, i.e. GraphView, there should be one transaction.
+ // For two graphs from the same DatasetGraph, i.e. GraphView, there should be one transaction.
private static Object calcKey(Graph graph) {
if ( graph instanceof GraphView )
// Use the database as the key so that transactions are started once-per-storage.
- // This the case of a graph from some storage being plavced in a general dataset.
+ // This the case of a graph from some storage being placed in a general dataset.
return ((GraphView)graph).getDataset();
if ( graph instanceof InfGraph )
- // InfGraph does actual pass done in its TransactionHandler.
- // This allows the base graph to be included in the dataset as well as the InfGraph.
+ // InfGraph TransactionHandler passes the graph transaction to the base graph.
+ // This calcKey allows the base graph to be included in the dataset as well as the InfGraph.
return calcKey(((InfGraph)graph).getRawGraph());
-
+ // These should be handled by their respective graph transaction handler
+ // or the graph is overriding that behaviour for some reason.
// if ( graph instanceof GraphWrapper )
// return calcKey(((GraphWrapper)graph).get());
// if ( graph instanceof WrappedGraph )
@@ -213,7 +214,7 @@ public class TxnDataset2Graph extends TransactionalLock {
@Override
public void commit() {
handlers(h->h.commit());
- // Before super.commit - we stil hold the lock.
+ // Before super.commit - we still hold the lock.
finish();
super.commit();
}
@@ -231,7 +232,7 @@ public class TxnDataset2Graph extends TransactionalLock {
error("Write transaction - no commit or abort before end()") ;
// Need to put this in between the two parts of end().
if ( super.isInTransaction() ) {
- // Must be READ at this point.
+ // Must be READ mode at this point.
handlers(h->h.commit());
finish();
}