You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by mi...@apache.org on 2013/05/08 14:15:09 UTC
svn commit: r1480245 - in /clerezza/trunk:
rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/
rdf.jena.tdb.storage/
rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/
Author: misl
Date: Wed May 8 12:15:09 2013
New Revision: 1480245
URL: http://svn.apache.org/r1480245
Log:
CLEREZZA-466: Implemented QueryableTcProvider support on Single and Scalable TDB Datasets.
Modified:
clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/ResultSetWrapper.java
clerezza/trunk/rdf.jena.tdb.storage/pom.xml
clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java
clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/ScalableSingleTdbDatasetTcProvider.java
clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/SingleTdbDatasetTcProvider.java
clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java
Modified: clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/ResultSetWrapper.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/ResultSetWrapper.java?rev=1480245&r1=1480244&r2=1480245&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/ResultSetWrapper.java (original)
+++ clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/ResultSetWrapper.java Wed May 8 12:15:09 2013
@@ -29,7 +29,7 @@ import org.apache.clerezza.rdf.core.spar
*
* @author rbn
*/
-class ResultSetWrapper implements org.apache.clerezza.rdf.core.sparql.ResultSet {
+public class ResultSetWrapper implements org.apache.clerezza.rdf.core.sparql.ResultSet {
private final Iterator<QuerySolution> solutionsIter;
Modified: clerezza/trunk/rdf.jena.tdb.storage/pom.xml
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/pom.xml?rev=1480245&r1=1480244&r2=1480245&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.tdb.storage/pom.xml (original)
+++ clerezza/trunk/rdf.jena.tdb.storage/pom.xml Wed May 8 12:15:09 2013
@@ -53,6 +53,11 @@
<version>0.6-SNAPSHOT</version>
</dependency>
<dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>rdf.jena.sparql</artifactId>
+ <version>0.6-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
</dependency>
Modified: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java?rev=1480245&r1=1480244&r2=1480245&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java (original)
+++ clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java Wed May 8 12:15:09 2013
@@ -1,23 +1,89 @@
package org.apache.clerezza.rdf.jena.tdb.storage;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
import org.apache.clerezza.rdf.core.TripleCollection;
import org.apache.clerezza.rdf.core.access.QueryableTcProvider;
import org.apache.clerezza.rdf.core.sparql.query.Query;
+import org.apache.clerezza.rdf.jena.sparql.ResultSetWrapper;
+import org.apache.clerezza.rdf.jena.storage.JenaGraphAdaptor;
+
+import com.hp.hpl.jena.query.Dataset;
+import com.hp.hpl.jena.query.QueryExecException;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.QueryExecutionFactory;
+import com.hp.hpl.jena.query.QueryFactory;
abstract class BaseTdbTcProvider implements QueryableTcProvider{
// ------------------------------------------------------------------------
+ // Object attributes
+ // ------------------------------------------------------------------------
+
+ private Dataset dataset;
+
+ // ------------------------------------------------------------------------
// Implementing QueryableTcProvider
// ------------------------------------------------------------------------
@Override
- public Object executeSparqlQuery(String query, TripleCollection defaultGraph) {
- // TODO Auto-generated method stub
- return null;
+ public Object executeSparqlQuery(final String query, TripleCollection defaultGraph) {
+ // Missing permission (java.lang.RuntimePermission getClassLoader)
+ // when calling QueryFactory.create causes ExceptionInInitializerError
+ // to be thrown.
+ // QueryExecutionFactory.create requires
+ // (java.io.FilePermission [etc/]location-mapping.* read)
+ // Thus, they are placed within doPrivileged
+ QueryExecution qexec = AccessController
+ .doPrivileged(new PrivilegedAction<QueryExecution>() {
+
+ @Override
+ public QueryExecution run() {
+ com.hp.hpl.jena.query.Query jenaQuery = QueryFactory
+ .create(query);
+ return QueryExecutionFactory.create(jenaQuery, getDataset());
+ }
+ });
+
+ try {
+ try {
+ return new ResultSetWrapper(qexec.execSelect());
+ } catch (QueryExecException e) {
+ try {
+ return Boolean.valueOf(qexec.execAsk());
+ } catch (QueryExecException e2) {
+ try {
+ return new JenaGraphAdaptor(qexec.execDescribe()
+ .getGraph()).getGraph();
+ } catch (QueryExecException e3) {
+ return new JenaGraphAdaptor(qexec.execConstruct()
+ .getGraph()).getGraph();
+ }
+ }
+ }
+ } finally {
+ qexec.close();
+ }
}
@Override
public Object executeSparqlQuery(Query query, TripleCollection defaultGraph) {
return executeSparqlQuery(query.toString(), defaultGraph);
}
+
+ // ------------------------------------------------------------------------
+ // Getters / Setters
+ // ------------------------------------------------------------------------
+
+ public Dataset getDataset() {
+ if (dataset == null) {
+ throw new RuntimeException("Missing Dataset!");
+ }
+ return dataset;
+ }
+
+ public void setDataset(Dataset dataset) {
+ this.dataset = dataset;
+ }
}
Modified: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/ScalableSingleTdbDatasetTcProvider.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/ScalableSingleTdbDatasetTcProvider.java?rev=1480245&r1=1480244&r2=1480245&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/ScalableSingleTdbDatasetTcProvider.java (original)
+++ clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/ScalableSingleTdbDatasetTcProvider.java Wed May 8 12:15:09 2013
@@ -87,7 +87,7 @@ import com.hp.hpl.jena.tdb.TDBFactory;
@Property(name=ScalableSingleTdbDatasetTcProvider.SYNC_INTERVAL, intValue=ScalableSingleTdbDatasetTcProvider.DEFAULT_SYNC_INTERVAL),
@Property(name=ScalableSingleTdbDatasetTcProvider.WEIGHT, intValue=107)
})
-public class ScalableSingleTdbDatasetTcProvider implements WeightedTcProvider {
+public class ScalableSingleTdbDatasetTcProvider extends BaseTdbTcProvider implements WeightedTcProvider {
public static final String TDB_DIR = "tdb-dir";
public static final String DEFAULT_GRAPH_NAME = "default-graph-name";
@@ -105,7 +105,6 @@ public class ScalableSingleTdbDatasetTcP
private int syncInterval = DEFAULT_SYNC_INTERVAL;
private SyncThread syncThread;
- private Dataset dataset;
private final ReadWriteLock datasetLock = new ReentrantReadWriteLock();;
private UriRef defaultGraphName;
@@ -278,8 +277,8 @@ public class ScalableSingleTdbDatasetTcP
+ dataDir+"' already exists, but is not a Directory!");
} //else exists and is a directory ... nothing to do
TDB.getContext().set(TDB.symUnionDefaultGraph, true);
- dataset = TDBFactory.createDataset(dataDir.getAbsolutePath());
- graphNameIndex = new ModelGraph(datasetLock, dataset.getDefaultModel(),true);
+ setDataset( TDBFactory.createDataset(dataDir.getAbsolutePath()) );
+ graphNameIndex = new ModelGraph(datasetLock, getDataset().getDefaultModel(),true);
// Remove existing default graph names from the index (if might have changed
// in the mean time).
@@ -331,6 +330,7 @@ public class ScalableSingleTdbDatasetTcP
syncThread.requestStop();
syncThread = null;
}
+ Dataset dataset = getDataset();
if(dataset != null){ //avoid NPE on multiple calls
datasetLock.writeLock().lock();
try {
@@ -344,7 +344,7 @@ public class ScalableSingleTdbDatasetTcP
TDB.sync(dataset);
dataset.close();
- dataset = null;
+ setDataset(null);
} finally {
datasetLock.writeLock().unlock();
}
@@ -378,8 +378,8 @@ public class ScalableSingleTdbDatasetTcP
} else if(modelGraph == null){
String modelName = name.getUnicodeString();
modelGraph = new ModelGraph(datasetLock, name.equals(defaultGraphName) ?
- dataset.getNamedModel("urn:x-arq:UnionGraph") :
- dataset.getNamedModel(modelName),readWrite);
+ getDataset().getNamedModel("urn:x-arq:UnionGraph") :
+ getDataset().getNamedModel(modelName),readWrite);
if(readWrite) {
// Keep track of readwrite model to be able to sync them.
this.syncModels.put(name, modelGraph);
Modified: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/SingleTdbDatasetTcProvider.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/SingleTdbDatasetTcProvider.java?rev=1480245&r1=1480244&r2=1480245&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/SingleTdbDatasetTcProvider.java (original)
+++ clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/SingleTdbDatasetTcProvider.java Wed May 8 12:15:09 2013
@@ -88,7 +88,7 @@ import com.hp.hpl.jena.tdb.TDBFactory;
@Property(name=SingleTdbDatasetTcProvider.SYNC_INTERVAL, intValue=SingleTdbDatasetTcProvider.DEFAULT_SYNC_INTERVAL),
@Property(name=SingleTdbDatasetTcProvider.WEIGHT, intValue=106)
})
-public class SingleTdbDatasetTcProvider implements WeightedTcProvider {
+public class SingleTdbDatasetTcProvider extends BaseTdbTcProvider implements WeightedTcProvider {
public static final String TDB_DIR = "tdb-dir";
public static final String DEFAULT_GRAPH_NAME = "default-graph-name";
@@ -105,7 +105,6 @@ public class SingleTdbDatasetTcProvider
private int syncInterval = DEFAULT_SYNC_INTERVAL;
private SyncThread syncThread;
- private Dataset dataset;
private final ReadWriteLock datasetLock = new ReentrantReadWriteLock();;
private File graphConfigFile;
@@ -282,7 +281,7 @@ public class SingleTdbDatasetTcProvider
+ dataDir+"' already exists, but is not a Directory!");
} //else exists and is a directory ... nothing to do
TDB.getContext().set(TDB.symUnionDefaultGraph, true);
- dataset = TDBFactory.createDataset(dataDir.getAbsolutePath());
+ setDataset(TDBFactory.createDataset(dataDir.getAbsolutePath()));
//init the read/write lock
//init the graph config (stores the graph and mgraph names in a config file)
@@ -326,6 +325,7 @@ public class SingleTdbDatasetTcProvider
*/
@Deactivate
protected void deactivate(ComponentContext ctx) {
+ Dataset dataset = getDataset();
if(dataset != null){ //avoid NPE on multiple calls
datasetLock.writeLock().lock();
try {
@@ -334,7 +334,7 @@ public class SingleTdbDatasetTcProvider
}
TDB.sync(dataset);
dataset.close();
- dataset = null;
+ setDataset(null);
} finally {
datasetLock.writeLock().unlock();
}
@@ -374,8 +374,8 @@ public class SingleTdbDatasetTcProvider
} else if(modelGraph == null){
String modelName = name.getUnicodeString();
modelGraph = new ModelGraph(datasetLock, name.equals(defaultGraphName) ?
- dataset.getNamedModel("urn:x-arq:UnionGraph") :
- dataset.getNamedModel(modelName),readWrite);
+ getDataset().getNamedModel("urn:x-arq:UnionGraph") :
+ getDataset().getNamedModel(modelName),readWrite);
this.initModels.put(name, modelGraph);
}
} finally {
@@ -479,7 +479,7 @@ public class SingleTdbDatasetTcProvider
Set<UriRef> graphNames = new HashSet<UriRef>();
datasetLock.readLock().lock();
try {
- for(Iterator<String> names = dataset.listNames();
+ for(Iterator<String> names = getDataset().listNames();
names.hasNext();
graphNames.add(new UriRef(names.next())));
} finally {
@@ -717,7 +717,7 @@ public class SingleTdbDatasetTcProvider
log.info("Present named Models");
datasetLock.readLock().lock();
try {
- for(Iterator<String> it = dataset.listNames();it.hasNext();){
+ for(Iterator<String> it = getDataset().listNames();it.hasNext();){
log.info(" > {}",it.next());
}
} finally {
@@ -780,7 +780,7 @@ public class SingleTdbDatasetTcProvider
} else { //read pre-existing models in the dataset
datasetLock.readLock().lock();
try {
- for(Iterator<String> it = dataset.listNames();it.hasNext();){
+ for(Iterator<String> it = getDataset().listNames();it.hasNext();){
mGraphNames.add(new UriRef(it.next()));
}
writeMGraphConfig();
Modified: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java?rev=1480245&r1=1480244&r2=1480245&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java (original)
+++ clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java Wed May 8 12:15:09 2013
@@ -69,7 +69,7 @@ import org.apache.felix.scr.annotations.
@Component(metatype=true, immediate=true)
@Service(WeightedTcProvider.class)
@Property(name="weight", intValue=105)
-public class TdbTcProvider extends BaseTdbTcProvider implements WeightedTcProvider {
+public class TdbTcProvider implements WeightedTcProvider {
static {
//not sure what the perfomance implication of this is