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