Author: reto
Date: Mon Mar 22 11:34:43 2010
New Revision: 926040
URL: http://svn.apache.org/viewvc?rev=926040&view=rev
Log:
CLEREZZA-166: no longer caching iterator but locking on indicidual operations
Added:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockingIterator.java
- copied, changed from r924844,
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/PreReadingIterator.java
Removed:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/PreReadingIterator.java
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockableMGraphWrapper.java
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml?rev=926040&r1=926039&r2=926040&view=diff
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml
(original)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml
Mon Mar 22 11:34:43 2010
@@ -26,7 +26,6 @@
<dependency>
<artifactId>org.apache.clerezza.integrationtest.web</artifactId>
<groupId>org.apache.clerezza</groupId>
- <version>0.3-incubating-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.clerezza.ext</groupId>
@@ -42,9 +41,8 @@
<version>3.1.0</version>
</dependency>
<dependency>
- <groupId>org.apache.commons</groupId>
-
<artifactId>com.springsource.org.apache.commons.codec</artifactId>
- <version>1.3.0</version>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
</dependency>
<!-- web cosole and deps -->
<dependency>
@@ -98,3 +96,5 @@
</dependency>
</dependencies>
</project>
+
+
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockableMGraphWrapper.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockableMGraphWrapper.java?rev=926040&r1=926039&r2=926040&view=diff
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockableMGraphWrapper.java
(original)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockableMGraphWrapper.java
Mon Mar 22 11:34:43 2010
@@ -66,7 +66,7 @@ class LockableMGraphWrapper implements L
public Iterator<Triple> filter(NonLiteral subject, UriRef predicate,
Resource object) {
readLock.lock();
try {
- return new PreReadingIterator(wrapped.filter(subject,
predicate, object), this);
+ return new LockingIterator(wrapped.filter(subject,
predicate, object), lock);
} finally {
readLock.unlock();
}
@@ -93,6 +93,7 @@ class LockableMGraphWrapper implements L
}
@Override
+ @SuppressWarnings("element-type-mismatch")
public boolean contains(Object o) {
readLock.lock();
try {
@@ -106,7 +107,7 @@ class LockableMGraphWrapper implements L
public Iterator<Triple> iterator() {
readLock.lock();
try {
- return new PreReadingIterator(wrapped.iterator(), this);
+ return new LockingIterator(wrapped.iterator(), lock);
} finally {
readLock.unlock();
}
Copied:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockingIterator.java
(from r924844,
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/PreReadingIterator.java)
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockingIterator.java?p2=incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockingIterator.java&p1=incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/PreReadingIterator.java&r1=924844&r2=926040&rev=926040&view=diff
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/PreReadingIterator.java
(original)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/LockingIterator.java
Mon Mar 22 11:34:43 2010
@@ -18,50 +18,56 @@
*/
package org.apache.clerezza.rdf.core.access;
-import java.util.ArrayList;
import java.util.Iterator;
-import java.util.List;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
import org.apache.clerezza.rdf.core.Triple;
-import org.apache.clerezza.rdf.core.TripleCollection;
/**
* Wrapps an iterator<Triple> reading all elements to a cache on construction
* and returning them from that cache.
* @author reto
*/
-class PreReadingIterator implements Iterator<Triple> {
+class LockingIterator implements Iterator<Triple> {
private Iterator<Triple> base;
- private final TripleCollection tc;
- private Triple lastReturned;
+ private Lock readLock;
+ private Lock writeLock;
- public PreReadingIterator(Iterator<Triple> iterator, TripleCollection
tc) {
- List<Triple> data = new ArrayList<Triple>();
- while (iterator.hasNext()) {
- data.add(iterator.next());
- }
- base = data.iterator();
- this.tc = tc;
+ public LockingIterator(Iterator<Triple> iterator, ReadWriteLock lock) {
+ base = iterator;
+ readLock = lock.readLock();
+ writeLock = lock.writeLock();
}
@Override
public boolean hasNext() {
- return base.hasNext();
+ readLock.lock();
+ try {
+ return base.hasNext();
+ } finally {
+ readLock.unlock();
+ }
}
@Override
public Triple next() {
- lastReturned = base.next();
- return lastReturned;
+ readLock.lock();
+ try {
+ return base.next();
+ } finally {
+ readLock.unlock();
+ }
}
@Override
public void remove() {
- if (lastReturned == null) {
- throw new IllegalStateException();
+ writeLock.lock();
+ try {
+ base.remove();
+ } finally {
+ writeLock.unlock();
}
- tc.remove(lastReturned);
- lastReturned = null;
}
}