You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2012/07/27 12:27:48 UTC

svn commit: r1366329 - /incubator/stanbol/trunk/commons/ldpath/clerezza/src/main/java/org/apache/stanbol/commons/ldpath/clerezza/ClerezzaBackend.java

Author: rwesten
Date: Fri Jul 27 10:27:48 2012
New Revision: 1366329

URL: http://svn.apache.org/viewvc?rev=1366329&view=rev
Log:
related to STANBOL-704: ClerezzaBackend now uses readLocks if the parsed TripleCollection supports read/write locks (instanceof LockableMGraph)

Modified:
    incubator/stanbol/trunk/commons/ldpath/clerezza/src/main/java/org/apache/stanbol/commons/ldpath/clerezza/ClerezzaBackend.java

Modified: incubator/stanbol/trunk/commons/ldpath/clerezza/src/main/java/org/apache/stanbol/commons/ldpath/clerezza/ClerezzaBackend.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/ldpath/clerezza/src/main/java/org/apache/stanbol/commons/ldpath/clerezza/ClerezzaBackend.java?rev=1366329&r1=1366328&r2=1366329&view=diff
==============================================================================
--- incubator/stanbol/trunk/commons/ldpath/clerezza/src/main/java/org/apache/stanbol/commons/ldpath/clerezza/ClerezzaBackend.java (original)
+++ incubator/stanbol/trunk/commons/ldpath/clerezza/src/main/java/org/apache/stanbol/commons/ldpath/clerezza/ClerezzaBackend.java Fri Jul 27 10:27:48 2012
@@ -30,6 +30,7 @@ import java.util.Iterator;
 import java.util.Locale;
 import java.util.Set;
 import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.locks.Lock;
 
 import org.apache.clerezza.rdf.core.BNode;
 import org.apache.clerezza.rdf.core.Language;
@@ -44,6 +45,7 @@ import org.apache.clerezza.rdf.core.Trip
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.TypedLiteral;
 import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
 import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
 import org.apache.clerezza.rdf.core.impl.SimpleLiteralFactory;
 import org.apache.clerezza.rdf.core.impl.TypedLiteralImpl;
@@ -248,9 +250,16 @@ public class ClerezzaBackend extends Abs
         }
 
         Collection<Resource> result = new ArrayList<Resource>();
-        Iterator<Triple> triples = graph.filter((NonLiteral) subject, (UriRef) property, null);
-        while (triples.hasNext()) {
-            result.add(triples.next().getObject());
+        Lock readLock = readLockGraph();
+        try {
+            Iterator<Triple> triples = graph.filter((NonLiteral) subject, (UriRef) property, null);
+            while (triples.hasNext()) {
+                result.add(triples.next().getObject());
+            }
+        } finally {
+            if(readLock != null){ //will be null if #graph is a read-only graph instance
+                readLock.unlock();
+            }
         }
 
         return result;
@@ -263,11 +272,17 @@ public class ClerezzaBackend extends Abs
         }
 
         Collection<Resource> result = new ArrayList<Resource>();
-        Iterator<Triple> triples = graph.filter(null, (UriRef) property, object);
-        while (triples.hasNext()) {
-            result.add(triples.next().getSubject());
+        Lock readLock = readLockGraph();
+        try {
+            Iterator<Triple> triples = graph.filter(null, (UriRef) property, object);
+            while (triples.hasNext()) {
+                result.add(triples.next().getSubject());
+            }
+        } finally {
+            if(readLock != null){ //will be null if #graph is a read-only graph instance
+                readLock.unlock();
+            }
         }
-
         return result;
     }
 
@@ -370,4 +385,20 @@ public class ClerezzaBackend extends Abs
     public ThreadPoolExecutor getThreadPool() {
         return null;
     }
+    
+    /**
+     * @return the readLock or <code>null</code>if no read lock is needed
+     */
+    private Lock readLockGraph() {
+        final Lock readLock;
+        if(graph instanceof LockableMGraph){
+            readLock = ((LockableMGraph)graph).getLock().readLock();
+            readLock.lock();
+        } else {
+            readLock = null;
+        }
+        return readLock;
+    }
+
+    
 }
\ No newline at end of file