Per-server verbose setting
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/629377e1 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/629377e1 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/629377e1 Branch: refs/heads/master Commit: 629377e1eb6604abae310e5c6af29da6e4d64073 Parents: fdaa648 Author: Andy Seaborne <[email protected]> Authored: Fri Nov 24 23:13:12 2017 +0000 Committer: Andy Seaborne <[email protected]> Committed: Tue Dec 12 10:07:37 2017 +0000 ---------------------------------------------------------------------- .../java/org/apache/jena/fuseki/Fuseki.java | 18 ++++++++++++++- .../apache/jena/fuseki/build/FusekiBuilder.java | 23 ++++++++++---------- .../apache/jena/fuseki/jetty/JettyFuseki.java | 2 -- .../jena/fuseki/server/FusekiInitialConfig.java | 3 ++- .../fuseki/server/FusekiServerListener.java | 10 ++++----- .../apache/jena/fuseki/servlets/ActionBase.java | 3 +-- .../apache/jena/fuseki/servlets/HttpAction.java | 5 ++--- .../jena/fuseki/embedded/FusekiServer.java | 10 ++++++++- 8 files changed, 48 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java index 4a4d4bd..639a1dd 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/Fuseki.java @@ -22,6 +22,8 @@ import java.util.Calendar ; import java.util.TimeZone ; import java.util.concurrent.TimeUnit ; +import javax.servlet.ServletContext; + import org.apache.jena.atlas.lib.DateTimeUtils ; import org.apache.jena.query.ARQ ; import org.apache.jena.riot.system.stream.LocatorFTP ; @@ -176,9 +178,23 @@ public class Fuseki { /** Instance of log for config server messages. */ public static final Logger configLog = LoggerFactory.getLogger(configLogName) ; - /** Instance of log for config server message s */ + /** Instance of log for config server messages. + * This is the global default used to set attribute + * in each server created. + */ public static boolean verboseLogging = false ; + /** ServletContext attibute for "verbose" - the value of the attirbiye is a Boolean */ + public static String attrVerbose = "jena-fuseki:verbose" ; + + public static void setVerbose(ServletContext cxt, boolean verbose) { + cxt.setAttribute(attrVerbose, Boolean.valueOf(verbose)); + } + + public static boolean getVerbose(ServletContext cxt) { + return (Boolean)cxt.getAttribute(attrVerbose); + } + /** * An instance of management for stream opening, including redirecting * through a location mapper whereby a name (e.g. URL) is redirected to http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiBuilder.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiBuilder.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiBuilder.java index 9a177fb..19f2745 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiBuilder.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiBuilder.java @@ -47,12 +47,9 @@ import org.apache.jena.rdf.model.Resource ; import org.apache.jena.sparql.core.DatasetGraph ; import org.apache.jena.sparql.util.FmtUtils ; import org.apache.jena.vocabulary.RDF ; -import org.slf4j.Logger ; public class FusekiBuilder { - private static Logger log = Fuseki.builderLog ; - /** Build a DataAccessPoint, including DataService, from the description at Resource svc */ public static DataAccessPoint buildDataAccessPoint(Resource svc, DatasetDescriptionRegistry dsDescMap) { RDFNode n = FusekiLib.getOne(svc, "fu:name") ; @@ -72,7 +69,6 @@ public class FusekiBuilder /** Build a DatasetRef starting at Resource svc, having the services as described by the descriptions. */ private static DataService buildDataServiceCustom(Resource svc, DatasetDescriptionRegistry dsDescMap) { - if ( log.isDebugEnabled() ) log.debug("Service: " + nodeLabel(svc)) ; Resource datasetDesc = ((Resource)getOne(svc, "fu:dataset")) ; Dataset ds = getDataset(datasetDesc, dsDescMap); @@ -132,24 +128,29 @@ public class FusekiBuilder /** Build a DataService starting at Resource svc, with the standard (default) set of services */ public static DataService buildDataServiceStd(DatasetGraph dsg, boolean allowUpdate) { DataService dataService = new DataService(dsg) ; - addServiceEP(dataService, Operation.Query, "query") ; - addServiceEP(dataService, Operation.Query, "sparql") ; + populateStdServices(dataService, allowUpdate); + return dataService ; + } + + /** Convenience operation to populate a {@link DataService} with the conventional default services. */ + public static void populateStdServices(DataService dataService, boolean allowUpdate) { + addServiceEP(dataService, Operation.Query, "query") ; + addServiceEP(dataService, Operation.Query, "sparql") ; if ( ! allowUpdate ) { addServiceEP(dataService, Operation.GSP_R, "data") ; addServiceEP(dataService, Operation.DatasetRequest_R, "") ; - return dataService ; + return; } addServiceEP(dataService, Operation.GSP_RW, "data") ; addServiceEP(dataService, Operation.GSP_R, "get") ; addServiceEP(dataService, Operation.Update, "update") ; addServiceEP(dataService, Operation.Upload, "upload") ; - // Dispatch needs introspecting on the HTTP request. addServiceEP(dataService, Operation.DatasetRequest_RW, "") ; - return dataService ; } - private static void addServiceEP(DataService dataService, Operation operation, String epName) { - dataService.addEndpoint(operation, epName) ; + /** Add an operation to a {@link DataService} with a given endpoint name */ + public static void addServiceEP(DataService dataService, Operation operation, String endpointName) { + dataService.addEndpoint(operation, endpointName) ; } public static RDFNode getOne(Resource svc, String property) { http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/jetty/JettyFuseki.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/jetty/JettyFuseki.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/jetty/JettyFuseki.java index 1c3670b..483fb65 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/jetty/JettyFuseki.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/jetty/JettyFuseki.java @@ -90,8 +90,6 @@ public class JettyFuseki { */ public static void initializeServer(JettyServerConfig config) { - // Currently server-wide. - Fuseki.verboseLogging = config.verboseLogging ; instance = new JettyFuseki(config) ; } http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiInitialConfig.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiInitialConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiInitialConfig.java index 8e66502..5c44802 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiInitialConfig.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiInitialConfig.java @@ -21,12 +21,13 @@ package org.apache.jena.fuseki.server; import java.util.HashMap ; import java.util.Map ; +import org.apache.jena.fuseki.Fuseki; import org.apache.jena.sparql.core.DatasetGraph ; /** Dataset setup (command line, config file) for a dataset (or several if config file) */ public class FusekiInitialConfig { public boolean quiet = false ; - public boolean verbose = false ; + public boolean verbose = Fuseki.verboseLogging ; // Priority order : --conf, templated // through the command line processing should not allow --conf and a templated /dataset. http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiServerListener.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiServerListener.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiServerListener.java index ce8bb10..ba3d85b 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiServerListener.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiServerListener.java @@ -88,13 +88,13 @@ public class FusekiServerListener implements ServletContextListener { initialSetup.fusekiServerConfigFile = cfg ; } - if ( initialSetup != null ) { - FusekiSystem.initializeDataAccessPoints(dataAccessPointRegistry, - initialSetup, FusekiSystem.dirConfiguration.toString()) ; - } else { + if ( initialSetup == null ) { Fuseki.serverLog.error("No configuration") ; throw new FusekiException("No configuration") ; - } + } + Fuseki.setVerbose(servletContext, initialSetup.verbose); + FusekiSystem.initializeDataAccessPoints(dataAccessPointRegistry, + initialSetup, FusekiSystem.dirConfiguration.toString()) ; } catch (Throwable th) { Fuseki.serverLog.error("Exception in initialization: {}", th.getMessage()) ; throw th ; http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java index c8a8f57..3a61e90 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java @@ -29,7 +29,6 @@ import javax.servlet.http.HttpServletResponse ; import org.apache.jena.atlas.RuntimeIOException ; import org.apache.jena.atlas.web.HttpException; -import org.apache.jena.fuseki.Fuseki ; import org.apache.jena.query.ARQ ; import org.apache.jena.query.QueryCancelledException ; import org.apache.jena.riot.web.HttpNames ; @@ -131,7 +130,7 @@ public abstract class ActionBase extends ServletBase */ protected HttpAction allocHttpAction(long id, HttpServletRequest request, HttpServletResponse response) { // Need a way to set verbose logging on a per servlet and per request basis. - return new HttpAction(id, log, request, response, Fuseki.verboseLogging) ; + return new HttpAction(id, log, request, response); } /** http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java index 9c10db1..f3f658b 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java @@ -102,16 +102,15 @@ public class HttpAction * @param log Logger for this action * @param request HTTP request * @param response HTTP response - * @param verbose verbose flag */ - public HttpAction(long id, Logger log, HttpServletRequest request, HttpServletResponse response, boolean verbose) { + public HttpAction(long id, Logger log, HttpServletRequest request, HttpServletResponse response) { this.id = id ; this.log = log ; this.request = request ; this.response = new HttpServletResponseTracker(this, response) ; // Should this be set when setDataset is called from the dataset context? // Currently server-wide, e.g. from the command line. - this.verbose = verbose ; + this.verbose = Fuseki.getVerbose(request.getServletContext()); this.contextPath = request.getServletContext().getContextPath() ; this.actionURI = ActionLib.actionURI(request) ; this.serviceDispatchRegistry = ServiceDispatchRegistry.get(request.getServletContext()) ; http://git-wip-us.apache.org/repos/asf/jena/blob/629377e1/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 ae38265..f7c837a 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 @@ -176,6 +176,7 @@ public class FusekiServer { private int port = 3330 ; private boolean loopback = false ; private boolean withStats = false ; + private boolean verbose = false ; // Other servlets to add. private List<Pair<String, HttpServlet>> other = new ArrayList<>(); private String contextPath = "/" ; @@ -221,6 +222,12 @@ public class FusekiServer { this.securityHandler = securityHandler; return this; } + + /** Set verbose logging */ + public Builder setVerbose(boolean verbose) { + this.verbose = verbose; + return this; + } /** Add the "/$/stats" servlet that responds with stats about the server, * including counts of all calls made. @@ -300,6 +307,8 @@ public class FusekiServer { }) ; ServletContextHandler handler = buildServletContext(contextPath, registry) ; + Fuseki.setVerbose(handler.getServletContext(), verbose); + ServiceDispatchRegistry.set(handler.getServletContext(), serviceRegistry); setMimeTypes(handler); @@ -374,7 +383,6 @@ public class FusekiServer { staticContent.setInitParameter("resourceBase", staticContentDir) ; context.addServlet(staticContent, "/"); } - } private static void addServlet(ServletContextHandler context, String pathspec, HttpServlet httpServlet) {
