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 2012/02/10 11:06:18 UTC
svn commit: r1242721 - in /incubator/jena/Jena2/Fuseki/trunk: ./
src/main/java/org/apache/jena/fuseki/
src/main/java/org/apache/jena/fuseki/server/
Author: andy
Date: Fri Feb 10 10:06:18 2012
New Revision: 1242721
URL: http://svn.apache.org/viewvc?rev=1242721&view=rev
Log:
JENA-209 Process Content-Encoding requests (adds gzip to replies if requested)
Modified:
incubator/jena/Jena2/Fuseki/trunk/.classpath
incubator/jena/Jena2/Fuseki/trunk/pom.xml
incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/Fuseki.java
incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/FusekiCmd.java
incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/ServerConfig.java
Modified: incubator/jena/Jena2/Fuseki/trunk/.classpath
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/.classpath?rev=1242721&r1=1242720&r2=1242721&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/.classpath (original)
+++ incubator/jena/Jena2/Fuseki/trunk/.classpath Fri Feb 10 10:06:18 2012
@@ -30,6 +30,7 @@
<classpathentry kind="var" path="M2_REPO/org/eclipse/jetty/jetty-xml/7.5.4.v20111024/jetty-xml-7.5.4.v20111024.jar" sourcepath="M2_REPO/org/eclipse/jetty/jetty-xml/7.5.4.v20111024/jetty-xml-7.5.4.v20111024-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jsp-2.1-glassfish/2.1.v20100127/jsp-2.1-glassfish-2.1.v20100127.jar"/>
<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jsp-api-2.1-glassfish/2.1.v20100127/jsp-api-2.1-glassfish-2.1.v20100127.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jetty/jetty-servlets/7.5.4.v20111024/jetty-servlets-7.5.4.v20111024.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/4.9/junit-4.9.jar" sourcepath="M2_REPO/junit/junit/4.9/junit-4.9-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16.jar" sourcepath="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4-sources.jar"/>
Modified: incubator/jena/Jena2/Fuseki/trunk/pom.xml
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/pom.xml?rev=1242721&r1=1242720&r2=1242721&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/pom.xml (original)
+++ incubator/jena/Jena2/Fuseki/trunk/pom.xml Fri Feb 10 10:06:18 2012
@@ -131,6 +131,8 @@
<version>${ver.commons-fileupload}</version>
</dependency>
+ <!-- ?? Use one of the combined artifacts for Jetty -->
+
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
@@ -161,6 +163,12 @@
<version>${ver.jetty}</version>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlets</artifactId>
+ <version>${ver.jetty}</version>
+ </dependency>
+
<!--
<dependency>
<groupId>org.eclipse.jetty</groupId>
Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/Fuseki.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/Fuseki.java?rev=1242721&r1=1242720&r2=1242721&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/Fuseki.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/Fuseki.java Fri Feb 10 10:06:18 2012
@@ -30,6 +30,7 @@ import com.hp.hpl.jena.sparql.mgt.ARQMgt
import com.hp.hpl.jena.sparql.mgt.SystemInfo ;
import com.hp.hpl.jena.sparql.util.Context ;
import com.hp.hpl.jena.sparql.util.MappingRegistry ;
+import com.hp.hpl.jena.sparql.util.Symbol;
import com.hp.hpl.jena.tdb.TDB ;
import com.hp.hpl.jena.util.FileManager ;
@@ -41,6 +42,8 @@ public class Fuseki
static public String FusekiHomeEnv = "FUSEKI_HOME" ;
static public String FusekiSymbolIRI = "http://jena.apache.org/fuseki#" ;
+ public static final Symbol FusekiEnableGZipCompression = Symbol.create(FusekiSymbolIRI + "enableGZipCompression");
+
static public String PagesPublish = "pages-publish" ;
static public String PagesAll = "pages-update" ;
Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/FusekiCmd.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/FusekiCmd.java?rev=1242721&r1=1242720&r2=1242721&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/FusekiCmd.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/FusekiCmd.java Fri Feb 10 10:06:18 2012
@@ -82,6 +82,7 @@ public class FusekiCmd extends CmdARQ
private static ArgDecl argTimeout = new ArgDecl(ArgDecl.HasValue, "timeout") ;
private static ArgDecl argFusekiConfig = new ArgDecl(ArgDecl.HasValue, "config", "conf") ;
private static ArgDecl argJettyConfig = new ArgDecl(ArgDecl.HasValue, "jetty-config") ;
+ private static ArgDecl argGZip = new ArgDecl(ArgDecl.HasValue, "gzip") ;
private static ArgDecl argHome = new ArgDecl(ArgDecl.HasValue, "home") ;
@@ -129,6 +130,7 @@ public class FusekiCmd extends CmdARQ
add(argJettyConfig, "--jetty-config=", "Set up the server (not services) with a Jetty XML file") ;
add(argMgtPort, "--mgt=port", "Enable the management commands on the given port") ;
add(argHome, "--home=DIR", "Root of Fuseki installation (overrides environment variable FUSEKI_HOME)") ;
+ add(argGZip, "--gzip=on|off", "Enable GZip compression (HTTP Content-encoding) if request header set") ;
super.modVersion.addClass(TDB.class) ;
super.modVersion.addClass(Fuseki.class) ;
@@ -300,6 +302,15 @@ public class FusekiCmd extends CmdARQ
List<String> args = super.getValues(argHome) ;
homeDir = args.get(args.size()-1) ;
}
+
+ if ( contains(argGZip) )
+ {
+ if ( ! hasValueOfTrue(argGZip) || ! hasValueOfFalse(argGZip) )
+ throw new CmdException(argGZip.getNames().get(0)+": Not understood: "+getValue(argGZip)) ;
+
+ boolean b = super.hasValueOfTrue(argGZip) ;
+ Fuseki.getContext().set(Fuseki.FusekiEnableGZipCompression, b);
+ }
}
private static String sort_out_dir(String path)
Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java?rev=1242721&r1=1242720&r2=1242721&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java Fri Feb 10 10:06:18 2012
@@ -108,6 +108,7 @@ public class FusekiConfig
config.pagesPort = config.port ;
config.jettyConfigFile = null ;
config.pages = "Pages-Update" ;
+ config.enableCompression = true ;
return config ;
}
@@ -154,6 +155,7 @@ public class FusekiConfig
config.pagesPort = config.port ;
config.jettyConfigFile = null ;
config.pages = "Pages-Update" ;
+ config.enableCompression = Fuseki.getContext().isTrueOrUndef(Fuseki.FusekiEnableGZipCompression) ;
return config ;
}
Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java?rev=1242721&r1=1242720&r2=1242721&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java Fri Feb 10 10:06:18 2012
@@ -22,6 +22,7 @@ import static java.lang.String.format ;
import static org.apache.jena.fuseki.Fuseki.serverLog ;
import java.io.FileInputStream ;
+import java.util.EnumSet ;
import java.util.List ;
import javax.servlet.http.HttpServlet ;
@@ -50,6 +51,10 @@ import org.eclipse.jetty.servlet.Servlet
import org.eclipse.jetty.xml.XmlConfiguration ;
import org.openjena.riot.WebContent ;
+import org.eclipse.jetty.server.DispatcherType;
+import org.eclipse.jetty.servlets.GzipFilter;
+
+
import com.hp.hpl.jena.sparql.util.Utils ;
public class SPARQLServer
@@ -69,10 +74,15 @@ public class SPARQLServer
public SPARQLServer(ServerConfig config)
{
this.serverConfig = config ;
- ServletContextHandler context = buildServer(serverConfig.jettyConfigFile) ;
+
+ // GZip compression
+ // Note that regardless of this setting we'll always leave it turned off for the servlets
+ // where it makes no sense to have it turned on e.g. update and upload
+
+ ServletContextHandler context = buildServer(serverConfig.jettyConfigFile, config.enableCompression) ;
// Build them all.
for ( DatasetRef sDesc : serverConfig.services )
- configureOneDataset(context, sDesc) ;
+ configureOneDataset(context, sDesc, config.enableCompression) ;
}
public void start()
@@ -109,7 +119,7 @@ public class SPARQLServer
public List<DatasetRef> getDatasets() { return serverConfig.services ; }
// Later : private and in constructor.
- private ServletContextHandler buildServer(String jettyConfig)
+ private ServletContextHandler buildServer(String jettyConfig, boolean enableCompression)
{
if ( jettyConfig != null )
{
@@ -159,7 +169,7 @@ public class SPARQLServer
ServletHolder jspContent = new ServletHolder(jspServlet) ;
//?? Need separate context for admin stuff??
context.setResourceBase(serverConfig.pages) ;
- addServlet(context, jspContent, "*.jsp") ;
+ addServlet(context, jspContent, "*.jsp", false) ;
}
@@ -167,7 +177,7 @@ public class SPARQLServer
{
// Action when control panel selects a dataset.
HttpServlet datasetChooser = new ActionDataset() ;
- addServlet(context, datasetChooser, "/dataset") ;
+ addServlet(context, datasetChooser, "/dataset", false) ;
}
if ( installServices )
@@ -181,13 +191,13 @@ public class SPARQLServer
HttpServlet dumpService = new DumpServlet() ;
HttpServlet generalQueryService = new SPARQL_QueryGeneral() ;
- addServlet(context, validateQuery, validationRoot+"/query") ;
- addServlet(context, validateUpdate, validationRoot+"/update") ;
- addServlet(context, validateData, validationRoot+"/data") ;
- addServlet(context, validateIRI, validationRoot+"/iri") ;
- addServlet(context, dumpService, "/dump") ;
+ addServlet(context, validateQuery, validationRoot+"/query", false) ;
+ addServlet(context, validateUpdate, validationRoot+"/update", false) ;
+ addServlet(context, validateData, validationRoot+"/data", false) ;
+ addServlet(context, validateIRI, validationRoot+"/iri", false) ;
+ addServlet(context, dumpService, "/dump", false) ;
// general query processor.
- addServlet(context, generalQueryService, sparqlProcessor) ;
+ addServlet(context, generalQueryService, sparqlProcessor, enableCompression) ;
}
if ( installManager || installServices )
@@ -202,7 +212,7 @@ public class SPARQLServer
}
- private void configureOneDataset(ServletContextHandler context, DatasetRef sDesc)
+ private void configureOneDataset(ServletContextHandler context, DatasetRef sDesc, boolean enableCompression)
{
String datasetPath = sDesc.name ;
if ( datasetPath.equals("/") )
@@ -222,11 +232,11 @@ public class SPARQLServer
HttpServlet sparqlHttpR = new SPARQL_REST_R(verbose) ;
HttpServlet sparqlHttpRW = new SPARQL_REST_RW(verbose) ;
- addServlet(context, datasetPath, sparqlQuery, sDesc.queryEP) ;
- addServlet(context, datasetPath, sparqlUpdate, sDesc.updateEP) ;
- addServlet(context, datasetPath, sparqlUpload, sDesc.uploadEP) ;
- addServlet(context, datasetPath, sparqlHttpR, sDesc.readGraphStoreEP) ;
- addServlet(context, datasetPath, sparqlHttpRW, sDesc.readWriteGraphStoreEP) ;
+ addServlet(context, datasetPath, sparqlQuery, sDesc.queryEP, enableCompression) ;
+ addServlet(context, datasetPath, sparqlUpdate, sDesc.updateEP, false) ; // No point - no results of any size.
+ addServlet(context, datasetPath, sparqlUpload, sDesc.uploadEP, false) ;
+ addServlet(context, datasetPath, sparqlHttpR, sDesc.readGraphStoreEP, enableCompression) ;
+ addServlet(context, datasetPath, sparqlHttpRW, sDesc.readWriteGraphStoreEP, enableCompression) ;
}
private static Server configServer(String jettyConfig)
@@ -279,11 +289,15 @@ public class SPARQLServer
DefaultServlet staticServlet = new DefaultServlet() ;
ServletHolder staticContent = new ServletHolder(staticServlet) ;
staticContent.setInitParameter("resourceBase", pages) ;
- addServlet(context, staticContent, pathSpec) ;
+
+ //Note we set GZip to false for static content because the Jetty DefaultServlet has
+ //a built-in GZip capability that is better for static content than the mechanism the
+ //GzipFilter uses for dynamic content
+ addServlet(context, staticContent, pathSpec, false) ;
}
// SHARE
- private static void addServlet(ServletContextHandler context, String datasetPath, HttpServlet servlet, List<String> pathSpecs)
+ private static void addServlet(ServletContextHandler context, String datasetPath, HttpServlet servlet, List<String> pathSpecs, boolean enableCompression)
{
for ( String pathSpec : pathSpecs )
{
@@ -291,21 +305,29 @@ public class SPARQLServer
pathSpec = pathSpec.substring(0, pathSpec.length()-1) ;
if ( pathSpec.startsWith("/") )
pathSpec = pathSpec.substring(1, pathSpec.length()) ;
- addServlet(context, servlet, datasetPath+"/"+pathSpec) ;
+ addServlet(context, servlet, datasetPath+"/"+pathSpec, enableCompression) ;
}
}
- private static void addServlet(ServletContextHandler context, HttpServlet servlet, String pathSpec)
+ private static void addServlet(ServletContextHandler context, HttpServlet servlet, String pathSpec, boolean enableCompression)
{
ServletHolder holder = new ServletHolder(servlet) ;
- addServlet(context, holder, pathSpec) ;
+ addServlet(context, holder, pathSpec, enableCompression) ;
}
- private static void addServlet(ServletContextHandler context, ServletHolder holder, String pathSpec)
+ private static void addServlet(ServletContextHandler context, ServletHolder holder, String pathSpec, boolean enableCompression)
{
if ( serverLog.isDebugEnabled() )
- serverLog.debug("Add servlet @ "+pathSpec) ;
+ {
+ if ( enableCompression )
+ serverLog.debug("Add servlet @ "+pathSpec+" (with gzip)") ;
+ else
+ serverLog.debug("Add servlet @ "+pathSpec) ;
+ }
context.addServlet(holder, pathSpec) ;
+
+ if (enableCompression)
+ context.addFilter(GzipFilter.class, pathSpec, EnumSet.allOf(DispatcherType.class));
}
}
Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/ServerConfig.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/ServerConfig.java?rev=1242721&r1=1242720&r2=1242721&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/ServerConfig.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/apache/jena/fuseki/server/ServerConfig.java Fri Feb 10 10:06:18 2012
@@ -27,6 +27,8 @@ import java.util.List ;
public class ServerConfig
{
+ public ServerConfig() {}
+
/** Port to run the server service on */
public int port ;
/** Port for the management interface : -1 for no mamangement interface */
@@ -39,5 +41,7 @@ public class ServerConfig
public String pages ;
/** The list of services */
public List<DatasetRef> services ;
+ /** Enable Content-Encoding compression */
+ public boolean enableCompression = false ;
}