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 2014/02/02 19:02:10 UTC

svn commit: r1563690 [2/2] - in /jena/branches/jena-fuseki-new-ui: src-dev/dev/ src/main/java/org/apache/jena/fuseki/ src/main/java/org/apache/jena/fuseki/async/ src/main/java/org/apache/jena/fuseki/authz/ src/main/java/org/apache/jena/fuseki/build/ sr...

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRegistry.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRegistry.java?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRegistry.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRegistry.java Sun Feb  2 18:02:09 2014
@@ -18,11 +18,18 @@
 
 package org.apache.jena.fuseki.server;
 
+import org.apache.commons.collections.FunctorException ;
 import org.apache.jena.fuseki.migrate.Registry ;
 
 // XXX rename
 public class DatasetRegistry extends Registry<DataAccessPoint>
 {
+    public static void register(String name, DataAccessPoint accessPt) {
+        if ( get().isRegistered(name) )
+            throw new FunctorException("Already registered: "+name) ;
+        get().put(name, accessPt);
+    }
+    
     private static DatasetRegistry singleton = new DatasetRegistry() ;
 
     public static DatasetRegistry get() { return singleton ; }

Added: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java?rev=1563690&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java Sun Feb  2 18:02:09 2014
@@ -0,0 +1,146 @@
+/**
+ * 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.StringReader ;
+import java.util.ArrayList ;
+import java.util.HashMap ;
+import java.util.List ;
+import java.util.Map ;
+
+import org.apache.jena.atlas.lib.DS ;
+import org.apache.jena.atlas.lib.FileOps ;
+import org.apache.jena.atlas.lib.InternalErrorException ;
+import org.apache.jena.fuseki.Fuseki ;
+import org.apache.jena.fuseki.FusekiConfigException ;
+import org.apache.jena.fuseki.build.Builder ;
+import org.apache.jena.fuseki.build.FusekiConfig ;
+import org.apache.jena.fuseki.build.Template ;
+import org.apache.jena.fuseki.build.TemplateFunctions ;
+import org.apache.jena.fuseki.servlets.ServletOps ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFDataMgr ;
+import org.apache.jena.riot.RDFLanguages ;
+
+import com.hp.hpl.jena.rdf.model.* ;
+import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+
+public class FusekiServer
+{
+    public static void init(ServerInitialConfig initialSetup, String configDir) {
+        FileOps.ensureDir(Fuseki.configDirName) ;
+        FileOps.ensureDir(Fuseki.systemFileArea) ;
+        
+        //FileOps.ensureDir(Fuseki.systemDatabaseName) ; 
+        // XXX Make relative.
+        
+
+        List<DataAccessPoint> configFileDBs = findDatasets(initialSetup) ;
+        List<DataAccessPoint> directoryDBs =  FusekiConfig.readConfigurationDirectory(configDir) ;
+        List<DataAccessPoint> systemDBs =     FusekiConfig.readSystemDatabase(SystemState.getDataset()) ;
+        
+        List<DataAccessPoint> datapoints = new ArrayList<DataAccessPoint>() ;
+        datapoints.addAll(configFileDBs) ;
+        datapoints.addAll(directoryDBs) ;
+        datapoints.addAll(systemDBs) ;
+        
+        // Having found them, set them all running.
+        enable(datapoints);
+    }
+
+    private static void enable(List<DataAccessPoint> datapoints) {
+        for ( DataAccessPoint dap : datapoints ) {
+            Fuseki.configLog.info("Register: "+dap.getName()) ;
+            DatasetRegistry.register(dap.getName(), dap); 
+        }
+    }
+
+    private static List<DataAccessPoint> findDatasets(ServerInitialConfig params) { 
+        // Has a side effect of global context setting
+        // when processing a config file.
+        // Compatibility.
+        
+        List<DataAccessPoint> datasets = DS.list() ;
+        if ( params == null )
+            return datasets ;
+
+        if ( params.fusekiConfigFile != null ) {
+            Fuseki.configLog.info("Configuration file: " + params.fusekiConfigFile) ;
+            List<DataAccessPoint> cmdLineDatasets = FusekiConfig.readConfigFile(params.fusekiConfigFile) ;
+            datasets.addAll(cmdLineDatasets) ;
+        } else if ( params.dsg != null ) {
+            DataAccessPoint dap = defaultConfiguration(params.datasetPath, params.dsg, params.allowUpdate) ;
+            datasets.add(dap) ;
+        } else if ( params.templateFile != null ) {
+            Fuseki.configLog.info("Template file: " + params.templateFile) ;
+            DataAccessPoint dap = configFromTemplate(params.templateFile, params.datasetPath) ;
+            datasets.add(dap) ;
+        } else
+            throw new FusekiConfigException("Invalid ServerInitialConfig") ;
+        return datasets ;
+    }
+    
+    private static DataAccessPoint configFromTemplate(String templateFile, String datasetPath) {
+        datasetPath = DataAccessPoint.canonical(datasetPath) ;
+        // DRY -- ActionDatasets (and others?)
+        Map<String, String> params = new HashMap<String, String>() ;
+        params.put(Template.NAME, datasetPath) ;
+        String str = TemplateFunctions.template(templateFile, params) ;
+        Lang lang = RDFLanguages.filenameToLang(str, Lang.TTL) ;
+        StringReader sr =  new StringReader(str) ;
+        Model model = ModelFactory.createDefaultModel() ;
+        RDFDataMgr.read(model, sr, datasetPath, lang);
+        
+        // Find DataAccessPoint
+        Statement stmt = getOne(model, null, FusekiVocab.pServiceName, null) ;
+        if ( stmt == null ) {
+            StmtIterator sIter = model.listStatements(null, FusekiVocab.pServiceName, (RDFNode)null ) ;
+            if ( ! sIter.hasNext() )
+                ServletOps.errorBadRequest("No name given in description of Fuseki service") ;
+            sIter.next() ;
+            if ( sIter.hasNext() )
+                ServletOps.errorBadRequest("Multiple names given in description of Fuseki service") ;
+            throw new InternalErrorException("Inconsistent: getOne didn't fail the second time") ;
+        }
+        Resource subject = stmt.getSubject() ;
+        DataAccessPoint dap = Builder.buildDataAccessPoint(subject) ;
+        return dap ;
+    }
+    
+    // DRY -- ActionDatasets (and others?)
+    private static Statement getOne(Model m, Resource s, Property p, RDFNode o) {
+        StmtIterator iter = m.listStatements(s, p, o) ;
+        if ( ! iter.hasNext() )
+            return null ;
+        Statement stmt = iter.next() ;
+        if ( iter.hasNext() )
+            return null ;
+        return stmt ;
+    }
+    
+    // ----
+    private static DataAccessPoint defaultConfiguration( String name, DatasetGraph dsg, boolean updatable) {
+        name = DataAccessPoint.canonical(name) ;
+        DataAccessPoint dap = new DataAccessPoint(name) ;
+        DataService ds = Builder.buildDataService(dsg, updatable) ;
+        dap.setDataService(ds) ;
+        return dap ;
+    }
+}
+

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java Sun Feb  2 18:02:09 2014
@@ -28,6 +28,7 @@ import javax.servlet.ServletContextListe
 import org.apache.jena.atlas.lib.DS ;
 import org.apache.jena.atlas.lib.FileOps ;
 import org.apache.jena.fuseki.Fuseki ;
+import org.apache.jena.fuseki.build.FusekiConfig ;
 import org.slf4j.Logger ;
 
 public class FusekiServletContextListener implements ServletContextListener {
@@ -46,7 +47,7 @@ public class FusekiServletContextListene
     // ----
     static public final String configDir = /* dir root + */ Fuseki.configDirName ;
     
-    private Boolean initialized = false ;
+    private volatile Boolean initialized = false ;
 
     @Override
     public void contextInitialized(ServletContextEvent sce) {
@@ -74,45 +75,13 @@ public class FusekiServletContextListene
             }
             
             if ( initialSetup != null ) {
-                //FileOps.ensureDir(Fuseki.systemDatabaseName) ; 
-                // XXX Make relative.
-                FileOps.ensureDir(Fuseki.configDirName) ;
-                FileOps.ensureDir(Fuseki.systemFileArea) ;
-                
-                // Places to look:
-                // 1 - Fuseki v1 config file (deprecated)
-                // 2 - Directory of assemblers files "assemblers"
-                // 3 - The system database
-                 
-                List<DataAccessPoint> configFileDBs = findDatasets(initialSetup) ;
-                List<DataAccessPoint> directoryDBs = FusekiConfig.readConfigurationDirectory(configDir) ;
-                List<DataAccessPoint> systemDBs = FusekiConfig.readSystemDatabase(SystemState.getDataset()) ;
-                
-                List<DataAccessPoint> datasets = new ArrayList<DataAccessPoint>() ;
-                datasets.addAll(configFileDBs) ;
-                datasets.addAll(directoryDBs) ;
-                datasets.addAll(systemDBs) ;
-                
-                // Having found them, set them all running.
-                FusekiConfig.configureDatasets(datasets);
+                FusekiServer.init(initialSetup, configDir) ;
+            } else {
+                Fuseki.serverLog.error("No configuration") ;
+                System.exit(0) ;
             }
+                
         }
     }
