Update of /var/cvs/src/org/mmbase/cache
In directory james.mmbase.org:/tmp/cvs-serv4852
Modified Files:
CacheManager.java ChainedReleaseStrategy.java
Log Message:
moved code to parse XML to fill ChainedReleaseStrategoy to
ChainedReleaseStrategy itself (this makes it reusable)
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/cache
Index: CacheManager.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/cache/CacheManager.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- CacheManager.java 23 Feb 2008 14:03:23 -0000 1.24
+++ CacheManager.java 19 Mar 2008 15:32:40 -0000 1.25
@@ -24,7 +24,7 @@
* Cache manager manages the static methods of [EMAIL PROTECTED] Cache}. If
you prefer you can call them on this in stead.
*
* @since MMBase-1.8
- * @version $Id: CacheManager.java,v 1.24 2008/02/23 14:03:23 andre Exp $
+ * @version $Id: CacheManager.java,v 1.25 2008/03/19 15:32:40 michiel Exp $
*/
public class CacheManager {
@@ -177,104 +177,24 @@
queryCache.getReleaseStrategy().removeAllStrategies();
log.debug("found a SearchQueryCache: " + cacheName);
//see if there are globally configured release
strategies
- List<ReleaseStrategy> strategies =
findReleaseStrategies(xmlReader, xmlReader.getElementByPath("caches"));
- if(strategies != null){
- log.debug("found " + strategies.size() + "
globally configured strategies");
- queryCache.addReleaseStrategies(strategies);
+ Element releaseStrategies =
xmlReader.getElementByPath("caches.releaseStrategies");
+ if (releaseStrategies != null) {
+
queryCache.getReleaseStrategy().fillFromXml(releaseStrategies);
}
+
queryCache.getReleaseStrategy().fillFromXml(cacheElement);
- //see if there are strategies configured for this cache
- strategies = findReleaseStrategies(xmlReader,
cacheElement);
- if(strategies != null){
- log.debug("found " + strategies.size() + "
strategies for cache " + cache.getName());
- queryCache.addReleaseStrategies(strategies);
- }
if (queryCache.getReleaseStrategy().size() == 0) {
log.warn("No release-strategies configured for
cache " + queryCache + " (nor globally configured); falling back to basic
release strategy");
queryCache.addReleaseStrategy(new
BasicReleaseStrategy());
}
+ log.service("Release strategies for " +
queryCache.getName() + ": " + queryCache.getReleaseStrategy());
}
}
}
}
}
- /**
- * @param reader xml document reader instance
- * @param parentElement the parent of the releaseStrategies element
- * @return List of ReleaseStrategy instances
- * @since 1.8
- */
- private static List<ReleaseStrategy> findReleaseStrategies(DocumentReader
reader, Element parentElement) {
- List<ReleaseStrategy> result = new ArrayList<ReleaseStrategy>();
-
- List<Element> strategyParentIterator =
reader.getChildElements(parentElement, "releaseStrategies");
- if(strategyParentIterator.size() == 0){
- return null;
- } else{
- parentElement = strategyParentIterator.get(0);
-
- //now find the strategies
- for (Element strategy: reader.getChildElements(parentElement,
"strategy")) {
- String strategyClassName = reader.getElementValue(strategy);
- log.debug("found strategy in configuration: "+
strategyClassName);
- try {
- ReleaseStrategy releaseStrategy =
getStrategyInstance(strategyClassName);
- log.debug("still there after trying to get a strategy
instance... Instance is " + releaseStrategy==null ? "null" : "not null");
-
- //check if we got something
- if(releaseStrategy != null){
- result.add(releaseStrategy);
- log.debug("Successfully created and added
"+releaseStrategy.getName() + " instance");
- } else {
- log.error("release strategy instance is null.");
- }
-
- } catch (CacheConfigurationException e1) {
- // here we throw a runtime exception, because there is
- // no way we can deal with this error.
- throw new RuntimeException("Cache configuration error: " +
e1.toString(), e1);
- }
- }
- }
- return result;
- }
- /**
- * I moved this code away from <code>configure()</code> just to
- * clean up a little, and keep the code readable
- * XXX: Who is I?
- * @param strategyClassName
- * @since 1.8
- */
- private static ReleaseStrategy getStrategyInstance(String
strategyClassName) throws CacheConfigurationException {
- log.debug("getStrategyInstance()");
- Class strategyClass;
- ReleaseStrategy strategy = null;
- try {
- strategyClass = Class.forName(strategyClassName);
- strategy = (ReleaseStrategy) strategyClass.newInstance();
- log.debug("created strategy instance: "+strategyClassName);
-
- } catch (ClassCastException e){
- log.debug(strategyClassName + " can not be cast to strategy");
- throw new CacheConfigurationException(strategyClassName + " can
not be cast to strategy");
- } catch (ClassNotFoundException e) {
- log.debug("exception getStrategyInstance()");
- throw new CacheConfigurationException("Class "+strategyClassName +
- "was not found");
- } catch (InstantiationException e) {
- log.debug("exception getStrategyInstance()");
- throw new CacheConfigurationException("A new instance of " +
strategyClassName +
- "could not be created: " + e.toString());
- } catch (IllegalAccessException e) {
- log.debug("exception getStrategyInstance()");
- throw new CacheConfigurationException("A new instance of " +
strategyClassName +
- "could not be created: " + e.toString());
- }
- log.debug("exit getStrategyInstance()");
- return strategy;
- }
/**
* The caches can be configured with an XML file, this file can
Index: ChainedReleaseStrategy.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/cache/ChainedReleaseStrategy.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- ChainedReleaseStrategy.java 25 Feb 2007 18:18:24 -0000 1.22
+++ ChainedReleaseStrategy.java 19 Mar 2008 15:32:40 -0000 1.23
@@ -11,11 +11,16 @@
import java.util.*;
+import org.mmbase.util.xml.DocumentReader;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
import org.mmbase.core.event.*;
import org.mmbase.module.core.MMObjectNode;
import org.mmbase.storage.search.SearchQuery;
import java.util.concurrent.CopyOnWriteArrayList;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
/**
* This class will manage a collection of <code>ReleaseStrategy</code>
@@ -23,10 +28,12 @@
*
* @since MMBase-1.8
* @author Ernst Bunders
- * @version $Id: ChainedReleaseStrategy.java,v 1.22 2007/02/25 18:18:24
nklasens Exp $
+ * @version $Id: ChainedReleaseStrategy.java,v 1.23 2008/03/19 15:32:40
michiel Exp $
*/
public class ChainedReleaseStrategy extends ReleaseStrategy {
+ private static final Logger log =
Logging.getLoggerInstance(ChainedReleaseStrategy.class);
+
private final List<ReleaseStrategy> releaseStrategies = new
CopyOnWriteArrayList<ReleaseStrategy>();
//this map is used to store the 'enabled' status of wrapped strategies
when this one is being disabled
@@ -37,6 +44,71 @@
}
+ /**
+ * @since MMBase-1.8.6
+ */
+ public void fillFromXml(final Element element) {
+ //now find the strategies
+ NodeList childNodes = element.getChildNodes();
+ for (int k = 0; k < childNodes.getLength(); k++) {
+ if (childNodes.item(k) instanceof Element) {
+ Element childElement = (Element) childNodes.item(k);
+ if ("strategy".equals(childElement.getLocalName())) {
+ try {
+ String strategyClassName =
DocumentReader.getNodeTextValue(childElement);
+ ReleaseStrategy releaseStrategy =
getStrategyInstance(strategyClassName);
+ log.debug("still there after trying to get a strategy
instance... Instance is " + releaseStrategy==null ? "null" : "not null");
+ //check if we got something
+ if(releaseStrategy != null){
+ addReleaseStrategy(releaseStrategy);
+ log.debug("Successfully created and added
"+releaseStrategy.getName() + " instance");
+ } else {
+ log.error("release strategy instance is null.");
+ }
+
+ } catch (CacheConfigurationException e1) {
+ // here we throw a runtime exception, because there is
+ // no way we can deal with this error.
+ throw new RuntimeException("Cache configuration error:
" + e1.toString(), e1);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @param strategyClassName
+ * @since 1.8.6
+ */
+ private static ReleaseStrategy getStrategyInstance(String
strategyClassName) throws CacheConfigurationException {
+ log.debug("getStrategyInstance()");
+ Class strategyClass;
+ ReleaseStrategy strategy = null;
+ try {
+ strategyClass = Class.forName(strategyClassName);
+ strategy = (ReleaseStrategy) strategyClass.newInstance();
+ log.debug("created strategy instance: "+strategyClassName);
+
+ } catch (ClassCastException e){
+ log.debug(strategyClassName + " can not be cast to strategy");
+ throw new CacheConfigurationException(strategyClassName + " can
not be cast to strategy");
+ } catch (ClassNotFoundException e) {
+ log.debug("exception getStrategyInstance()");
+ throw new CacheConfigurationException("Class "+strategyClassName +
+ "was not found");
+ } catch (InstantiationException e) {
+ log.debug("exception getStrategyInstance()");
+ throw new CacheConfigurationException("A new instance of " +
strategyClassName +
+ "could not be created: " + e.toString());
+ } catch (IllegalAccessException e) {
+ log.debug("exception getStrategyInstance()");
+ throw new CacheConfigurationException("A new instance of " +
strategyClassName +
+ "could not be created: " + e.toString());
+ }
+ log.debug("exit getStrategyInstance()");
+ return strategy;
+ }
+
/**
* This method provides a way of globally switching off all strategies
this one wraps.
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs