You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/03/05 14:05:18 UTC
svn commit: r383313 - in
/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon:
components/treeprocessor/ components/treeprocessor/sitemap/
core/container/spring/
Author: cziegeler
Date: Sun Mar 5 05:05:18 2006
New Revision: 383313
URL: http://svn.apache.org/viewcvs?rev=383313&view=rev
Log:
Cleanup
Modified:
cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java
cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java
cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryUtil.java
Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java?rev=383313&r1=383312&r2=383313&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java Sun Mar 5 05:05:18 2006
@@ -16,7 +16,6 @@
package org.apache.cocoon.components.treeprocessor;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -26,7 +25,6 @@
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.cocoon.ProcessingException;
@@ -52,7 +50,6 @@
import org.apache.cocoon.sitemap.SitemapExecutor;
import org.apache.cocoon.util.location.Location;
import org.apache.cocoon.util.location.LocationImpl;
-import org.apache.commons.jci.listeners.NotificationListener;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
/**
@@ -62,7 +59,7 @@
* @version $Id$
*/
public class ConcreteTreeProcessor extends AbstractLogEnabled
- implements Processor, Disposable, ExecutionContext, NotificationListener {
+ implements Processor, Disposable, ExecutionContext {
private static final String BEAN_FACTORY_STACK_REQUEST_ATTRIBUTE = CocoonBeanFactory.class.getName() + "/Stack";
@@ -90,14 +87,11 @@
private SitemapExecutor sitemapExecutor;
/** Optional event listeners for the enter sitemap event */
- private List enterSitemapEventListeners = new ArrayList();
+ private List enterSitemapEventListeners = Collections.EMPTY_LIST;
/** Optional event listeners for the leave sitemap event */
- private List leaveSitemapEventListeners = new ArrayList();
+ private List leaveSitemapEventListeners = Collections.EMPTY_LIST;
- /** Needs a reload? */
- protected volatile boolean needsReload = false;
-
/** Processor attributes */
protected Map processorAttributes = new HashMap();
@@ -116,13 +110,6 @@
this.sitemapExecutor = sitemapExecutor;
}
- public void handleNotification() {
- if (getLogger().isDebugEnabled()) {
- getLogger().debug(this + " got notified that a reload is required");
- }
- needsReload = true;
- }
-
/** Set the processor data, result of the treebuilder job */
public void setProcessorData(ConfigurableBeanFactory beanFactory,
ServiceManager manager,
@@ -213,10 +200,6 @@
}
}
- boolean isReloadNeeded() {
- return needsReload;
- }
-
public TreeProcessor getWrappingProcessor() {
return this.wrappingProcessor;
}
@@ -325,8 +308,8 @@
this.enteredSitemap(enterEvent);
final Iterator enterSEI = this.enterSitemapEventListeners.iterator();
while ( enterSEI.hasNext() ) {
- final TreeBuilder.EventComponent current = (TreeBuilder.EventComponent)enterSEI.next();
- ((EnterSitemapEventListener)current.component).enteredSitemap(enterEvent);
+ final EnterSitemapEventListener current = (EnterSitemapEventListener)enterSEI.next();
+ current.enteredSitemap(enterEvent);
}
}
@@ -360,8 +343,8 @@
this.leftSitemap(leaveEvent);
final Iterator leaveSEI = this.leaveSitemapEventListeners.iterator();
while ( leaveSEI.hasNext() ) {
- final TreeBuilder.EventComponent current = (TreeBuilder.EventComponent)leaveSEI.next();
- ((LeaveSitemapEventListener)current.component).leftSitemap(leaveEvent);
+ final LeaveSitemapEventListener current = (LeaveSitemapEventListener)leaveSEI.next();
+ current.leftSitemap(leaveEvent);
}
}
@@ -444,26 +427,13 @@
this.rootNode = null;
this.sitemapExecutor = null;
- // dispose listeners
- this.disposeListeners(this.enterSitemapEventListeners);
- this.disposeListeners(this.leaveSitemapEventListeners);
+ // clear listeners
+ this.enterSitemapEventListeners.clear();
+ this.leaveSitemapEventListeners.clear();
if ( this.beanFactory != null ) {
this.beanFactory.destroySingletons();
this.beanFactory = null;
}
- }
-
- protected void disposeListeners(List l) {
- Iterator i = l.iterator();
- while ( i.hasNext() ) {
- final TreeBuilder.EventComponent current = (TreeBuilder.EventComponent)i.next();
- if ( current.releaseUsingManager ) {
- this.manager.release(current.component);
- } else {
- ContainerUtil.dispose(current.component);
- }
- }
- l.clear();
}
private class TreeProcessorRedirector extends ForwardRedirector {
Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java?rev=383313&r1=383312&r2=383313&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java Sun Mar 5 05:05:18 2006
@@ -20,7 +20,7 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.service.ServiceManager;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
/**
*
@@ -30,21 +30,10 @@
String ROLE = TreeBuilder.class.getName();
- public static class EventComponent {
-
- public final Object component;
- public final boolean releaseUsingManager;
-
- public EventComponent(Object c, boolean releaseUsingManager) {
- this.component = c;
- this.releaseUsingManager = releaseUsingManager;
- }
- }
+ ConfigurableListableBeanFactory getBeanFactory();
- ConfigurableBeanFactory getBeanFactory();
-
ServiceManager getServiceManager();
-
+
ConcreteTreeProcessor getProcessor();
void setProcessor(ConcreteTreeProcessor processor);
@@ -92,7 +81,6 @@
*/
ProcessingNode setupNode(ProcessingNode node, Configuration config) throws Exception;
-
/**
* Get the type for a statement : it returns the 'type' attribute if present,
* and otherwhise the default hint for the <code>ServiceSelector</code> identified by
@@ -121,13 +109,11 @@
* @return A list of {@link EventComponent}s.
*/
List getEnterSitemapEventListeners();
-
+
/**
* Return all event listers that are registered for the
* {@link org.apache.cocoon.sitemap.LeaveSitemapEvent}.
* @return A list of {@link EventComponent}s.
*/
List getLeaveSitemapEventListeners();
-
-
}
Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java?rev=383313&r1=383312&r2=383313&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java Sun Mar 5 05:05:18 2006
@@ -334,7 +334,7 @@
this.environmentHelper.changeContext(this.source, "");
}
- if (this.concreteProcessor == null || this.concreteProcessor.isReloadNeeded() ||
+ if (this.concreteProcessor == null ||
(this.checkReload && this.source.getLastModified() != this.lastModified)) {
buildConcreteProcessor(env);
}
@@ -355,7 +355,7 @@
// Now that we entered the synchronized area, recheck what's already
// been checked in process().
- if (this.concreteProcessor != null && source.getLastModified() == this.lastModified && !this.concreteProcessor.isReloadNeeded()) {
+ if (this.concreteProcessor != null && source.getLastModified() == this.lastModified) {
// Nothing changed
return;
}
Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java?rev=383313&r1=383312&r2=383313&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java Sun Mar 5 05:05:18 2006
@@ -34,14 +34,12 @@
import org.apache.avalon.framework.configuration.AbstractConfiguration;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.avalon.framework.configuration.SAXConfigurationHandler;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.ServiceSelector;
@@ -64,8 +62,8 @@
import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import org.apache.cocoon.core.Settings;
-import org.apache.cocoon.core.container.spring.BeanFactoryUtil;
import org.apache.cocoon.core.container.spring.AvalonEnvironment;
+import org.apache.cocoon.core.container.spring.BeanFactoryUtil;
import org.apache.cocoon.core.container.spring.CocoonBeanFactory;
import org.apache.cocoon.core.container.spring.ConfigReader;
import org.apache.cocoon.core.container.spring.ConfigurationInfo;
@@ -78,9 +76,7 @@
import org.apache.cocoon.sitemap.EnterSitemapEventListener;
import org.apache.cocoon.sitemap.LeaveSitemapEventListener;
import org.apache.cocoon.sitemap.PatternException;
-import org.apache.cocoon.sitemap.SitemapListener;
import org.apache.cocoon.sitemap.SitemapParameters;
-import org.apache.cocoon.util.ClassUtils;
import org.apache.cocoon.util.StringUtils;
import org.apache.cocoon.util.location.Location;
import org.apache.cocoon.util.location.LocationImpl;
@@ -92,7 +88,7 @@
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
/**
* The tree builder for the sitemap language.
@@ -111,7 +107,7 @@
protected Map attributes = new HashMap();
/** Spring application context. */
- protected ConfigurableBeanFactory beanFactory;
+ protected ConfigurableListableBeanFactory beanFactory;
// ----- lifecycle-related objects ------
@@ -150,7 +146,7 @@
*/
private ServiceManager itsManager;
- private ConfigurableBeanFactory itsBeanFactory;
+ private ConfigurableListableBeanFactory itsBeanFactory;
/**
* Helper object which sets up components in the context of the processor
@@ -253,7 +249,7 @@
/**
* @see org.apache.cocoon.components.treeprocessor.TreeBuilder#getBeanFactory()
*/
- public ConfigurableBeanFactory getBeanFactory() {
+ public ConfigurableListableBeanFactory getBeanFactory() {
return this.itsBeanFactory;
}
@@ -396,6 +392,8 @@
this.itsBeanFactory = this.createBeanFactory(this.itsContext, componentConfig);
this.itsManager = (ServiceManager) this.itsBeanFactory.getBean(ServiceManager.class
.getName());
+ // only register listeners if a new bean factory is created
+ this.registerListeners();
} else {
this.itsManager = manager;
}
@@ -655,25 +653,15 @@
* Build a component manager with the contents of the <map:components>
* element of the tree.
*/
- protected ConfigurableBeanFactory createBeanFactory(Context context,
+ protected ConfigurableListableBeanFactory createBeanFactory(Context context,
Configuration config)
throws Exception {
- ServiceManager newManager;
-
- // before we pass the configuration we have to strip the
- // additional configuration parts, like listeners etc. as these
- // are not configurations for the service manager
- final DefaultConfiguration c = new DefaultConfiguration(config.getName(), config
- .getLocation(), config.getNamespace(), "");
- c.addAll(config);
- c.removeChild(config.getChild("listeners"));
-
// setup spring container
// first, get the correct parent
- ConfigurableBeanFactory parentContext = this.beanFactory;
+ ConfigurableListableBeanFactory parentContext = this.beanFactory;
final Request request = ContextHelper.getRequest(context);
if (request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE) != null) {
- parentContext = (ConfigurableBeanFactory) request
+ parentContext = (ConfigurableListableBeanFactory) request
.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE);
}
@@ -685,58 +673,27 @@
ae.settings = (Settings) this.beanFactory.getBean(Settings.ROLE);
final ConfigurationInfo parentConfigInfo = (ConfigurationInfo) parentContext
.getBean(ConfigurationInfo.class.getName());
- final ConfigurationInfo ci = ConfigReader.readConfiguration(c, parentConfigInfo, ae);
+ final ConfigurationInfo ci = ConfigReader.readConfiguration(config, parentConfigInfo, ae);
- final ConfigurableBeanFactory sitemapContext = BeanFactoryUtil.createBeanFactory(ae, ci,
+ final ConfigurableListableBeanFactory sitemapContext = BeanFactoryUtil.createBeanFactory(ae, ci,
parentContext, false);
- newManager = (ServiceManager) sitemapContext.getBean(ServiceManager.class.getName());
- Logger sitemapLogger = (Logger) sitemapContext.getBean(Logger.class.getName());
-
- // and finally the listeners
- final Configuration listenersWrapper = config.getChild("listeners", false);
- if (listenersWrapper != null) {
- final Configuration[] listeners = listenersWrapper.getChildren("listener");
- for (int i = 0; i < listeners.length; i++) {
- final Configuration current = listeners[i];
- final TreeBuilder.EventComponent listener = this.createListener(newManager,
- sitemapLogger, context, current);
- if (!(listener.component instanceof SitemapListener)) {
- throw new ConfigurationException(
- "Listener must implement the SitemapListener interface.");
- }
- this.addListener(listener);
- }
- }
return sitemapContext;
}
/**
- * Create a listener
- */
- protected TreeBuilder.EventComponent createListener(ServiceManager manager,
- Logger sitemapLogger, Context context, Configuration config) throws Exception {
- // role or class?
- final String role = config.getAttribute("role", null);
- if (role != null) {
- return new TreeBuilder.EventComponent(manager.lookup(role), true);
- }
- final String className = config.getAttribute("class");
- final Object component = ClassUtils.newInstance(className);
-
- LifecycleHelper.setupComponent(component, sitemapLogger, context, manager, config);
-
- return new TreeBuilder.EventComponent(component, false);
- }
-
- /**
- * Add a listener
+ * Register all registered sitemap listeners
*/
- protected void addListener(TreeBuilder.EventComponent listener) {
- if (listener.component instanceof EnterSitemapEventListener) {
- this.enterSitemapEventListeners.add(listener);
- } else if (listener.component instanceof LeaveSitemapEventListener) {
- this.leaveSitemapEventListeners.add(listener);
+ protected void registerListeners() {
+ String[] names = this.itsBeanFactory.getBeanNamesForType(EnterSitemapEventListener.class);
+ for(int i=0; i<names.length; i++) {
+ final String beanName = names[i];
+ this.enterSitemapEventListeners.add(this.itsBeanFactory.getBean(beanName));
+ }
+ names = this.itsBeanFactory.getBeanNamesForType(LeaveSitemapEventListener.class);
+ for(int i=0; i<names.length; i++) {
+ final String beanName = names[i];
+ this.leaveSitemapEventListeners.add(this.itsBeanFactory.getBean(beanName));
}
}
@@ -1085,11 +1042,11 @@
* @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory)
*/
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
- if (!(beanFactory instanceof ConfigurableBeanFactory)) {
+ if (!(beanFactory instanceof ConfigurableListableBeanFactory)) {
throw new BeanCreationException(
"Bean factory for tree processor must be an instance of "
- + ConfigurableBeanFactory.class.getName());
+ + ConfigurableListableBeanFactory.class.getName());
}
- this.beanFactory = (ConfigurableBeanFactory) beanFactory;
+ this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
}
}
Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryUtil.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryUtil.java?rev=383313&r1=383312&r2=383313&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryUtil.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryUtil.java Sun Mar 5 05:05:18 2006
@@ -25,19 +25,15 @@
import org.apache.avalon.excalibur.logger.Log4JConfLoggerManager;
import org.apache.avalon.excalibur.logger.ServletLogger;
import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.framework.logger.Logger;
-import org.apache.avalon.framework.service.ServiceManager;
import org.apache.cocoon.ProcessingUtil;
import org.apache.cocoon.acting.Action;
import org.apache.cocoon.components.ContextHelper;
-import org.apache.cocoon.components.LifecycleHelper;
import org.apache.cocoon.components.pipeline.ProcessingPipeline;
import org.apache.cocoon.components.treeprocessor.ProcessorComponentInfo;
-import org.apache.cocoon.components.treeprocessor.TreeBuilder;
import org.apache.cocoon.core.CoreInitializationException;
import org.apache.cocoon.core.Settings;
import org.apache.cocoon.core.container.util.ConfigurationBuilder;
@@ -49,20 +45,16 @@
import org.apache.cocoon.selection.Selector;
import org.apache.cocoon.serialization.Serializer;
import org.apache.cocoon.servlet.CocoonServlet;
-import org.apache.cocoon.sitemap.EnterSitemapEventListener;
-import org.apache.cocoon.sitemap.LeaveSitemapEventListener;
-import org.apache.cocoon.sitemap.SitemapListener;
import org.apache.cocoon.transformation.Transformer;
-import org.apache.cocoon.util.ClassUtils;
import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.web.context.WebApplicationContext;
/**
- * This utility class helps in creating new Spring {@link ConfigurableBeanFactory} objects
+ * This utility class helps in creating new Spring {@link ConfigurableListableBeanFactory} objects
* which support the Avalon style component configuration. It also offers help in setting
* up the root logger for Cocoon.
*
@@ -82,10 +74,10 @@
* @return A new bean factory.
* @throws Exception
*/
- public static ConfigurableBeanFactory createBeanFactory(AvalonEnvironment env,
- ConfigurationInfo info,
- BeanFactory parent,
- boolean addCocoon)
+ public static ConfigurableListableBeanFactory createBeanFactory(AvalonEnvironment env,
+ ConfigurationInfo info,
+ BeanFactory parent,
+ boolean addCocoon)
throws Exception {
final String xmlConfig = (new XmlConfigCreator(env.logger)).createConfig(info, addCocoon);
Resource rsc = new ByteArrayResource(xmlConfig.getBytes("utf-8"));
@@ -117,7 +109,7 @@
* @return A new root application factory.
* @throws Exception
*/
- public static ConfigurableBeanFactory createRootApplicationContext(AvalonEnvironment env)
+ public static ConfigurableListableBeanFactory createRootApplicationContext(AvalonEnvironment env)
throws Exception {
final ApplicationContext parent = (ApplicationContext)env.servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
CocoonBeanFactory factory = new CocoonBeanFactory(parent);
@@ -258,29 +250,16 @@
* Build a bean factory with the contents of the <map:components> element of
* the tree.
*/
- protected ConfigurableBeanFactory createBeanFactory(Logger sitemapLogger,
- Configuration config,
- Context sitemapContext)
+ protected ConfigurableListableBeanFactory createBeanFactory(Logger sitemapLogger,
+ Configuration config,
+ Context sitemapContext)
throws Exception {
- ServiceManager newManager;
-
- // before we pass the configuration we have to strip the
- // additional configuration parts, like classpath etc. as these
- // are not configurations for the service manager
- final DefaultConfiguration c = new DefaultConfiguration(config.getName(),
- config.getLocation(),
- config.getNamespace(),
- "");
- c.addAll(config);
- c.removeChild(config.getChild("classpath"));
- c.removeChild(config.getChild("listeners"));
-
// setup spring container
// first, get the correct parent
BeanFactory parentContext = this.beanFactory;
final Request request = ContextHelper.getRequest(sitemapContext);
if ( request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE) != null ) {
- parentContext = (ConfigurableBeanFactory)request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE);
+ parentContext = (ConfigurableListableBeanFactory)request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE);
}
final AvalonEnvironment ae = new AvalonEnvironment();
@@ -293,64 +272,11 @@
ae.servletContext = ((ServletConfig)sitemapContext.get(CocoonServlet.CONTEXT_SERVLET_CONFIG)).getServletContext();
ae.settings = (Settings)parentContext.getBean(Settings.ROLE);
final ConfigurationInfo parentConfigInfo = (ConfigurationInfo)parentContext.getBean(ConfigurationInfo.class.getName());
- final ConfigurationInfo ci = ConfigReader.readConfiguration(c, parentConfigInfo, ae);
+ final ConfigurationInfo ci = ConfigReader.readConfiguration(config, parentConfigInfo, ae);
- final ConfigurableBeanFactory sitemapFactory =
+ final ConfigurableListableBeanFactory sitemapFactory =
BeanFactoryUtil.createBeanFactory(ae, ci, parentContext, false);
- newManager = (ServiceManager) sitemapFactory.getBean(ServiceManager.class.getName());
- sitemapLogger = (Logger)sitemapFactory.getBean(Logger.class.getName());
-
- // TODO: Add listeners configured by a class as beans to the factory
- // Then the factory will handle init/dispose of those components as well
- // and the sitemap language can lookup all handles by getting all
- // beans of that type.
- // and finally the listeners
-
- final Configuration listenersWrapper = config.getChild("listeners", false);
- if ( listenersWrapper != null ) {
- final Configuration[] listeners = listenersWrapper.getChildren("listener");
- for(int i = 0; i < listeners.length; i++) {
- final Configuration current = listeners[i];
- final TreeBuilder.EventComponent listener = this.createListener(newManager, sitemapLogger, sitemapContext, current);
- if ( !(listener.component instanceof SitemapListener) ) {
- throw new ConfigurationException("Listener must implement the SitemapListener interface.");
- }
- this.addListener(listener);
- }
- }
return sitemapFactory;
- }
-
- /**
- * Create a listener
- */
- protected TreeBuilder.EventComponent createListener(ServiceManager manager,
- Logger sitemapLogger,
- Context context,
- Configuration config)
- throws Exception {
- // role or class?
- final String role = config.getAttribute("role", null);
- if ( role != null ) {
- return new TreeBuilder.EventComponent(manager.lookup(role), true);
- }
- final String className = config.getAttribute("class");
- final Object component = ClassUtils.newInstance(className);
-
- LifecycleHelper.setupComponent(component, sitemapLogger, context, manager, config);
-
- return new TreeBuilder.EventComponent(component, false);
- }
-
- /**
- * Add a listener
- */
- protected void addListener(TreeBuilder.EventComponent listener) {
- if ( listener.component instanceof EnterSitemapEventListener ) {
- //this.enterSitemapEventListeners.add(listener);
- } else if ( listener.component instanceof LeaveSitemapEventListener ) {
- //this.leaveSitemapEventListeners.add(listener);
- }
}
}