-    
-    private static List<DataAccessPoint> findDatasets(ServerInitialConfig params) {  
-        // Has a side effect of global context setting.
-
-        List<DataAccessPoint> datasets = DS.list() ;
-
-        if ( params.fusekiConfigFile != null ) {
-            Fuseki.configLog.info("Configuration file: " + params.fusekiConfigFile) ;
-            List<DataAccessPoint> cmdLineDatasets = FusekiConfig.readConfigFile(params.fusekiConfigFile) ;
-            datasets.addAll(cmdLineDatasets) ;
-        } else {
-            List<DataAccessPoint> cmdLineDatasets = FusekiConfig.defaultConfiguration(params) ;
-            datasets.addAll(cmdLineDatasets) ;
-        }
-        return datasets ;
-    }
 }
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java Sun Feb  2 18:02:09 2014
@@ -31,6 +31,7 @@ import javax.servlet.DispatcherType ;
 import org.apache.jena.atlas.lib.NotImplemented ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.FusekiException ;
+import org.apache.jena.fuseki.mgt.MgtJMX ;
 import org.apache.jena.fuseki.servlets.FusekiFilter ;
 import org.eclipse.jetty.security.* ;
 import org.eclipse.jetty.security.authentication.BasicAuthenticator ;
@@ -134,7 +135,7 @@ public class SPARQLServer {
         } catch (Exception ex) {
             Fuseki.serverLog.warn("SPARQLServer: Exception while stopping server: " + ex.getMessage(), ex) ;
         }
