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 2016/08/10 12:59:12 UTC
[06/12] jena git commit: Add adding of /$/stats. Don't assume a
global DataAccessPointRegistry.
Add adding of /$/stats. Don't assume a global DataAccessPointRegistry.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/4e20f283
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/4e20f283
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/4e20f283
Branch: refs/heads/master
Commit: 4e20f283e09e2e2978f85364b61354c78487f23e
Parents: 9b24360
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Aug 7 12:00:55 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Aug 7 13:55:50 2016 +0100
----------------------------------------------------------------------
.../fuseki/server/DataAccessPointRegistry.java | 9 ++-
.../fuseki/embedded/FusekiEmbeddedServer.java | 69 +++++++++++++-------
2 files changed, 53 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/4e20f283/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java
index eee14ea..533b49e 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java
@@ -50,18 +50,21 @@ public class DataAccessPointRegistry extends Registry<String, DataAccessPoint>
}) ;
}
- // To be removed ...
+ // TODO To be removed ...
private static DataAccessPointRegistry singleton = new DataAccessPointRegistry() ;
+ // Still used by ServerTest and FusekiEmbeddedServer (but nowhere else)
public static DataAccessPointRegistry get() { return singleton ; }
- private static final String attrNameRegistry = "jena.apache.org/fuseki/dataAccessPointRegistry" ;
+ private static final String attrNameRegistry = "jena-fuseki:dataAccessPointRegistry" ;
// Policy for the location of the server-wide DataAccessPointRegistry
public static DataAccessPointRegistry get(ServletContext cxt) {
//return (DataAccessPointRegistry)cxt.getAttribute(attrName) ;
return singleton ;
}
- public static void set(ServletContext cxt, DataAccessPointRegistry registry) {
+ public static void set(ServletContext cxt, DataAccessPointRegistry registry) {
+ // Temporary until get() removed completely.
+ singleton = registry ;
cxt.setAttribute(attrNameRegistry, registry) ;
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/4e20f283/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
index 9161453..cd3b0cb 100644
--- a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
+++ b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
@@ -22,6 +22,8 @@ import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
+import javax.servlet.ServletContext ;
+
import org.apache.jena.fuseki.Fuseki ;
import org.apache.jena.fuseki.FusekiConfigException ;
import org.apache.jena.fuseki.FusekiException ;
@@ -29,7 +31,11 @@ import org.apache.jena.fuseki.FusekiLogging ;
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.server.* ;
+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.OperationName ;
import org.apache.jena.fuseki.servlets.FusekiFilter ;
import org.apache.jena.sparql.core.DatasetGraph ;
import org.eclipse.jetty.server.HttpConnectionFactory ;
@@ -94,14 +100,19 @@ public class FusekiEmbeddedServer {
port = ((ServerConnector)server.getConnectors()[0]).getPort() ;
}
- /** Get the underlying Jetty server which has also been set up.
- * Adding new servlets is posisble with care.
- */
+ /** Get the underlying Jetty server which has also been set up. */
public Server getJettyServer() {
return server ;
}
- /** Start the server - the server continues to run afetr thsi call returns.
+ /** Get the {@link ServletContext}.
+ * Adding new servlets is possible with care.
+ */
+ public ServletContext getServletContext() {
+ return ((ServletContextHandler)server.getHandler()).getServletContext() ;
+ }
+
+ /** Start the server - the server continues to run after this call returns.
* To synchronise with the server stopping, call {@link #join}.
*/
public void start() {
@@ -131,7 +142,8 @@ public class FusekiEmbeddedServer {
private Map<String, DataService> map = new HashMap<>() ;
private int port = 3333 ;
private boolean loopback = false ;
- private String path = "/" ;
+ private boolean withStats = false ;
+ private String contextPath = "/" ;
/* Set the port to run on */
public Builder setPort(int port) {
@@ -143,7 +155,7 @@ public class FusekiEmbeddedServer {
* "http://host:port/dataset/query" else "http://host:port/path/dataset/query"
*/
public Builder setContextPath(String path) {
- this.path = path ;
+ this.contextPath = path ;
return this ;
}
@@ -153,6 +165,14 @@ public class FusekiEmbeddedServer {
return this ;
}
+ /** Add the "/$/stats" servlet that responds with stats about the server,
+ * including counts of all calls made.
+ */
+ public Builder enableStats(boolean withStats) {
+ this.withStats = withStats;
+ return this ;
+ }
+
/* Add the dataset with given name and a default set of services including update */
public Builder add(String name, DatasetGraph dsg) {
return add(name, dsg, true) ;
@@ -183,6 +203,7 @@ public class FusekiEmbeddedServer {
}
private Builder add$(String name, DataService dataService) {
+ name = DataAccessPoint.canonical(name) ;
DataService dSrv = map.get(name) ;
if ( dSrv != null ) {
DatasetGraph dsg1 = dSrv.getDataset() ;
@@ -210,33 +231,37 @@ public class FusekiEmbeddedServer {
/** Build a server according to the current description */
public FusekiEmbeddedServer build() {
+ DataAccessPointRegistry registry = new DataAccessPointRegistry() ;
map.forEach((name, dSrv) -> {
DataAccessPoint dap = new DataAccessPoint(name, dSrv) ;
- DataAccessPointRegistry.get().put(name, dap) ;
+ registry.put(name, dap) ;
}) ;
- Server server = fusekiServer(port, path, loopback) ;
+ ServletContextHandler handler = buildServletContext(contextPath, registry) ;
+ if ( withStats )
+ handler.addServlet(ActionStats.class, "/$/stats") ;
+ DataAccessPointRegistry.set(handler.getServletContext(), registry) ;
+ Server server = jettyServer(port, loopback) ;
+ server.setHandler(handler);
return new FusekiEmbeddedServer(server) ;
}
- /** build process */
- private static Server fusekiServer(int port, String contextPath, boolean loopback) {
+ /** Build a ServletContextHandler with the Fuseki router : {@link FusekiFilter} */
+ private static ServletContextHandler buildServletContext(String contextPath, DataAccessPointRegistry registry) {
if ( contextPath == null || contextPath.isEmpty() )
contextPath = "/" ;
+ else if ( !contextPath.startsWith("/") )
+ contextPath = "/" + contextPath ;
ServletContextHandler context = new ServletContextHandler() ;
- // The Fuseki server-wide setup.
- DataAccessPointRegistry.set(context.getServletContext(), new DataAccessPointRegistry());
FusekiFilter ff = new FusekiFilter() ;
FilterHolder h = new FilterHolder(ff) ;
- context.setContextPath(contextPath);
- context.addFilter(h, "/*", null);
- context.setDisplayName(Fuseki.servletRequestLogName);
- context.setErrorHandler(new FusekiErrorHandler1());
- Server server = jettyServer(port, loopback) ;
- server.setHandler(context);
- return server ;
+ context.setContextPath(contextPath) ;
+ context.addFilter(h, "/*", null) ;
+ context.setDisplayName(Fuseki.servletRequestLogName) ;
+ context.setErrorHandler(new FusekiErrorHandler1()) ;
+ return context ;
}
-
- /** Jetty build process */
+
+ /** Jetty server */
private static Server jettyServer(int port, boolean loopback) {
Server server = new Server() ;
HttpConnectionFactory f1 = new HttpConnectionFactory() ;