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 2013/12/22 23:02:28 UTC
svn commit: r1553040 - in /jena/branches/jena-fuseki-new-ui: src-dev/dev/
src/main/java/org/apache/jena/fuseki/mgt/
src/main/java/org/apache/jena/fuseki/server/
src/main/java/org/apache/jena/fuseki/servlets/
src/test/java/org/apache/jena/fuseki/
Author: andy
Date: Sun Dec 22 22:02:27 2013
New Revision: 1553040
URL: http://svn.apache.org/r1553040
Log:
Use webapp setup - related to JENA-201.
Modified:
jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionPing.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SystemState.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java
Modified: jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java?rev=1553040&r1=1553039&r2=1553040&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java (original)
+++ jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java Sun Dec 22 22:02:27 2013
@@ -24,6 +24,9 @@ public class PROJECT {
// SPARQL_Update
// DEFs
+ // Webapp-ization
+ // Validators
+
// All TODO and XXX
// Configuration and startup.
// Change to using a real webapp.
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionPing.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionPing.java?rev=1553040&r1=1553039&r2=1553040&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionPing.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionPing.java Sun Dec 22 22:02:27 2013
@@ -27,7 +27,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.jena.atlas.io.IO ;
import org.apache.jena.fuseki.servlets.HttpAction ;
import org.apache.jena.fuseki.servlets.ServletOps ;
-import org.apache.jena.riot.WebContent ;
+import static org.apache.jena.riot.WebContent.* ;
public class ActionPing extends ActionCtl
{
@@ -60,8 +60,8 @@ public class ActionPing extends ActionCt
protected void perform$(HttpAction action) throws IOException {
HttpServletResponse response = action.response ;
ServletOutputStream out = action.response.getOutputStream() ;
- response.setContentType(WebContent.contentTypeTextPlain);
- response.setCharacterEncoding(WebContent.charsetUTF8) ;
+ response.setContentType(contentTypeTextPlain);
+ response.setCharacterEncoding(charsetUTF8) ;
}
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java?rev=1553040&r1=1553039&r2=1553040&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java Sun Dec 22 22:02:27 2013
@@ -22,27 +22,18 @@ import static java.lang.String.format ;
import static org.apache.jena.fuseki.Fuseki.serverLog ;
import java.io.FileInputStream ;
-import java.util.* ;
+import java.util.Arrays ;
+import java.util.EnumSet ;
+import java.util.List ;
import javax.servlet.DispatcherType ;
import javax.servlet.http.HttpServlet ;
+import org.apache.jena.atlas.lib.NotImplemented ;
import org.apache.jena.fuseki.Fuseki ;
import org.apache.jena.fuseki.FusekiException ;
-import org.apache.jena.fuseki.HttpNames ;
import org.apache.jena.fuseki.X_Config ;
-import org.apache.jena.fuseki.mgt.MgtFunctions ;
import org.apache.jena.fuseki.servlets.FusekiFilter ;
-import org.apache.jena.fuseki.servlets.SPARQL_QueryGeneral ;
-import org.apache.jena.fuseki.servlets.SimpleVelocityServlet ;
-import org.apache.jena.fuseki.validation.DataValidator ;
-import org.apache.jena.fuseki.validation.IRIValidator ;
-import org.apache.jena.fuseki.validation.QueryValidator ;
-import org.apache.jena.fuseki.validation.UpdateValidator ;
-import static org.apache.jena.riot.WebContent.* ;
-import org.eclipse.jetty.http.MimeTypes ;
-import org.eclipse.jetty.security.* ;
-import org.eclipse.jetty.security.authentication.BasicAuthenticator ;
import org.eclipse.jetty.server.Connector ;
import org.eclipse.jetty.server.Server ;
import org.eclipse.jetty.server.nio.BlockingChannelConnector ;
@@ -51,7 +42,7 @@ import org.eclipse.jetty.servlet.FilterH
import org.eclipse.jetty.servlet.ServletContextHandler ;
import org.eclipse.jetty.servlet.ServletHolder ;
import org.eclipse.jetty.servlets.GzipFilter ;
-import org.eclipse.jetty.util.security.Constraint ;
+import org.eclipse.jetty.webapp.WebAppContext ;
import org.eclipse.jetty.xml.XmlConfiguration ;
import com.hp.hpl.jena.sparql.util.Utils ;
@@ -85,12 +76,17 @@ public class SPARQLServer {
this.serverConfig = config ;
// Currently server-wide.
Fuseki.verboseLogging = config.verboseLogging ;
- ServletContextHandler context = buildServer(serverConfig.jettyConfigFile, config.enableCompression) ;
+ boolean webappBuild = true ;
- // Filter to grab all request for dynamic dispatching.
- FilterHolder f = new FilterHolder(new FusekiFilter()) ;
- EnumSet<DispatcherType> es = EnumSet.allOf(DispatcherType.class) ;
- context.addFilter(f, "/*", es);
+ if ( webappBuild)
+ buildServerWebapp(serverConfig.jettyConfigFile, config.enableCompression) ;
+ else {
+ ServletContextHandler context = buildServer(serverConfig.jettyConfigFile, config.enableCompression) ;
+ // Filter to grab all request for dynamic dispatching.
+ FilterHolder f = new FilterHolder(new FusekiFilter()) ;
+ EnumSet<DispatcherType> es = EnumSet.allOf(DispatcherType.class) ;
+ context.addFilter(f, "/*", es);
+ }
// Datasets not initialized yet.
}
@@ -153,8 +149,7 @@ public class SPARQLServer {
return serverConfig ;
}
- // Later : private and in constructor.
- private ServletContextHandler buildServer(String jettyConfig, boolean enableCompression) {
+ private ServletContextHandler buildServerWebapp(String jettyConfig, boolean enableCompression) {
if ( jettyConfig != null ) {
// --jetty-config=jetty-fuseki.xml
// for detailed configuration of the server using Jetty features.
@@ -162,110 +157,130 @@ public class SPARQLServer {
} else
server = defaultServerConfig(serverConfig.port, serverConfig.loopback) ;
-
-// WebAppContext app = new WebAppContext("Fuseki","/") ;
-// server.setHandler(app);
-
- // Keep the server to a maximum number of threads.
- // server.setThreadPool(new QueuedThreadPool(ThreadPoolSize)) ;
-
- ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS) ;
+ WebAppContext context = new WebAppContext();
+ context.getServletContext().getContextHandler().setMaxFormContentSize(10 * 1000 * 1000) ;
+ context.setDescriptor("war-web.xml");
+ context.setResourceBase("pages");
+ context.setContextPath("/");
+ context.setParentLoaderPriority(true);
context.setErrorHandler(new FusekiErrorHandler()) ;
context.addEventListener(new FusekiServletContextListener(this));
-
- // Increase form size.
- context.getServletContext().getContextHandler().setMaxFormContentSize(10 * 1000 * 1000) ;
-
- // Wire up authentication if appropriate
- if ( jettyConfig == null && serverConfig.authConfigFile != null ) {
- Constraint constraint = new Constraint() ;
- constraint.setName(Constraint.__BASIC_AUTH) ;
- constraint.setRoles(new String[]{"fuseki"}) ;
- constraint.setAuthenticate(true) ;
-
- ConstraintMapping mapping = new ConstraintMapping() ;
- mapping.setConstraint(constraint) ;
- mapping.setPathSpec("/*") ;
-
- IdentityService identService = new DefaultIdentityService() ;
-
- ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler() ;
- securityHandler.addConstraintMapping(mapping) ;
- securityHandler.setIdentityService(identService) ;
-
- HashLoginService loginService = new HashLoginService("Fuseki Authentication", serverConfig.authConfigFile) ;
- loginService.setIdentityService(identService) ;
-
- securityHandler.setLoginService(loginService) ;
- securityHandler.setAuthenticator(new BasicAuthenticator()) ;
-
- context.setSecurityHandler(securityHandler) ;
-
- serverLog.debug("Basic Auth Configuration = " + serverConfig.authConfigFile) ;
- }
-
- // Wire up context handler to server
- server.setHandler(context) ;
-
- // Constants. Add RDF types.
- MimeTypes mt = new MimeTypes() ;
- mt.addMimeMapping("rdf", contentTypeRDFXML + ";charset=utf-8") ;
- mt.addMimeMapping("ttl", contentTypeTurtle + ";charset=utf-8") ;
- mt.addMimeMapping("nt", contentTypeNTriples + ";charset=utf-8") ;
- mt.addMimeMapping("nq", contentTypeNQuads + ";charset=utf-8") ;
- mt.addMimeMapping("trig", contentTypeTriG + ";charset=utf-8") ;
-
- // mt.addMimeMapping("tpl", "text/html;charset=utf-8") ;
- context.setMimeTypes(mt) ;
server.setHandler(context) ;
-
- serverLog.debug("Pages = " + serverConfig.pages) ;
-
- boolean installServices = true ;
-
- String validationRoot = "/validate" ;
-
- // Should all services be /_/.... or some such?
-
- if ( installServices ) {
- // TODO Respect port.
- if ( serverConfig.pagesPort != serverConfig.port )
- serverLog.warn("Not supported yet - pages on a different port to services") ;
-
- String base = serverConfig.pages ;
- Map<String, Object> data = new HashMap<String, Object>() ;
- data.put("mgt", new MgtFunctions()) ;
- SimpleVelocityServlet templateEngine = new SimpleVelocityServlet(base, data) ;
- addServlet(context, templateEngine, "*.tpl", false) ;
- }
-
- if ( installServices ) {
- // Validators
- HttpServlet validateQuery = new QueryValidator() ;
- HttpServlet validateUpdate = new UpdateValidator() ;
-
- HttpServlet validateData = new DataValidator() ;
- HttpServlet validateIRI = new IRIValidator() ;
-
- HttpServlet generalQueryService = new SPARQL_QueryGeneral() ;
-
- addServlet(context, validateQuery, validationRoot + "/query", false) ;
- addServlet(context, validateUpdate, validationRoot + "/update", false) ;
- addServlet(context, validateData, validationRoot + "/data", false) ;
- addServlet(context, validateIRI, validationRoot + "/iri", false) ;
-
- // general query processor.
- addServlet(context, generalQueryService, HttpNames.ServiceGeneralQuery, enableCompression) ;
- }
-
- if ( installServices ) {
- String[] files = {"fuseki.html", "index.html"} ;
- context.setWelcomeFiles(files) ;
- addContent(context, "/", serverConfig.pages) ;
- }
-
+
+ // XXX Security
+
return context ;
}
+
+
+ private ServletContextHandler buildServer(String jettyConfig, boolean enableCompression) {
+ throw new NotImplemented("Use the webapps setup") ;
+ }
+
+// private ServletContextHandler buildServer(String jettyConfig, boolean enableCompression) {
+// if ( jettyConfig != null ) {
+// // --jetty-config=jetty-fuseki.xml
+// // for detailed configuration of the server using Jetty features.
+// server = configServer(jettyConfig) ;
+// } else
+// server = defaultServerConfig(serverConfig.port, serverConfig.loopback) ;
+//
+// // Keep the server to a maximum number of threads.
+// // server.setThreadPool(new QueuedThreadPool(ThreadPoolSize)) ;
+//
+// ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS) ;
+// context.setErrorHandler(new FusekiErrorHandler()) ;
+// context.addEventListener(new FusekiServletContextListener(this));
+// // Increase form size.
+// context.getServletContext().getContextHandler().setMaxFormContentSize(10 * 1000 * 1000) ;
+// // Constants. Add RDF types.
+// MimeTypes mt = new MimeTypes() ;
+// mt.addMimeMapping("rdf", contentTypeRDFXML + ";charset=utf-8") ;
+// mt.addMimeMapping("ttl", contentTypeTurtle + ";charset=utf-8") ;
+// mt.addMimeMapping("nt", contentTypeNTriples + ";charset=utf-8") ;
+// mt.addMimeMapping("nq", contentTypeNQuads + ";charset=utf-8") ;
+// mt.addMimeMapping("trig", contentTypeTriG + ";charset=utf-8") ;
+// // mt.addMimeMapping("tpl", "text/html;charset=utf-8") ;
+// context.setMimeTypes(mt) ;
+//
+// // Wire up authentication if appropriate
+// // XXX Use Shiro and web.xml
+// if ( jettyConfig == null && serverConfig.authConfigFile != null ) {
+// Constraint constraint = new Constraint() ;
+// constraint.setName(Constraint.__BASIC_AUTH) ;
+// constraint.setRoles(new String[]{"fuseki"}) ;
+// constraint.setAuthenticate(true) ;
+//
+// ConstraintMapping mapping = new ConstraintMapping() ;
+// mapping.setConstraint(constraint) ;
+// mapping.setPathSpec("/*") ;
+//
+// IdentityService identService = new DefaultIdentityService() ;
+//
+// ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler() ;
+// securityHandler.addConstraintMapping(mapping) ;
+// securityHandler.setIdentityService(identService) ;
+//
+// HashLoginService loginService = new HashLoginService("Fuseki Authentication", serverConfig.authConfigFile) ;
+// loginService.setIdentityService(identService) ;
+//
+// securityHandler.setLoginService(loginService) ;
+// securityHandler.setAuthenticator(new BasicAuthenticator()) ;
+//
+// context.setSecurityHandler(securityHandler) ;
+//
+// serverLog.debug("Basic Auth Configuration = " + serverConfig.authConfigFile) ;
+// }
+//
+// server.setHandler(context) ;
+//
+// serverLog.debug("Pages = " + serverConfig.pages) ;
+//
+// boolean installServices = true ;
+//
+// String validationRoot = "/validate" ;
+//
+// // Should all services be /_/.... or some such?
+//
+// if ( installServices ) {
+// // TODO Respect port.
+// if ( serverConfig.pagesPort != serverConfig.port )
+// serverLog.warn("Not supported yet - pages on a different port to services") ;
+//
+// String base = serverConfig.pages ;
+// Map<String, Object> data = new HashMap<String, Object>() ;
+// data.put("mgt", new MgtFunctions()) ;
+// SimpleVelocityServlet templateEngine = new SimpleVelocityServlet(base, data) ;
+// addServlet(context, templateEngine, "*.tpl", false) ;
+// }
+//
+// if ( installServices ) {
+// // Validators
+// HttpServlet validateQuery = new QueryValidator() ;
+// HttpServlet validateUpdate = new UpdateValidator() ;
+//
+// HttpServlet validateData = new DataValidator() ;
+// HttpServlet validateIRI = new IRIValidator() ;
+//
+// HttpServlet generalQueryService = new SPARQL_QueryGeneral() ;
+//
+// addServlet(context, validateQuery, validationRoot + "/query", false) ;
+// addServlet(context, validateUpdate, validationRoot + "/update", false) ;
+// addServlet(context, validateData, validationRoot + "/data", false) ;
+// addServlet(context, validateIRI, validationRoot + "/iri", false) ;
+//
+// // general query processor.
+// addServlet(context, generalQueryService, HttpNames.ServiceGeneralQuery, enableCompression) ;
+// }
+//
+// if ( installServices ) {
+// String[] files = {"fuseki.html", "index.html"} ;
+// context.setWelcomeFiles(files) ;
+// addContent(context, "/", serverConfig.pages) ;
+// }
+//
+// return context ;
+// }
private static Server configServer(String jettyConfig) {
try {
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SystemState.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SystemState.java?rev=1553040&r1=1553039&r2=1553040&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SystemState.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SystemState.java Sun Dec 22 22:02:27 2013
@@ -48,14 +48,14 @@ public class SystemState {
private static boolean initialized = false ;
private static void init() {
- if ( initialized )
- return ;
- initialized = true ;
init$() ;
}
public /* for testing */ static void init$() {
+ if ( initialized )
+ return ;
+ initialized = true ;
if ( ! location.isMem() )
FileOps.ensureDir(location.getDirectoryPath()) ;
dataset = TDBFactory.createDataset(location) ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java?rev=1553040&r1=1553039&r2=1553040&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java Sun Dec 22 22:02:27 2013
@@ -52,7 +52,9 @@ public abstract class ActionBase extends
@Override
public void init() {
- log.info("["+Utils.className(this)+"] ServletContextName="+getServletContext().getServletContextName()) ;
+ log.info("["+Utils.className(this)+"] ServletContextName = "+getServletContext().getServletContextName()) ;
+ log.info("["+Utils.className(this)+"] ContextPath = "+getServletContext().getContextPath()) ;
+
//super.init() ;
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java?rev=1553040&r1=1553039&r2=1553040&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java Sun Dec 22 22:02:27 2013
@@ -40,7 +40,8 @@ public class FusekiFilter implements Fil
@Override
public void init(FilterConfig filterConfig) throws ServletException {
- log.info("Filter: ["+Utils.className(this)+"] ServletContextName="+filterConfig.getServletContext().getServletContextName()) ;
+ log.info("Filter: ["+Utils.className(this)+"] ServletContextName = "+filterConfig.getServletContext().getServletContextName()) ;
+ log.info("Filter: ["+Utils.className(this)+"] ContextPath = "+filterConfig.getServletContext().getContextPath()) ;
}
@Override
@@ -52,10 +53,17 @@ public class FusekiFilter implements Fil
HttpServletResponse resp = (HttpServletResponse)response ;
// XXX Context path
+ // Put this somewhere.
+ String x = request.getServletContext().getContextPath() ;
+
String uri = req.getRequestURI() ;
String datasetUri = ActionLib.mapRequestToDataset(uri) ;
+ if ( x != null )
+ datasetUri = datasetUri.substring(x.length()) ;
+
+
if ( datasetUri != null ) {
if ( DatasetRegistry.get().isRegistered(datasetUri) ) {
// Intercept and redirect
Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java?rev=1553040&r1=1553039&r2=1553040&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java Sun Dec 22 22:02:27 2013
@@ -61,7 +61,7 @@ public class TestAdmin extends BaseTest
@BeforeClass
public static void beforeClass() {
ServerTest.allocServer() ;
- //ServerTest.resetServer() ;
+ ServerTest.resetServer() ;
}
@AfterClass