-        FusekiConfig.removeJMX() ;
+        MgtJMX.removeJMX() ;
     }
 
     /**

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java Sun Feb  2 18:02:09 2014
@@ -18,13 +18,23 @@
 
 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 dsg/datasetPath are null or fusekiConfigFile is null.
-    public DatasetGraph dsg               = null ;
-    public String datasetPath             = null ;
-    public boolean      allowUpdate       = false ;
-    public String       fusekiConfigFile  = null ;
+    // Either this ...
+    public String    templateFile     = null ;
+    public Map<String,String> params  = new HashMap<String,String>() ;
+    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 ;
+    
 }

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java Sun Feb  2 18:02:09 2014
@@ -65,7 +65,7 @@ public abstract class ActionSPARQL exten
             }
         } else {
             dataAccessPoint = null ;
-            dSrv = FusekiConfig.serviceOnlyDatasetRef() ;
+            dSrv = DataService.serviceOnlyDataService() ;
         }
 
         String uri = action.request.getRequestURI() ;

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java Sun Feb  2 18:02:09 2014
@@ -48,22 +48,21 @@ public class FusekiFilter implements Fil
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
         throws IOException, ServletException {
         try {
-            // See SPARQL_Servlet.execCommonWorker
             HttpServletRequest req = (HttpServletRequest)request ;
             HttpServletResponse resp = (HttpServletResponse)response ;
 
             // XXX Context path
-            // Put this somewhere.
             String x = request.getServletContext().getContextPath() ;
-            
-            
             String uri = req.getRequestURI() ;
             String datasetUri = ActionLib.mapRequestToDataset(uri) ;
 
+            // is it a long running operation?
+            // (this could be a separate filter)
+            
+            // is it a request to a DataService via an access point.
             if ( x != null )
                 datasetUri = datasetUri.substring(x.length()) ;
             
-            
             if ( datasetUri != null ) {        
                 if ( DatasetRegistry.get().isRegistered(datasetUri) ) {
                     // Intercept and redirect

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java Sun Feb  2 18:02:09 2014
@@ -27,7 +27,6 @@ import java.util.List ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
-import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.atlas.web.MediaType ;
 import org.apache.jena.fuseki.DEF ;
 import org.apache.jena.fuseki.FusekiException ;

Added: jena/branches/jena-fuseki-new-ui/templates/config-service
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/templates/config-service?rev=1563690&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/templates/config-service (added)
+++ jena/branches/jena-fuseki-new-ui/templates/config-service Sun Feb  2 18:02:09 2014
@@ -0,0 +1,23 @@
+# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+@prefix :        <#> .
+@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 ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+## ---------------------------------------------------------------
+## Read-only in-memory dataset - used as a default, dummy datasets
+
+<#service1> rdf:type fuseki:Service ;
+    fuseki:name                        "" ;
+    fuseki:serviceQuery                "sparql" ;
+    fuseki:serviceQuery                "query" ;
+    fuseki:serviceReadGraphStore       "get" ;
+    fuseki:dataset                     <#dataset> ;
+    .
+
+## In-memory, empty.
+<#dataset> rdf:type ja:RDFDataset .

Modified: jena/branches/jena-fuseki-new-ui/templates/config-tdb
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/templates/config-tdb?rev=1563690&r1=1563689&r2=1563690&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/templates/config-tdb (original)
+++ jena/branches/jena-fuseki-new-ui/templates/config-tdb Sun Feb  2 18:02:09 2014
@@ -31,6 +31,6 @@ tdb:GraphTDB    rdfs:subClassOf  ja:Mode
 
 <#tdb_dataset_readwrite> rdf:type      tdb:DatasetTDB ;
     tdb:location "databases/{NAME}" ;
-    ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "1000" ] ;
-    tdb:unionDefaultGraph true ;
+    ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "3000" ] ;
+    ##tdb:unionDefaultGraph true ;
     .

Added: jena/branches/jena-fuseki-new-ui/templates/config-tdb-dir
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/templates/config-tdb-dir?rev=1563690&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/templates/config-tdb-dir (added)
+++ jena/branches/jena-fuseki-new-ui/templates/config-tdb-dir Sun Feb  2 18:02:09 2014
@@ -0,0 +1,35 @@
+# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+@prefix :        <#> .
+@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 ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+# TDB
+[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
+tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
+tdb:GraphTDB    rdfs:subClassOf  ja:Model .
+
+## ---------------------------------------------------------------
+## Updatable TDB dataset with all services enabled.
+
+<#service_tdb_all> rdf:type fuseki:Service ;
+    rdfs:label                      "TDB {NAME}" ;
+    fuseki:name                     "{NAME}" ;
+    fuseki:serviceQuery             "query" ;
+    fuseki:serviceQuery             "sparql" ;
+    fuseki:serviceUpdate            "update" ;
+    fuseki:serviceUpload            "upload" ;
+    fuseki:serviceReadWriteGraphStore      "data" ;
+    # A separate read-only graph store endpoint:
+    fuseki:serviceReadGraphStore       "get" ;
+    fuseki:dataset           <#tdb_dataset_readwrite> ;
+    
+    .
+
+<#tdb_dataset_readwrite> rdf:type      tdb:DatasetTDB ;
+    tdb:location "{DIR}" ;
+    ##tdb:unionDefaultGraph true ;
+    .

Added: jena/branches/jena-fuseki-new-ui/templates/config-tdb-mem
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/templates/config-tdb-mem?rev=1563690&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/templates/config-tdb-mem (added)
+++ jena/branches/jena-fuseki-new-ui/templates/config-tdb-mem Sun Feb  2 18:02:09 2014
@@ -0,0 +1,36 @@
+# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+@prefix :        <#> .
+@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 ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+# TDB
+[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
+tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
+tdb:GraphTDB    rdfs:subClassOf  ja:Model .
+
+## ---------------------------------------------------------------
+## Updatable TDB dataset with all services enabled.
+
+<#service_tdb_all> rdf:type fuseki:Service ;
+    rdfs:label                      "TDB {NAME}" ;
+    fuseki:name                     "{NAME}" ;
+    fuseki:serviceQuery             "query" ;
+    fuseki:serviceQuery             "sparql" ;
+    fuseki:serviceUpdate            "update" ;
+    fuseki:serviceUpload            "upload" ;
+    fuseki:serviceReadWriteGraphStore      "data" ;
+    # A separate read-only graph store endpoint:
+    fuseki:serviceReadGraphStore       "get" ;
+    fuseki:dataset           <#tdb_dataset_readwrite> ;
+    
+    .
+
+<#tdb_dataset_readwrite> rdf:type      tdb:DatasetTDB ;
+    tdb:location "--mem--" ;
+    ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "1000" ] ;
+    # tdb:unionDefaultGraph true ;
+    .