You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by ga...@apache.org on 2020/10/18 10:12:05 UTC

[jena] branch master updated: - CLI option to use TDB2 rather than TDB.

This is an automated email from the ASF dual-hosted git repository.

galbiston pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/master by this push:
     new 7afbd51  - CLI option to use TDB2 rather than TDB.
     new 9a5e9ce  Merge pull request #813 from galbiston/geosparql_fuseki_tbd2
7afbd51 is described below

commit 7afbd51a1eaac53bfa886c33fb6540a822159fc5
Author: Greg Albiston <46...@users.noreply.github.com>
AuthorDate: Sun Oct 18 11:06:43 2020 +0100

    - CLI option to use TDB2 rather than TDB.
---
 .../jena/fuseki/geosparql/DatasetOperations.java   |   9 +-
 .../jena/fuseki/geosparql/cli/ArgsConfig.java      |  14 ++-
 .../org/apache/jena/fuseki/geosparql/TDB2Test.java | 128 +++++++++++++++++++++
 3 files changed, 146 insertions(+), 5 deletions(-)

diff --git a/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/DatasetOperations.java b/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/DatasetOperations.java
index 87cec24..a6489e8 100644
--- a/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/DatasetOperations.java
+++ b/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/DatasetOperations.java
@@ -40,6 +40,7 @@ import org.apache.jena.rdf.model.ModelFactory;
 import org.apache.jena.riot.RDFDataMgr;
 import org.apache.jena.riot.RDFFormat;
 import org.apache.jena.tdb.TDBFactory;
