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


Reply via email to