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/20 21:13:10 UTC

svn commit: r387294 - in /cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon: components/treeprocessor/ components/treeprocessor/sitemap/ core/ core/container/spring/

Author: cziegeler
Date: Mon Mar 20 12:13:07 2006
New Revision: 387294

URL: http://svn.apache.org/viewcvs?rev=387294&view=rev
Log:
Fix core reload bug and improve factory creation
Use console logger for now

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/MutableSettings.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AvalonServiceSelector.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryUtil.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ConfigReader.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/XmlConfigCreator.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=387294&r1=387293&r2=387294&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 Mon Mar 20 12:13:07 2006
@@ -264,6 +264,8 @@
             }
             stack.push(oldContext);
         }
+        System.out.println("Setting factory: " + this.beanFactory);
+        System.out.println("Parent:          " + this.beanFactory.getParentBeanFactory());
         request.setAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE, this.beanFactory, Request.REQUEST_SCOPE);
     }
 
@@ -301,11 +303,11 @@
         }
 
         try {
+            final EnterSitemapEvent enterEvent = new EnterSitemapEvent(this, environment);
+            this.enteredSitemap(enterEvent);
             // invoke listeners
             // only invoke if pipeline is not internally
             if ( !context.isBuildingPipelineOnly() ) {
-                final EnterSitemapEvent enterEvent = new EnterSitemapEvent(this, environment);
-                this.enteredSitemap(enterEvent);
                 final Iterator enterSEI = this.enterSitemapEventListeners.iterator();
                 while ( enterSEI.hasNext() ) {
                     final EnterSitemapEventListener current = (EnterSitemapEventListener)enterSEI.next();
@@ -336,11 +338,11 @@
 
         } finally {
             this.sitemapExecutor.leaveSitemap(this, environment.getObjectModel());
+            final LeaveSitemapEvent leaveEvent = new LeaveSitemapEvent(this, environment);
+            this.leftSitemap(leaveEvent);
             // invoke listeners
             // only invoke if pipeline is not internally
             if ( !context.isBuildingPipelineOnly() ) {
-                final LeaveSitemapEvent leaveEvent = new LeaveSitemapEvent(this, environment);
-                this.leftSitemap(leaveEvent);
                 final Iterator leaveSEI = this.leaveSitemapEventListeners.iterator();
                 while ( leaveSEI.hasNext() ) {
                     final LeaveSitemapEventListener current = (LeaveSitemapEventListener)leaveSEI.next();

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=387294&r1=387293&r2=387294&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 Mon Mar 20 12:13:07 2006
@@ -106,14 +106,14 @@
     /**
      * Return all event listers that are registered for the
      * {@link org.apache.cocoon.sitemap.EnterSitemapEvent}.
-     * @return A list of {@link EventComponent}s.
+     * @return A list of components.
      */
     List getEnterSitemapEventListeners();
 
     /**
      * Return all event listers that are registered for the
      * {@link org.apache.cocoon.sitemap.LeaveSitemapEvent}.
-     * @return A list of {@link EventComponent}s.
+     * @return A list of components.
      */
     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=387294&r1=387293&r2=387294&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 Mon Mar 20 12:13:07 2006
@@ -410,14 +410,9 @@
                 treeBuilder.setProcessor(newProcessor);
 
                 ProcessingNode root = treeBuilder.build(sitemapProgram);
-                ConfigurableListableBeanFactory factory = treeBuilder.getBeanFactory();
-                if ( factory == null ) {
-                    factory = this.beanFactory;
-                } else {
-                    this.beanFactory = factory;
-                }
+                this.beanFactory = treeBuilder.getBeanFactory();
                 newProcessor.setProcessorData(
-                        factory,
+                        this.beanFactory,
                         treeBuilder.getServiceManager(),
                         root,
                         treeBuilder.getDisposableNodes(),

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=387294&r1=387293&r2=387294&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 Mon Mar 20 12:13:07 2006
@@ -388,14 +388,11 @@
         // a configuration
         // FIXME: Internal configurations doesn't work in a non bean factory
         // environment
+        this.itsBeanFactory = this.createBeanFactory(this.itsContext, componentConfig);
+        this.itsManager = (ServiceManager) this.itsBeanFactory.getBean(ServiceManager.class.getName());
         if (componentConfig != null) {
-            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;
         }
         this.itsComponentInfo = (ProcessorComponentInfo) this.itsManager
                 .lookup(ProcessorComponentInfo.ROLE);
@@ -658,27 +655,27 @@
     throws Exception {
         // setup spring container
         // first, get the correct parent
-        ConfigurableListableBeanFactory parentContext = this.beanFactory;
+        ConfigurableListableBeanFactory parentFactory = this.beanFactory;
         final Request request = ContextHelper.getRequest(context);
         if (request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE) != null) {
-            parentContext = (ConfigurableListableBeanFactory) request
+            parentFactory = (ConfigurableListableBeanFactory) request
                     .getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE);
         }
 
-        final AvalonEnvironment ae = new AvalonEnvironment();
-        ae.context = context;
-        ae.logger = this.getLogger();
-        ae.servletContext = ((ServletConfig) context.get(CocoonServlet.CONTEXT_SERVLET_CONFIG))
-                .getServletContext();
-        ae.settings = (Settings) this.beanFactory.getBean(Settings.ROLE);
-        final ConfigurationInfo parentConfigInfo = (ConfigurationInfo) parentContext
-                .getBean(ConfigurationInfo.class.getName());
-        final ConfigurationInfo ci = ConfigReader.readConfiguration(config, parentConfigInfo, ae);
-
-        final ConfigurableListableBeanFactory sitemapContext = BeanFactoryUtil.createBeanFactory(ae, ci,
-                parentContext, false);
-
-        return sitemapContext;
+        if ( config != null ) {
+            final AvalonEnvironment ae = new AvalonEnvironment();
+            ae.context = context;
+            ae.logger = this.getLogger();
+            ae.servletContext = ((ServletConfig) context.get(CocoonServlet.CONTEXT_SERVLET_CONFIG))
+                    .getServletContext();
+            ae.settings = (Settings) this.beanFactory.getBean(Settings.ROLE);
+            final ConfigurationInfo parentConfigInfo = (ConfigurationInfo) parentFactory
+                    .getBean(ConfigurationInfo.class.getName());
+            final ConfigurationInfo ci = ConfigReader.readConfiguration(config, parentConfigInfo, ae);
+    
+            return BeanFactoryUtil.createBeanFactory(ae, ci, parentFactory, false);
+        }
+        return parentFactory;
     }
 
     /**

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/MutableSettings.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/MutableSettings.java?rev=387294&r1=387293&r2=387294&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/MutableSettings.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/MutableSettings.java Mon Mar 20 12:13:07 2006
@@ -938,7 +938,7 @@
      * @see org.apache.cocoon.core.BaseSettings#getCreationTime()
      */
     public long getCreationTime() {
-        if ( this.creationTime != null ) {
+        if ( this.creationTime == null ) {
             if ( this.parent != null ) {
                 return this.parent.getCreationTime();
             }

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AvalonServiceSelector.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AvalonServiceSelector.java?rev=387294&r1=387293&r2=387294&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AvalonServiceSelector.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AvalonServiceSelector.java Mon Mar 20 12:13:07 2006
@@ -16,8 +16,10 @@
 package org.apache.cocoon.core.container.spring;
 
 import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.ServiceSelector;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
 
 /**
  * This bean acts like a Avalon {@link ServiceSelector}.
@@ -25,15 +27,21 @@
  * @since 2.2
  * @version $Id$
  */
-public class AvalonServiceSelector implements ServiceSelector {
+public class AvalonServiceSelector implements BeanFactoryAware {
 
     protected final String role;
-    protected final ServiceManager manager;
     protected String defaultKey;
+    protected BeanFactory beanFactory;
 
-    public AvalonServiceSelector(ServiceManager manager, String r) {
+    public AvalonServiceSelector(String r) {
         this.role = r + '/';
-        this.manager = manager;
+    }
+
+    /**
+     * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory)
+     */
+    public void setBeanFactory(BeanFactory factory) throws BeansException {
+        this.beanFactory = factory;
     }
 
     public void setDefault(String value) {
@@ -47,20 +55,20 @@
         if ( key == null || key.toString().length() == 0 ) {
             key = this.defaultKey;
         }
-        return this.manager.lookup(this.role + key);
+        return this.beanFactory.getBean(this.role + key);
     }
 
     /**
      * @see org.apache.avalon.framework.service.ServiceSelector#isSelectable(java.lang.Object)
      */
     public boolean isSelectable(Object key) {
-        return this.manager.hasService(this.role + key);
+        return this.beanFactory.containsBean(this.role + key);
     }
 
     /**
      * @see org.apache.avalon.framework.service.ServiceSelector#release(java.lang.Object)
      */
     public void release(Object component) {
-        this.manager.release(component);
+        // nothing to do
     }
 }

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=387294&r1=387293&r2=387294&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 Mon Mar 20 12:13:07 2006
@@ -28,6 +28,7 @@
 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.ConsoleLogger;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.cocoon.ProcessingUtil;
 import org.apache.cocoon.acting.Action;
@@ -63,7 +64,7 @@
  */
 public class BeanFactoryUtil {
 
-    protected BeanFactory beanFactory;
+    protected ConfigurableListableBeanFactory beanFactory;
 
     /**
      * Create a new (sub) bean factory.
@@ -153,8 +154,9 @@
     protected static Logger initLogger(ServletContext servletContext,
                                        Settings       settings)
     throws Exception {
+        return new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
         // create a bootstrap logger
-        int logLevel;
+     /*   int logLevel;
         final String logLevelString = settings.getBootstrapLogLevel();
         if ( "DEBUG".equalsIgnoreCase(logLevelString) ) {
             logLevel = ServletLogger.LEVEL_DEBUG;
@@ -207,7 +209,7 @@
         if (accesslogger == null) {
             accesslogger = "cocoon";
         }
-        return loggerManager.getLoggerForCategory(accesslogger);
+        return loggerManager.getLoggerForCategory(accesslogger);*/
     }
 
     protected static void changeLogLevel(Configuration[] configs, String level) {
@@ -266,27 +268,30 @@
     throws Exception {
         // setup spring container
         // first, get the correct parent
-        BeanFactory parentContext = this.beanFactory;
+        ConfigurableListableBeanFactory parentFactory = this.beanFactory;
         final Request request = ContextHelper.getRequest(sitemapContext);
-        if ( request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE) != null ) {
-            parentContext = (ConfigurableListableBeanFactory)request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE);
+        if (request.getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE) != null) {
+            parentFactory = (ConfigurableListableBeanFactory) request
+                    .getAttribute(CocoonBeanFactory.BEAN_FACTORY_REQUEST_ATTRIBUTE);
         }
 
-        final AvalonEnvironment ae = new AvalonEnvironment();
-        ae.context = sitemapContext;
-        if ( sitemapLogger != null ) {
-            ae.logger = sitemapLogger;
-        } else {
-            ae.logger = (Logger)parentContext.getBean(ProcessingUtil.LOGGER_ROLE);
+        if ( config != null ) {
+            final AvalonEnvironment ae = new AvalonEnvironment();
+            ae.context = sitemapContext;
+            if ( sitemapLogger != null ) {
+                ae.logger = sitemapLogger;
+            } else {
+                ae.logger = (Logger)parentFactory.getBean(ProcessingUtil.LOGGER_ROLE);
+            }
+            ae.servletContext = ((ServletConfig) sitemapContext.get(CocoonServlet.CONTEXT_SERVLET_CONFIG))
+                    .getServletContext();
+            ae.settings = (Settings) this.beanFactory.getBean(Settings.ROLE);
+            final ConfigurationInfo parentConfigInfo = (ConfigurationInfo) parentFactory
+                    .getBean(ConfigurationInfo.class.getName());
+            final ConfigurationInfo ci = ConfigReader.readConfiguration(config, parentConfigInfo, ae);
+    
+            return BeanFactoryUtil.createBeanFactory(ae, ci, parentFactory, false);
         }
-        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(config, parentConfigInfo, ae);
-
-        final ConfigurableListableBeanFactory sitemapFactory = 
-            BeanFactoryUtil.createBeanFactory(ae, ci, parentContext, false);
-
-        return sitemapFactory;
+        return parentFactory;
     }
 }

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ConfigReader.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ConfigReader.java?rev=387294&r1=387293&r2=387294&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ConfigReader.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ConfigReader.java Mon Mar 20 12:13:07 2006
@@ -57,7 +57,7 @@
 
     public static ConfigurationInfo readConfiguration(String source, AvalonEnvironment env)
     throws Exception {
-        ConfigReader converter = new ConfigReader(env, null);
+        final ConfigReader converter = new ConfigReader(env, null);
         converter.convert(source);
         return converter.configInfo;
     }
@@ -66,7 +66,7 @@
                                                       ConfigurationInfo parentInfo,
                                                       AvalonEnvironment env)
     throws Exception {
-        ConfigReader converter = new ConfigReader(env, parentInfo);
+        final ConfigReader converter = new ConfigReader(env, parentInfo);
         converter.convert(config, null);
         return converter.configInfo;        
     }
@@ -106,7 +106,7 @@
     protected void convert(String relativePath)
     throws Exception {
         if ( this.getLogger().isInfoEnabled() ) {
-            this.getLogger().info("Reading avalon configuration from " + relativePath);
+            this.getLogger().info("Reading Avalon configuration from " + relativePath);
         }
         final Source root = this.resolver.resolveURI(relativePath);
         try {
@@ -123,7 +123,7 @@
     protected void convert(Configuration config, String rootUri)
     throws Exception {
         if ( this.getLogger().isInfoEnabled() ) {
-            this.getLogger().info("Converting avalon configuration");
+            this.getLogger().info("Converting Avalon configuration from configuration object: " + config);
         }
         // It's possible to define a logger on a per sitemap/service manager base.
         // This is the default logger for all components defined with this sitemap/manager.

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/XmlConfigCreator.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/XmlConfigCreator.java?rev=387294&r1=387293&r2=387294&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/XmlConfigCreator.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/XmlConfigCreator.java Mon Mar 20 12:13:07 2006
@@ -125,9 +125,6 @@
                 buffer.append("/>\n");
             } else {
                 buffer.append(">\n");
-                buffer.append("  <constructor-arg ref=\"");
-                buffer.append(ServiceManager.class.getName());
-                buffer.append("\"/>\n");
                 buffer.append("  <constructor-arg type=\"java.lang.String\"><value>");
                 buffer.append(role.substring(0, role.length()-8));
                 buffer.append("</value></constructor-arg>\n");