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 ;
 }