+import org.apache.jena.tdb2.TDB2Factory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -102,8 +103,12 @@ public class DatasetOperations {
         Dataset dataset;
         File tdbFolder = argsConfig.getTdbFile();
         if (tdbFolder != null) {
-            LOGGER.info("TDB Dataset: {}", tdbFolder);
-            dataset = TDBFactory.createDataset(tdbFolder.getAbsolutePath());
+            LOGGER.info("TDB Dataset: {}, TDB2: {}", tdbFolder, argsConfig.isTDB2());
+            if(argsConfig.isTDB2()){
+                dataset = TDB2Factory.connectDataset(tdbFolder.getAbsolutePath());
+            }else{
+                dataset = TDBFactory.createDataset(tdbFolder.getAbsolutePath());
+            }            
         } else {
             LOGGER.info("In-Memory Dataset");
             dataset = DatasetFactory.create();
diff --git a/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/cli/ArgsConfig.java b/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/cli/ArgsConfig.java
index 3bdac56..0df87ce 100644
--- a/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/cli/ArgsConfig.java
+++ b/jena-fuseki2/jena-fuseki-geosparql/src/main/java/org/apache/jena/fuseki/geosparql/cli/ArgsConfig.java
@@ -99,8 +99,12 @@ public class ArgsConfig {
     @Parameter(names = {"--spatial_index", "-si"}, description = "File to load or store the spatial index. Default to " + SPATIAL_INDEX_FILE + " in TDB folder if using TDB and not set. Otherwise spatial index is not stored.", converter = FileConverter.class, order = 16)
     private File spatialIndexFile = null;
 
-    //18) Help
-    @Parameter(names = {"--help", "-h"}, description = "Application help. @path/to/file can be used to submit parameters in a file.", help = true, order = 17)
+    //18) TDB2
+    @Parameter(names = {"--tdb2", "-t2"}, description = "Option to use TDB2, rather than TDB, for persistent storage. Default: false", order = 17)
+    private boolean tdb2 = false;
+    
+    //19) Help
+    @Parameter(names = {"--help", "-h"}, description = "Application help. @path/to/file can be used to submit parameters in a file.", help = true, order = 18)
     private boolean help = false;
 
     public int getPort() {
@@ -187,12 +191,16 @@ public class ArgsConfig {
         return spatialIndexFile;
     }
 
+    public boolean isTDB2() {
+        return tdb2;
+    }
+    
     public boolean isHelp() {
         return help;
     }
 
     public String getSummary() {
-        return "port=" + port + ", datsetName=" + datsetName + ", loopbackOnly=" + loopbackOnly + ", updateAllowed=" + updateAllowed + ", inference=" + inference + ", applyDefaultGeometry=" + applyDefaultGeometry + ", validateGeometryLiteral=" + validateGeometryLiteral + ", convertGeoPredicates=" + convertGeoPredicates + ", removeGeoPredicates=" + removeGeoPredicates + ", queryRewrite=" + queryRewrite + ", tdbFile=" + tdbFile + ", fileGraphFormats=" + fileGraphFormats + ", fileGraphDelim [...]
+        return "port=" + port + ", datsetName=" + datsetName + ", loopbackOnly=" + loopbackOnly + ", updateAllowed=" + updateAllowed + ", inference=" + inference + ", applyDefaultGeometry=" + applyDefaultGeometry + ", validateGeometryLiteral=" + validateGeometryLiteral + ", convertGeoPredicates=" + convertGeoPredicates + ", removeGeoPredicates=" + removeGeoPredicates + ", queryRewrite=" + queryRewrite + ", tdbFile=" + tdbFile + ", fileGraphFormats=" + fileGraphFormats + ", fileGraphDelim [...]
     }
 
     @Override
diff --git a/jena-fuseki2/jena-fuseki-geosparql/src/test/java/org/apache/jena/fuseki/geosparql/TDB2Test.java b/jena-fuseki2/jena-fuseki-geosparql/src/test/java/org/apache/jena/fuseki/geosparql/TDB2Test.java
new file mode 100644
index 0000000..4b2863b
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-geosparql/src/test/java/org/apache/jena/fuseki/geosparql/TDB2Test.java
@@ -0,0 +1,128 @@
+/*
+ * 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.fuseki.geosparql;
+
+import com.beust.jcommander.JCommander;
+import com.github.jsonldjava.shaded.com.google.common.io.Files;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.jena.fuseki.geosparql.cli.ArgsConfig;
+import org.apache.jena.geosparql.spatial.SpatialIndexException;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.QueryExecution;
+import org.apache.jena.query.QueryExecutionFactory;
+import org.apache.jena.query.QuerySolution;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.ResourceFactory;
+import org.junit.After;
+import org.junit.AfterClass;
+import static org.junit.Assert.assertEquals;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ *
+ *
+ */
+public class TDB2Test {
+
+    private static GeosparqlServer SERVER;
+
+    public TDB2Test() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws DatasetException, SpatialIndexException {
+
+        File tempTDBDir = Files.createTempDir();
+        String[] args = {"-rf", "geosparql_test.rdf>xml", "-i", "-t", tempTDBDir.getAbsolutePath(), "-t2"};
+
+        ArgsConfig argsConfig = new ArgsConfig();
+        JCommander.newBuilder()
+                .addObject(argsConfig)
+                .build()
+                .parse(args);
+
+        //Setup dataset
+        Dataset dataset = DatasetOperations.setup(argsConfig);
+
+        //Configure server
+        SERVER = new GeosparqlServer(argsConfig.getPort(), argsConfig.getDatsetName(), argsConfig.isLoopbackOnly(), dataset, argsConfig.isUpdateAllowed());
+        SERVER.start();
+
+        System.out.println("Server: " + SERVER.getLocalServiceURL());
+    }
+
+    @AfterClass
+    public static void tearDownClass() {
+        SERVER.shutdown();
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of main method, of class Main.
+     */
+    @Test
+    public void testMain() {
+        System.out.println("main");
+
+        String query = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>\n"
+                + "\n"
+                + "SELECT ?obj\n"
+                + "WHERE{\n"
+                + "    <http://example.org/Geometry#PolygonH> geo:sfContains ?obj .\n"
+                + "}ORDER by ?obj";
+        List<Resource> result = new ArrayList<>();
+        try (QueryExecution qe = QueryExecutionFactory.sparqlService(SERVER.getLocalServiceURL(), query)) {
+            ResultSet rs = qe.execSelect();
+
+            while (rs.hasNext()) {
+                QuerySolution qs = rs.nextSolution();
+                Resource obj = qs.getResource("obj");
+                result.add(obj);
+            }
+
+            //ResultSetFormatter.outputAsTSV(rs);
+        }
+
+        List<Resource> expResult = new ArrayList<>();
+        expResult.add(ResourceFactory.createResource("http://example.org/Feature#A"));
+        expResult.add(ResourceFactory.createResource("http://example.org/Feature#D"));
+        expResult.add(ResourceFactory.createResource("http://example.org/Feature#H"));
+        expResult.add(ResourceFactory.createResource("http://example.org/Feature#K"));
+        expResult.add(ResourceFactory.createResource("http://example.org/Geometry#LineStringD"));
+        expResult.add(ResourceFactory.createResource("http://example.org/Geometry#PointA"));
+        expResult.add(ResourceFactory.createResource("http://example.org/Geometry#PolygonH"));
+        expResult.add(ResourceFactory.createResource("http://example.org/Geometry#PolygonK"));
+
+        //System.out.println("Exp: " + expResult);
+        //System.out.println("Res: " + result);
+        assertEquals(expResult, result);
+    }
+
+}