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/01/13 10:52:51 UTC
[6/8] jena git commit: JENA-1464: Refactor Fuseki configuration
processing.
JENA-1464: Refactor Fuseki configuration processing.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/64fe8bd9
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/64fe8bd9
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/64fe8bd9
Branch: refs/heads/master
Commit: 64fe8bd9161bed88150e330d8808ed45ce35d957
Parents: 65d4295
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jan 12 15:18:43 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jan 12 16:01:38 2018 +0000
----------------------------------------------------------------------
.../jena/sparql/util/graph/GraphUtils.java | 9 ++--
.../apache/jena/fuseki/build/FusekiConfig.java | 51 ++++++--------------
.../apache/jena/fuseki/mgt/ActionDatasets.java | 2 +-
.../apache/jena/fuseki/server/FusekiSystem.java | 29 +++--------
.../jena/fuseki/embedded/FusekiServer.java | 28 ++++++++---
5 files changed, 51 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/64fe8bd9/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java
index d82dfeb..ce0243e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java
@@ -173,13 +173,16 @@ public class GraphUtils {
return null ;
return s.getResource() ;
}
+
+ public static List<Resource> listResourcesByType(Model model, Resource type) {
+ return Iter.toList(model.listSubjectsWithProperty(RDF.type, type)) ;
+ }
public static Resource getResourceByType(Model model, Resource type) {
- // See also
- StmtIterator sIter = model.listStatements(null, RDF.type, type) ;
+ ResIterator sIter = model.listSubjectsWithProperty(RDF.type, type) ;
if ( !sIter.hasNext() )
return null ;
- Resource r = sIter.nextStatement().getSubject() ;
+ Resource r = sIter.next();
if ( sIter.hasNext() )
throw new TypeNotUniqueException(r) ;
return r ;
http://git-wip-us.apache.org/repos/asf/jena/blob/64fe8bd9/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
index 6e64632..614b721 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
@@ -33,7 +33,6 @@ import java.util.Collections ;
import java.util.List ;
import org.apache.jena.assembler.JA ;
-import org.apache.jena.atlas.iterator.Iter ;
import org.apache.jena.atlas.lib.IRILib ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.apache.jena.fuseki.Fuseki ;
@@ -47,7 +46,7 @@ import org.apache.jena.query.ResultSet ;
import org.apache.jena.rdf.model.* ;
import org.apache.jena.riot.Lang;
import org.apache.jena.sparql.core.assembler.AssemblerUtils ;
-import org.apache.jena.vocabulary.RDF ;
+import org.apache.jena.sparql.util.graph.GraphUtils;
import org.slf4j.Logger ;
public class FusekiConfig {
@@ -55,19 +54,13 @@ public class FusekiConfig {
private static Logger log = Fuseki.configLog ;
- /** Has side effects in server setup */
- public static List<DataAccessPoint> readServerConfigFile(String filename) {
- // Old-style config file.
- Model model = readAssemblerFile(filename) ;
- if ( model.size() == 0 )
- return Collections.emptyList() ;
- server(model) ;
- return servicesAndDatasets(model) ;
- }
-
- private static void server(Model model) {
+ /** Process the server section, if any, of a configuration file.
+ * This includes setting global context and ja:loadClass.
+ * It does not include services - see {@link #servicesAndDatasets}
+ */
+ public static void processServerConfig(Model model) {
// Find one server.
- List<Resource> servers = getByType(FusekiVocab.tServer, model) ;
+ List<Resource> servers = GraphUtils.listResourcesByType(model, FusekiVocab.tServer) ;
if ( servers.size() == 0 )
return ;
if ( servers.size() > 1 )
@@ -106,9 +99,13 @@ public class FusekiConfig {
}
}
- private static List<DataAccessPoint> servicesAndDatasets(Model model) {
+ /** Find and process datasets and services in a configuration file.
+ * This can be a Fuseki server configuration file or a services-only configuration file.
+ * It looks {@code fuseki:services ( .... )} then, if not found, all {@code rtdf:type fuseki:services}.
+ */
+ public static List<DataAccessPoint> servicesAndDatasets(Model model) {
// Old style configuration file : server to services.
- DatasetDescriptionRegistry dsDescMap = FusekiSystem.registryForBuild() ;
+ DatasetDescriptionRegistry dsDescMap = new DatasetDescriptionRegistry();
// ---- Services
ResultSet rs = FusekiLib.query("SELECT * { ?s fu:services [ list:member ?service ] }", model) ;
List<DataAccessPoint> accessPoints = new ArrayList<>() ;
@@ -124,7 +121,6 @@ public class FusekiConfig {
DataAccessPoint acc = FusekiBuilder.buildDataAccessPoint(svc, dsDescMap) ;
accessPoints.add(acc) ;
}
-
return accessPoints ;
}
@@ -147,12 +143,6 @@ public class FusekiConfig {
return AssemblerUtils.readAssemblerFile(filename) ;
}
- // XXX Move to a library
- private static List<Resource> getByType(Resource type, Model m) {
- ResIterator rIter = m.listSubjectsWithProperty(RDF.type, type) ;
- return Iter.toList(rIter) ;
- }
-
// ---- Directory of assemblers
/** Read service descriptions in the given directory */
@@ -177,7 +167,7 @@ public class FusekiConfig {
List<DataAccessPoint> dataServiceRef = new ArrayList<>() ;
try (DirectoryStream<Path> stream = Files.newDirectoryStream(pDir, filter)) {
for ( Path p : stream ) {
- DatasetDescriptionRegistry dsDescMap = FusekiSystem.registryForBuild() ;
+ DatasetDescriptionRegistry dsDescMap = new DatasetDescriptionRegistry() ;
String fn = IRILib.filenameToIRI(p.toString()) ;
log.info("Load configuration: "+fn);
Model m = readAssemblerFile(fn) ;
@@ -189,21 +179,12 @@ public class FusekiConfig {
return dataServiceRef ;
}
- /** Read and process one file */
- public static List<DataAccessPoint> readConfigurationFile(String fn) {
- List<DataAccessPoint> acc = new ArrayList<>() ;
- Model m = readAssemblerFile(fn) ;
- DatasetDescriptionRegistry dsDescMap = new DatasetDescriptionRegistry() ;
- readConfiguration(m, dsDescMap, acc) ;
- return acc ;
- }
-
/** Read a configuration in a model.
* Allow dataset descriptions to be carried over from another place.
* Add to a list.
*/
private static void readConfiguration(Model m, DatasetDescriptionRegistry dsDescMap, List<DataAccessPoint> dataServiceRef) {
- List<Resource> services = getByType(FusekiVocab.fusekiService, m) ;
+ List<Resource> services = GraphUtils.listResourcesByType(m, FusekiVocab.fusekiService) ;
if ( services.size() == 0 ) {
log.error("No services found") ;
@@ -219,7 +200,7 @@ public class FusekiConfig {
// ---- System database
/** Read the system database */
public static List<DataAccessPoint> readSystemDatabase(Dataset ds) {
- DatasetDescriptionRegistry dsDescMap = FusekiSystem.registryForBuild() ;
+ DatasetDescriptionRegistry dsDescMap = new DatasetDescriptionRegistry() ;
String qs = StrUtils.strjoinNL
(SystemState.PREFIXES ,
"SELECT * {" ,
http://git-wip-us.apache.org/repos/asf/jena/blob/64fe8bd9/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
index d59ea66..85e84af 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
@@ -111,7 +111,7 @@ public class ActionDatasets extends ActionContainerItem {
@Override
protected JsonValue execPostContainer(HttpAction action) {
JenaUUID uuid = JenaUUID.generate() ;
- DatasetDescriptionRegistry registry = FusekiSystem.registryForBuild() ;
+ DatasetDescriptionRegistry registry = new DatasetDescriptionRegistry() ;
ContentType ct = FusekiLib.getContentType(action) ;
http://git-wip-us.apache.org/repos/asf/jena/blob/64fe8bd9/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiSystem.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiSystem.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiSystem.java
index 78f6490..105f20a 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiSystem.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiSystem.java
@@ -45,6 +45,7 @@ import org.apache.jena.riot.Lang ;
import org.apache.jena.riot.RDFDataMgr ;
import org.apache.jena.riot.RDFLanguages ;
import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.sparql.core.assembler.AssemblerUtils;
import org.apache.jena.tdb.sys.Names ;
public class FusekiSystem
@@ -257,12 +258,17 @@ public class FusekiSystem
return Collections.emptyList();
}
Fuseki.configLog.info("Configuration file: " + configFilename) ;
- return FusekiConfig.readServerConfigFile(configFilename) ;
+ //return FusekiConfig.readServerConfigFile(configFilename);
+ Model model = AssemblerUtils.readAssemblerFile(configFilename) ;
+ if ( model.size() == 0 )
+ return Collections.emptyList() ;
+ FusekiConfig.processServerConfig(model);
+ return FusekiConfig.servicesAndDatasets(model) ;
}
private static DataAccessPoint configFromTemplate(String templateFile, String datasetPath,
boolean allowUpdate, Map<String, String> params) {
- DatasetDescriptionRegistry registry = FusekiSystem.registryForBuild() ;
+ DatasetDescriptionRegistry registry = new DatasetDescriptionRegistry() ;
// ---- Setup
if ( params == null ) {
params = new HashMap<>() ;
@@ -404,25 +410,6 @@ public class FusekiSystem
}
/**
- * <ul>
- * <li>GLOBAL: sharing across all descriptions
- * <li>FILE: sharing within files but not across files.
- * </ul>
- */
- enum DatasetDescriptionScope { GLOBAL, FILE }
- private static DatasetDescriptionRegistry globalDatasets = new DatasetDescriptionRegistry() ;
- private static DatasetDescriptionScope policyDatasetDescriptionScope = DatasetDescriptionScope.FILE ;
-
- /** Call this once per configuration file. */
- public static DatasetDescriptionRegistry registryForBuild() {
- switch (policyDatasetDescriptionScope) {
- case FILE : return new DatasetDescriptionRegistry() ;
- case GLOBAL : return globalDatasets ;
- default: throw new InternalErrorException() ;
- }
- }
-
- /**
* Dataset set name to configuration file name. Return a configuration file name -
* existing one or ".ttl" form if new
*/
http://git-wip-us.apache.org/repos/asf/jena/blob/64fe8bd9/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiServer.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiServer.java b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiServer.java
index 5bc9102..c88509e 100644
--- a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiServer.java
+++ b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiServer.java
@@ -18,9 +18,12 @@
package org.apache.jena.fuseki.embedded;
-import java.util.*;
import static java.util.Objects.requireNonNull;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
@@ -32,16 +35,17 @@ import org.apache.jena.fuseki.build.FusekiBuilder;
import org.apache.jena.fuseki.build.FusekiConfig;
import org.apache.jena.fuseki.jetty.FusekiErrorHandler1;
import org.apache.jena.fuseki.mgt.ActionStats;
-import org.apache.jena.fuseki.server.DataAccessPoint;
-import org.apache.jena.fuseki.server.DataAccessPointRegistry;
-import org.apache.jena.fuseki.server.DataService;
-import org.apache.jena.fuseki.server.Operation;
-import org.apache.jena.fuseki.servlets.ServiceDispatchRegistry;
+import org.apache.jena.fuseki.server.*;
import org.apache.jena.fuseki.servlets.ActionService;
import org.apache.jena.fuseki.servlets.FusekiFilter;
+import org.apache.jena.fuseki.servlets.ServiceDispatchRegistry;
import org.apache.jena.query.Dataset;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.Resource;
import org.apache.jena.riot.WebContent;
import org.apache.jena.sparql.core.DatasetGraph;
+import org.apache.jena.sparql.core.assembler.AssemblerUtils;
+import org.apache.jena.sparql.util.graph.GraphUtils;
import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.security.SecurityHandler;
import org.eclipse.jetty.server.HttpConnectionFactory;
@@ -297,9 +301,17 @@ public class FusekiServer {
*/
public Builder parseConfigFile(String filename) {
requireNonNull(filename, "filename");
- List<DataAccessPoint> x = FusekiConfig.readConfigurationFile(filename);
+ Model model = AssemblerUtils.readAssemblerFile(filename);
+
+ // Process server context
+ Resource server = GraphUtils.getResourceByType(model, FusekiVocab.tServer);
+ if ( server != null )
+ AssemblerUtils.setContext(server, Fuseki.getContext()) ;
+
+ // Process services, whether via server ja:services or, if absent, by finding by type.
+ List<DataAccessPoint> x = FusekiConfig.servicesAndDatasets(model);
// Unbundle so that they accumulate.
- x.forEach(dap-> add(dap.getName(), dap.getDataService()));
+ x.forEach(dap->add(dap.getName(), dap.getDataService()));
return this;
}