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/01/29 13:16:13 UTC
svn commit: r1562426 [1/2] - in /jena/branches/jena-fuseki-new-ui:
src-dev/dev/ src/main/java/org/apache/jena/fuseki/mgt/
src/main/java/org/apache/jena/fuseki/server/
src/main/java/org/apache/jena/fuseki/servlets/
src/test/java/org/apache/jena/fuseki/
Author: andy
Date: Wed Jan 29 12:16:12 2014
New Revision: 1562426
URL: http://svn.apache.org/r1562426
Log:
Separate URI naming from dataset+services
Added:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/Operation.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/OperationName.java
Removed:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/ServiceRef.java
Modified:
jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java
jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionBackup.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionCtl.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/ (props changed)
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/CounterName.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRegistry.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java
Modified: jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java (original)
+++ jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java Wed Jan 29 12:16:12 2014
@@ -20,49 +20,27 @@ package dev;
public class PROJECT {
// Backup
-
+ // Access point stats? HTTP stats?
// Create dataset - check for existing.
+ // Timeouts
+ // Active/offline - names of data services?
+ // Operation to have several endpoints?
+ // Need Operation and "OperationInstance" = endpoint.
+ // OperationName == Operation Type?
+ // Check variable nameds on DataAccessPoint, DataService, Operation
+ // Per HTTP operation counters
+ // Counters interface ->
+ // Add to other things? e.g. DatseService
+ // HTTP stats
+ // Per service timeouts. e.g.
+ // Per service context setting e.g. timeouts, tdb:unionDefaultGraph
+ // SPARQL_Query.setAnyTimeouts
-
-// Add DS1
-// Add DS2
-// Add symbolic link
-// Offline DS2
-//
-// ==>
-// check offlining works.
-// how do we manage assembler descriptions?
-// System database is only status + link to assembler?
-
- // Naming
- // fuseki:Service is the endpoints = dataset
- // DataService :
+ // Testing - all in-mmeory
+ // Don't save assemblers
// Shiro - log failures
- // DatasetRef -> DataService
- // DataService has "target"
-
- // DSG_Switchable does not work : need to access underlying DB by name.
- // ==>
- // [] a fuseki:Service, fuseki:Switchable ;
- // fuseki:name1 "" ;
- // fuseki:name2 "" ;
- // .
-
- // Assembler for switchable?
- // Still need to be able to contact each subDSG for update?
- // OR assume just active/offline?
-
- // DatasetGraphSwitchable(dsg1, dsg2) + assembler.
- // NB The need to query the right DSG
-
- // Stats need to chase down links?
-
- // Chase down DatasetRef.getDataset and split into "for action" (follows link) and not
- // Where do the stats go?
- // If we want
-
/* Use of:
<context-param>
<param-name>org.apache.jena.fuseki.config</param-name>
Modified: jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java (original)
+++ jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java Wed Jan 29 12:16:12 2014
@@ -18,6 +18,7 @@
package dev;
+import org.apache.jena.atlas.lib.FileOps ;
import org.apache.jena.fuseki.FusekiCmd ;
public class RunFuseki2
@@ -29,15 +30,13 @@ public class RunFuseki2
main1() ;
}
- public static void demo()
- {
+ public static void demo() {
String DIR="DemoServer" ;
FusekiCmd.main("--config="+name(DIR,"config.ttl"), "--pages="+name(DIR, "demo-pages")) ;
System.exit(0) ;
}
- public static String name(String DIR, String filename)
- {
+ public static String name(String DIR, String filename) {
StringBuilder sb = new StringBuilder() ;
if ( ! filename.startsWith("/") )
{
@@ -49,8 +48,11 @@ public class RunFuseki2
return sb.toString() ;
}
- private static void main1()
- {
+ private static void main1() {
+ // Clean server state?
+ if ( true )
+ FileOps.clearDirectory("system") ;
+
String tmpdir = System.getenv("TMPDIR") ;
if ( tmpdir == null )
tmpdir = System.getenv("TMP") ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionBackup.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionBackup.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionBackup.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionBackup.java Wed Jan 29 12:16:12 2014
@@ -34,7 +34,8 @@ import org.apache.jena.atlas.lib.FileOps
import org.apache.jena.atlas.logging.Log ;
import org.apache.jena.fuseki.FusekiException ;
import org.apache.jena.fuseki.FusekiLib ;
-import org.apache.jena.fuseki.server.DatasetRef ;
+import org.apache.jena.fuseki.server.DataAccessPoint ;
+import org.apache.jena.fuseki.server.DataService ;
import org.apache.jena.fuseki.server.DatasetRegistry ;
import org.apache.jena.fuseki.servlets.HttpAction ;
import org.apache.jena.fuseki.servlets.ServletOps ;
@@ -81,8 +82,10 @@ public class ActionBackup extends Action
return ;
}
- DatasetRef ref = DatasetRegistry.get().get(dataset) ;
- action.setRequestRef(ref, dataset) ;
+ DataAccessPoint dataAccessPoint = DatasetRegistry.get().get(dataset) ;
+ DataService dSrv = dataAccessPoint.getDataService() ;
+ action.setControlRequest(dataAccessPoint, dataset) ;
+ action.setOperation(null, null) ; // No operation or service name.
scheduleBackup(action) ;
ServletOps.success(action) ;
}
@@ -90,7 +93,7 @@ public class ActionBackup extends Action
static final String BackupArea = "backups" ;
private void scheduleBackup(final HttpAction action) {
- String dsName = action.dsRef.name ;
+ String dsName = action.getDatasetName() ;
final String ds = dsName.startsWith("/") ? dsName : "/" + dsName ;
String timestamp = Utils.nowAsString("yyyy-MM-dd_HH-mm-ss") ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionCtl.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionCtl.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionCtl.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionCtl.java Wed Jan 29 12:16:12 2014
@@ -19,8 +19,10 @@
package org.apache.jena.fuseki.mgt;
import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.fuseki.server.DatasetRef ;
+import org.apache.jena.fuseki.server.DataAccessPoint ;
+import org.apache.jena.fuseki.server.DataService ;
import org.apache.jena.fuseki.server.DatasetRegistry ;
+import org.apache.jena.fuseki.server.FusekiConfig ;
import org.apache.jena.fuseki.servlets.ActionBase ;
import org.apache.jena.fuseki.servlets.HttpAction ;
import org.apache.jena.fuseki.servlets.ServletOps ;
@@ -32,22 +34,24 @@ public abstract class ActionCtl extends
@Override
final
- protected void execCommonWorker(HttpAction action)
- {
- DatasetRef dsRef = null ;
- String dsURI = mapRequestToDatasetName(action) ;
- if ( dsURI != null ) {
- dsRef = DatasetRegistry.get().get(dsURI) ;
- if ( dsRef == null )
- ServletOps.errorNotFound("Not found: "+dsURI) ;
+ protected void execCommonWorker(HttpAction action) {
+ DataAccessPoint dataAccessPoint = null ;
+ DataService dSrv = null ;
+ String datasetUri = mapRequestToDatasetName(action) ;
+ if ( datasetUri != null ) {
+ dataAccessPoint = DatasetRegistry.get().get(datasetUri) ;
+ if ( dataAccessPoint == null )
+ ServletOps.errorNotFound("Not found: "+datasetUri) ;
}
else {
// This is a placeholder when creating new DatasetRefs
// and also if addressing a container, not a dataset
- dsRef = DatasetRef.nullRef() ;
+ dataAccessPoint = null ;
+ dSrv = FusekiConfig.serviceOnlyDatasetRef() ;
}
- action.setControlRef(dsRef, dsURI) ;
+ action.setControlRequest(dataAccessPoint, datasetUri) ;
+ action.setOperation(null, null) ; // No operation or service name.
executeAction(action) ;
}
@@ -94,7 +98,7 @@ public abstract class ActionCtl extends
final
protected boolean isContainerAction(HttpAction action) {
- return (action.dsRef.name == null ) ;
+ return (action.getDataAccessPoint() == null ) ;
}
protected abstract void perform(HttpAction action) ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java Wed Jan 29 12:16:12 2014
@@ -149,12 +149,11 @@ public class ActionDatasets extends Acti
}
private JsonValue execGetDataset(HttpAction action) {
- action.log.info(format("[%d] GET dataset %s", action.id, action.dsRef.name)) ;
+ action.log.info(format("[%d] GET dataset %s", action.id, action.getDatasetName())) ;
JsonBuilder builder = new JsonBuilder() ;
- String datasetPath = DatasetRef.canonicalDatasetPath(action.dsRef.name) ;
- DatasetRef dsDesc = DatasetRegistry.get().get(datasetPath) ;
+ DataAccessPoint dsDesc = DatasetRegistry.get().get(action.getDatasetName()) ;
if ( dsDesc == null )
- ServletOps.errorNotFound("Not found: dataset "+action.dsRef.name);
+ ServletOps.errorNotFound("Not found: dataset "+action.getDatasetName());
JsonDescription.describe(builder, dsDesc) ;
return builder.build() ;
}
@@ -172,15 +171,19 @@ public class ActionDatasets extends Acti
}
private void execPostDataset(HttpAction action) {
- String name = action.dsRef.name ;
+ String name = action.getDatasetName() ;
if ( name == null )
- name = "" ;
+ name = "''" ;
action.log.info(format("[%d] POST dataset %s", action.id, name)) ;
-// if ( action.dsRef.getDataset() == null )
-// ServletOps.errorNotFound("Not found: dataset "+action.dsRef.name);
+ if ( action.getDataAccessPoint() == null )
+ ServletOps.errorNotFound("Not found: dataset "+action.getDatasetName());
+
+ DataService dSrv = action.getDataService() ;
+ if ( dSrv == null )
+ // If not set explicitly, take from DataAccessPoint
+ dSrv = action.getDataAccessPoint().getDataService() ;
- DatasetRef dsDesc = action.dsRef ;
String s = action.request.getParameter("state") ;
if ( s == null || s.isEmpty() )
ServletOps.errorBadRequest("No state change given") ;
@@ -189,19 +192,30 @@ public class ActionDatasets extends Acti
if ( s.equalsIgnoreCase("active") ) {
action.log.info(format("[%d] REBUILD DATASET %s", action.id, name)) ;
setDatasetState(name, FusekiVocab.stateActive) ;
+ dSrv.goActive() ;
// DatasetGraph dsg = ???? ;
- //dsDesc.activate(dsg) ;
- dsDesc.activate() ;
+ //dSrv.activate(dsg) ;
+ //dSrv.activate() ;
} else if ( s.equalsIgnoreCase("offline") ) {
- setDatasetState(name, FusekiVocab.stateOffline) ;
- dsDesc.offline() ;
- } else
- ServletOps.errorBadRequest("New state '"+s+"' not recognized");
+ action.log.info(format("[%d] OFFLINE DATASET %s", action.id, name)) ;
+ DataAccessPoint access = action.getDataAccessPoint() ;
+ //access.goOffline() ;
+ dSrv.goOffline() ; // Affects the target of the name.
+ setDatasetState(name, FusekiVocab.stateOffline) ;
+ //dSrv.offline() ;
+ } else if ( s.equalsIgnoreCase("unlink") ) {
+ action.log.info(format("[%d] UNLINK ACCESS NAME %s", action.id, name)) ;
+ DataAccessPoint access = action.getDataAccessPoint() ;
+ ServletOps.errorNotImplemented("unlink: dataset"+action.getDatasetName());
+ //access.goOffline() ;
+ // Registry?
+ }
+ else
+ ServletOps.errorBadRequest("State change operation '"+s+"' not recognized");
ServletOps.success(action) ;
}
private void execPostContainer(HttpAction action) {
-
JenaUUID uuid = JenaUUID.generate() ;
String newURI = uuid.asURI() ;
Node gn = NodeFactory.createURI(newURI) ;
@@ -247,7 +261,7 @@ public class ActionDatasets extends Acti
action.log.warn(format("[%d] Service name '%s' is not a string", action.id, FmtUtils.stringForRDFNode(object)));
String datasetName = object.getLexicalForm() ;
- String datasetPath = DatasetRef.canonicalDatasetPath(datasetName) ;
+ String datasetPath = DataAccessPoint.canonical(datasetName) ;
action.log.info(format("[%d] Create database : name = %s", action.id, datasetPath)) ;
if ( DatasetRegistry.get().isRegistered(datasetPath) )
@@ -258,8 +272,8 @@ public class ActionDatasets extends Acti
model.add(subject, pStatus, FusekiVocab.stateActive) ;
// Need to be in Resource space at this point.
- DatasetRef dsRef = FusekiConfig.processService(subject) ;
- FusekiConfig.registerDataset(datasetPath, dsRef) ;
+ DataAccessPoint ref = FusekiConfig.processService(subject) ;
+ FusekiConfig.registerDataset(datasetPath, ref) ;
action.getResponse().setContentType(WebContent.contentTypeTextPlain);
ServletOutputStream out = action.getResponse().getOutputStream() ;
out.println("That went well") ;
@@ -308,7 +322,7 @@ public class ActionDatasets extends Acti
protected void execDelete(HttpAction action) {
// Does not exist?
- String name = action.dsRef.name ;
+ String name = action.getDatasetName() ;
if ( name == null )
name = "" ;
action.log.info(format("[%d] DELETE ds=%s", action.id, name)) ;
@@ -324,9 +338,9 @@ public class ActionDatasets extends Acti
systemDSG.begin(ReadWrite.WRITE) ;
boolean committed =false ;
try {
- DatasetRef dsRef = DatasetRegistry.get().get(name) ;
+ DataAccessPoint ref = DatasetRegistry.get().get(name) ;
// Redo check inside transaction.
- if ( dsRef == null )
+ if ( ref == null )
ServletOps.errorNotFound("No such dataset registered: "+name);
// Name to graph
@@ -335,9 +349,8 @@ public class ActionDatasets extends Acti
ServletOps.errorBadRequest("Failed to find dataset for '"+name+"'");
Node gn = q.getGraph() ;
- dsRef.gracefulShutdown() ;
+ action.log.info("SHUTDOWN NEEDED");
DatasetRegistry.get().remove(name) ;
- // XXX or set to state deleted.
systemDSG.deleteAny(gn, null, null, null) ;
systemDSG.commit() ;
committed = true ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java Wed Jan 29 12:16:12 2014
@@ -49,7 +49,7 @@ public class ActionStats extends ActionC
protected void execGet(HttpAction action) {
JsonValue v ;
- if (action.dsRef.name == null )
+ if (action.getDatasetName() == null )
v = execGetContainer(action) ;
else
v = execGetDataset(action) ;
@@ -87,10 +87,10 @@ public class ActionStats extends ActionC
}
private JsonValue execGetDataset(HttpAction action) {
- action.log.info(format("[%d] GET stats dataset %s", action.id, action.dsRef.name)) ;
+ action.log.info(format("[%d] GET stats dataset %s", action.id, action.getDatasetName())) ;
JsonBuilder builder = new JsonBuilder() ;
- String datasetPath = DatasetRef.canonicalDatasetPath(action.dsRef.name) ;
+ String datasetPath = DataAccessPoint.canonical(action.getDatasetName()) ;
builder.startObject("TOP") ;
builder.key("datasets") ;
@@ -106,24 +106,26 @@ public class ActionStats extends ActionC
// Object started
builder.key(ds) ;
- DatasetRef desc = DatasetRegistry.get().get(ds) ;
+ DataAccessPoint access = DatasetRegistry.get().get(ds) ;
+ DataService dSrv = access.getDataService() ;
builder.startObject("counters") ;
- builder.key(CounterName.Requests.name()).value(desc.getCounters().value(CounterName.Requests)) ;
- builder.key(CounterName.RequestsGood.name()).value(desc.getCounters().value(CounterName.RequestsGood)) ;
- builder.key(CounterName.RequestsBad.name()).value(desc.getCounters().value(CounterName.RequestsBad)) ;
+ builder.key(CounterName.Requests.name()).value(dSrv.getCounters().value(CounterName.Requests)) ;
+ builder.key(CounterName.RequestsGood.name()).value(dSrv.getCounters().value(CounterName.RequestsGood)) ;
+ builder.key(CounterName.RequestsBad.name()).value(dSrv.getCounters().value(CounterName.RequestsBad)) ;
builder.key("services").startObject("services") ;
- for ( ServiceRef srvRef : desc.getServiceRefs() ) {
- builder.key(srvRef.name).startObject("service") ;
- statsService(builder, srvRef) ;
-
+ for ( Operation operation : dSrv.getOperations() ) {
+ builder.key(operation.getEndpoint()).startObject("service") ;
+ statsService(builder, operation) ;
builder.key("endpoints") ;
+ // SHARE WITH ActionDataset.
builder.startArray() ;
- for ( String ep : srvRef.endpoints)
- builder.value(ep) ;
+ builder.value(operation.endpointName) ;
+// for ( String ep : operation.endpoints)
+// builder.value(ep) ;
builder.finishArray() ;
builder.finishObject("service") ;
@@ -133,9 +135,9 @@ public class ActionStats extends ActionC
}
- private void statsService(JsonBuilder builder, ServiceRef srvRef) {
- for (CounterName cn : srvRef.getCounters().counters()) {
- Counter c = srvRef.getCounters().get(cn) ;
+ private void statsService(JsonBuilder builder, Operation operation) {
+ for (CounterName cn : operation.getCounters().counters()) {
+ Counter c = operation.getCounters().get(cn) ;
builder.key(cn.name()).value(c.value()) ;
}
}
@@ -150,50 +152,56 @@ public class ActionStats extends ActionC
while(iter.hasNext())
{
String ds = iter.next() ;
- DatasetRef desc = DatasetRegistry.get().get(ds) ;
+ DataAccessPoint desc = DatasetRegistry.get().get(ds) ;
statsTxt(out, desc) ;
if ( iter.hasNext() )
out.println() ;
}
out.flush() ;
}
- private void statsTxt(ServletOutputStream out, DatasetRef desc) throws IOException
+
+ private void statsTxt(ServletOutputStream out, DataAccessPoint desc) throws IOException
{
- out.println("Dataset: "+desc.name) ;
- out.println(" Requests = "+desc.getCounters().value(CounterName.Requests)) ;
- out.println(" Good = "+desc.getCounters().value(CounterName.RequestsGood)) ;
- out.println(" Bad = "+desc.getCounters().value(CounterName.RequestsBad)) ;
+ DataService dSrv = desc.getDataService() ;
+ out.println("Dataset: "+desc.getName()) ;
+ out.println(" Requests = "+dSrv.getCounters().value(CounterName.Requests)) ;
+ out.println(" Good = "+dSrv.getCounters().value(CounterName.RequestsGood)) ;
+ out.println(" Bad = "+dSrv.getCounters().value(CounterName.RequestsBad)) ;
out.println(" SPARQL Query:") ;
- out.println(" Request = "+desc.query.getCounters().value(CounterName.Requests)) ;
- out.println(" Good = "+desc.query.getCounters().value(CounterName.RequestsGood)) ;
- out.println(" Bad requests = "+desc.query.getCounters().value(CounterName.RequestsBad)) ;
- out.println(" Timeouts = "+desc.query.getCounters().value(CounterName.QueryTimeouts)) ;
- out.println(" Bad exec = "+desc.query.getCounters().value(CounterName.QueryExecErrors)) ;
+ out.println(" Request = "+counter(dSrv, OperationName.Query, CounterName.Requests)) ;
+ out.println(" Good = "+counter(dSrv, OperationName.Query, CounterName.RequestsGood)) ;
+ out.println(" Bad requests = "+counter(dSrv, OperationName.Query, CounterName.RequestsBad)) ;
+ out.println(" Timeouts = "+counter(dSrv, OperationName.Query, CounterName.QueryTimeouts)) ;
+ out.println(" Bad exec = "+counter(dSrv, OperationName.Query, CounterName.QueryExecErrors)) ;
out.println(" SPARQL Update:") ;
- out.println(" Request = "+desc.update.getCounters().value(CounterName.Requests)) ;
- out.println(" Good = "+desc.update.getCounters().value(CounterName.RequestsGood)) ;
- out.println(" Bad requests = "+desc.update.getCounters().value(CounterName.RequestsBad)) ;
- out.println(" Bad exec = "+desc.update.getCounters().value(CounterName.UpdateExecErrors)) ;
+ out.println(" Request = "+counter(dSrv, OperationName.Update, CounterName.Requests)) ;
+ out.println(" Good = "+counter(dSrv, OperationName.Update, CounterName.RequestsGood)) ;
+ out.println(" Bad requests = "+counter(dSrv, OperationName.Update, CounterName.RequestsBad)) ;
+ out.println(" Bad exec = "+counter(dSrv, OperationName.Update, CounterName.UpdateExecErrors)) ;
out.println(" Upload:") ;
- out.println(" Requests = "+desc.upload.getCounters().value(CounterName.Requests)) ;
- out.println(" Good = "+desc.upload.getCounters().value(CounterName.RequestsGood)) ;
- out.println(" Bad = "+desc.upload.getCounters().value(CounterName.RequestsBad)) ;
+ out.println(" Requests = "+counter(dSrv, OperationName.Upload, CounterName.Requests)) ;
+ out.println(" Good = "+counter(dSrv, OperationName.Upload, CounterName.RequestsGood)) ;
+ out.println(" Bad = "+counter(dSrv, OperationName.Upload, CounterName.RequestsBad)) ;
out.println(" SPARQL Graph Store Protocol:") ;
- out.println(" GETs = "+gspValue(desc, CounterName.GSPget)+ " (good="+gspValue(desc, CounterName.GSPgetGood)+"/bad="+gspValue(desc, CounterName.GSPgetBad)+")") ;
- out.println(" PUTs = "+gspValue(desc, CounterName.GSPput)+ " (good="+gspValue(desc, CounterName.GSPputGood)+"/bad="+gspValue(desc, CounterName.GSPputBad)+")") ;
- out.println(" POSTs = "+gspValue(desc, CounterName.GSPpost)+ " (good="+gspValue(desc, CounterName.GSPpostGood)+"/bad="+gspValue(desc, CounterName.GSPpostBad)+")") ;
- out.println(" DELETEs = "+gspValue(desc, CounterName.GSPdelete)+ " (good="+gspValue(desc, CounterName.GSPdeleteGood)+"/bad="+gspValue(desc, CounterName.GSPdeleteBad)+")") ;
- out.println(" HEADs = "+gspValue(desc, CounterName.GSPhead)+ " (good="+gspValue(desc, CounterName.GSPheadGood)+"/bad="+gspValue(desc, CounterName.GSPheadBad)+")") ;
+ out.println(" GETs = "+gspValue(dSrv, CounterName.HTTPget)+ " (good="+gspValue(dSrv, CounterName.HTTPgetGood)+"/bad="+gspValue(dSrv, CounterName.HTTPGetBad)+")") ;
+ out.println(" PUTs = "+gspValue(dSrv, CounterName.HTTPput)+ " (good="+gspValue(dSrv, CounterName.HTTPputGood)+"/bad="+gspValue(dSrv, CounterName.HTTPputBad)+")") ;
+ out.println(" POSTs = "+gspValue(dSrv, CounterName.HTTPpost)+ " (good="+gspValue(dSrv, CounterName.HTTPpostGood)+"/bad="+gspValue(dSrv, CounterName.HTTPpostBad)+")") ;
+ out.println(" DELETEs = "+gspValue(dSrv, CounterName.HTTPdelete)+ " (good="+gspValue(dSrv, CounterName.HTTPdeleteGood)+"/bad="+gspValue(dSrv, CounterName.HTTPdeleteBad)+")") ;
+ out.println(" HEADs = "+gspValue(dSrv, CounterName.HTTPhead)+ " (good="+gspValue(dSrv, CounterName.HTTPheadGood)+"/bad="+gspValue(dSrv, CounterName.HTTPheadBad)+")") ;
+ }
+
+ private long counter(DataService dSrv, OperationName opName, CounterName cName) {
+ return 0 ;
}
- private long gspValue(DatasetRef desc, CounterName cn) {
- long x1 = desc.readGraphStore.getCounters().value(cn) ;
- long x2 = desc.readWriteGraphStore.getCounters().value(cn) ;
- return x1+x2 ;
+ private long gspValue(DataService dSrv, CounterName cn) {
+ // XXX Check
+ return counter(dSrv, OperationName.GSP, cn) +
+ counter(dSrv, OperationName.GSP_R, cn) ;
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java Wed Jan 29 12:16:12 2014
@@ -19,9 +19,9 @@
package org.apache.jena.fuseki.mgt;
import org.apache.jena.atlas.json.JsonBuilder ;
-import org.apache.jena.fuseki.server.DatasetRef ;
+import org.apache.jena.fuseki.server.DataAccessPoint ;
import org.apache.jena.fuseki.server.DatasetRegistry ;
-import org.apache.jena.fuseki.server.ServiceRef ;
+import org.apache.jena.fuseki.server.Operation ;
/** Create a description of a service */
public class JsonDescription {
@@ -35,38 +35,38 @@ public class JsonDescription {
public static void arrayDatasets(JsonBuilder builder, DatasetRegistry registry) {
builder.startArray() ;
for ( String ds : registry.keys() ) {
- DatasetRef desc = DatasetRegistry.get().get(ds) ;
- JsonDescription.describe(builder, desc) ;
+ DataAccessPoint access = DatasetRegistry.get().get(ds) ;
+ JsonDescription.describe(builder, access) ;
}
builder.finishArray() ;
}
- public static void describe(JsonBuilder builder, ServiceRef serviceref) {
+ public static void describe(JsonBuilder builder, DataAccessPoint access) {
builder.startObject() ;
+ builder.key(dsName).value(access.getName()) ;
- builder.key(srvType).value(serviceref.name) ;
-
- builder.key(srvEndpoints) ;
+ builder.key(dsService) ;
builder.startArray() ;
- for ( String ep : serviceref.endpoints )
- builder.value(ep) ;
+ for ( Operation sRef : access.getDataService().getOperations() )
+ describe(builder, sRef) ;
builder.finishArray() ;
-
builder.finishObject() ;
}
- public static void describe(JsonBuilder builder, DatasetRef ds) {
-
+
+ public static void describe(JsonBuilder builder, Operation operation) {
builder.startObject() ;
- builder.key(dsName).value(ds.getName()) ;
-
- builder.key(dsService) ;
+ builder.key(srvType).value(operation.getName().name) ;
+
+ //Group same operation type?
+ builder.key(srvEndpoints) ;
builder.startArray() ;
- for ( ServiceRef sRef : ds.getServiceRefs() )
- describe(builder, sRef) ;
+ builder.value(operation.endpointName) ;
builder.finishArray() ;
+
builder.finishObject() ;
}
+
}
Propchange: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Jan 29 12:16:12 2014
@@ -0,0 +1,3 @@
+CounterSetLib.java
+DataAccessPoint.java
+DataService.java
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/CounterName.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/CounterName.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/CounterName.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/CounterName.java Wed Jan 29 12:16:12 2014
@@ -20,8 +20,9 @@ package org.apache.jena.fuseki.server;
/** Names for all counters */
public enum CounterName {
- // There are generic names - apply to all services and datasets
- // and specific ones.
+ // There are generic names - apply to all services and datasets - and
+ // also specific ones that relate only to a particular kind of service.
+ // By having a fixed list, we
// Total request received
@@ -44,40 +45,41 @@ public enum CounterName {
// Upload ... standard counters
- // Graph Store Protocol.
+ // Graph Store Protocol. uses HTTP codes.
// For each HTTP method
- GSPget("gsp.get.requests") ,
- GSPgetGood("gsp.get.requests.good") ,
- GSPgetBad("gsp.get.requests.bad") ,
-
- GSPpost("gsp.post.requests") ,
- GSPpostGood("gsp.post.requests.good") ,
- GSPpostBad("gsp.post.requests.bad") ,
-
- GSPdelete("gsp.delete.requests") ,
- GSPdeleteGood("gsp.delete.requests.good") ,
- GSPdeleteBad("gsp.delete.requests.bad") ,
-
- GSPput("gsp.put.requests") ,
- GSPputGood("gsp.put.requests.good") ,
- GSPputBad("gsp.put.requests.bad") ,
-
- GSPhead("gsp.head.requests") ,
- GSPheadGood("gsp.head.requests.good") ,
- GSPheadBad("gsp.head.requests.bad") ,
-
- GSPpatch("gsp.patch.requests") ,
- GSPpatchGood("gsp.patch.requests.good") ,
- GSPpatchBad("gsp.patch.requests.bad") ,
-
- GSPoptions("gsp.options.requests") ,
- GSPoptionsGood("gsp.options.requests.good") ,
- GSPoptionsBad("gsp.options.requests.bad") ,
+
+ HTTPget("http.get.requests") ,
+ HTTPgetGood("http.get.requests.good") ,
+ HTTPGetBad("http.get.requests.bad") ,
+
+ HTTPpost("http.post.requests") ,
+ HTTPpostGood("http.post.requests.good") ,
+ HTTPpostBad("http.post.requests.bad") ,
+
+ HTTPdelete("http.delete.requests") ,
+ HTTPdeleteGood("http.delete.requests.good") ,
+ HTTPdeleteBad("http.delete.requests.bad") ,
+
+ HTTPput("http.put.requests") ,
+ HTTPputGood("http.put.requests.good") ,
+ HTTPputBad("http.put.requests.bad") ,
+
+ HTTPhead("http.head.requests") ,
+ HTTPheadGood("http.head.requests.good") ,
+ HTTPheadBad("http.head.requests.bad") ,
+
+ HTTPpatch("http.patch.requests") ,
+ HTTPpatchGood("http.patch.requests.good") ,
+ HTTPpatchBad("http.patch.requests.bad") ,
+
+ HTTPoptions("http.options.requests") ,
+ HTTPoptionsGood("http.options.requests.good") ,
+ HTTPoptionsBad("http.options.requests.bad") ,
;
- private String name ;
+ public final String name ;
private CounterName(String name) { this.name = name ; }
}
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=1562426&r1=1562425&r2=1562426&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 Wed Jan 29 12:16:12 2014
@@ -20,7 +20,8 @@ package org.apache.jena.fuseki.server;
import org.apache.jena.fuseki.migrate.Registry ;
-public class DatasetRegistry extends Registry<DatasetRef>
+// XXX rename
+public class DatasetRegistry extends Registry<DataAccessPoint>
{
private static DatasetRegistry singleton = new DatasetRegistry() ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java Wed Jan 29 12:16:12 2014
@@ -43,11 +43,7 @@ import com.hp.hpl.jena.assembler.JA ;
import com.hp.hpl.jena.query.* ;
import com.hp.hpl.jena.rdf.model.* ;
import com.hp.hpl.jena.shared.PrefixMapping ;
-import com.hp.hpl.jena.sparql.core.DatasetGraph ;
-import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
-import com.hp.hpl.jena.sparql.core.DatasetGraphReadOnly ;
import com.hp.hpl.jena.sparql.core.assembler.AssemblerUtils ;
-import com.hp.hpl.jena.sparql.mgt.ARQMgt ;
import com.hp.hpl.jena.update.UpdateAction ;
import com.hp.hpl.jena.update.UpdateFactory ;
import com.hp.hpl.jena.update.UpdateRequest ;
@@ -78,48 +74,35 @@ public class FusekiConfig {
// ---- DatasetRef used where there isn't a real Dataset e.g. the SPARQL processor.
- private static DatasetGraph dummyDSG = new DatasetGraphReadOnly(DatasetGraphFactory.createMemFixed()) ;
-
- private static DatasetRef noDataset = DatasetRef.create("", dummyDSG) ;
-
- static {
- noDataset.query.endpoints.add(DEF.ServiceQuery) ;
- noDataset.query.endpoints.add(DEF.ServiceQueryAlt) ;
- noDataset.allowDatasetUpdate = false ;
- noDataset.activate() ;
- // Don't register it.
- // This is used as a placeholder and shoudl not be found by
- // "all datasets"
- // DatasetRegistry.get().put("", noDataset) ;
- }
-
- // ---- DatasetRef used where there isn't a real Dataset e.g. the SPARQL processor.
-
/**
- * Return the DatasetRef (read-only) for when there is no dataset, just a
+ * Return the DataService (read-only) for when there is no dataset, just a
* SPARQL Query processor
*/
- public static DatasetRef serviceOnlyDatasetRef() {
- return noDataset ;
+ public static DataService serviceOnlyDatasetRef() {
+ return DataService.dummy ;
}
/** Setup the server configuration based on ServerInitialConfig (from command line) */
- public static List<DatasetRef> defaultConfiguration(ServerInitialConfig params) {
+ public static List<DataAccessPoint> defaultConfiguration(ServerInitialConfig params) {
if ( params.fusekiConfigFile != null )
log.warn("Configuration file found while processing command line dataset configuration") ;
- DatasetRef dbDesc = DatasetRef.create(params.datasetPath, params.dsg) ;
- dbDesc.query.endpoints.add(DEF.ServiceQuery) ;
- dbDesc.query.endpoints.add(DEF.ServiceQueryAlt) ;
-
+ // Use a template assembler.
+
+ DataService dbSvc = DataService.create(params.dsg) ;
+ DataAccessPoint dataAccess = new DataAccessPoint(params.datasetPath) ;
+ dataAccess.setDataService(dbSvc);
+ dbSvc.addEndpoint(OperationName.Query, DEF.ServiceQuery);
+ dbSvc.addEndpoint(OperationName.Query, DEF.ServiceQueryAlt) ;
+
if ( params.allowUpdate ) {
- dbDesc.update.endpoints.add(DEF.ServiceUpdate) ;
- dbDesc.upload.endpoints.add(DEF.ServiceUpload) ;
- dbDesc.readWriteGraphStore.endpoints.add(DEF.ServiceData) ;
- dbDesc.allowDatasetUpdate = true ;
+ dbSvc.addEndpoint(OperationName.Update, DEF.ServiceUpdate) ;
+ dbSvc.addEndpoint(OperationName.Upload, DEF.ServiceUpload) ;
+ dbSvc.addEndpoint(OperationName.GSP, DEF.ServiceData) ;
} else
- dbDesc.readGraphStore.endpoints.add(DEF.ServiceData) ;
- return Arrays.asList(dbDesc) ;
+ dbSvc.addEndpoint(OperationName.GSP_R, DEF.ServiceData) ;
+
+ return Arrays.asList(dataAccess) ;
}
// /** Read one of more dataset descriptions in a model */
@@ -150,7 +133,7 @@ public class FusekiConfig {
// }
/** Has side effects in server setup */
- public static List<DatasetRef> readConfigFile(String filename) {
+ public static List<DataAccessPoint> readConfigFile(String filename) {
// Old-style config file.
Model model = FileManager.get().loadModel(filename) ;
additionalRDF(model) ;
@@ -158,8 +141,8 @@ public class FusekiConfig {
return servicesAndDatasets(model) ;
}
- public static List<DatasetRef> readConfigurationDirectory(String dir) {
- List<DatasetRef> datasets = new ArrayList<DatasetRef>() ;
+ public static List<DataAccessPoint> readConfigurationDirectory(String dir) {
+ List<DataAccessPoint> dataServiceRef = new ArrayList<DataAccessPoint>() ;
File d = new File(dir) ;
String[] aFiles = d.list(visibleFiles) ;
if ( aFiles == null ) {
@@ -171,11 +154,11 @@ public class FusekiConfig {
// Same code as ActionDatasets
}
- return datasets ;
+ return dataServiceRef ;
}
- public static List<DatasetRef> readSystemDatabase(Dataset ds) {
+ public static List<DataAccessPoint> readSystemDatabase(Dataset ds) {
String qs = StrUtils.strjoinNL
(SystemState.PREFIXES ,
"SELECT * {" ,
@@ -186,7 +169,7 @@ public class FusekiConfig {
"}"
) ;
- List<DatasetRef> refs = new ArrayList<DatasetRef>() ;
+ List<DataAccessPoint> refs = new ArrayList<DataAccessPoint>() ;
ResultSet rs = query(qs, ds) ;
@@ -203,8 +186,7 @@ public class FusekiConfig {
Model m = ds.getNamedModel(g.getURI()) ;
s = m.wrapAsResource(s.asNode()) ;
//String name = row.getLiteral("name").getLexicalForm() ;
- DatasetRef ref = processService(s) ;
- ref.setStatus(status) ;
+ DataAccessPoint ref = processService(s) ;
refs.add(ref) ;
}
return refs ;
@@ -227,22 +209,22 @@ public class FusekiConfig {
processServer(server) ;
}
- private static List<DatasetRef> servicesAndDatasets(Model model) {
+ private static List<DataAccessPoint> servicesAndDatasets(Model model) {
// Old style configuration file : server to services.
// ---- Services
ResultSet rs = query("SELECT * { ?s fu:services [ list:member ?member ] }", model) ;
if ( !rs.hasNext() )
log.warn("No services found") ;
- List<DatasetRef> services = new ArrayList<DatasetRef>() ;
+ List<DataAccessPoint> accessPoints = new ArrayList<DataAccessPoint>() ;
for ( ; rs.hasNext() ; ) {
QuerySolution soln = rs.next() ;
Resource svc = soln.getResource("member") ;
- DatasetRef sd = processService(svc) ;
- services.add(sd) ;
+ DataAccessPoint acc = processService(svc) ;
+ accessPoints.add(acc) ;
}
- return services ;
+ return accessPoints ;
}
private static void processServer(Resource server) {
@@ -292,60 +274,62 @@ public class FusekiConfig {
}
/** Build a DatasetRef from an assember starting at Resource svc */
- public static DatasetRef processService(Resource svc) {
+ public static DataAccessPoint processService(Resource svc) {
log.info("Service: " + nodeLabel(svc)) ;
String name = ((Literal)getOne(svc, "fu:name")).getLexicalForm() ;
Resource datasetDesc = ((Resource)getOne(svc, "fu:dataset")) ;
-
// Check if it is in the model.
if ( !datasetDesc.hasProperty(RDF.type) )
throw new FusekiConfigException("No rdf:type for dataset " + nodeLabel(datasetDesc)) ;
-
Dataset ds = (Dataset)Assembler.general.open(datasetDesc) ;
- // If builder for DatasetRefs, put assembling dataset after services.
- DatasetRef sDesc = DatasetRef.create(name, ds.asDatasetGraph()) ;
- log.info(" name = " + sDesc.name) ;
-
- addServiceEP("query", sDesc.name, sDesc.query, svc, "fu:serviceQuery") ;
- addServiceEP("update", sDesc.name, sDesc.update, svc, "fu:serviceUpdate") ;
- addServiceEP("upload", sDesc.name, sDesc.upload, svc, "fu:serviceUpload") ;
- addServiceEP("graphStore(RW)", sDesc.name, sDesc.readWriteGraphStore, svc, "fu:serviceReadWriteGraphStore") ;
- addServiceEP("graphStore(R)", sDesc.name, sDesc.readGraphStore, svc, "fu:serviceReadGraphStore") ;
- // Extract timeout overriding configuration if present.
- if ( svc.hasProperty(FusekiVocab.pAllowTimeoutOverride) ) {
- sDesc.allowTimeoutOverride = svc.getProperty(FusekiVocab.pAllowTimeoutOverride).getObject().asLiteral().getBoolean() ;
- if ( svc.hasProperty(FusekiVocab.pMaximumTimeoutOverride) ) {
- sDesc.maximumTimeoutOverride = (int)(svc.getProperty(FusekiVocab.pMaximumTimeoutOverride).getObject().asLiteral().getFloat() * 1000) ;
- }
- }
-
- return sDesc ;
+ // Assembler to do all this.
+ DataService dataService = new DataService(svc, ds.asDatasetGraph()) ;
+
+ DataAccessPoint dataAccess = new DataAccessPoint(name) ;
+ dataAccess.setDataService(dataService) ;
+ DatasetRegistry.get().put(name, dataAccess) ;
+
+ log.info(" name = " + dataAccess.getName()) ;
+
+ addServiceEP(dataAccess, dataService, OperationName.Query, svc, "fu:serviceQuery") ;
+ addServiceEP(dataAccess, dataService, OperationName.Update, svc, "fu:serviceUpdate") ;
+ addServiceEP(dataAccess, dataService, OperationName.Upload, svc, "fu:serviceUpload") ;
+ addServiceEP(dataAccess, dataService, OperationName.GSP_R, svc, "fu:serviceReadGraphStore") ;
+ addServiceEP(dataAccess, dataService, OperationName.GSP, svc, "fu:serviceReadWriteGraphStore") ;
+ // XXX
+// // Extract timeout overriding configuration if present.
+// if ( svc.hasProperty(FusekiVocab.pAllowTimeoutOverride) ) {
+// sDesc.allowTimeoutOverride = svc.getProperty(FusekiVocab.pAllowTimeoutOverride).getObject().asLiteral().getBoolean() ;
+// if ( svc.hasProperty(FusekiVocab.pMaximumTimeoutOverride) ) {
+// sDesc.maximumTimeoutOverride = (int)(svc.getProperty(FusekiVocab.pMaximumTimeoutOverride).getObject().asLiteral().getFloat() * 1000) ;
+// }
+// }
+ return dataAccess ;
}
/** Initial configuration - for all the datasets, call the per dataset initization */
- public static void configureDatasets(List<DatasetRef> datasets) {
- for (DatasetRef dsDesc : datasets)
+ public static void configureDatasets(List<DataAccessPoint> datasets) {
+ for (DataAccessPoint dsDesc : datasets)
configureOneDataset(dsDesc) ;
}
- public static void configureOneDataset(DatasetRef dsDesc) {
- registerDataset(dsDesc.name, dsDesc) ;
- addJMX(dsDesc) ;
+ public static void configureOneDataset(DataAccessPoint dsDesc) {
+ registerDataset(dsDesc.getName(), dsDesc) ;
+ //addJMX(dsDesc) ;
}
/** Register a DatasetRef, which should no already be registered */
- public static void registerDataset(String datasetPath, DatasetRef dsDesc) {
- dsDesc.enable() ;
+ public static void registerDataset(String datasetPath, DataAccessPoint dataAccess) {
if ( DatasetRegistry.get().isRegistered(datasetPath) )
throw new FusekiConfigException("Already registered: key = "+datasetPath) ;
- DatasetRegistry.get().put(datasetPath, dsDesc) ;
- serverLog.info(format("Dataset path = %s", datasetPath)) ;
- addJMX(dsDesc) ;
+ DatasetRegistry.get().put(datasetPath, dataAccess) ;
+ serverLog.info(format("Register dataset path = %s", datasetPath)) ;
+ //addJMX(dsDesc) ;
}
// public static void addJMX() {
@@ -356,34 +340,34 @@ public class FusekiConfig {
// }
// }
- private static void addJMX(DatasetRef dsRef) {
- String x = dsRef.name ;
- // if ( x.startsWith("/") )
- // x = x.substring(1) ;
- ARQMgt.register(Fuseki.PATH + ".dataset:name=" + x, dsRef) ;
- // For all endpoints
- for (ServiceRef sRef : dsRef.getServiceRefs()) {
- ARQMgt.register(Fuseki.PATH + ".dataset:name=" + x + "/" + sRef.name, sRef) ;
- }
+ private static void addJMX(DataAccessPoint dsRef) {
+// String x = datasetNames ;
+// // if ( x.startsWith("/") )
+// // x = x.substring(1) ;
+// ARQMgt.register(Fuseki.PATH + ".dataset:name=" + x, dsRef) ;
+// // For all endpoints
+// for (ServiceRef sRef : dsRef.getServiceRefs()) {
+// ARQMgt.register(Fuseki.PATH + ".dataset:name=" + x + "/" + sRef.name, sRef) ;
+// }
}
public static void removeJMX() {
- DatasetRegistry registry = DatasetRegistry.get() ;
- for (String ds : registry.keys()) {
- DatasetRef ref = registry.get(ds) ;
- removeJMX(ref) ;
- }
+// DatasetRegistry registry = DatasetRegistry.get() ;
+// for (String ds : registry.keys()) {
+// DatasetRef ref = registry.get(ds) ;
+// removeJMX(ref) ;
+// }
}
- private static void removeJMX(DatasetRef dsRef) {
- String x = dsRef.getName() ;
- ARQMgt.unregister(Fuseki.PATH + ".dataset:name=" + x) ;
- for (ServiceRef sRef : dsRef.getServiceRefs()) {
- ARQMgt.unregister(Fuseki.PATH + ".dataset:name=" + x + "/" + sRef.name) ;
- }
- }
+// private static void removeJMX(DatasetRef dsRef) {
+// String x = dsRef.getName() ;
+// ARQMgt.unregister(Fuseki.PATH + ".dataset:name=" + x) ;
+// for (ServiceRef sRef : dsRef.getServiceRefs()) {
+// ARQMgt.unregister(Fuseki.PATH + ".dataset:name=" + x + "/" + sRef.name) ;
+// }
+// }
-
+ // XXX Move to utils
private static Model additionalRDF(Model m) {
String x1 = StrUtils.strjoinNL
( SystemState.PREFIXES,
@@ -419,18 +403,19 @@ public class FusekiConfig {
return x ;
}
- private static List<Resource> getByType(Resource type, Model m) {
+ public static List<Resource> getByType(Resource type, Model m) {
ResIterator rIter = m.listSubjectsWithProperty(RDF.type, type) ;
return Iter.toList(rIter) ;
}
- private static void addServiceEP(String label, String name, ServiceRef service, Resource svc, String property) {
+ private static void addServiceEP(DataAccessPoint dataAccessPoint, DataService dataService, OperationName opName, Resource svc, String property) {
ResultSet rs = query("SELECT * { ?svc " + property + " ?ep}", svc.getModel(), "svc", svc) ;
for ( ; rs.hasNext() ; ) {
QuerySolution soln = rs.next() ;
String epName = soln.getLiteral("ep").getLexicalForm() ;
- service.endpoints.add(epName) ;
- log.info(" " + label + " = " + name + "/" + epName) ;
+ Operation operation = new Operation(opName, epName) ;
+ dataService.addEndpoint(opName, epName);
+ log.info(" " + opName.name + " = " + dataAccessPoint.getName() + "/" + epName) ;
}
}
@@ -488,11 +473,13 @@ public class FusekiConfig {
return lit.getLexicalForm() ;
}
- private static String strForResource(Resource r) {
+ // XXX Lib
+ public static String strForResource(Resource r) {
return strForResource(r, r.getModel()) ;
}
- private static String strForResource(Resource r, PrefixMapping pm) {
+ // XXX Lib
+ public static String strForResource(Resource r, PrefixMapping pm) {
if ( r == null )
return "NULL " ;
if ( r.hasProperty(RDFS.label) ) {
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=1562426&r1=1562425&r2=1562426&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 Wed Jan 29 12:16:12 2014
@@ -84,11 +84,11 @@ public class FusekiServletContextListene
// 2 - Directory of assemblers files "assemblers"
// 3 - The system database
- List<DatasetRef> configFileDBs = findDatasets(initialSetup) ;
- List<DatasetRef> directoryDBs = FusekiConfig.readConfigurationDirectory(configDir) ;
- List<DatasetRef> systemDBs = FusekiConfig.readSystemDatabase(SystemState.getDataset()) ;
+ List<DataAccessPoint> configFileDBs = findDatasets(initialSetup) ;
+ List<DataAccessPoint> directoryDBs = FusekiConfig.readConfigurationDirectory(configDir) ;
+ List<DataAccessPoint> systemDBs = FusekiConfig.readSystemDatabase(SystemState.getDataset()) ;
- List<DatasetRef> datasets = new ArrayList<DatasetRef>() ;
+ List<DataAccessPoint> datasets = new ArrayList<DataAccessPoint>() ;
datasets.addAll(configFileDBs) ;
datasets.addAll(directoryDBs) ;
datasets.addAll(systemDBs) ;
@@ -99,17 +99,17 @@ public class FusekiServletContextListene
}
}
- private static List<DatasetRef> findDatasets(ServerInitialConfig params) {
+ private static List<DataAccessPoint> findDatasets(ServerInitialConfig params) {
// Has a side effect of global context setting.
- List<DatasetRef> datasets = DS.list() ;
+ List<DataAccessPoint> datasets = DS.list() ;
if ( params.fusekiConfigFile != null ) {
Fuseki.configLog.info("Configuration file: " + params.fusekiConfigFile) ;
- List<DatasetRef> cmdLineDatasets = FusekiConfig.readConfigFile(params.fusekiConfigFile) ;
+ List<DataAccessPoint> cmdLineDatasets = FusekiConfig.readConfigFile(params.fusekiConfigFile) ;
datasets.addAll(cmdLineDatasets) ;
} else {
- List<DatasetRef> cmdLineDatasets = FusekiConfig.defaultConfiguration(params) ;
+ List<DataAccessPoint> cmdLineDatasets = FusekiConfig.defaultConfiguration(params) ;
datasets.addAll(cmdLineDatasets) ;
}
return datasets ;
Added: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/Operation.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/Operation.java?rev=1562426&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/Operation.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/Operation.java Wed Jan 29 12:16:12 2014
@@ -0,0 +1,79 @@
+/**
+ * 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.InternalErrorException ;
+
+
+public class Operation implements Counters {
+
+ public final OperationName opName ;
+ public final String endpointName ;
+ // Endpoint-level counters.
+ private final CounterSet counters = new CounterSet() ;
+
+ public Operation(OperationName opName, String endpointName) {
+ this.opName = opName ;
+ if ( opName == null )
+ throw new InternalErrorException("opName is null") ;
+ this.endpointName = endpointName ;
+ // Standard counters - there may be others
+ counters.add(CounterName.Requests) ;
+ counters.add(CounterName.RequestsGood) ;
+ counters.add(CounterName.RequestsBad) ;
+ }
+
+// /** Endpoints (as absolute path URLs) */
+// private List<String> endpoints = new ArrayList<String>() ;
+// private List<String> endpointsRO = Collections.unmodifiableList(endpoints) ;
+
+ @Override
+ public CounterSet getCounters() { return counters ; }
+
+// /** Endpoints */
+// public List<String> getEndpoints() { return endpointsRO ; }
+
+// /** Endpoints */
+// public void addEndpoint(String endpoint) { endpoints.add(endpoint) ; }
+
+ //@Override
+ public OperationName getName() { return opName ; }
+
+ //@Override
+ public boolean isType(OperationName operationName) {
+ return opName.equals(operationName) ;
+ }
+
+ public String getEndpoint() { return endpointName ; }
+
+ //@Override
+ public long getRequests() {
+ return counters.value(CounterName.Requests) ;
+ }
+ //@Override
+ public long getRequestsGood() {
+ return counters.value(CounterName.RequestsGood) ;
+ }
+ //@Override
+ public long getRequestsBad() {
+ return counters.value(CounterName.RequestsBad) ;
+ }
+
+}
+
Added: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/OperationName.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/OperationName.java?rev=1562426&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/OperationName.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/OperationName.java Wed Jan 29 12:16:12 2014
@@ -0,0 +1,35 @@
+/**
+ * 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 enum OperationName {
+ // Fixed names give the codebase some resilience.
+
+ Query("query"),
+ Update("update"),
+ Upload("upload"),
+ GSP("graph store protocol"),
+ GSP_R("graph store protocol (Read)")
+ ;
+
+ public final String name ;
+ private OperationName(String name) { this.name = name ; }
+
+}
+
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java Wed Jan 29 12:16:12 2014
@@ -24,14 +24,12 @@ import org.apache.jena.atlas.web.AcceptL
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.DatasetRef ;
+import org.apache.jena.fuseki.server.DataAccessPoint ;
import org.apache.jena.fuseki.server.DatasetRegistry ;
/** Operations related to servlets */
public class ActionLib {
-
-
// TODO Combine ServletOps?
/** Map request to uri in the registry.
@@ -56,13 +54,14 @@ public class ActionLib {
return uri.substring(0, i) ;
}
- public static String mapRequestToService(DatasetRef dsRef, String uri, String datasetURI)
+ public static String mapRequestToOperation(DataAccessPoint dsRef, String uri, String datasetURI)
{
if ( dsRef == null )
return "" ;
- if ( dsRef.name.length() >= uri.length() )
+ String name = dsRef.getName();
+ if ( name.length() >= uri.length() )
return "" ;
- return uri.substring(dsRef.name.length()+1) ; // Skip the separating "/"
+ return uri.substring(name.length()+1) ; // Skip the separating "/"
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java Wed Jan 29 12:16:12 2014
@@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.jena.fuseki.server.CounterName ;
-/** Common point for */
+/** Common point for operations that are "REST"ish (use GET/PUT etc as operations). */
public abstract class ActionREST extends ActionSPARQL
{
public ActionREST()
@@ -75,78 +75,78 @@ public abstract class ActionREST extends
// Counter wrappers
private final void doGet$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPget) ;
+ incCounter(action.getOperation(), CounterName.HTTPget) ;
try {
doGet(action) ;
- incCounter(action.srvRef, CounterName.GSPgetGood) ;
+ incCounter(action.getOperation(), CounterName.HTTPgetGood) ;
} catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPgetBad) ;
+ incCounter(action.getOperation(), CounterName.HTTPGetBad) ;
throw ex ;
}
}
private final void doHead$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPhead) ;
+ incCounter(action.getOperation(), CounterName.HTTPhead) ;
try {
doHead(action) ;
- incCounter(action.srvRef, CounterName.GSPheadGood) ;
+ incCounter(action.getOperation(), CounterName.HTTPheadGood) ;
} catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPheadBad) ;
+ incCounter(action.getOperation(), CounterName.HTTPheadBad) ;
throw ex ;
}
}
private final void doPost$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPpost) ;
+ incCounter(action.getOperation(), CounterName.HTTPpost) ;
try {
doPost(action) ;
- incCounter(action.srvRef, CounterName.GSPpostGood) ;
+ incCounter(action.getOperation(), CounterName.HTTPpostGood) ;
} catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPpostBad) ;
+ incCounter(action.getOperation(), CounterName.HTTPpostBad) ;
throw ex ;
}
}
private final void doPatch$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPpatch) ;
+ incCounter(action.getOperation(), CounterName.HTTPpatch) ;
try {
doPatch(action) ;
- incCounter(action.srvRef, CounterName.GSPpatchGood) ;
+ incCounter(action.getOperation(), CounterName.HTTPpatchGood) ;
} catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPpatchBad) ;
+ incCounter(action.getOperation(), CounterName.HTTPpatchBad) ;
throw ex ;
}
}
private final void doDelete$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPdelete) ;
+ incCounter(action.getOperation(), CounterName.HTTPdelete) ;
try {
doDelete(action) ;
- incCounter(action.srvRef, CounterName.GSPdeleteGood) ;
+ incCounter(action.getOperation(), CounterName.HTTPdeleteGood) ;
} catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPdeleteBad) ;
+ incCounter(action.getOperation(), CounterName.HTTPdeleteBad) ;
throw ex ;
}
}
private final void doPut$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPput) ;
+ incCounter(action.getOperation(), CounterName.HTTPput) ;
try {
doPut(action) ;
- incCounter(action.srvRef, CounterName.GSPputGood) ;
+ incCounter(action.getOperation(), CounterName.HTTPputGood) ;
} catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPputBad) ;
+ incCounter(action.getOperation(), CounterName.HTTPputBad) ;
throw ex ;
}
}
private final void doOptions$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPoptions) ;
+ incCounter(action.getOperation(), CounterName.HTTPoptions) ;
try {
doOptions(action) ;
- incCounter(action.srvRef, CounterName.GSPoptionsGood) ;
+ incCounter(action.getOperation(), CounterName.HTTPoptionsGood) ;
} catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPoptionsBad) ;
+ incCounter(action.getOperation(), CounterName.HTTPoptionsBad) ;
throw ex ;
}
}
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=1562426&r1=1562425&r2=1562426&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 Wed Jan 29 12:16:12 2014
@@ -45,30 +45,34 @@ public abstract class ActionSPARQL exten
protected abstract void perform(HttpAction action) ;
@Override
- protected void execCommonWorker(HttpAction action)
- {
- DatasetRef dsRef = null ;
-
+ protected void execCommonWorker(HttpAction action) {
+ DataAccessPoint dataAccessPoint = null ;
+ DataService dSrv = null ;
+
String datasetUri = mapRequestToDataset(action) ;
if ( datasetUri != null ) {
- dsRef = DatasetRegistry.get().get(datasetUri) ;
- if ( dsRef == null ) {
+ dataAccessPoint = DatasetRegistry.get().get(datasetUri) ;
+ if ( dataAccessPoint == null ) {
ServletOps.errorNotFound("No dataset for URI: "+datasetUri) ;
return ;
}
- if ( !dsRef.isActive() )
+ //dataAccessPoint.
+ dSrv = dataAccessPoint.getDataService() ;
+ if ( ! dSrv.isAcceptingRequests() ) {
ServletOps.errorNotFound("Dataset not active: "+datasetUri) ;
- } else
- dsRef = FusekiConfig.serviceOnlyDatasetRef() ;
+ return ;
+ }
+ } else {
+ dataAccessPoint = null ;
+ dSrv = FusekiConfig.serviceOnlyDatasetRef() ;
+ }
String uri = action.request.getRequestURI() ;
- String serviceEndpointName = ActionLib.mapRequestToService(dsRef, uri, datasetUri) ;
- ServiceRef srvRef = dsRef.getServiceRef(serviceEndpointName) ;
-
- action.setRequestRef(dsRef, datasetUri) ;
- action.setService(srvRef, serviceEndpointName) ;
-
+ String operationName = ActionLib.mapRequestToOperation(dataAccessPoint, uri, datasetUri) ;
+ action.setRequest(dataAccessPoint, dSrv) ;
+ Operation op = dSrv.getOperation(operationName) ;
+ action.setOperation(op, operationName) ;
executeAction(action) ;
}
@@ -79,35 +83,37 @@ public abstract class ActionSPARQL exten
// This is the service request lifecycle.
final
- protected void executeLifecycle(HttpAction action)
- {
- incCounter(action.dsRef, Requests) ;
- incCounter(action.srvRef, Requests) ;
-
+ protected void executeLifecycle(HttpAction action) {
startRequest(action) ;
+ // And also HTTP counter
+ CounterSet csService = action.getDataService().getCounters() ;
+ CounterSet csOperation = action.getDataService().getCounters() ;
+
+ incCounter(csService, Requests) ;
+ incCounter(csOperation, Requests) ;
try {
// Either exit this via "bad request" on validation
- // or in
+ // or in execution in perform.
try {
validate(action) ;
} catch (ActionErrorException ex) {
- incCounter(action.dsRef,RequestsBad) ;
- incCounter(action.srvRef, RequestsBad) ;
+ incCounter(csOperation, RequestsBad) ;
+ incCounter(csService,RequestsBad) ;
throw ex ;
}
try {
perform(action) ;
// Success
- incCounter(action.srvRef, RequestsGood) ;
- incCounter(action.dsRef, RequestsGood) ;
- } catch (ActionErrorException ex) {
- incCounter(action.srvRef, RequestsBad) ;
- incCounter(action.dsRef, RequestsBad) ;
+ incCounter(csOperation, RequestsGood) ;
+ incCounter(csService, RequestsGood) ;
+ } catch (ActionErrorException /*JAVA7 | QueryCancelledException*/ ex) {
+ incCounter(csOperation, RequestsBad) ;
+ incCounter(csService, RequestsBad) ;
throw ex ;
} catch (QueryCancelledException ex) {
- incCounter(action.srvRef, RequestsBad) ;
- incCounter(action.dsRef, RequestsBad) ;
+ incCounter(csOperation, RequestsBad) ;
+ incCounter(csService, RequestsBad) ;
throw ex ;
}
} finally {
@@ -124,22 +130,32 @@ public abstract class ActionSPARQL exten
}
protected static void incCounter(Counters counters, CounterName name) {
+ if ( counters == null ) return ;
+ incCounter(counters.getCounters(), name) ;
+ }
+
+ 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.getCounters().contains(name) )
- counters.getCounters().inc(name) ;
+ if ( counters.contains(name) )
+ counters.inc(name) ;
} catch (Exception ex) {
Fuseki.serverLog.warn("Exception on counter inc", ex) ;
}
}
- protected static void decCounter(Counters counters, CounterName name) {
+ protected static void decCounter(CounterSet counters, CounterName name) {
if ( counters == null )
return ;
try {
- if ( counters.getCounters().contains(name) )
- counters.getCounters().dec(name) ;
+ if ( counters.contains(name) )
+ counters.dec(name) ;
} catch (Exception ex) {
Fuseki.serverLog.warn("Exception on counter dec", ex) ;
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java Wed Jan 29 12:16:12 2014
@@ -29,8 +29,9 @@ import javax.servlet.http.HttpServletRes
import org.apache.jena.atlas.logging.Log ;
import org.apache.jena.fuseki.FusekiException ;
-import org.apache.jena.fuseki.server.DatasetRef ;
-import org.apache.jena.fuseki.server.ServiceRef ;
+import org.apache.jena.fuseki.server.DataAccessPoint ;
+import org.apache.jena.fuseki.server.DataService ;
+import org.apache.jena.fuseki.server.Operation ;
import org.slf4j.Logger ;
import com.hp.hpl.jena.query.ReadWrite ;
@@ -53,7 +54,7 @@ public class HttpAction
// -- Valid only for operational actions (e.g. SPARQL).
public String endpointName = null ; // Endpoint name srv was found under
- public ServiceRef srvRef = null ;
+ public Operation operation = null ;
private Transactional transactional = null ;
private boolean isTransactional = false ;
private DatasetGraph activeDSG = null ; // Set when inside begin/end.
@@ -63,8 +64,9 @@ public class HttpAction
// -- Shared items (but exact meaning may differ)
/** Handle to dataset+services being acted on (maybe null) */
- public DatasetRef dsRef = null ;
- public String datasetName = null ; // Dataset URI used (e.g. registry)
+ private DataAccessPoint dataAccessPoint = null ;
+ private DataService dataService = null ;
+ private String datasetName = null ; // Dataset URI used (e.g. registry)
private DatasetGraph dsg = null ;
// ----
@@ -97,16 +99,20 @@ public class HttpAction
}
/** Initialization after action creation during lifecycle setup */
- public void setRequestRef(DatasetRef desc, String datasetUri) {
- if ( this.dsRef != null )
- throw new FusekiException("Redefintion of DatasetRef in the request action") ;
+ 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.dsRef = desc ;
- if ( desc == null || desc.getDataset() == null )
- throw new FusekiException("Null 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.datasetName = datasetUri ;
- this.dsg = desc.getDataset() ;
+ this.dsg = dService.getDataset() ;
DatasetGraph basedsg = unwrap(dsg) ;
if ( isTransactional(basedsg) && isTransactional(dsg) ) {
@@ -114,20 +120,16 @@ public class HttpAction
transactional = (Transactional)dsg ;
isTransactional = true ;
} else {
- // Unsure if safe
+ // Unsure if safesetControlRef
transactional = new DatasetGraphWithLock(dsg) ;
// No real abort.
isTransactional = false ;
}
}
- public void setControlRef(DatasetRef desc, String datasetUri) {
- if ( desc == null )
- throw new FusekiException("Null DatasetRef in the control action") ;
-
- if ( this.dsRef != null )
- throw new FusekiException("Redefintion of DatasetRef in the control action") ;
- this.dsRef = desc ;
+ public void setControlRequest(DataAccessPoint dataAccessPoint, String datasetUri) {
+ this.dataAccessPoint = dataAccessPoint ;
+ this.dataService = null ;
this.datasetName = datasetUri ;
}
@@ -142,11 +144,15 @@ public class HttpAction
return dsg ;
}
- public void setService(ServiceRef srvRef, String endpointName) {
- this.srvRef = srvRef ;
+ public void setOperation(Operation srvRef, String endpointName) {
+ this.operation = srvRef ;
this.endpointName = endpointName ;
}
+ public Operation getOperation() {
+ return operation ;
+ }
+
/**
* Returns whether or not the underlying DatasetGraph is fully transactional (supports rollback)
*/
@@ -158,11 +164,11 @@ public class HttpAction
activeMode = READ ;
transactional.begin(READ) ;
activeDSG = dsg ;
- dsRef.startTxn(READ) ;
+ dataService.startTxn(READ) ;
}
public void endRead() {
- dsRef.finishTxn(READ) ;
+ dataService.finishTxn(READ) ;
activeMode = null ;
transactional.end() ;
activeDSG = null ;
@@ -172,7 +178,7 @@ public class HttpAction
transactional.begin(WRITE) ;
activeMode = WRITE ;
activeDSG = dsg ;
- dsRef.startTxn(WRITE) ;
+ dataService.startTxn(WRITE) ;
}
public void commit() {
@@ -193,7 +199,7 @@ public class HttpAction
}
public void endWrite() {
- dsRef.finishTxn(WRITE) ;
+ dataService.finishTxn(WRITE) ;
activeMode = null ;
if ( transactional.isInTransaction() ) {
@@ -208,22 +214,55 @@ public class HttpAction
activeDSG = null ;
}
- public void startRequest() { if ( dsRef != null ) dsRef.startRequest(this) ; }
+ public final void startRequest()
+ {
+ if ( dataAccessPoint != null )
+ dataAccessPoint.startRequest(this) ;
+ }
- public void finishRequest() { if ( dsRef != null ) dsRef.finishRequest(this) ; }
+ public final void finishRequest() {
+ if ( dataAccessPoint != null )
+ dataAccessPoint.finishRequest(this) ;
+ }
public final DatasetGraph getActiveDSG() {
return activeDSG ;
}
- public final DatasetRef getDatasetRef() {
- return dsRef ;
+ public final DataAccessPoint getDataAccessPoint() {
+ return dataAccessPoint;
+ }
+
+// public void setDataAccessPoint(DataAccessPoint dataAccessPoint) {
+// this.dataAccessPoint = dataAccessPoint;
+// }
+
+ public final DataService getDataService() {
+ return dataService;
}
- /** Reduce to a size that can be kept around for sometime */
+// 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.operation = null ;
}
public void setStartTime() {
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java Wed Jan 29 12:16:12 2014
@@ -42,7 +42,7 @@ public class REST_Quads_RW extends REST_
@Override
protected void doPost(HttpAction action) {
- if ( !action.getDatasetRef().allowDatasetUpdate )
+ if ( !action.getDataService().allowUpdate() )
ServletOps.errorMethodNotAllowed("POST") ;
if ( action.isTransactional() )
@@ -53,7 +53,7 @@ public class REST_Quads_RW extends REST_
@Override
protected void doPut(HttpAction action) {
- if ( !action.getDatasetRef().allowDatasetUpdate )
+ if ( !action.getDataService().allowUpdate() )
ServletOps.errorMethodNotAllowed("POST") ;
if ( action.isTransactional() )
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java Wed Jan 29 12:16:12 2014
@@ -45,12 +45,12 @@ public abstract class SPARQL_GSP extends
// Direct naming or error.
uri = action.request.getRequestURL().toString() ;
- if ( action.request.getRequestURI().equals(action.getDatasetRef().name) )
+ if ( action.request.getRequestURI().equals(action.getDatasetName()) )
// No name
ServletOps.errorBadRequest("Neither default graph nor named graph specified; no direct name") ;
}
- String dsTarget = action.datasetName ;
+ String dsTarget = action.getDatasetName() ;
if ( dftGraph )
return Target.createDefault(action.getActiveDSG()) ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java Wed Jan 29 12:16:12 2014
@@ -37,13 +37,11 @@ public class SPARQL_GSP_R extends SPARQL
public SPARQL_GSP_R()
{ super() ; }
-
@Override
protected String mapRequestToDataset(HttpAction action) { return ActionLib.mapRequestToDatasetLongest$(action.request.getRequestURI()) ; }
@Override
- protected void doGet(HttpAction action)
- {
+ protected void doGet(HttpAction action) {
// Assume success - do the set up before grabbing the lock.
// Sets content type.
MediaType mediaType = ActionLib.contentNegotationRDF(action) ;
@@ -82,16 +80,14 @@ public class SPARQL_GSP_R extends SPARQL
}
@Override
- protected void doOptions(HttpAction action)
- {
+ protected void doOptions(HttpAction action) {
action.response.setHeader(HttpNames.hAllow, "GET,HEAD,OPTIONS") ;
action.response.setHeader(HttpNames.hContentLengh, "0") ;
ServletOps.success(action) ;
}
@Override
- protected void doHead(HttpAction action)
- {
+ protected void doHead(HttpAction action) {
action.beginRead() ;
try {
Target target = determineTarget(action) ;
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java?rev=1562426&r1=1562425&r2=1562426&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java Wed Jan 29 12:16:12 2014
@@ -206,10 +206,10 @@ public abstract class SPARQL_Query exten
queryStringLog = formatForLog(query) ;
validateQuery(action, query) ;
} catch (ActionErrorException ex) {
- incCounter(action.srvRef, RequestsBad) ;
+ incCounter(action.getOperation().getCounters(), RequestsBad) ;
throw ex ;
} catch (QueryParseException ex) {
- incCounter(action.srvRef, RequestsBad) ;
+ incCounter(action.getOperation().getCounters(), RequestsBad) ;
ServletOps.errorBadRequest("Parse error: \n" + queryString + "\n\r" + messageForQPE(ex)) ;
}
// Should not happen.
@@ -229,11 +229,11 @@ public abstract class SPARQL_Query exten
sendResults(action, result, query.getPrologue()) ;
} catch (QueryCancelledException ex) {
// Additional counter information.
- incCounter(action.srvRef, QueryTimeouts) ;
+ incCounter(action.getOperation().getCounters(), QueryTimeouts) ;
throw ex ;
} catch (QueryExecException ex) {
// Additional counter information.
- incCounter(action.srvRef, QueryExecErrors) ;
+ incCounter(action.getOperation().getCounters(), QueryExecErrors) ;
throw ex ;
} finally {
if ( qExec != null )
@@ -298,8 +298,8 @@ public abstract class SPARQL_Query exten
}
private void setAnyTimeouts(QueryExecution qexec, HttpAction action) {
- if ( !(action.getDatasetRef().allowTimeoutOverride) )
- return ;
+// if ( !(action.getDataService().allowTimeoutOverride) )
+// return ;
long desiredTimeout = Long.MAX_VALUE ;
String timeoutHeader = action.request.getHeader("Timeout") ;
@@ -318,7 +318,7 @@ public abstract class SPARQL_Query exten
}
}
- desiredTimeout = Math.min(action.getDatasetRef().maximumTimeoutOverride, desiredTimeout) ;
+// desiredTimeout = Math.min(action.getDataService().maximumTimeoutOverride, desiredTimeout) ;
if ( desiredTimeout != Long.MAX_VALUE )
qexec.setTimeout(desiredTimeout) ;
}