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/12/22 20:14:26 UTC

svn commit: r489727 - in /cocoon/trunk/core/cocoon-core/src: main/java/org/apache/cocoon/components/modules/input/ main/java/org/apache/cocoon/components/treeprocessor/ main/java/org/apache/cocoon/core/container/spring/ main/java/org/apache/cocoon/core...

Author: cziegeler
Date: Fri Dec 22 11:14:25 2006
New Revision: 489727

URL: http://svn.apache.org/viewvc?view=rev&rev=489727
Log:
Correct request attributes handling

Removed:
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonRequestAttributes.java
Modified:
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/modules/input/SettingsInputModule.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/Container.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ServletContextFactoryBean.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapHelper.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/internal/EnvironmentHelper.java
    cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/SitemapComponentTestCase.java

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/modules/input/SettingsInputModule.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/modules/input/SettingsInputModule.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/modules/input/SettingsInputModule.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/modules/input/SettingsInputModule.java Fri Dec 22 11:14:25 2006
@@ -28,10 +28,7 @@
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.avalon.framework.thread.ThreadSafe;
 import org.apache.cocoon.configuration.Settings;
-import org.apache.cocoon.core.container.spring.CocoonRequestAttributes;
 import org.apache.cocoon.core.container.spring.Container;
-import org.apache.cocoon.environment.ObjectModelHelper;
-import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.processing.ProcessInfoProvider;
 import org.apache.commons.collections.IteratorUtils;
 
@@ -71,8 +68,7 @@
      */
     public Object getAttribute(String name, Configuration modeConf, Map objectModel)
     throws ConfigurationException {
-        final Request request = ObjectModelHelper.getRequest(this.infoProvider.getObjectModel());
-        final Container container = Container.getCurrentContainer(this.infoProvider.getServletContext(), new CocoonRequestAttributes(request));
+        final Container container = Container.getCurrentContainer();
         final Settings settings = container.getSettings();
         return settings.getProperty(name);
     }

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java Fri Dec 22 11:14:25 2006
@@ -29,12 +29,10 @@
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.Processor;
 import org.apache.cocoon.components.source.impl.SitemapSourceInfo;
-import org.apache.cocoon.core.container.spring.CocoonRequestAttributes;
 import org.apache.cocoon.core.container.spring.Container;
 import org.apache.cocoon.core.container.spring.avalon.AvalonUtils;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.ForwardRedirector;
-import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Redirector;
 import org.apache.cocoon.environment.SourceResolver;
 import org.apache.cocoon.environment.internal.EnvironmentHelper;
