You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2015/01/14 11:31:04 UTC

[02/93] [abbrv] [partial] jena git commit: Maven modules for Fuseki2

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java
deleted file mode 100644
index db79d6a..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.server;
-
-import java.text.DateFormat ;
-import java.text.SimpleDateFormat ;
-import java.util.Collection ;
-import java.util.Date ;
-import java.util.Enumeration ;
-import java.util.TimeZone ;
-
-import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
-
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.fuseki.servlets.HttpAction ;
-
-/** Create standard request logs (NCSA etc) */ 
-public class RequestLog {
-    /*
-      http://httpd.apache.org/docs/current/mod/mod_log_config.html
-Common Log Format (CLF)
-    "%h %l %u %t \"%r\" %>s %b"
-Common Log Format with Virtual Host
-    "%v %h %l %u %t \"%r\" %>s %b"
-NCSA extended/combined log format
-    "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
-     */
-    /*
-        %l -- Identity or -
-        %u -- Remote user or -
-        %t -- Timestamp
-        "%r" -- Request line
-        %>s -- Final request status
-        %b -- Size in bytes
-        Headers.
-        %{}i for request header.
-        %{}o for response header.
-      */  
-    
-    private static DateFormat dateFormatter ; 
-    static {
-        dateFormatter = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z") ;
-        dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
-    }
-
-    /** NCSA combined log format *
-     * LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b  \"%{Referer}i\" \"%{User-Agent}i\"" combinedfwd
-     * XXX.XXX.XXX.XXX - - [01/Feb/2014:03:19:09 +0000] "GET / HTTP/1.1" 200 6190  "-" "check_http/v1.4.16 (nagios-plugins 1.4.16)"
-     */
-    public static String combinedNCSA(HttpAction action) {
-        StringBuilder builder = new StringBuilder() ;
-        HttpServletRequest request = action.request ;
-        HttpServletResponse response = action.response ;
-        
-        // Remote
-        String remote = get(request, "X-Forwarded-For", request.getRemoteAddr()) ;
-        builder.append(remote) ;
-        builder.append(" ") ;
-        
-        // %l %u : User identity (unrelaible)
-        builder.append("- - ") ;
-        
-        // %t
-        // Expensive? 
-        builder.append("[");
-        // Better?
-        builder.append(dateFormatter.format(new Date())) ;
-        builder.append("] ");
-        
-        // "%r"
-        builder.append("\"")  ;
-        builder.append(request.getMethod()) ;
-        builder.append(" ") ;
-        // No query string - they are long and logged readably elsewhere
-        builder.append(request.getRequestURI()) ; 
-        builder.append("\"")  ;
-        //%>s -- Final request status
-        builder.append(" ")  ;
-        builder.append(response.getStatus())  ;
-        
-        //%b -- Size in bytes
-        builder.append(" ")  ;
-        //String size = getField()
-        String size = get(response, "Content-Length", "-") ;
-        builder.append(size)  ;
-        
-        // "%{Referer}i" 
-        builder.append(" \"")  ;
-        builder.append(get(request, "Referer", "")) ;
-        builder.append("\"")  ;
-        // "%{User-Agent}i"
-        builder.append(" \"")  ;
-        builder.append(get(request, "User-Agent", "")) ;
-        builder.append("\"")  ;
-        
-        return builder.toString() ;
-    }
-    
-    private static String get(HttpServletRequest request, String name, String dft) {
-        String x = get(request, name) ;
-        if ( x == null )
-            x = dft ;
-        return x ;
-    }
-    
-    private static String get(HttpServletRequest request, String name) {
-        Enumeration<String> en = request.getHeaders(name) ;
-        if ( ! en.hasMoreElements() ) return null ;
-        String x = en.nextElement() ;
-        if ( en.hasMoreElements() ) {
-            Log.warn(RequestLog.class, "Multiple request header values") ;
-        }
-        return x ;
-    }
-
-    private static String get(HttpServletResponse response, String name, String dft) {
-        String x = get(response, name) ;
-        if ( x == null )
-            x = dft ;
-        return x ;
-    }
-
-    
-    private static String get(HttpServletResponse response, String name) {
-        Collection<String> en = response.getHeaders(name) ;
-        if ( en.isEmpty() )return null ;
-        if ( en.size() != 1 ) Log.warn(RequestLog.class, "Multiple response header values") ;
-        return response.getHeader(name) ;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
deleted file mode 100644
index 67f5d26..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.server;
-
-import java.util.HashMap ;
-import java.util.Map ;
-
-import com.hp.hpl.jena.sparql.core.DatasetGraph ;
-
-/** Dataset setup (command line, config file) for a dataset (or several if config file) */
-public class ServerInitialConfig {
-    // Either this ...
-    public String    templateFile     = null ;
-    public Map<String,String> params  = new HashMap<>() ;
-    public String    datasetPath      = null ;
-    public boolean   allowUpdate      = false ;
-    // Or this ...
-    public String    fusekiConfigFile = null ;
-    
-    // Special case - directly pass in the dataset graphs - datasetPath must be given.
-    // This is not persistet across server restarts. 
-    public DatasetGraph dsg           = null ;
-    
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java
deleted file mode 100644
index 11c7330..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.server;
-
-public interface ServiceMXBean
-{
-    String getName() ;
-    
-    long getRequests() ;
-    long getRequestsGood() ;
-    long getRequestsBad() ;
-    
-//    void enable() ;
-//    void disable() ;
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java
deleted file mode 100644
index f33fe92..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.server;
-
-import java.io.IOException ;
-import java.io.InputStream ;
-import java.nio.file.Path ;
-import java.nio.file.Paths ;
-
-import javax.servlet.ServletContext ;
-import javax.servlet.ServletContextEvent ;
-import javax.servlet.ServletContextListener ;
-
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.shiro.config.ConfigurationException ;
-import org.apache.shiro.io.ResourceUtils ;
-import org.apache.shiro.web.env.EnvironmentLoader ;
-import org.apache.shiro.web.env.ResourceBasedWebEnvironment ;
-import org.apache.shiro.web.env.WebEnvironment ;
-
-import com.hp.hpl.jena.util.FileUtils ;
-
-/** A place to perform Fuseki-specific initialization of Apache Shiro.
- *  Runs after listener FusekiServerEnvironmentInit and before FusekiServerListener
- *  This means finding shiro.ini in multiple possible places, based on
- *  different deployment setups.
- */
-public class ShiroEnvironmentLoader extends EnvironmentLoader implements ServletContextListener {
-    private ServletContext servletContext ; 
-    
-    public ShiroEnvironmentLoader() {}
-    
-    @Override
-    public void contextInitialized(ServletContextEvent sce) {
-        FusekiServer.init() ; 
-        this.servletContext = sce.getServletContext() ;
-        try { 
-            // Shiro.
-            initEnvironment(servletContext);
-        } catch (ConfigurationException  ex) {
-            Fuseki.configLog.error("Shiro initialization failed: "+ex.getMessage());
-            // Exit?
-            throw ex ;
-        }
-    }
-
-    @Override
-    public void contextDestroyed(ServletContextEvent sce) {
-        destroyEnvironment(sce.getServletContext());
-    }
-
-    /** 
-     * Normal Shiro initialization only supports one location for an INI file.
-     *  
-     * When given multiple multiple locations for the shiro.ini file, and 
-     * if a {@link ResourceBasedWebEnvironment}, check the list of configuration
-     * locations, testing whether the name identified an existing resource.  
-     * For the first resource name found to exist, reset the {@link ResourceBasedWebEnvironment}
-     * to name that resource alone so the normal Shiro initialization  
-     */
-    @Override
-    protected void customizeEnvironment(WebEnvironment environment) {
-        if ( environment instanceof ResourceBasedWebEnvironment ) {
-            ResourceBasedWebEnvironment env = (ResourceBasedWebEnvironment)environment ;
-            String[] locations = env.getConfigLocations() ;
-            String loc = huntForShiroIni(locations) ;
-            Fuseki.configLog.info("Shiro file: "+loc);
-            if (loc != null )
-                locations = new String[] {loc} ;
-            env.setConfigLocations(locations);
-        }
-    }
-    
-    private static final String FILE = "file" ;
-    
-    /** Look for a Shiro ini file, or return null */
-    private static String huntForShiroIni(String[] locations) {
-        FusekiEnv.setEnvironment() ;
-        Fuseki.init();
-        for ( String loc : locations ) {
-            // If file:, look for that file.
-            // If a relative name without scheme, look in FUSEKI_BASE, FUSEKI_HOME, webapp. 
-            String scheme = FileUtils.getScheme(loc) ;
-            
-            // Covers C:\\ as a "scheme name"
-            if ( scheme != null ) {
-                if ( scheme.equalsIgnoreCase(FILE)) {
-                    // Test file: for exists
-                    Path p = Paths.get(loc.substring(FILE.length()+1)) ;
-                    if ( ! p.toFile().exists() )
-                        continue ;
-                    // Fall through.
-                }
-                // Can't test - try 
-                return loc ;
-            }
-            // No scheme .
-            Path p = Paths.get(loc) ;
-            
-            String fn = resolve(FusekiEnv.FUSEKI_BASE, p) ;
-            if ( fn != null )
-                return "file://"+fn ;
-            fn = resolve(FusekiEnv.FUSEKI_HOME, p) ;
-            if ( fn != null )
-                return "file://"+fn ;
-            
-            // Try in webapp.
-            
-            try ( InputStream is = ResourceUtils.getInputStreamForPath(loc); ) {
-                boolean exists = (is != null ) ;
-                return loc ;
-            } catch (IOException e) { }
-        }
-        return null ;
-    }
-    
-    /** Directory + name -> filename if it exists */ 
-    private static String resolve(Path dir, Path file) {
-        Path p = dir.resolve(file) ;
-        if ( p.toFile().exists() )
-            return p.normalize().toString() ;
-        return null ;
-    }
-
-//    /** 
-//     * Test whether a name identified an existing resource
-//     * @param resource    A String in Shiro-resource name format (e.g. URL scheme names) 
-//     * @return True/false as to whether the resource can be found or not. 
-//     */
-//    
-//    private boolean resourceExists(String resource) {
-//        try {
-//            // See IniWebEnvironment.convertPathToIni
-//            if (!ResourceUtils.hasResourcePrefix(resource)) {
-//                //Sort out "path" and open as a webapp resource.
-//                resource = WebUtils.normalize(resource);
-//                URL url = servletContext.getResource(resource) ;
-//                return ( url == null ) ;
-//            } else {
-//                // Treat as a plain name. 
-//                InputStream is = ResourceUtils.getInputStreamForPath(resource);
-//                boolean exists = (is != null ) ;
-//                is.close() ;
-//                return exists ;
-//            }
-//        } catch (IOException e) { return false ; }
-//    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java
deleted file mode 100644
index 74117c9..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.server;
-
-import org.apache.jena.atlas.lib.FileOps ;
-import org.apache.jena.atlas.lib.StrUtils ;
-import org.apache.jena.fuseki.Fuseki ;
-
-import com.hp.hpl.jena.query.Dataset ;
-import com.hp.hpl.jena.tdb.StoreConnection ;
-import com.hp.hpl.jena.tdb.TDB ;
-import com.hp.hpl.jena.tdb.TDBFactory ;
-import com.hp.hpl.jena.tdb.base.block.FileMode ;
-import com.hp.hpl.jena.tdb.base.file.Location ;
-import com.hp.hpl.jena.tdb.setup.StoreParams ;
-import com.hp.hpl.jena.tdb.transaction.DatasetGraphTransaction ;
-
-public class SystemState {
-    private static String SystemDatabaseLocation ;
-    // Testing may reset this.
-    public static Location location ; 
-    
-    private  static Dataset                 dataset   = null ;
-    private  static DatasetGraphTransaction dsg       = null ;
-    
-    public static Dataset getDataset() {
-        init() ;
-        return dataset ;
-    }
-    
-    public static DatasetGraphTransaction getDatasetGraph() {
-        init() ;
-        return dsg ;
-    }
-    
-    private static boolean initialized = false ; 
-    private static void init() {
-        init$() ;
-    }
-    
-    /** Small footprint database.  The system database records the server state.
-     * It should not be performance critical, mainly being used for system admin
-     * functions.
-     * <p>Direct mode so that it is not competing for OS file cache space.
-     * <p>Small caches - 
-     */
-    private static final StoreParams systemDatabaseParams = StoreParams.builder()
-        .fileMode(FileMode.direct)
-        .blockReadCacheSize(20)
-        .blockWriteCacheSize(20)
-        .node2NodeIdCacheSize(5000)
-        .nodeId2NodeCacheSize(5000)
-        .nodeMissCacheSize(100)
-        .build() ;
-    
-    public /* for testing */ static void init$() {
-        if ( initialized )
-            return ;
-        initialized = true ;
-        
-        if ( location == null )
-            location = Location.create(FusekiServer.dirSystemDatabase.toString()) ;
-        
-        if ( ! location.isMem() )
-            FileOps.ensureDir(location.getDirectoryPath()) ;
-        
-        // Force it into the store connection as a low footprint
-        if ( StoreConnection.getExisting(location) != null )
-            Fuseki.serverLog.warn("System database already in the StoreConnection cache") ;
-        StoreConnection.make(location, systemDatabaseParams) ;
-        
-        dataset = TDBFactory.createDataset(location) ;
-        dsg     = (DatasetGraphTransaction)(dataset.asDatasetGraph()) ;
-        dsg.getContext().set(TDB.symUnionDefaultGraph, false) ;
-    }
-    
-    public static String PREFIXES = StrUtils.strjoinNL
-        ("BASE <http://example/base#>",
-         "PREFIX ja:      <http://jena.hpl.hp.com/2005/11/Assembler#>",
-         "PREFIX fu:      <http://jena.apache.org/fuseki#>",
-         "PREFIX fuseki:  <http://jena.apache.org/fuseki#>",
-         "PREFIX rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#>",
-         "PREFIX rdfs:    <http://www.w3.org/2000/01/rdf-schema#>",
-         "PREFIX tdb:     <http://jena.hpl.hp.com/2008/tdb#>",
-         "PREFIX sdb:     <http://jena.hpl.hp.com/20087/sdb#>",
-         "PREFIX list:    <http://jena.hpl.hp.com/ARQ/list#>",
-         "PREFIX xsd:     <http://www.w3.org/2001/XMLSchema#>",
-         "PREFIX apf:     <http://jena.hpl.hp.com/ARQ/property#>",
-         "PREFIX afn:     <http://jena.hpl.hp.com/ARQ/function#>",
-         "") ;
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
deleted file mode 100644
index 3e45c78..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import static java.lang.String.format ;
-
-import java.io.IOException ;
-import java.util.Enumeration ;
-import java.util.Map ;
-
-import javax.servlet.ServletException ;
-import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
-
-import org.apache.jena.atlas.RuntimeIOException ;
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.riot.web.HttpNames ;
-import org.apache.jena.web.HttpSC ;
-import org.slf4j.Logger ;
-
-import com.hp.hpl.jena.query.ARQ ;
-import com.hp.hpl.jena.query.QueryCancelledException ;
-import com.hp.hpl.jena.sparql.util.Context ;
-
-/** General request lifecycle */
-public abstract class ActionBase extends ServletBase
-{
-    protected final Logger log ;
-
-    protected ActionBase(Logger log) {
-        super() ;
-        this.log = log ;
-    }
-    
-    @Override 
-    public void init() {
-//        log.info("["+Utils.className(this)+"] ServletContextName = "+getServletContext().getServletContextName()) ;
-//        log.info("["+Utils.className(this)+"] ContextPath        = "+getServletContext().getContextPath()) ;
-
-        //super.init() ;
-    }
-    
-    /**
-     * Common framework for handling HTTP requests.
-     * @param request
-     * @param response
-     */
-    protected void doCommon(HttpServletRequest request, HttpServletResponse response)
-    {
-        try {
-            long id = allocRequestId(request, response);
-            
-            // Lifecycle
-            HttpAction action = allocHttpAction(id, request, response) ;
-
-            printRequest(action) ;
-            action.setStartTime() ;
-            
-            // The response may be changed to a HttpServletResponseTracker
-            response = action.response ;
-            initResponse(request, response) ;
-            Context cxt = ARQ.getContext() ;
-            
-            try {
-                execCommonWorker(action) ;
-            } catch (QueryCancelledException ex) {
-                // Also need the per query info ...
-                String message = String.format("The query timed out (restricted to %s ms)", cxt.get(ARQ.queryTimeout));
-                // Possibility :: response.setHeader("Retry-after", "600") ;    // 5 minutes
-                ServletOps.responseSendError(response, HttpSC.SERVICE_UNAVAILABLE_503, message);
-            } catch (ActionErrorException ex) {
-                if ( ex.exception != null )
-                    ex.exception.printStackTrace(System.err) ;
-                // Log message done by printResponse in a moment.
-                if ( ex.message != null )
-                    ServletOps.responseSendError(response, ex.rc, ex.message) ;
-                else
-                    ServletOps.responseSendError(response, ex.rc) ;
-            } catch (RuntimeIOException ex) {
-                log.warn(format("[%d] Runtime IO Exception (client left?) RC = %d : %s", id, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()), ex) ;
-                ServletOps.responseSendError(response, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()) ;
-            } catch (Throwable ex) {
-                // This should not happen.
-                //ex.printStackTrace(System.err) ;
-                log.warn(format("[%d] RC = %d : %s", id, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()), ex) ;
-                ServletOps.responseSendError(response, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()) ;
-            }
-    
-            action.setFinishTime() ;
-            printResponse(action) ;
-            archiveHttpAction(action) ;
-        } catch (Throwable th) {
-            log.error("Internal error", th) ;
-        }
-    }
-
-    // ---- Operation lifecycle
-
-    /**
-     * Returns a fresh HTTP Action for this request.
-     * @param id the Request ID
-     * @param request HTTP request
-     * @param response HTTP response
-     * @return a new HTTP Action
-     */
-    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) ;
-    }
-
-    /**
-     * Begin handling an {@link HttpAction}  
-     * @param action
-     */
-    protected final void startRequest(HttpAction action) {
-        action.startRequest() ;
-    }
-    
-    /**
-     * Stop handling an {@link HttpAction}  
-     */
-    protected final void finishRequest(HttpAction action) {
-        action.finishRequest() ;
-    }
-    
-    /**
-     * Archives the HTTP Action.
-     * @param action HTTP Action
-     * @see HttpAction#minimize()
-     */
-    private void archiveHttpAction(HttpAction action) {
-        action.minimize() ;
-    }
-
-    /**
-     * Execute this request, which maybe a admin operation or a client request. 
-     * @param action HTTP Action
-     */
-    protected abstract void execCommonWorker(HttpAction action) ;
-    
-    /** Extract the name after the container name (serverlet name).
-     * Returns "/name" or null 
-     */  
-    protected static String extractItemName(HttpAction action) {
-//      action.log.info("context path  = "+action.request.getContextPath()) ;
-//      action.log.info("pathinfo      = "+action.request.getPathInfo()) ;
-//      action.log.info("servlet path  = "+action.request.getServletPath()) ;
-      // if /name
-      //    request.getServletPath() otherwise it's null
-      // if /*
-      //    request.getPathInfo() ; otherwise it's null.
-      
-      // PathInfo is after the servlet name. 
-      String x1 = action.request.getServletPath() ;
-      String x2 = action.request.getPathInfo() ;
-      
-      String pathInfo = action.request.getPathInfo() ;
-      if ( pathInfo == null || pathInfo.isEmpty() || pathInfo.equals("/") )
-          // Includes calling as a container. 
-          return null ;
-      String name = pathInfo ;
-      // pathInfo starts with a "/"
-      int idx = pathInfo.lastIndexOf('/') ;
-      if ( idx > 0 )
-          name = name.substring(idx) ;
-      // Returns "/name"
-      return name ; 
-  }
-
-    @SuppressWarnings("unused") // ServletException
-    protected void doPatch(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "HTTP PATCH not supported");
-    }
-    
-    private void printRequest(HttpAction action) {
-        String url = ActionLib.wholeRequestURL(action.request) ;
-        String method = action.request.getMethod() ;
-
-        log.info(format("[%d] %s %s", action.id, method, url)) ;
-        if ( action.verbose ) {
-            Enumeration<String> en = action.request.getHeaderNames() ;
-            for (; en.hasMoreElements();) {
-                String h = en.nextElement() ;
-                Enumeration<String> vals = action.request.getHeaders(h) ;
-                if ( !vals.hasMoreElements() )
-                    log.info(format("[%d]   ", action.id, h)) ;
-                else {
-                    for (; vals.hasMoreElements();)
-                        log.info(format("[%d]   %-20s %s", action.id, h, vals.nextElement())) ;
-                }
-            }
-        }
-    }
-
-    private void initResponse(HttpServletRequest request, HttpServletResponse response) {
-        setCommonHeaders(response) ;
-        String method = request.getMethod() ;
-        // All GET and HEAD operations are sensitive to conneg so ...
-        if ( HttpNames.METHOD_GET.equalsIgnoreCase(method) || HttpNames.METHOD_HEAD.equalsIgnoreCase(method) )
-            setVaryHeader(response) ;
-    }
-
-    private void printResponse(HttpAction action) {
-        long time = action.getTime() ;
-
-        HttpServletResponseTracker response = action.response ;
-        if ( action.verbose ) {
-            if ( action.contentType != null )
-                log.info(format("[%d]   %-20s %s", action.id, HttpNames.hContentType, action.contentType)) ;
-            if ( action.contentLength != -1 )
-                log.info(format("[%d]   %-20s %d", action.id, HttpNames.hContentLengh, action.contentLength)) ;
-            for (Map.Entry<String, String> e : action.headers.entrySet())
-                log.info(format("[%d]   %-20s %s", action.id, e.getKey(), e.getValue())) ;
-        }
-
-        String timeStr = fmtMillis(time) ;
-
-        if ( action.message == null )
-            log.info(String.format("[%d] %d %s (%s) ", action.id, action.statusCode,
-                                   HttpSC.getMessage(action.statusCode), timeStr)) ;
-        else
-            log.info(String.format("[%d] %d %s (%s) ", action.id, action.statusCode, action.message, timeStr)) ;
-        
-        // See also HttpAction.finishRequest - request logging happens there.
-    }
-
-    /**
-     * <p>Given a time point, return the time as a milli second string if it is less than 1000,
-     * otherwise return a seconds string.</p>
-     * <p>It appends a 'ms' suffix when using milli seconds,
-     *  and <i>s</i> for seconds.</p>
-     * <p>For instance: </p>
-     * <ul>
-     * <li>10 emits 10 ms</li>
-     * <li>999 emits 999 ms</li>
-     * <li>1000 emits 1.000 s</li>
-     * <li>10000 emits 10.000 s</li>
-     * </ul>
-     * @param time the time in milliseconds
-     * @return the time as a display string
-     */
-
-    private static String fmtMillis(long time) {
-        // Millis only? seconds only?
-        if ( time < 1000 )
-            return String.format("%,d ms", time) ;
-        return String.format("%,.3f s", time / 1000.0) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java
deleted file mode 100644
index c87cfe8..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-public class ActionErrorException extends RuntimeException
-{
-    public final Throwable exception ;
-    public final String message ;
-    public final int rc ;
-    public ActionErrorException(Throwable ex, String message, int rc)
-    {
-        this.exception = ex ;
-        this.message = message ;
-        this.rc = rc ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
deleted file mode 100644
index 182b46e..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import javax.servlet.http.HttpServletRequest ;
-
-import org.apache.jena.atlas.web.AcceptList ;
-import org.apache.jena.atlas.web.MediaType ;
-import org.apache.jena.fuseki.DEF ;
-import org.apache.jena.fuseki.conneg.ConNeg ;
-import org.apache.jena.fuseki.server.DataAccessPoint ;
-import org.apache.jena.fuseki.server.DataAccessPointRegistry ;
-
-/** Operations related to servlets */
-
-public class ActionLib {
-    /**
-     * A possible implementation for {@link ActionSPARQL#mapRequestToDataset}
-     * that assumes the form /dataset/service.
-     * @param action the request
-     * @return the dataset
-     */    public static String mapRequestToDataset(HttpAction action) {
-         String uri = action.getActionURI() ;
-         return mapActionRequestToDataset(uri) ;
-     }
-    
-    /** Map request to uri in the registry.
-     *  A possible implementation for mapRequestToDataset(String)
-     *  that assumes the form /dataset/service 
-     *  Returning null means no mapping found.
-     *  The URI must be the action URI (no contact path) 
-     */
-    
-    public static String mapActionRequestToDataset(String uri) {
-        // Chop off trailing part - the service selector
-        // e.g. /dataset/sparql => /dataset 
-        int i = uri.lastIndexOf('/') ;
-        if ( i == -1 )
-            return null ;
-        if ( i == 0 )
-        {
-            // started with '/' - leave.
-            return uri ;
-        }
-        
-        return uri.substring(0, i) ;
-    }
-
-    /** Calculate the operation , given action and data access point */ 
-    public static String mapRequestToOperation(HttpAction action, DataAccessPoint dsRef) {
-        if ( dsRef == null )
-            return "" ;
-        String uri = action.getActionURI() ;
-        String name = dsRef.getName();
-        if ( name.length() >= uri.length() )
-            return "" ;
-        return uri.substring(name.length()+1) ;   // Skip the separating "/"
-        
-    }
-    
-    /** Implementation of mapRequestToDataset(String) that looks for
-     * the longest match in the registry.
-     * This includes use in direct naming GSP. 
-     */
-    public static String mapRequestToDatasetLongest$(String uri) 
-    {
-        if ( uri == null )
-            return null ;
-        
-        // This covers local, using the URI as a direct name for
-        // a graph, not just using the indirect ?graph= or ?default 
-        // forms.
-
-        String ds = null ;
-        for ( String ds2 : DataAccessPointRegistry.get().keys() ) {
-            if ( ! uri.startsWith(ds2) )
-                continue ;
-
-            if ( ds == null )
-            {
-                ds = ds2 ;
-                continue ; 
-            }
-            if ( ds.length() < ds2.length() )
-            {
-                ds = ds2 ;
-                continue ;
-            }
-        }
-        return ds ;
-    }
-
-    /** Calculate the fill URL including query string
-     * for the HTTP request. This may be quite long.
-     * @param request HttpServletRequest
-     * @return String The full URL, including query string.
-     */
-    public static String wholeRequestURL(HttpServletRequest request) {
-        StringBuffer sb = request.getRequestURL() ;
-        String queryString = request.getQueryString() ;
-        if ( queryString != null ) {
-            sb.append("?") ;
-            sb.append(queryString) ;
-        }
-        return sb.toString() ;
-    }
-
-    /* 
-     * The context path can be:
-     * "" for the root context
-     * "/APP" for named contexts
-     * so:
-     * "/dataset/server" becomes "/dataset/server"
-     * "/APP/dataset/server" becomes "/dataset/server"
-     */
-    public static String removeContextPath(HttpAction action) {
-
-        return actionURI(action.request) ;
-    }
-    
-    public static String actionURI(HttpServletRequest request) {
-//      Log.info(this, "URI                     = '"+request.getRequestURI()) ;
-//      Log.info(this, "Context path            = '"+request.getContextPath()+"'") ;
-//      Log.info(this, "Servlet path            = '"+request.getServletPath()+"'") ;
-//      ServletContext cxt = this.getServletContext() ;
-//      Log.info(this, "ServletContext path     = '"+cxt.getContextPath()+"'") ;
-        
-        String contextPath = request.getServletContext().getContextPath() ;
-        String uri = request.getRequestURI() ;
-        if ( contextPath == null )
-            return uri ;
-        if ( contextPath.isEmpty())
-            return uri ;
-        String x = uri ;
-        if ( uri.startsWith(contextPath) )
-            x = uri.substring(contextPath.length()) ;
-        //log.info("uriWithoutContextPath: uri = "+uri+" contextPath="+contextPath+ "--> x="+x) ;
-        return x ;
-    }
-
-    /** Negotiate the content-type and set the response headers */ 
-    public static MediaType contentNegotation(HttpAction action, AcceptList myPrefs,
-                                              MediaType defaultMediaType) {
-        MediaType mt = ConNeg.chooseContentType(action.request, myPrefs, defaultMediaType) ;
-        if ( mt == null )
-            return null ;
-        if ( mt.getContentType() != null )
-            action.response.setContentType(mt.getContentType()) ;
-        if ( mt.getCharset() != null )
-            action.response.setCharacterEncoding(mt.getCharset()) ;
-        return mt ;
-    }
-    
-    /** Negotiate the content-type for an RDF triples syntax and set the response headers */ 
-    public static MediaType contentNegotationRDF(HttpAction action) {
-        return contentNegotation(action, DEF.rdfOffer, DEF.acceptRDFXML) ;
-    }
-
-    /** Negotiate the content-type for an RDF quads syntax and set the response headers */ 
-    public static MediaType contentNegotationQuads(HttpAction action) {
-        return contentNegotation(action, DEF.quadsOffer, DEF.acceptNQuads) ;
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java
deleted file mode 100644
index e2c7e4a..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import java.io.IOException ;
-import java.util.Locale ;
-
-import javax.servlet.ServletException ;
-import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
-
-import org.apache.jena.fuseki.server.CounterName ;
-
-/** Common point for operations that are "REST"ish (use GET/PUT etc as operations). */ 
-public abstract class ActionREST extends ActionSPARQL
-{
-    public ActionREST()
-    { super() ; }
-
-    @Override
-    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        // Direct all verbs to our common framework.
-        doCommon(request, response) ;
-    }
-    
-    @Override
-    protected void perform(HttpAction action) {
-        dispatch(action) ;
-    }
-
-    private void dispatch(HttpAction action) {
-        HttpServletRequest req = action.request ;
-        HttpServletResponse resp = action.response ;
-        String method = req.getMethod().toUpperCase(Locale.ROOT) ;
-
-        if (method.equals(METHOD_GET))
-            doGet$(action);
-        else if (method.equals(METHOD_HEAD))
-            doHead$(action);
-        else if (method.equals(METHOD_POST))
-            doPost$(action);
-        else if (method.equals(METHOD_PATCH))
-            doPatch$(action) ;
-        else if (method.equals(METHOD_OPTIONS))
-            doOptions$(action) ;
-        else if (method.equals(METHOD_TRACE))
-            //doTrace(action) ;
-            ServletOps.errorMethodNotAllowed("TRACE") ;
-        else if (method.equals(METHOD_PUT))
-            doPut$(action) ;   
-        else if (method.equals(METHOD_DELETE))
-            doDelete$(action) ;
-        else
-            ServletOps.errorNotImplemented("Unknown method: "+method) ;
-    }
-
-    // Counter wrappers
-    
-    // XXX Out of date - we now add HTTP counters to all endpoints. 
-    
-    private final void doGet$(HttpAction action) {
-        incCounter(action.getEndpoint(), CounterName.HTTPget) ;
-        try {
-            doGet(action) ;
-            incCounter(action.getEndpoint(), CounterName.HTTPgetGood) ;
-        } catch ( ActionErrorException ex) {
-            incCounter(action.getEndpoint(), CounterName.HTTPGetBad) ;
-            throw ex ;
-        }
-    }
-
-    private final void doHead$(HttpAction action) {
-        incCounter(action.getEndpoint(), CounterName.HTTPhead) ;
-        try {
-            doHead(action) ;
-            incCounter(action.getEndpoint(), CounterName.HTTPheadGood) ;
-        } catch ( ActionErrorException ex) {
-            incCounter(action.getEndpoint(), CounterName.HTTPheadBad) ;
-            throw ex ;
-        }
-    }
-
-    private final void doPost$(HttpAction action) {
-        incCounter(action.getEndpoint(), CounterName.HTTPpost) ;
-        try {
-            doPost(action) ;
-            incCounter(action.getEndpoint(), CounterName.HTTPpostGood) ;
-        } catch ( ActionErrorException ex) {
-            incCounter(action.getEndpoint(), CounterName.HTTPpostBad) ;
-            throw ex ;
-        }
-    }
-
-    private final void doPatch$(HttpAction action) {
-        incCounter(action.getEndpoint(), CounterName.HTTPpatch) ;
-        try {
-            doPatch(action) ;
-            incCounter(action.getEndpoint(), CounterName.HTTPpatchGood) ;
-        } catch ( ActionErrorException ex) {
-            incCounter(action.getEndpoint(), CounterName.HTTPpatchBad) ;
-            throw ex ;
-        }
-    }
-
-    private final void doDelete$(HttpAction action) {
-        incCounter(action.getEndpoint(), CounterName.HTTPdelete) ;
-        try {
-            doDelete(action) ;
-            incCounter(action.getEndpoint(), CounterName.HTTPdeleteGood) ;
-        } catch ( ActionErrorException ex) {
-            incCounter(action.getEndpoint(), CounterName.HTTPdeleteBad) ;
-            throw ex ;
-        }
-    }
-
-    private final void doPut$(HttpAction action) {
-        incCounter(action.getEndpoint(), CounterName.HTTPput) ;
-        try {
-            doPut(action) ;
-            incCounter(action.getEndpoint(), CounterName.HTTPputGood) ;
-        } catch ( ActionErrorException ex) {
-            incCounter(action.getEndpoint(), CounterName.HTTPputBad) ;
-            throw ex ;
-        }
-    }
-
-    private final void doOptions$(HttpAction action) {
-        incCounter(action.getEndpoint(), CounterName.HTTPoptions) ;
-        try {
-            doOptions(action) ;
-            incCounter(action.getEndpoint(), CounterName.HTTPoptionsGood) ;
-        } catch ( ActionErrorException ex) {
-            incCounter(action.getEndpoint(), CounterName.HTTPoptionsBad) ;
-            throw ex ;
-        }
-    }
-    
-    protected abstract void doGet(HttpAction action) ;
-    protected abstract void doHead(HttpAction action) ;
-    protected abstract void doPost(HttpAction action) ;
-    protected abstract void doPatch(HttpAction action) ;
-    protected abstract void doDelete(HttpAction action) ;
-    protected abstract void doPut(HttpAction action) ;
-    protected abstract void doOptions(HttpAction action) ;
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
deleted file mode 100644
index d26bc55..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import static org.apache.jena.fuseki.server.CounterName.Requests ;
-import static org.apache.jena.fuseki.server.CounterName.RequestsBad ;
-import static org.apache.jena.fuseki.server.CounterName.RequestsGood ;
-
-import java.io.InputStream ;
-
-import org.apache.jena.atlas.RuntimeIOException ;
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.fuseki.server.* ;
-import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.RDFDataMgr ;
-import org.apache.jena.riot.ReaderRIOT ;
-import org.apache.jena.riot.RiotException ;
-import org.apache.jena.riot.system.ErrorHandler ;
-import org.apache.jena.riot.system.ErrorHandlerFactory ;
-import org.apache.jena.riot.system.StreamRDF ;
-
-import com.hp.hpl.jena.query.QueryCancelledException ;
-
-/** SPARQL request lifecycle */
-public abstract class ActionSPARQL extends ActionBase
-{
-    protected ActionSPARQL() { super(Fuseki.actionLog) ; }
-    
-    protected abstract void validate(HttpAction action) ;
-    protected abstract void perform(HttpAction action) ;
-
-    /**
-     * Executes common tasks, including mapping the request to the right dataset, setting the dataset into the HTTP
-     * action, and retrieving the service for the dataset requested. Finally, it calls the
-     * {@link #executeAction(HttpAction)} method, which executes the HTTP Action life cycle.
-     * @param action HTTP Action
-     */
-    @Override
-    protected void execCommonWorker(HttpAction action) {
-        DataAccessPoint dataAccessPoint ;
-        DataService dSrv ;
-        
-        String datasetUri = mapRequestToDataset(action) ;
-        if ( datasetUri != null ) {
-            dataAccessPoint = DataAccessPointRegistry.get().get(datasetUri) ;
-            if ( dataAccessPoint == null ) {
-                ServletOps.errorNotFound("No dataset for URI: "+datasetUri) ;
-                return ;
-            }
-            //dataAccessPoint.
-            dSrv = dataAccessPoint.getDataService() ;
-            if ( ! dSrv.isAcceptingRequests() ) {
-                ServletOps.errorNotFound("Dataset not active: "+datasetUri) ;
-                return ;
-            }
-        } else {
-            dataAccessPoint = null ;
-            dSrv = DataService.serviceOnlyDataService() ;
-        }
-
-        String operationName = mapRequestToOperation(action, dataAccessPoint) ;
-        action.setRequest(dataAccessPoint, dSrv) ;
-        
-        //operationName = ""
-        
-        Endpoint op = dSrv.getOperation(operationName) ;
-        action.setEndpoint(op, operationName);
-        executeAction(action) ;
-    }
-
-    /** Execute a SPARQL request. Statistics have not been adjusted at this point.
-     * 
-     * @param action
-     */
-    protected void executeAction(HttpAction action) {
-        executeLifecycle(action) ;
-    }
-    
-    /** 
-     * Standard execution lifecycle for a SPARQL Request.
-     * <ul>
-     * <li>{@link #startRequest(HttpAction)}</li>
-     * <li>initial statistics,</li>
-     * <li>{@link #validate(HttpAction)} request,</li>
-     * <li>{@link #perform(HttpAction)} request,</li>
-     * <li>completion/error statistics,</li>
-     * <li>{@link #finishRequest(HttpAction)}
-     * </ul>
-     * 
-     * @param action
-     */
-    // This is the service request lifecycle.
-    final
-    protected void executeLifecycle(HttpAction action) {
-        startRequest(action) ;
-        // And also HTTP counter
-        CounterSet csService = action.getDataService().getCounters() ;
-        CounterSet csOperation = action.getEndpoint().getCounters() ;
-        
-        incCounter(csService, Requests) ;
-        incCounter(csOperation, Requests) ;
-        try {
-            // Either exit this via "bad request" on validation
-            // or in execution in perform. 
-            try {
-                validate(action) ;
-            } catch (ActionErrorException ex) {
-                incCounter(csOperation, RequestsBad) ;
-                incCounter(csService, RequestsBad) ;
-                throw ex ;
-            }
-
-            try {
-                perform(action) ;
-                // Success
-                incCounter(csOperation, RequestsGood) ;
-                incCounter(csService, RequestsGood) ;
-            } catch (ActionErrorException | QueryCancelledException | RuntimeIOException ex) {
-                incCounter(csOperation, RequestsBad) ;
-                incCounter(csService, RequestsBad) ;
-                throw ex ;
-            }
-        } finally {
-            finishRequest(action) ;
-        }
-    }
-    
-    /**
-     * Map request {@link HttpAction} to uri in the registry.
-     * A return of ull means no mapping done (passthrough).
-     * @param uri the URI
-     * @return the dataset
-     */
-    protected String mapRequestToDataset(HttpAction action) {
-        return ActionLib.mapRequestToDataset(action) ;
-    }
-
-    /**
-     * Map request to uri in the registry. null means no mapping done
-     * (passthrough).
-     */
-    protected String mapRequestToOperation(HttpAction action, DataAccessPoint dataAccessPoint) {
-        return ActionLib.mapRequestToOperation(action, dataAccessPoint) ;
-    }
-
-    /** Increment counter */
-    protected static void incCounter(Counters counters, CounterName name) {
-        if ( counters == null ) return ;
-        incCounter(counters.getCounters(), name) ; 
-    }
-    
-    /** Decrement counter */
-    protected static void decCounter(Counters counters, CounterName name) {
-        if ( counters == null ) return ;
-        decCounter(counters.getCounters(), name) ; 
-    }
-
-    protected static void incCounter(CounterSet counters, CounterName name) {
-        if ( counters == null )
-            return ;
-        try {
-            if ( counters.contains(name) )
-                counters.inc(name) ;
-        } catch (Exception ex) {
-            Fuseki.serverLog.warn("Exception on counter inc", ex) ;
-        }
-    }
-    
-    protected static void decCounter(CounterSet counters, CounterName name) {
-        if ( counters == null )
-            return ;
-        try {
-            if ( counters.contains(name) )
-                counters.dec(name) ;
-        } catch (Exception ex) {
-            Fuseki.serverLog.warn("Exception on counter dec", ex) ;
-        }
-    }
-
-    public static void parse(HttpAction action, StreamRDF dest, InputStream input, Lang lang, String base) {
-        try {
-            ReaderRIOT r = RDFDataMgr.createReader(lang) ;
-            if ( r == null )
-                ServletOps.errorBadRequest("No parser for language '"+lang.getName()+"'") ;
-            ErrorHandler errorHandler = ErrorHandlerFactory.errorHandlerStd(action.log);
-            r.setErrorHandler(errorHandler); 
-            r.read(input, base, null, dest, null) ; 
-        } 
-        catch (RiotException ex) { ServletOps.errorBadRequest("Parse error: "+ex.getMessage()) ; }
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java
deleted file mode 100644
index 1f86539..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import java.util.ConcurrentModificationException ;
-import java.util.concurrent.atomic.AtomicLong ;
-
-import org.apache.jena.fuseki.Fuseki ;
-import org.slf4j.Logger ;
-
-public final class ConcurrencyPolicyMRSW
-{
-    static private Logger log = Fuseki.actionLog ; //org.slf4j.LoggerFactory.getLogger(ConcurrencyPolicyMRSW.class) ;
-    static private final boolean logging = false ; //log.isDebugEnabled() ;
-    
-    // This is a simplified version of ConcurrencyPolicyMRSW from TDB. 
-    private final AtomicLong readCounter = new AtomicLong(0) ;
-    private final AtomicLong writeCounter = new AtomicLong(0) ;
-    static private final AtomicLong policyCounter = new AtomicLong(0) ;
-
-    public ConcurrencyPolicyMRSW()
-    { policyCounter.incrementAndGet() ; }
-
-    // Loggin -inside the operation.
-    
-    //@Override
-    public void startRead()
-    {
-        readCounter.getAndIncrement() ;
-        log() ;
-        checkConcurrency() ;
-    }
-
-    //@Override
-    public void finishRead()
-    {
-        log() ;
-        readCounter.decrementAndGet() ;
-        checkConcurrency() ;
-    }
-
-    //@Override
-    public void startUpdate()
-    {
-        writeCounter.getAndIncrement() ;
-        log() ;
-        checkConcurrency() ;
-    }
-
-    //@Override
-    public void finishUpdate()
-    {
-        log() ;
-        writeCounter.decrementAndGet() ;
-        checkConcurrency() ;
-    }
-
-    private synchronized void checkConcurrency()
-    {
-        long R = readCounter.get() ;
-        long W = writeCounter.get() ;
-        long id = policyCounter.get();
-        if ( R > 0 && W > 0 )
-            policyError(id, R, W) ;
-        if ( W > 1 )
-            policyError(id, R, W) ;
-    }
-
-    private void log()
-    {
-        if ( ! logging ) 
-            return ;
-        long R , W , id ;
-        synchronized(this)
-        {
-            R = readCounter.get() ;
-            W = writeCounter.get() ;
-            id = policyCounter.get();
-        }
-        log.info(format(id, R, W)) ;
-    }
-    
-    private static void policyError(long id, long R, long W)
-    {
-        policyError(format(id, R, W)) ;
-    }
-
-    private static void policyError(String message)
-    {
-        throw new ConcurrentModificationException(message) ;
-    }
-    
-    private static String format(long id, long R, long W)
-    {
-        return String.format("(lock=%d) Reader = %d, Writer = %d", id, R, W) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
deleted file mode 100644
index 7a79cd3..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import java.io.IOException ;
-
-import javax.servlet.* ;
-import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
-
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.fuseki.server.DataAccessPointRegistry ;
-import org.slf4j.Logger ;
-
-/** Look at all requests and see if they match a registered dataset name; 
- * if they do, pass down to the uber servlet, which can dispatch any request
- * for any service. 
- */
-public class FusekiFilter implements Filter {
-    private static Logger log = Fuseki.serverLog ;
-    private static SPARQL_UberServlet überServlet = new SPARQL_UberServlet.AccessByConfig() ;
-    
-    @Override
-    public void init(FilterConfig filterConfig) throws ServletException {
-//        log.info("Filter: ["+Utils.className(this)+"] ServletContextName = "+filterConfig.getServletContext().getServletContextName()) ;
-//        log.info("Filter: ["+Utils.className(this)+"] ContextPath        = "+filterConfig.getServletContext().getContextPath()) ;
-    }
-
-    private static final boolean LogFilter = false ;     // Development debugging (can be excessive!)
-    
-    @Override
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-        throws IOException, ServletException {
-        try {
-            HttpServletRequest req = (HttpServletRequest)request ;
-            HttpServletResponse resp = (HttpServletResponse)response ;
-
-            // Handle context path
-            String uri = ActionLib.actionURI(req) ;
-            String datasetUri = ActionLib.mapActionRequestToDataset(uri) ;
-
-            // is it a long running operation?
-            // (this could be a separate filter)
-            
-            if ( LogFilter ) {
-                log.info("Filter: Request URI = "+req.getRequestURI()) ;
-                log.info("Filter: Action URI  = "+uri) ;
-                log.info("Filter: Dataset URI = "+datasetUri) ;
-            }
-            
-            if ( datasetUri != null ) {        
-                if ( DataAccessPointRegistry.get().isRegistered(datasetUri) ) {
-                    if ( LogFilter )
-                        log.info("Filter: dispatch") ;
-                    überServlet.doCommon(req, resp) ;
-                    return ;
-                }
-            }
-        } catch (Exception ex) {}
-        
-        if ( LogFilter )
-            log.info("Filter: pass to chain") ;
-        // Not found - continue. 
-        chain.doFilter(request, response);
-    }
-
-    @Override
-    public void destroy() {}
-
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
deleted file mode 100644
index 245ed0f..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import static com.hp.hpl.jena.query.ReadWrite.READ ;
-import static com.hp.hpl.jena.query.ReadWrite.WRITE ;
-
-import java.util.HashMap ;
-import java.util.Map ;
-
-import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
-
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.fuseki.FusekiException ;
-import org.apache.jena.fuseki.server.* ;
-import org.slf4j.Logger ;
-
-import com.hp.hpl.jena.query.ReadWrite ;
-import com.hp.hpl.jena.sparql.SystemARQ ;
-import com.hp.hpl.jena.sparql.core.DatasetGraph ;
-import com.hp.hpl.jena.sparql.core.DatasetGraphWithLock ;
-import com.hp.hpl.jena.sparql.core.DatasetGraphWrapper ;
-import com.hp.hpl.jena.sparql.core.Transactional ;
-
-/**
- * HTTP action that represents the user request lifecycle. Its state is handled in the
- * {@link ActionSPARQL#executeAction(HttpAction)} method.
- */
-public class HttpAction
-{
-    public final long id ;
-    public final boolean verbose ;
-    public final Logger log ;
-    
-    // ----
-    // Worth subclassing? Given this is allocated in the general lifecycle
-    // it would mean there are downcasts to the specific type.
-    
-    // -- Valid only for operational actions (e.g. SPARQL).
-    
-    public  String          endpointName    = null ;        // Endpoint name srv was found under 
-    public  Endpoint        endpoint        = null ;
-    private Transactional   transactional   = null ;
-    private boolean         isTransactional = false ;
-    private DatasetGraph    activeDSG       = null ;        // Set when inside begin/end.
-    private ReadWrite       activeMode      = null ;        // Set when inside begin/end.
-    
-    // -- Valid only for administration actions.
-    
-    // -- Shared items (but exact meaning may differ)
-    /** Handle to dataset+services being acted on (maybe null) */
-    private DataAccessPoint dataAccessPoint = null ;
-    private DataService dataService         = null ;
-    private String datasetName              = null ;        // Dataset URI used (e.g. registry)
-    private DatasetGraph dsg                = null ;
-
-    // ----
-    
-    private boolean startTimeIsSet = false ;
-    private boolean finishTimeIsSet = false ;
-
-    private long startTime = -2 ;
-    private long finishTime = -2 ;
-    
-    // Outcome.
-    public int statusCode = -1 ;
-    public String message = null ;
-    public int contentLength = -1 ;
-    public String contentType = null ;
-    
-    // Cleared to archive:
-    public Map <String, String> headers = new HashMap<>() ;
-    public HttpServletRequest request;
-    public HttpServletResponseTracker response ;
-    private final String actionURI ;
-    private final String contextPath ;
-    
-    /**
-     * Creates a new HTTP Action, using the HTTP request and response, and a given ID.
-     *
-     * @param id given ID
-     * @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) {
-        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.contextPath = request.getServletContext().getContextPath() ;
-        this.actionURI = ActionLib.actionURI(request) ;
-    }
-
-    /** Initialization after action creation during lifecycle setup.
-     * <p>Sets the action dataset. Setting will replace any existing {@link DataAccessPoint} and {@link DataService},
-     * as the {@link DatasetGraph} of the current HTTP Action.</p>
-     *
-     * <p>Once it has updated its members, the HTTP Action will change its transactional state and
-     * {@link Transactional} instance according to its base dataset graph.</p>
-     *
-     * @param dataAccessPoint {@link DataAccessPoint}
-     * @param dService {@link DataService}
-     * @see Transactional
-     */
-    
-    public void setRequest(DataAccessPoint dataAccessPoint, DataService dService) {
-        this.dataAccessPoint = dataAccessPoint ;
-        if ( dataAccessPoint != null )
-            this.datasetName = dataAccessPoint.getName() ; 
-
-        if ( this.dataService != null )
-            throw new FusekiException("Redefinition of DatasetRef in the request action") ;
-        
-        this.dataService = dService ;
-        if ( dService == null || dService.getDataset() == null )
-            // Null does not happens for service requests, (it does for admin requests - call setControlRequest) 
-            throw new FusekiException("Null DataService in the request action") ;
-        
-        this.dsg = dService.getDataset() ;
-        DatasetGraph basedsg = unwrap(dsg) ;
-
-        if ( isTransactional(basedsg) && isTransactional(dsg) ) {
-            // Use transactional if it looks safe - abort is necessary.
-            transactional = (Transactional)dsg ;
-            isTransactional = true ;
-        } else {
-            // Unsure if safesetControlRef
-            transactional = new DatasetGraphWithLock(dsg) ;
-            // No real abort.
-            isTransactional = false ;
-        }
-    }
-    
-    public void setControlRequest(DataAccessPoint dataAccessPoint, String datasetUri) {
-        this.dataAccessPoint = dataAccessPoint ;
-        this.dataService = null ;
-        this.datasetName = datasetUri ;
-    }
-    
-    /**
-     * Returns <code>true</code> iff the given {@link DatasetGraph} is an instance of {@link Transactional},
-     * <code>false otherwise</code>.
-     *
-     * @param dsg a {@link DatasetGraph}
-     * @return <code>true</code> iff the given {@link DatasetGraph} is an instance of {@link Transactional},
-     * <code>false otherwise</code>
-     */
-    private static boolean isTransactional(DatasetGraph dsg) {
-        return (dsg instanceof Transactional) ;
-    }
-
-    /**
-     * A {@link DatasetGraph} may contain other <strong>wrapped DatasetGraph's</strong>. This method will return
-     * the first instance (including the argument to this method) that <strong>is not</strong> an instance of
-     * {@link DatasetGraphWrapper}.
-     *
-     * @param dsg a {@link DatasetGraph}
-     * @return the first found {@link DatasetGraph} that is not an instance of {@link DatasetGraphWrapper}
-     */
-   private static DatasetGraph unwrap(DatasetGraph dsg) {
-        while (dsg instanceof DatasetGraphWrapper) {
-            dsg = ((DatasetGraphWrapper)dsg).getWrapped() ;
-        }
-        return dsg ;
-    }
-        
-    /** This is the requestURI with the context path removed.
-     *  It should be used internally for dispatch.
-     */
-    public String getActionURI() {
-        return actionURI ;
-    }
-    
-    /** Get the context path.
-     */
-    public String getContextPath() {
-        return contextPath ;
-    }
-    
-    
-    /** Set the endpoint and endpoint name that this is an action for. 
-     * @param srvRef {@link Endpoint}
-     * @param endpointName
-     */
-    public void setEndpoint(Endpoint srvRef, String endpointName) {
-        this.endpoint = srvRef ; 
-        this.endpointName = endpointName ;
-    }
-    
-    /** Get the endpoint for the action (may be null) . */
-    public Endpoint getEndpoint() {
-        return endpoint ; 
-    }
-
-    /**
-     * Returns whether or not the underlying DatasetGraph is fully transactional (supports rollback)
-     */
-    public boolean isTransactional() {
-        return isTransactional ;
-    }
-
-    public void beginRead() {
-        activeMode = READ ;
-        transactional.begin(READ) ;
-        activeDSG = dsg ;
-        dataService.startTxn(READ) ;
-    }
-
-    public void endRead() {
-        dataService.finishTxn(READ) ;
-        activeMode = null ;
-        transactional.end() ;
-        activeDSG = null ;
-    }
-
-    public void beginWrite() {
-        transactional.begin(WRITE) ;
-        activeMode = WRITE ;
-        activeDSG = dsg ;
-        dataService.startTxn(WRITE) ;
-    }
-
-    public void commit() {
-        transactional.commit() ;
-        activeDSG = null ;
-    }
-
-    public void abort() {
-        try { transactional.abort() ; } 
-        catch (Exception ex) {
-            // Some datasets claim to be transactional but
-            // don't provide a real abort. We tried to avoid
-            // them earlier but even if they sneek through,
-            // we try to continue server operation.
-            Log.warn(this, "Exception during abort (operation attempts to continue): "+ex.getMessage()) ; 
-        }
-        activeDSG = null ;
-    }
-
-    public void endWrite() {
-        dataService.finishTxn(WRITE) ;
-        activeMode = null ;
-
-        if ( transactional.isInTransaction() ) {
-            Log.warn(this, "Transaction still active in endWriter - no commit or abort seen (forced abort)") ;
-            try {
-                transactional.abort() ;
-            } catch (RuntimeException ex) {
-                Log.warn(this, "Exception in forced abort (trying to continue)", ex) ;
-            }
-        }
-        transactional.end() ;
-        activeDSG = null ;
-    }
-
-    public final void startRequest()
-    { 
-        if ( dataAccessPoint != null ) 
-            dataAccessPoint.startRequest(this) ;
-    }
-
-    public final void finishRequest() { 
-        if ( dataAccessPoint != null ) 
-            dataAccessPoint.finishRequest(this) ;
-        // Standard logging goes here.
-        if ( Fuseki.requestLog != null && Fuseki.requestLog.isInfoEnabled() ) { 
-            String s = RequestLog.combinedNCSA(this) ;
-            Fuseki.requestLog.info(s);
-        }
-    }
-    
-    /** If inside the transaction for the action, return the active {@link DatasetGraph},
-     *  otherwise return null.
-     * @return Current active {@link DatasetGraph}
-     */
-    public final DatasetGraph getActiveDSG() {
-        return activeDSG ;
-    }
-
-    public final DataAccessPoint getDataAccessPoint() {
-        return dataAccessPoint;
-    }
-
-//    public void setDataAccessPoint(DataAccessPoint dataAccessPoint) {
-//        this.dataAccessPoint = dataAccessPoint;
-//    }
-
-    public final DataService getDataService() {
-        return dataService;
-    }
-
-//    public final void setDataService(DataService dataService) {
-//        this.dataService = dataService;
-//    }
-
-    public final String getDatasetName() {
-        return datasetName;
-    }
-
-//    public void setDatasetName(String datasetName) {
-//        this.datasetName = datasetName;
-//    }
-
-    /** Reduce to a size that can be kept around for sometime. 
-     * Release resources like datasets that may be closed, reset etc.
-     */
-    public void minimize() {
-        this.request = null ;
-        this.response = null ;
-        this.dsg = null ;
-        this.dataService = null ;
-        this.activeDSG = null ;
-        this.endpoint = null ;
-    }
-
-    public void setStartTime() {
-        if ( startTimeIsSet ) 
-            Log.warn(this,  "Start time reset") ;
-        startTimeIsSet = true ;
-        this.startTime = System.nanoTime() ;
-    }
-
-    /** Start time, in system nanos */
-    public long getStartTime() { 
-        if ( ! startTimeIsSet ) 
-            Log.warn(this,  "Start time is not set") ;
-        return startTime ;
-    }
-
-    /** Start time, in system nanos */
-    public long getFinishTime() { 
-        if ( ! finishTimeIsSet ) 
-            Log.warn(this,  "Finish time is not set") ;
-        return finishTime ;
-    }
-    
-    public void setFinishTime() {
-        if ( finishTimeIsSet ) 
-            Log.warn(this,  "Finish time reset") ;
-        finishTimeIsSet = true ;
-        this.finishTime = System.nanoTime() ;
-    }
-
-    public HttpServletRequest getRequest()              { return request ; }
-
-    public HttpServletResponseTracker getResponse()     { return response ; }
-    
-    /** Return the recorded time taken in milliseconds. 
-     *  {@link #setStartTime} and {@link #setFinishTime}
-     *  must have been called.
-     */
-    public long getTime()
-    {
-        if ( ! startTimeIsSet ) 
-            Log.warn(this,  "Start time not set") ;
-        if ( ! finishTimeIsSet ) 
-            Log.warn(this,  "Finish time not set") ;
-        return (finishTime-startTime)/(1000*1000) ;
-    }
-
-    public void sync() {
-        SystemARQ.sync(dsg) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java
deleted file mode 100644
index c39e728..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import java.io.IOException ;
-
-import javax.servlet.http.HttpServletResponse ;
-import javax.servlet.http.HttpServletResponseWrapper ;
-
-import org.apache.jena.atlas.logging.Log ;
-
-/** Intercepting wrapper so we can track the response settings for logging purposes */
-
-public class HttpServletResponseTracker extends HttpServletResponseWrapper
-{
-    private final HttpAction action ;
-
-    public HttpServletResponseTracker(HttpAction action, HttpServletResponse response)
-    {
-        super(response) ;
-        this.action = action ;
-    }
-
-    @Override
-    public void sendError(int sc, String msg) throws IOException
-    {
-        action.statusCode = sc ;
-        action.message = msg ;
-        super.sendError(sc, msg) ;
-    }
-
-    @Override
-    public void sendError(int sc) throws IOException
-    {
-        action.statusCode = sc ;
-        action.message = null ;
-        super.sendError(sc) ;
-    }
-
-    @Override
-    public void setHeader(String name, String value)
-    {
-        super.setHeader(name, value) ;
-        action.headers.put(name, value) ;
-    }
-
-    @Override
-    public void addHeader(String name, String value)
-    {
-        Log.warn(this, "Unexpected addHeader - not recorded in log") ;
-        super.addHeader(name, value) ;
-    }
-    @Override
-    public void setStatus(int sc) 
-    {
-        action.statusCode = sc ;
-        action.message = null ;
-        super.setStatus(sc) ;
-    }
-
-    @Override
-    @Deprecated
-    public void setStatus(int sc, String sm)
-    {
-        action.statusCode = sc ;
-        action.message = sm ;
-        super.setStatus(sc, sm) ;
-    }
-
-    @Override
-    public void setContentLength(int len)
-    {
-        action.contentLength = len ;
-        super.setContentLength(len) ;
-    }
-
-    @Override
-    public void setContentType(String type)
-    {
-        action.contentType = type ;
-        super.setContentType(type) ;
-    }
-      
-      // From HttpServletResponse
-//      public void addCookie(Cookie cookie) {}
-//      public boolean containsHeader(String name) {}
-//      public String encodeURL(String url) { }
-//      public String encodeRedirectURL(String url) {}
-//      public String encodeUrl(String url) {}
-//      public String encodeRedirectUrl(String url) {}
-//      public void sendError(int sc, String msg) throws IOException
-//      public void sendError(int sc) throws IOException
-//      public void sendRedirect(String location) throws IOException {}
-//      public void setDateHeader(String name, long date) {}
-//      public void addDateHeader(String name, long date) {}
-//      public void setHeader(String name, String value)
-//      public void addHeader(String name, String value)
-//      public void setIntHeader(String name, int value) {}
-//      public void addIntHeader(String name, int value) {}
-//      public void setStatus(int sc) 
-//      public void setStatus(int sc, String sm)
-//      public void sendRedirect(String location) throws IOException {}
-//      public void setDateHeader(String name, long date) {}
-//      public void addDateHeader(String name, long date) {}
-        
-        // From ServletResponse.
-//         public ServletResponse getResponse() {}
-//         public void setResponse(ServletResponse response) {}
-//         public void setCharacterEncoding(String charset) {}
-//         public String getCharacterEncoding() {}
-//         public ServletOutputStream getOutputStream() throws IOException {}
-//         public PrintWriter getWriter() throws IOException {}
-//         public void setContentLength(int len) {}
-//         public void setContentType(String type) {}
-//         public String getContentType() {
-//         public void setBufferSize(int size) {}
-//         public int getBufferSize() {}
-//         public void flushBuffer() throws IOException {}
-//         public boolean isCommitted() {}
-//         public void reset() {}
-//         public void resetBuffer() {}
-//         public void setLocale(Locale loc) {}
-//         public Locale getLocale() {}
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java
deleted file mode 100644
index 63e6562..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets;
-
-import java.io.* ;
-
-/** 
-* Code needed to implement an OutputStream that does nothing.
-*/
-
-
-public class NullOutputStream extends /*Filter*/OutputStream
-{
-	public NullOutputStream()
-	{
-	}
-
-	// The OutputStream operations
-	@Override
-    public void close() { /* .close() ;*/ }
-	@Override
-    public void flush() { /* .flush() ;*/ }
-
-	// Need to implement this one.
-	@Override
-    public void write(int b) { /* .write(b) ;*/ }
-	@Override
-    public void write(byte b[]) { /* this.write(b, 0, b.length) ; */}
-
-	// Good to implement this one.
-	@Override
-    public void write(byte[] b, int off, int len)
-	{
-		// Work function
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
deleted file mode 100644
index 578447e..0000000
--- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.fuseki.servlets ;
-
-
-/**
- * Servlet for operations directly on a dataset - REST(ish) behaviour on the
- * dataset URI.
- */
-
-public abstract class REST_Quads extends SPARQL_GSP {
-    // Not supported: GSP direct naming.
-
-    public REST_Quads() {
-        super() ;
-    }
-
-    @Override
-    protected void validate(HttpAction action) {
-        // Check in the operations itself.
-    }
-
-    @Override
-    protected void doOptions(HttpAction action) {
-        ServletOps.errorMethodNotAllowed("OPTIONS") ;
-    }
-
-    @Override
-    protected void doHead(HttpAction action) {
-        ServletOps.errorMethodNotAllowed("HEAD") ;
-    }
-
-    @Override
-    protected void doPost(HttpAction action) {
-        ServletOps.errorMethodNotAllowed("POST") ;
-    }
-
-    @Override
-    protected void doPut(HttpAction action) {
-        ServletOps.errorMethodNotAllowed("PUT") ;
-    }
-
-    @Override
-    protected void doDelete(HttpAction action) {
-        ServletOps.errorMethodNotAllowed("DELETE") ;
-    }
-
-    @Override
-    protected void doPatch(HttpAction action) {
-        ServletOps.errorMethodNotAllowed("PATCH") ;
-    }
-}