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 2010/08/30 11:13:12 UTC

svn commit: r990735 - in /incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src: main/java/org/apache/clerezza/platform/typehandlerspace/ test/java/org/apache/clerezza/platform/typehandlerspace/

Author: mir
Date: Mon Aug 30 09:13:12 2010
New Revision: 990735

URL: http://svn.apache.org/viewvc?rev=990735&view=rev
Log:
CLEREZZA-288: added missing locks

Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpace.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/test/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpaceTest.java

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java?rev=990735&r1=990734&r2=990735&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java Mon Aug 30 09:13:12 2010
@@ -27,6 +27,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.locks.Lock;
 
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
@@ -38,6 +39,7 @@ import org.apache.clerezza.platform.conf
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.Resource;
 import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
 import org.apache.clerezza.rdf.ontologies.RDFS;
 import org.apache.clerezza.rdf.utils.RdfList;
 import org.apache.felix.scr.annotations.ReferencePolicy;
@@ -69,7 +71,7 @@ public class TypeHandlerDiscoveryImpl im
 	private final Map<UriRef, Object> typeHandlerMap = Collections.synchronizedMap(
 			new HashMap<UriRef, Object>());
 	
-	
+	LockableMGraph systemGraph;
 
 	protected void bindTypeHandler(Object typeHandler) {
 		if (typePriorityList != null) {
@@ -88,10 +90,12 @@ public class TypeHandlerDiscoveryImpl im
 	protected void bindSystemGraph(MGraph systemGraph) {
 		typePriorityList = new RdfList(
 				new UriRef("http://tpf.localhost/typePriorityList"), systemGraph);
+		this.systemGraph = (LockableMGraph) systemGraph;
 	}
 
 	protected void unbindSystemGraph(MGraph systemGraph) {
 		typePriorityList = null;
+		this.systemGraph = null;
 	}
 
 	protected void activate(ComponentContext context) throws Exception {
@@ -109,13 +113,19 @@ public class TypeHandlerDiscoveryImpl im
 
 			@Override
 			public Object run() {
-				for (Resource type : typePriorityList) {
-					if (types.contains(type)) {
-						Object result = typeHandlerMap.get(type);
-						if (result != null) {
-							return result;
+				Lock readLock = systemGraph.getLock().readLock();
+				readLock.lock();
+				try {
+					for (Resource type : typePriorityList) {
+						if (types.contains(type)) {
+							Object result = typeHandlerMap.get(type);
+							if (result != null) {
+								return result;
+							}
 						}
 					}
+				} finally {
+					readLock.unlock();
 				}
 				return typeHandlerMap.get(RDFS.Resource);
 			}
@@ -130,12 +140,18 @@ public class TypeHandlerDiscoveryImpl im
 		}		
 		for (String typeUriString : supportedTypes.types()) {
 			UriRef typeUri = new UriRef(typeUriString);
-			if (!typePriorityList.contains(typeUri)) {
-				if (supportedTypes.prioritize()) {
-					typePriorityList.add(0, typeUri);
-				} else {
-					typePriorityList.add(typeUri);
+			Lock writeLock = systemGraph.getLock().writeLock();
+			writeLock.lock();
+			try {
+				if (!typePriorityList.contains(typeUri)) {
+					if (supportedTypes.prioritize()) {
+						typePriorityList.add(0, typeUri);
+					} else {
+						typePriorityList.add(typeUri);
+					}
 				}
+			} finally {
+				writeLock.unlock();
 			}
 			typeHandlerMap.put(typeUri, component);
 		}

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpace.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpace.java?rev=990735&r1=990734&r2=990735&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpace.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpace.java Mon Aug 30 09:13:12 2010
@@ -21,6 +21,7 @@ package org.apache.clerezza.platform.typ
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.concurrent.locks.Lock;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -28,13 +29,13 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Request;
 import javax.ws.rs.core.UriInfo;
 
-import org.apache.clerezza.jaxrs.extensions.HttpRequest;
 import org.apache.clerezza.jaxrs.extensions.ResourceMethodException;
 import org.apache.clerezza.jaxrs.extensions.RootResourceExecutor;
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.Resource;
 import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
 import org.apache.clerezza.rdf.core.access.TcManager;
 import org.apache.clerezza.rdf.ontologies.RDF;
 import org.apache.clerezza.rdf.utils.GraphNode;
@@ -102,7 +103,7 @@ public class TypeHandlerSpace {
 	}
 
 	private Object getTypeHandler(String absoluteUriPath) throws ResourceMethodException {
-		MGraph contentMGraph = tcManager.getMGraph(CONTENT_GRAPH_URI);
+		LockableMGraph contentMGraph = tcManager.getMGraph(CONTENT_GRAPH_URI);
 		UriRef uri = new UriRef(absoluteUriPath);
 
 		Set<UriRef> rdfTypes = getRdfTypesOfUriRef(contentMGraph, uri);
@@ -111,19 +112,26 @@ public class TypeHandlerSpace {
 		
 	}
 
-	private Set<UriRef> getRdfTypesOfUriRef(MGraph contentMGraph, UriRef uri) {
-		Iterator<Triple> typeStmts = contentMGraph.filter(uri, RDF.type, null);
+	private Set<UriRef> getRdfTypesOfUriRef(LockableMGraph contentMGraph, UriRef uri) {
 		Set<UriRef> rdfTypes = new HashSet<UriRef>();
-		while (typeStmts.hasNext()) {
-			Triple triple = typeStmts.next();
-			Resource typeStmtObj = triple.getObject();
-			if (!(typeStmtObj instanceof UriRef)) {
-				throw new RuntimeException(
-						"RDF type is expected to be a URI but is "+typeStmtObj+
-						"(in "+triple+")");
+		Lock readLock = contentMGraph.getLock().readLock();
+		readLock.lock();
+		try {
+			Iterator<Triple> typeStmts = contentMGraph.filter(uri, RDF.type, null);
+
+			while (typeStmts.hasNext()) {
+				Triple triple = typeStmts.next();
+				Resource typeStmtObj = triple.getObject();
+				if (!(typeStmtObj instanceof UriRef)) {
+					throw new RuntimeException(
+							"RDF type is expected to be a URI but is " + typeStmtObj
+							+ "(in " + triple + ")");
+				}
+				UriRef rdfType = (UriRef) typeStmtObj;
+				rdfTypes.add(rdfType);
 			}
-			UriRef rdfType = (UriRef) typeStmtObj;
-			rdfTypes.add(rdfType);
+		} finally {
+			readLock.unlock();
 		}
 		return rdfTypes;
 	}

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/test/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpaceTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/test/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpaceTest.java?rev=990735&r1=990734&r2=990735&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/test/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpaceTest.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/test/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerSpaceTest.java Mon Aug 30 09:13:12 2010
@@ -45,10 +45,10 @@ import org.apache.clerezza.rdf.core.even
 import org.apache.clerezza.rdf.core.event.GraphListener;
 import org.apache.clerezza.triaxrs.RootResourceExecutorImpl;
 import org.apache.clerezza.jaxrs.testutils.TestWebServer;
-import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.access.LockableMGraph;
+import org.apache.clerezza.rdf.core.access.LockableMGraphWrapper;
 import org.apache.clerezza.rdf.core.access.TcManager;
 import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
@@ -60,7 +60,7 @@ import org.apache.clerezza.rdf.ontologie
  */
 public class TypeHandlerSpaceTest {
 	
-	private static MGraph mGraph = new SimpleMGraph();
+	private static LockableMGraph mGraph = new LockableMGraphWrapper(new SimpleMGraph());
 
 	UriRef myType = new UriRef("org.example/myType");
 	
@@ -210,7 +210,7 @@ public class TypeHandlerSpaceTest {
 
 							@Override
 							public ReadWriteLock getLock() {
-								throw new UnsupportedOperationException("Not supported yet.");
+								return mGraph.getLock();
 							}
 
 							@Override