@@ -211,7 +209,7 @@
         Thread.currentThread().setContextClassLoader(this.classLoader);
         Object handle = null;
         try {
-            handle = this.container.enteringContext(new CocoonRequestAttributes(ObjectModelHelper.getRequest(environment.getObjectModel())));
+            handle = this.container.enteringContext();
             // invoke listeners
             // only invoke if pipeline is not internally
             if ( !context.isBuildingPipelineOnly() ) {
@@ -245,7 +243,7 @@
 
         } finally {
             this.sitemapExecutor.leaveSitemap(this, environment.getObjectModel());
-            this.container.leavingContext(new CocoonRequestAttributes(ObjectModelHelper.getRequest(environment.getObjectModel())), handle);
+            this.container.leavingContext(handle);
             // invoke listeners
             // only invoke if pipeline is not internally
             if ( !context.isBuildingPipelineOnly() ) {

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/Container.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/Container.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/Container.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/Container.java Fri Dec 22 11:14:25 2006
@@ -51,25 +51,24 @@
     protected static Container ROOT_CONTAINER;
 
     public static Container getCurrentContainer() {
-        final RequestAttributes attributes = RequestContextHolder.currentRequestAttributes();
-        return getCurrentContainer(null, attributes);
+        final RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
+        return getCurrentContainer(attributes);
     }
 
     /**
      * Return the current web application context.
-     * @param servletContext The servlet context.
      * @param attributes     The request attributes.
      * @return The web application context.
      */
-    public static Container getCurrentContainer(ServletContext servletContext,
-                                                RequestAttributes attributes) {
+    public static Container getCurrentContainer(RequestAttributes attributes) {
         if ( attributes != null ) {
             if (attributes.getAttribute(CONTAINER_REQUEST_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST) != null) {
                 return (Container) attributes
                         .getAttribute(CONTAINER_REQUEST_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
             }
         }
-        if ( ROOT_CONTAINER == null && servletContext != null ) {
+        if ( ROOT_CONTAINER == null ) {
+            final ServletContext servletContext = ServletContextFactoryBean.getServletContext();
             final WebApplicationContext parentContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
             ROOT_CONTAINER = new Container(parentContext, parentContext.getClassLoader());
         }
@@ -78,10 +77,10 @@
 
     /**
      * Notify about entering this context.
-     * @param attributes The request attributes.
      * @return A handle which should be passed to {@link #leavingContext(RequestAttributes, Object)}.
      */
-    public Object enteringContext(RequestAttributes attributes) {
+    public Object enteringContext() {
+        final RequestAttributes attributes = RequestContextHolder.currentRequestAttributes();
         final ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
         final Object oldContext = attributes.getAttribute(CONTAINER_REQUEST_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
         if ( oldContext != null ) {
@@ -99,10 +98,10 @@
 
     /**
      * Notify about leaving this context.
-     * @param attributes The request attributes.
      * @param handle     The returned handle from {@link #enteringContext(RequestAttributes)}.
      */
-    public void leavingContext(RequestAttributes attributes, Object handle) {
+    public void leavingContext(Object handle) {
+        final RequestAttributes attributes = RequestContextHolder.currentRequestAttributes();
         Thread.currentThread().setContextClassLoader((ClassLoader)handle);
         final Stack stack = (Stack)attributes.getAttribute(CONTAINER_STACK_REQUEST_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
         if ( stack == null ) {

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ServletContextFactoryBean.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ServletContextFactoryBean.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ServletContextFactoryBean.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ServletContextFactoryBean.java Fri Dec 22 11:14:25 2006
@@ -24,24 +24,33 @@
 /**
  * Simple Spring factory bean which provides the servlet context as a bean.
  * This avoids a dependence to Springs ServletContextAware interface.
+ *
  * @version $Id$
+ * @since 2.2
  */
 public class ServletContextFactoryBean implements FactoryBean, ServletContextAware {
 
-    protected ServletContext servletContext;
+    protected static ServletContext servletContext;
+
+    public static ServletContext getServletContext() {
+        if ( servletContext == null ) {
+            throw new RuntimeException("ServletContext in ServletContextFactoryBean is not initialized yet. Check your configuration.");
+        }
+        return servletContext;
+    }
 
     /**
      * @see org.springframework.web.context.ServletContextAware#setServletContext(javax.servlet.ServletContext)
      */
     public void setServletContext(ServletContext context) {
-        this.servletContext = context;
+        servletContext = context;
     }
 
     /**
      * @see org.springframework.beans.factory.FactoryBean#getObject()
      */
     public Object getObject() throws Exception {
-        return this.servletContext;
+        return servletContext;
     }
 
     /**

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapHelper.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapHelper.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapHelper.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapHelper.java Fri Dec 22 11:14:25 2006
@@ -25,20 +25,14 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
-import org.apache.cocoon.classloader.ClassLoaderFactory;
 import org.apache.cocoon.classloader.reloading.Monitor;
-import org.apache.cocoon.classloader.reloading.ReloadingClassLoaderConfiguration;
 import org.apache.cocoon.configuration.Settings;
-import org.apache.cocoon.core.container.spring.CocoonRequestAttributes;
 import org.apache.cocoon.core.container.spring.CocoonWebApplicationContext;
 import org.apache.cocoon.core.container.spring.Container;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.processing.ProcessInfoProvider;
-import org.apache.excalibur.source.SourceResolver;
-import org.springframework.beans.factory.BeanFactory;
 import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.support.WebApplicationContextUtils;
 
 
@@ -153,7 +147,6 @@
         final WebApplicationContext rootContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
         final ProcessInfoProvider infoProvider = (ProcessInfoProvider) rootContext.getBean(ProcessInfoProvider.ROLE);
         final Request request = ObjectModelHelper.getRequest(infoProvider.getObjectModel());
-        final SourceResolver sitemapResolver = (SourceResolver)rootContext.getBean(SourceResolver.ROLE);
         // let's determine our context url
         int pos = sitemapLocation.lastIndexOf('/');
         if ( sitemapLocation.lastIndexOf(File.separatorChar) > pos ) {
@@ -161,8 +154,7 @@
         }
         final String contextUrl = sitemapLocation.substring(0, pos + 1);
 
-        final RequestAttributes attr = new CocoonRequestAttributes(request);
-        final Container container = Container.getCurrentContainer(servletContext, attr);
+        final Container container = Container.getCurrentContainer();
         // for now we require that the parent container is a web application context (FIXME)
         if ( !(container.getBeanFactory() instanceof WebApplicationContext) ) {
             throw new Exception("Parent container is not a web application context: " + container.getBeanFactory());

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java Fri Dec 22 11:14:25 2006
@@ -27,7 +27,6 @@
 import org.apache.avalon.framework.parameters.ParameterException;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.cocoon.components.flow.FlowHelper;
-import org.apache.cocoon.core.container.spring.CocoonRequestAttributes;
 import org.apache.cocoon.core.container.spring.Container;
 import org.apache.commons.jxpath.DynamicPropertyHandler;
 import org.apache.commons.jxpath.JXPathBeanInfo;
@@ -129,7 +128,7 @@
             cocoon.put("parameters", new ParametersMap(parameters));
         }
 
-        final Container container = Container.getCurrentContainer(context, new CocoonRequestAttributes(request));
+        final Container container = Container.getCurrentContainer();
         cocoon.put("settings", container.getSettings());
 
         final Map map = new HashMap();

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/internal/EnvironmentHelper.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/internal/EnvironmentHelper.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/internal/EnvironmentHelper.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/internal/EnvironmentHelper.java Fri Dec 22 11:14:25 2006
@@ -30,13 +30,9 @@
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.Processor;
 import org.apache.cocoon.components.source.SourceUtil;
-import org.apache.cocoon.core.container.spring.CocoonRequestAttributes;
 import org.apache.cocoon.core.container.spring.Container;
 import org.apache.cocoon.core.container.spring.avalon.AvalonUtils;
-import org.apache.cocoon.environment.Context;
 import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.environment.ObjectModelHelper;
-import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.SourceResolver;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.apache.excalibur.source.Source;
@@ -396,10 +392,7 @@
     static public ServiceManager getSitemapServiceManager() {
         final EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
         if ( stack != null && !stack.isEmpty()) {
-            final EnvironmentInfo info = stack.getCurrentInfo();
-            final Request request = ObjectModelHelper.getRequest(info.environment.getObjectModel());
-            final Context context = ObjectModelHelper.getContext(info.environment.getObjectModel());
-            final Container container = Container.getCurrentContainer(context, new CocoonRequestAttributes(request));
+            final Container container = Container.getCurrentContainer();
             return (ServiceManager)container.getBeanFactory().getBean(AvalonUtils.SERVICE_MANAGER_ROLE);
         }
         return null;

Modified: cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/SitemapComponentTestCase.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/SitemapComponentTestCase.java?view=diff&rev=489727&r1=489726&r2=489727
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/SitemapComponentTestCase.java (original)
+++ cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/SitemapComponentTestCase.java Fri Dec 22 11:14:25 2006
@@ -40,8 +40,8 @@
 import org.apache.cocoon.components.flow.FlowHelper;
 import org.apache.cocoon.components.flow.Interpreter;
 import org.apache.cocoon.components.source.SourceResolverAdapter;
-import org.apache.cocoon.core.container.spring.CocoonRequestAttributes;
 import org.apache.cocoon.core.container.spring.Container;
+import org.apache.cocoon.core.container.spring.ServletContextFactoryBean;
 import org.apache.cocoon.core.container.spring.avalon.ComponentInfo;
 import org.apache.cocoon.core.container.spring.avalon.ConfigurationInfo;
 import org.apache.cocoon.environment.ObjectModelHelper;
@@ -65,7 +65,6 @@
 import org.apache.excalibur.xml.sax.SAXParser;
 import org.custommonkey.xmlunit.Diff;
 import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.StaticWebApplicationContext;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -127,7 +126,10 @@
         //bean factory to get consistent bean resolution behaviour
         WebApplicationContext staticWebApplicationContext = new MockWebApplicationContext(this.getBeanFactory(), cont);
 		cont.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, staticWebApplicationContext);
-        Container container = Container.getCurrentContainer(cont, new CocoonRequestAttributes(request));
+        // now setup container stuff
+        ServletContextFactoryBean scfb = new ServletContextFactoryBean();
+        scfb.setServletContext(cont);
+        final Container container = Container.getCurrentContainer();
         request.setAttribute(Container.CONTAINER_REQUEST_ATTRIBUTE, container, Request.REQUEST_SCOPE);
         objectmodel.put(ObjectModelHelper.REQUEST_OBJECT, request);