You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by gv...@apache.org on 2007/02/25 07:21:05 UTC
svn commit: r511456 - in
/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans:
ComponentConfigBean.java TemplateComponentConfigBean.java
TemplateConfigBean.java
Author: gvanmatre
Date: Sat Feb 24 22:21:04 2007
New Revision: 511456
URL: http://svn.apache.org/viewvc?view=rev&rev=511456
Log:
The clay template handlers that parse and cache meta-data, were not correctly guarding shared data structures (SHALE-390). This patch was provided by Martin Bergljung.
Modified:
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java
shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java?view=diff&rev=511456&r1=511455&r2=511456
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java Sat Feb 24 22:21:04 2007
@@ -24,6 +24,7 @@
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
@@ -218,7 +219,7 @@
parser.setConfig(this);
// map holding the resource watchers
- watchDogs = new TreeMap();
+ watchDogs = Collections.synchronizedMap(new TreeMap());
// create the watch dog with a list of config files to look for changes
WatchDog watchDog = new WatchDog(getConfigDefinitions(configFiles.toString()),
@@ -315,7 +316,7 @@
*/
public ComponentConfigBean() {
final int size = 1000;
- displayElements = new HashMap(size);
+ displayElements = Collections.synchronizedMap(new HashMap(size));
}
/**
@@ -328,9 +329,7 @@
*/
public ComponentBean getElement(String jsfid) {
ComponentBean element = null;
- synchronized (displayElements) {
element = (ComponentBean) displayElements.get(jsfid);
- }
return element;
}
@@ -468,59 +467,57 @@
*
* @param b component bean needing isa parent assigned
*/
- public void assignParent(ComponentBean b) {
+ public synchronized void assignParent(ComponentBean b) {
- synchronized (displayElements) {
- if (b instanceof InnerComponentBean) {
+ if (b instanceof InnerComponentBean) {
- // these elements are like inner classes
- // set the extends to the element so the
- // parent can be generically resolved
- if (b.getJsfid() != null) {
- b.setExtends(b.getJsfid());
- }
+ // these elements are like inner classes
+ // set the extends to the element so the
+ // parent can be generically resolved
+ if (b.getJsfid() != null) {
+ b.setExtends(b.getJsfid());
}
+ }
- // look for a meta inheritance property
- if (b.getExtends() != null) {
-
- // assign the parent to a top-level display element
- b.setIsAParent(getTopLevelElement(b.getExtends()));
- }
+ // look for a meta inheritance property
+ if (b.getExtends() != null) {
- // resolve inheritance of nested components
- Iterator ci = b.getChildrenIterator();
- while (ci.hasNext()) {
- assignParent((ComponentBean) ci.next());
- }
+ // assign the parent to a top-level display element
+ b.setIsAParent(getTopLevelElement(b.getExtends()));
+ }
- // resolve inheritance of converter
- if (b.getConverter() != null) {
- assignParent(b.getConverter());
- }
+ // resolve inheritance of nested components
+ Iterator ci = b.getChildrenIterator();
+ while (ci.hasNext()) {
+ assignParent((ComponentBean) ci.next());
+ }
- // resolve inheritance of validators
- Iterator vi = b.getValidatorIterator();
- while (vi.hasNext()) {
- assignParent((ComponentBean) vi.next());
- }
+ // resolve inheritance of converter
+ if (b.getConverter() != null) {
+ assignParent(b.getConverter());
+ }
- // resolve inheritance of value change listeners
- vi = b.getValueChangeListenerIterator();
- while (vi.hasNext()) {
- assignParent((ComponentBean) vi.next());
- }
- vi = null;
+ // resolve inheritance of validators
+ Iterator vi = b.getValidatorIterator();
+ while (vi.hasNext()) {
+ assignParent((ComponentBean) vi.next());
+ }
- // resolve inheritance of action listeners
- vi = b.getActionListenerIterator();
- while (vi.hasNext()) {
- assignParent((ComponentBean) vi.next());
- }
- vi = null;
+ // resolve inheritance of value change listeners
+ vi = b.getValueChangeListenerIterator();
+ while (vi.hasNext()) {
+ assignParent((ComponentBean) vi.next());
+ }
+ vi = null;
+ // resolve inheritance of action listeners
+ vi = b.getActionListenerIterator();
+ while (vi.hasNext()) {
+ assignParent((ComponentBean) vi.next());
}
+ vi = null;
+
}
@@ -1267,7 +1264,7 @@
* @param forceReload reload the group of config files
* @return <code>true</code> if the group was reloaded
*/
- public boolean refresh(boolean forceReload) {
+ public synchronized boolean refresh(boolean forceReload) {
boolean wasDirty = false;
@@ -1334,9 +1331,7 @@
return wasDirty;
}
- synchronized (displayElements) {
- wasDirty = watchDog.refresh(forceReload);
- }
+ wasDirty = watchDog.refresh(forceReload);
watchDog = null;
Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java?view=diff&rev=511456&r1=511455&r2=511456
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java Sat Feb 24 22:21:04 2007
@@ -20,6 +20,7 @@
*/
package org.apache.shale.clay.config.beans;
+import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
@@ -65,7 +66,7 @@
parser.setConfig(this);
// map holding the resource watchers
- watchDogs = new TreeMap();
+ watchDogs = Collections.synchronizedMap(new TreeMap());
if (param != null && param.length() > 0) {
@@ -135,9 +136,7 @@
//check for dirty cache
if (defaultWatchDog != null) {
- synchronized (displayElements) {
- wasDirty = defaultWatchDog.refresh(forceReload);
- }
+ wasDirty = defaultWatchDog.refresh(forceReload);
}
return wasDirty;
Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java?view=diff&rev=511456&r1=511455&r2=511456
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java Sat Feb 24 22:21:04 2007
@@ -21,6 +21,7 @@
package org.apache.shale.clay.config.beans;
import java.util.BitSet;
+import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
@@ -64,20 +65,20 @@
}
if (watchDog == null || super.getElement(jsfid.toString()) == null) {
- //The first time the page is created, create a watcher
+ //The first time the page is created, create a watcher
- watchDog = new WatchDog(getConfigDefinitions(jsfid.toString()), jsfid.toString());
+ watchDog = new WatchDog(getConfigDefinitions(jsfid.toString()), jsfid.toString());
- // register by name
- watchDogs.put(watchDog.getName(), watchDog);
+ // register by name
+ watchDogs.put(watchDog.getName(), watchDog);
- //loads the HTML template the first time and when file
- //has been modified
- watchDog.refresh(false);
- } else {
- //check to see if an existing html template
- //needs reloaded
- watchDog.refresh(false);
+ //loads the HTML template the first time and when file
+ //has been modified
+ watchDog.refresh(false);
+ } else {
+ //check to see if an existing html template
+ //needs reloaded
+ watchDog.refresh(false);
}
// returns the cached element
@@ -120,7 +121,7 @@
parser = new ClayTemplateParser();
parser.setConfig(this);
- watchDogs = new TreeMap();
+ watchDogs = Collections.synchronizedMap(new TreeMap());
}
@@ -175,21 +176,18 @@
*/
public boolean refresh(boolean forceReload) {
if (forceReload) {
- //synchronized (displayElements) {
-
- //remove all old templates
- Iterator wi = watchDogs.entrySet().iterator();
- while (wi.hasNext()) {
- Map.Entry e = (Map.Entry) wi.next();
- WatchDog watchDog = (WatchDog) e.getValue();
- clear(watchDog.getName());
- if (watchDog != null) {
- watchDog.destroy();
- }
-
+ //remove all old templates
+ Iterator wi = watchDogs.entrySet().iterator();
+ while (wi.hasNext()) {
+ Map.Entry e = (Map.Entry) wi.next();
+ WatchDog watchDog = (WatchDog) e.getValue();
+ clear(watchDog.getName());
+ if (watchDog != null) {
+ watchDog.destroy();
}
- watchDogs.clear();
- //}
+
+ }
+ watchDogs.clear();
}
return forceReload;