Author: reto
Date: Mon Jun 7 13:48:53 2010
New Revision: 952226
URL: http://svn.apache.org/viewvc?rev=952226&view=rev
Log:
CLEREZZA-230: type2DefinitionMap recreated only when needed, speeding up boot
process
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
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=952226&r1=952225&r2=952226&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
Mon Jun 7 13:48:53 2010
@@ -84,8 +84,7 @@ public class RenderletRendererFactoryImp
private static final String RDF_TYPE_PRIO_LIST_URI =
"http://tpf.localhost/rdfTypePriorityList";
- private Map<UriRef, RenderletDefinition[]> type2DefinitionMap =
- Collections.synchronizedMap(new HashMap<UriRef,
RenderletDefinition[]>());
+ private Map<UriRef, RenderletDefinition[]> type2DefinitionMap = null;
/**
* Mapping of service pid's of renderlets to the service objects.
*/
@@ -121,7 +120,7 @@ public class RenderletRendererFactoryImp
if (!rdfTypes.contains(prioRdfType)) {
continue;
}
- RenderletDefinition[] renderletDefs =
type2DefinitionMap.get(prioRdfType);
+ RenderletDefinition[] renderletDefs =
getType2DefinitionMap().get(prioRdfType);
if (renderletDefs == null) {
continue;
}
@@ -207,7 +206,7 @@ public class RenderletRendererFactoryImp
}
}
}
- setupType2DefinitionMap();
+ type2DefinitionMap = null;
}
private void removeExisting(UriRef rdfType, String mode,
@@ -228,18 +227,21 @@ public class RenderletRendererFactoryImp
private GraphNode findDefinition(UriRef rdfType, String mode,
MediaType mediaType, boolean builtIn) {
- RenderletDefinition[] renderletDefs =
type2DefinitionMap.get(rdfType);
- if (renderletDefs == null) {
- return null;
+
+ //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));
}
- for (RenderletDefinition renderletDef : renderletDefs) {
+ for (RenderletDefinition renderletDef : definitionList) {
if (builtIn && !renderletDef.isBuiltIn()) {
continue;
}
- if (!rdfType.equals(renderletDef.getRdfType())) {
- continue;
- }
if (!equals(mediaType, renderletDef.getMediaType())) {
continue;
}
@@ -325,11 +327,21 @@ public class RenderletRendererFactoryImp
new FilterTriple(null, RDF.first, null), 1000);
this.componentContext = componentContext;
registerRenderletsFromStore();
- setupType2DefinitionMap();
}
- private void setupType2DefinitionMap() {
- type2DefinitionMap.clear();
+ private Map<UriRef, RenderletDefinition[]> getType2DefinitionMap() {
+ if (type2DefinitionMap == null) {
+ synchronized(this) {
+ if (type2DefinitionMap == null) {
+ createType2DefinitionMap();
+ }
+ }
+ }
+ return type2DefinitionMap;
+ }
+
+ private void createType2DefinitionMap() {
+ type2DefinitionMap = new HashMap<UriRef,
RenderletDefinition[]>(50);
for (Resource prioRdfType : rdfTypePrioList) {
Iterator<Triple> renderletDefs =
configGraph.filter(null,
TYPERENDERING.renderedType, prioRdfType);