You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/07/01 15:49:05 UTC

svn commit: r959662 - in /incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src: main/java/org/apache/clerezza/platform/typerendering/ test/java/org/apache/cle...

Author: reto
Date: Thu Jul  1 13:49:05 2010
New Revision: 959662

URL: http://svn.apache.org/viewvc?rev=959662&view=rev
Log:
added missing lock on config-graph

Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/RendereringManagerTest.java

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java?rev=959662&r1=959661&r2=959662&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java Thu Jul  1 13:49:05 2010
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.regex.Pattern;
 import javax.ws.rs.core.MediaType;
@@ -50,6 +51,7 @@ import org.apache.clerezza.rdf.core.Reso
 import org.apache.clerezza.rdf.core.Triple;
 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.event.FilterTriple;
 import org.apache.clerezza.rdf.core.event.GraphListener;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
@@ -79,7 +81,7 @@ public class RenderletRendererFactoryImp
 	private Logger logger = LoggerFactory.getLogger(RenderletRendererFactoryImpl.class);
 	
 	@Reference(target = PlatformConfig.CONFIG_GRAPH_FILTER)
-	private MGraph configGraph;
+	private LockableMGraph configGraph;
 
 	private static final String RDF_TYPE_PRIO_LIST_URI =
 			"http://tpf.localhost/rdfTypePriorityList";
@@ -168,43 +170,49 @@ public class RenderletRendererFactoryImp
 			UriRef rdfType,
 			String mode,
 			MediaType mediaType, boolean builtIn) {
-		removeExisting(rdfType, mode, mediaType, builtIn);
-		BNode renderletDefinition = new BNode();
-		GraphNode renderletDefinitionNode = new GraphNode(renderletDefinition, configGraph);
-		configGraph.add(new TripleImpl(renderletDefinition,
-				TYPERENDERING.renderlet, LiteralFactory.getInstance().createTypedLiteral(renderlet)));
-		if (renderingSpecification != null) {
+		Lock l = configLock.writeLock();
+		l.lock();
+		try {
+			removeExisting(rdfType, mode, mediaType, builtIn);
+			BNode renderletDefinition = new BNode();
+			GraphNode renderletDefinitionNode = new GraphNode(renderletDefinition, configGraph);
 			configGraph.add(new TripleImpl(renderletDefinition,
-					TYPERENDERING.renderingSpecification, renderingSpecification));
-		}
-		configGraph.add(new TripleImpl(renderletDefinition,
-				TYPERENDERING.renderedType, rdfType));
-
-		configGraph.add(new TripleImpl(renderletDefinition,
-				TYPERENDERING.mediaType, LiteralFactory.getInstance().createTypedLiteral(mediaType.toString())));
-		renderletDefinitionNode.addProperty(RDF.type, TYPERENDERING.RenderletDefinition);
-
-		if (builtIn) {
-			renderletDefinitionNode.addProperty(RDF.type,
-					TYPERENDERING.BuiltInRenderletDefinition);
-		} else {
-			renderletDefinitionNode.addProperty(RDF.type,
-					TYPERENDERING.CustomRenderletDefinition);
-		}
+					TYPERENDERING.renderlet, LiteralFactory.getInstance().createTypedLiteral(renderlet)));
+			if (renderingSpecification != null) {
+				configGraph.add(new TripleImpl(renderletDefinition,
+						TYPERENDERING.renderingSpecification, renderingSpecification));
+			}
+			configGraph.add(new TripleImpl(renderletDefinition,
+					TYPERENDERING.renderedType, rdfType));
 
-		if (mode != null) {
 			configGraph.add(new TripleImpl(renderletDefinition,
-					TYPERENDERING.renderingMode, LiteralFactory.getInstance().createTypedLiteral(mode)));
-		}
+					TYPERENDERING.mediaType, LiteralFactory.getInstance().createTypedLiteral(mediaType.toString())));
+			renderletDefinitionNode.addProperty(RDF.type, TYPERENDERING.RenderletDefinition);
 
