Author: tommaso
Date: Thu Jun 24 06:47:01 2010
New Revision: 957435

URL: http://svn.apache.org/viewvc?rev=957435&view=rev
Log:
[CLEREZZA-245] - use lock method of GraphNode to ensure thread safe graph reads

Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/hierarchy/HierarchyService.java

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/hierarchy/HierarchyService.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/hierarchy/HierarchyService.java?rev=957435&r1=957434&r2=957435&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/hierarchy/HierarchyService.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/hierarchy/HierarchyService.java
 Thu Jun 24 06:47:01 2010
@@ -18,37 +18,27 @@
  */
 package org.apache.clerezza.platform.content.hierarchy;
 
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import org.apache.clerezza.rdf.core.event.GraphEvent;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.Service;
-import org.osgi.service.component.ComponentContext;
 import org.apache.clerezza.platform.config.PlatformConfig;
 import org.apache.clerezza.platform.config.SystemConfig;
 import org.apache.clerezza.platform.graphprovider.content.ContentGraphProvider;
 import org.apache.clerezza.platform.security.UserUtil;
 import org.apache.clerezza.platform.usermanager.UserManager;
-import org.apache.clerezza.rdf.core.LiteralFactory;
-import org.apache.clerezza.rdf.core.MGraph;
-import org.apache.clerezza.rdf.core.NonLiteral;
-import org.apache.clerezza.rdf.core.Triple;
-import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.*;
 import org.apache.clerezza.rdf.core.event.FilterTriple;
+import org.apache.clerezza.rdf.core.event.GraphEvent;
 import org.apache.clerezza.rdf.core.event.GraphListener;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
-import org.apache.clerezza.rdf.ontologies.DCTERMS;
-import org.apache.clerezza.rdf.ontologies.FOAF;
-import org.apache.clerezza.rdf.ontologies.HIERARCHY;
-import org.apache.clerezza.rdf.ontologies.PLATFORM;
-import org.apache.clerezza.rdf.ontologies.RDF;
+import org.apache.clerezza.rdf.ontologies.*;
 import org.apache.clerezza.rdf.utils.GraphNode;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.service.component.ComponentContext;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import java.util.concurrent.locks.Lock;
 
 /**
  * The hierarchy service is an OSGi service that provides methods for managing
@@ -442,20 +432,27 @@ public class HierarchyService {
        private void addCreationProperties(HierarchyNode node) {
                GraphNode agentNode = getCreator();
                if (!(node.getObjects(FOAF.maker).hasNext() || agentNode == 
null)) {
+      Lock lock = node.readLock();
+      try {
+        lock.lock();
+        Iterator<Triple> agents = node.getGraph().filter(null, 
PLATFORM.userName,
+            agentNode.getObjects(PLATFORM.userName).next());
+
+        NonLiteral agent = null;
+        if (agents.hasNext()) {
+          agent = (NonLiteral) agents.next().getSubject();
+        } else {
+          agent = (NonLiteral) agentNode.getNode();
+        }
+        node.addProperty(FOAF.maker, agent);
+        node.getGraph().add(new TripleImpl(agent,
+            PLATFORM.userName, agentNode.getObjects(
+            PLATFORM.userName).next()));
+      }
+      finally{
+        lock.unlock();
+      }
 
-                       Iterator<Triple> agents = node.getGraph().filter(null, 
PLATFORM.userName,
-                                       
agentNode.getObjects(PLATFORM.userName).next());
-
-                       NonLiteral agent = null;
-                       if (agents.hasNext()) {
-                               agent = (NonLiteral) agents.next().getSubject();
-                       } else {
-                               agent = (NonLiteral) agentNode.getNode();
-                       }
-                       node.addProperty(FOAF.maker, agent);
-                       node.getGraph().add(new TripleImpl(agent,
-                                       PLATFORM.userName, agentNode.getObjects(
-                                       PLATFORM.userName).next()));
                }
                node.addProperty(DCTERMS.created,
                                
LiteralFactory.getInstance().createTypedLiteral(new Date()));


Reply via email to