-		synchronized(this) {
-			if (!rdfTypePrioList.contains(rdfType)) {
-				if (rdfType.equals(RDFS.Resource)) {
-					rdfTypePrioList.add(RDFS.Resource);
-				} else {
-					rdfTypePrioList.add(0, rdfType);
+			if (builtIn) {
+				renderletDefinitionNode.addProperty(RDF.type,
+						TYPERENDERING.BuiltInRenderletDefinition);
+			} else {
+				renderletDefinitionNode.addProperty(RDF.type,
+						TYPERENDERING.CustomRenderletDefinition);
+			}
+
+			if (mode != null) {
+				configGraph.add(new TripleImpl(renderletDefinition,
+						TYPERENDERING.renderingMode, LiteralFactory.getInstance().createTypedLiteral(mode)));
+			}
+
+			synchronized(this) {
+				if (!rdfTypePrioList.contains(rdfType)) {
+					if (rdfType.equals(RDFS.Resource)) {
+						rdfTypePrioList.add(RDFS.Resource);
+					} else {
+						rdfTypePrioList.add(0, rdfType);
+					}
 				}
 			}
+		} finally {
+			l.unlock();
 		}
 		type2DefinitionMap = null;
 	}
@@ -230,12 +238,18 @@ public class RenderletRendererFactoryImp
 
 		//keeping this independent of typedefinitionmap to allow better performance
 		List<RenderletDefinition> definitionList = new ArrayList<RenderletDefinition>();
-		Iterator<Triple> renderletDefsTriple =
-				configGraph.filter(null, TYPERENDERING.renderedType, rdfType);
-		while (renderletDefsTriple.hasNext()) {
-			definitionList.add(
-					new RenderletDefinition((BNode) renderletDefsTriple.next().getSubject(),
-					configGraph));
+		Lock l = configGraph.getLock().readLock();
+		l.lock();
+		try {
+			Iterator<Triple> renderletDefsTriple =
+					configGraph.filter(null, TYPERENDERING.renderedType, rdfType);
+			while (renderletDefsTriple.hasNext()) {
+				definitionList.add(
+						new RenderletDefinition((BNode) renderletDefsTriple.next().getSubject(),
+						configGraph));
+			}
+		} finally {
+			l.unlock();
 		}
 		for (RenderletDefinition renderletDef : definitionList) {
 
@@ -286,7 +300,8 @@ public class RenderletRendererFactoryImp
 
 	protected void unbindRenderlet(ServiceReference renderletRef) {
 		logger.info("Unbind renderlet of bundle {}", renderletRef.getBundle().getSymbolicName());
-		configLock.writeLock().lock();
+		Lock l = configLock.writeLock();
+		l.unlock();
 		try {
 			if (!renderletRefStore.remove(renderletRef)) {
 				String servicePid = (String) renderletRef.getProperty(Constants.SERVICE_PID);
@@ -294,7 +309,7 @@ public class RenderletRendererFactoryImp
 				unregisterRenderletService(servicePid, renderlet);
 			}
 		} finally {
-			configLock.writeLock().unlock();
+			l.unlock();
 		}
 	}
 
@@ -374,11 +389,11 @@ public class RenderletRendererFactoryImp
 		}
 	}
 
-	protected void bindConfigGraph(MGraph configGraph) {
+	protected void bindConfigGraph(LockableMGraph configGraph) {
 		this.configGraph = configGraph;
 	}
 
-	protected void unbindConfigGraph(MGraph configGraph) {
+	protected void unbindConfigGraph(LockableMGraph configGraph) {
 		this.configGraph = null;
 	}
 }

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/RendereringManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/RendereringManagerTest.java?rev=959662&r1=959661&r2=959662&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/RendereringManagerTest.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/test/java/org/apache/clerezza/platform/typerendering/RendereringManagerTest.java Thu Jul  1 13:49:05 2010
@@ -21,6 +21,7 @@ package org.apache.clerezza.platform.typ
 import java.util.ArrayList;
 import javax.ws.rs.ext.RuntimeDelegate;
 import org.apache.clerezza.rdf.core.Resource;
+import org.apache.clerezza.rdf.core.access.LockableMGraphWrapper;
 import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
 import org.apache.clerezza.triaxrs.delegate.RuntimeDelegateImpl;
 
@@ -38,7 +39,7 @@ public class RendereringManagerTest exte
 		manager = renderer;
 		renderer.rdfTypePrioList = new ArrayList<Resource>();		
 		RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
-		renderer.bindConfigGraph(new SimpleMGraph());
+		renderer.bindConfigGraph(new LockableMGraphWrapper(new SimpleMGraph()));
 		renderer.registerRenderletService(renderletMockA.pid, renderletMockA);
 		renderer.registerRenderletService(renderletMockB.pid, renderletMockB);
 		return renderer;