Title: [waffle-scm] [879] sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/action: request level container killed
Revision
879
Author
paul
Date
2009-01-15 12:58:22 -0600 (Thu, 15 Jan 2009)

Log Message

request level container killed

Modified Paths


Added Paths

Removed Paths

Diff

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinder.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinder.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinder.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -24,8 +24,6 @@
 import org.codehaus.waffle.WaffleException;
 import org.codehaus.waffle.action.annotation.ActionMethod;
 import org.codehaus.waffle.bind.StringTransmuter;
-import org.codehaus.waffle.context.ContextContainer;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.i18n.MessageResources;
 import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.monitor.ActionMonitor;

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/action/InterceptingActionMethodExecutor.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/action/InterceptingActionMethodExecutor.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/action/InterceptingActionMethodExecutor.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -15,8 +15,6 @@
 import org.codehaus.waffle.action.intercept.InterceptorChain;
 import org.codehaus.waffle.action.intercept.MethodInterceptor;
 import org.codehaus.waffle.action.intercept.MethodInterceptorComparator;
-import org.codehaus.waffle.context.ContextContainer;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.monitor.ActionMonitor;
 

Deleted: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/RequestLevelContainer.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/RequestLevelContainer.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/RequestLevelContainer.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) terms as published in http://waffle.codehaus.org/license.html
- */
-package org.codehaus.waffle.context;
-
-import org.picocontainer.MutablePicoContainer;
-
-public class RequestLevelContainer {
-    private final static ThreadLocal<MutablePicoContainer> REQUEST_CONTAINER = new ThreadLocal<MutablePicoContainer>();
-
-    private RequestLevelContainer() {
-    }
-
-    public static MutablePicoContainer get() {
-        return REQUEST_CONTAINER.get();
-    }
-
-    public static void set(MutablePicoContainer container) {
-        REQUEST_CONTAINER.set(container);
-    }
-}

Deleted: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleRequestFilter.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleRequestFilter.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleRequestFilter.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) terms as published in http://waffle.codehaus.org/license.html
- */
-package org.codehaus.waffle.context;
-
-import org.codehaus.waffle.ComponentRegistry;
-import org.codehaus.waffle.servlet.ServletContextHelper;
-import org.picocontainer.MutablePicoContainer;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-
-public class WaffleRequestFilter implements Filter {
-    private ContextContainerFactory contextContainerFactory;
-
-    public void init(FilterConfig filterConfig) throws ServletException {
-        ComponentRegistry componentRegistry = ServletContextHelper
-                .getComponentRegistry(filterConfig.getServletContext());
-
-        contextContainerFactory = componentRegistry.getContextContainerFactory();
-    }
-
-    public void doFilter(ServletRequest request,
-                         ServletResponse response,
-                         FilterChain filterChain) throws IOException, ServletException {
-        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
-        CurrentHttpServletRequest.set(httpServletRequest);
-        MutablePicoContainer requestContextContainer = contextContainerFactory
-                .buildRequestLevelContainer(httpServletRequest);
-
-        try {
-            RequestLevelContainer.set(requestContextContainer);
-            requestContextContainer.addComponent(request);
-            requestContextContainer.addComponent(response);
-            requestContextContainer.start();
-
-            filterChain.doFilter(request, response);
-        } finally {
-            requestContextContainer.stop();
-            requestContextContainer.dispose();
-            RequestLevelContainer.set(null);
-        }
-    }
-
-    public void destroy() {
-        contextContainerFactory = null;
-    }
-    
-}

Added: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java (0 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java	                        (rev 0)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -0,0 +1,188 @@
+package org.codehaus.waffle.context;
+
+import org.picocontainer.web.WebappComposer;
+import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.Characteristics;
+import org.picocontainer.Parameter;
+import org.codehaus.waffle.WaffleException;
+import org.codehaus.waffle.registrar.pico.ParameterResolver;
+import org.codehaus.waffle.view.ViewDispatcher;
+import org.codehaus.waffle.view.DefaultViewDispatcher;
+import org.codehaus.waffle.view.ViewResolver;
+import org.codehaus.waffle.view.DefaultViewResolver;
+import org.codehaus.waffle.validation.Validator;
+import org.codehaus.waffle.validation.DefaultValidator;
+import org.codehaus.waffle.monitor.ActionMonitor;
+import org.codehaus.waffle.monitor.SilentMonitor;
+import org.codehaus.waffle.monitor.BindMonitor;
+import org.codehaus.waffle.monitor.ControllerMonitor;
+import org.codehaus.waffle.monitor.ServletMonitor;
+import org.codehaus.waffle.monitor.ValidationMonitor;
+import org.codehaus.waffle.monitor.ViewMonitor;
+import org.codehaus.waffle.i18n.MessageResources;
+import org.codehaus.waffle.i18n.DefaultMessageResources;
+import org.codehaus.waffle.controller.ControllerDefinitionFactory;
+import org.codehaus.waffle.controller.ControllerNameResolver;
+import org.codehaus.waffle.controller.ContextPathControllerNameResolver;
+import org.codehaus.waffle.controller.ContextControllerDefinitionFactory;
+import org.codehaus.waffle.bind.BindErrorMessageResolver;
+import org.codehaus.waffle.bind.ControllerDataBinder;
+import org.codehaus.waffle.bind.ViewDataBinder;
+import org.codehaus.waffle.bind.IntrospectingViewDataBinder;
+import org.codehaus.waffle.bind.StringTransmuter;
+import org.codehaus.waffle.bind.DefaultStringTransmuter;
+import org.codehaus.waffle.bind.ValueConverterFinder;
+import org.codehaus.waffle.bind.ognl.OgnlBindErrorMessageResolver;
+import org.codehaus.waffle.bind.ognl.OgnlControllerDataBinder;
+import org.codehaus.waffle.bind.ognl.OgnlValueConverterFinder;
+import org.codehaus.waffle.action.ActionMethodExecutor;
+import org.codehaus.waffle.action.InterceptingActionMethodExecutor;
+import org.codehaus.waffle.action.ActionMethodResponseHandler;
+import org.codehaus.waffle.action.DefaultActionMethodResponseHandler;
+import org.codehaus.waffle.action.ArgumentResolver;
+import org.codehaus.waffle.action.HierarchicalArgumentResolver;
+import org.codehaus.waffle.action.MethodDefinitionFinder;
+import org.codehaus.waffle.action.AnnotatedMethodDefinitionFinder;
+import org.codehaus.waffle.action.MethodNameResolver;
+import org.codehaus.waffle.action.RequestParameterMethodNameResolver;
+
+import javax.servlet.ServletContext;
+import java.util.Enumeration;
+
+public class WaffleWebappComposer implements WebappComposer {
+
+    private static final String REGISTER_KEY = "register:";
+    private static final String REGISTER_NON_CACHING_KEY = "registerNonCaching:";
+
+    private ParameterResolver parameterResolver;
+
+    public void composeApplication(MutablePicoContainer picoContainer, ServletContext servletContext) {
+        picoContainer.addComponent(servletContext);
+
+        // add all known components
+        picoContainer.addComponent(ActionMethodExecutor.class, locateComponentClass((Object) ActionMethodExecutor.class, (Class<?>) InterceptingActionMethodExecutor.class, servletContext));
+        picoContainer.addComponent(ActionMethodResponseHandler.class, locateComponentClass((Object) ActionMethodResponseHandler.class, (Class<?>) DefaultActionMethodResponseHandler.class, servletContext));
+        picoContainer.addComponent(ArgumentResolver.class, locateComponentClass((Object) ArgumentResolver.class, (Class<?>) HierarchicalArgumentResolver.class, servletContext));
+        picoContainer.addComponent(MethodDefinitionFinder.class, locateComponentClass((Object) MethodDefinitionFinder.class, (Class<?>) AnnotatedMethodDefinitionFinder.class, servletContext));
+        picoContainer.addComponent(MethodNameResolver.class, locateComponentClass((Object) MethodNameResolver.class, (Class<?>) RequestParameterMethodNameResolver.class, servletContext));
+        picoContainer.addComponent(BindErrorMessageResolver.class, locateComponentClass((Object) BindErrorMessageResolver.class, (Class<?>) OgnlBindErrorMessageResolver.class, servletContext));
+        picoContainer.addComponent(ControllerDataBinder.class, locateComponentClass((Object) ControllerDataBinder.class, (Class<?>) OgnlControllerDataBinder.class, servletContext));
+        picoContainer.addComponent(ViewDataBinder.class, locateComponentClass((Object) ViewDataBinder.class, (Class<?>) IntrospectingViewDataBinder.class, servletContext));
+        picoContainer.addComponent(StringTransmuter.class, locateComponentClass((Object) StringTransmuter.class, (Class<?>) DefaultStringTransmuter.class, servletContext));
+        picoContainer.addComponent(ValueConverterFinder.class, locateComponentClass((Object) ValueConverterFinder.class, (Class<?>) OgnlValueConverterFinder.class, servletContext));
+        picoContainer.addComponent(ControllerDefinitionFactory.class, locateComponentClass((Object) ControllerDefinitionFactory.class, (Class<?>) ContextControllerDefinitionFactory.class, servletContext));
+        picoContainer.addComponent(ControllerNameResolver.class, locateComponentClass((Object) ControllerNameResolver.class, (Class<?>) ContextPathControllerNameResolver.class, servletContext));
+        picoContainer.addComponent(MessageResources.class, locateComponentClass((Object) MessageResources.class, (Class<?>) DefaultMessageResources.class, servletContext));
+        picoContainer.addComponent(ActionMonitor.class, locateComponentClass((Object) ActionMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
+        picoContainer.addComponent(BindMonitor.class, locateComponentClass((Object) BindMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
+        picoContainer.addComponent(ControllerMonitor.class, locateComponentClass((Object) ControllerMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
+        picoContainer.addComponent(ServletMonitor.class, locateComponentClass((Object) ServletMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
+        picoContainer.addComponent(ValidationMonitor.class, locateComponentClass((Object) ValidationMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
+        picoContainer.addComponent(ViewMonitor.class, locateComponentClass((Object) ViewMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
+        picoContainer.addComponent(Validator.class, locateComponentClass((Object) Validator.class, (Class<?>) DefaultValidator.class, servletContext));
+        picoContainer.addComponent(ViewDispatcher.class, locateComponentClass((Object) ViewDispatcher.class, (Class<?>) DefaultViewDispatcher.class, servletContext));
+        picoContainer.addComponent(ViewResolver.class, locateComponentClass((Object) ViewResolver.class, (Class<?>) DefaultViewResolver.class, servletContext));
+        picoContainer.addComponent(ParameterResolver.class, locateComponentClass((Object) ParameterResolver.class, (Class<?>) ParameterResolver.class, servletContext));
+
+        // register other components
+        addOtherComponents(picoContainer, servletContext);
+
+        parameterResolver = picoContainer.getComponent(ParameterResolver.class);
+
+    }
+
+    @SuppressWarnings("unchecked")
+    protected void addOtherComponents(MutablePicoContainer picoContainer, ServletContext servletContext) {
+        //noinspection unchecked
+        Enumeration<String> enums = servletContext.getInitParameterNames();
+
+        while (enums != null && enums.hasMoreElements()) {
+            String name = enums.nextElement();
+
+            if (name.startsWith(REGISTER_KEY)) {
+                String key = name.split(REGISTER_KEY)[1];
+                Class concreteClass = loadClass(servletContext.getInitParameter(name));
+
+                picoContainer.addComponent(key, concreteClass);
+            } else if (name.startsWith(REGISTER_NON_CACHING_KEY)) {
+                String key = name.split(REGISTER_NON_CACHING_KEY)[1];
+                Class concreteClass = loadClass(servletContext.getInitParameter(name));
+                picoContainer.as(Characteristics.NO_CACHE).addComponent(key, concreteClass);
+            }
+        }
+    }
+
+
+    public void composeSession(MutablePicoContainer picoContainer) {
+    }
+
+    public void composeRequest(MutablePicoContainer picoContainer) {
+    }
+
+
+    /**
+     * This method will locate the component Class to use.  Each of the components can be
+     * overwritten by setting <code>context-param</code> in the applications <code>web.xml</code>.
+     * <p/>
+     * <code>
+     * &lt;context-param&gt;
+     * &lt;param-name&gt;org.codehaus.waffle.actions.ControllerDefinitionFactory&lt;/param-name&gt;
+     * &lt;param-value&gt;org.myurl.FooBarControllerFactory&lt;/param-value&gt;
+     * &lt;/context-param&gt;
+     * </code>
+     *
+     * @param key            represents the component key which the implementation should be registered under.
+     * @param defaultClass   represents the Class to use by default (when not over-written).
+     * @param servletContext required to obtain the InitParameter defined for the web application.
+     * @throws org.codehaus.waffle.WaffleException
+     */
+    protected Class<?> locateComponentClass(Object key, Class<?> defaultClass, ServletContext servletContext) throws WaffleException {
+        String parameterName;
+        if (key instanceof Class) {
+            parameterName = ((Class<?>) key).getName();
+        } else if (key instanceof String) {
+            parameterName = (String) key;
+        } else {
+            return defaultClass;
+        }
+
+        String className = servletContext.getInitParameter(parameterName);
+
+        if (className == null || className.length() == 0) {
+            return defaultClass;
+        } else {
+            return loadClass(className);
+        }
+    }
+
+    /**
+     * Loads class for a given name
+     *
+     * @param className the Class name
+     * @return The Class for the name
+     * @throws WaffleException if class not found
+     */
+    private Class<?> loadClass(String className) {
+        try {
+            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+            return classLoader.loadClass(className);
+        } catch (ClassNotFoundException e) {
+            throw new WaffleException(e.getMessage(), e);
+        }
+    }
+
+    protected Parameter[] picoParameters(Object... parameters) {
+        if (parameters.length == 0) {
+            return null; // pico expects a null when no parameters
+        }
+
+        Parameter[] picoParameters = new Parameter[parameters.length];
+        for (int i = 0; i < parameters.length; i++) {
+            picoParameters[i] = parameterResolver.resolve(parameters[i]);
+        }
+        return picoParameters;
+    }
+
+
+
+}

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/controller/ContextControllerDefinitionFactory.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/controller/ContextControllerDefinitionFactory.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/controller/ContextControllerDefinitionFactory.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -11,7 +11,6 @@
 import org.codehaus.waffle.action.MethodDefinition;
 import org.codehaus.waffle.action.MethodDefinitionFinder;
 import org.codehaus.waffle.action.MissingActionMethodException;
-import org.codehaus.waffle.context.ContextContainer;
 import org.codehaus.waffle.context.ContextContainerNotFoundException;
 import org.codehaus.waffle.i18n.MessageResources;
 import org.codehaus.waffle.i18n.MessagesContext;

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -33,8 +33,6 @@
 import org.codehaus.waffle.action.annotation.PRG;
 import org.codehaus.waffle.bind.ControllerDataBinder;
 import org.codehaus.waffle.bind.ViewDataBinder;
-import org.codehaus.waffle.context.ContextContainer;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
 import org.codehaus.waffle.i18n.MessageResources;
@@ -50,6 +48,7 @@
 import org.codehaus.waffle.view.View;
 import org.codehaus.waffle.view.ViewResolver;
 import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.web.PicoServletContainerFilter;
 
 /**
  * Waffle's FrontController for handling user requests.
@@ -73,6 +72,26 @@
     private ServletMonitor servletMonitor;
     private boolean componentsRetrieved = false;
 
+    private static ThreadLocal<MutablePicoContainer> currentRequestContainer = new ThreadLocal<MutablePicoContainer>();
+    private static ThreadLocal<MutablePicoContainer> currentSessionContainer = new ThreadLocal<MutablePicoContainer>();
+    private static ThreadLocal<MutablePicoContainer> currentAppContainer = new ThreadLocal<MutablePicoContainer>();
+
+    public static class ServletFilter extends PicoServletContainerFilter {
+
+        protected void setAppContainer(MutablePicoContainer container) {
+            currentAppContainer.set(container);
+        }
+
+        protected void setRequestContainer(MutablePicoContainer container) {
+            currentRequestContainer.set(container);
+        }
+
+        protected void setSessionContainer(MutablePicoContainer container) {
+            currentSessionContainer.set(container);
+        }
+    }
+
+
     /**
      * Default constructor used by servlet container
      */
@@ -167,7 +186,7 @@
     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
             IOException {
         servletMonitor.servletServiceRequested(parametersOf(request));
-        MutablePicoContainer requestContainer = RequestLevelContainer.get();
+        MutablePicoContainer requestContainer = currentRequestContainer.get();
         ErrorsContext errorsContext = requestContainer.getComponent(ErrorsContext.class);
         Collection<MethodInterceptor> methodInterceptors = requestContainer.getComponents(MethodInterceptor.class);
         MessagesContext messageContext = requestContainer.getComponent(MessagesContext.class);

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleVelocityServlet.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleVelocityServlet.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleVelocityServlet.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -6,13 +6,14 @@
 import org.codehaus.waffle.ComponentRegistry;
 import org.codehaus.waffle.Constants;
 import org.codehaus.waffle.i18n.MessagesContext;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.context.ContextContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
 import org.apache.velocity.Template;
 import org.apache.velocity.context.Context;
 import org.apache.velocity.tools.view.servlet.VelocityViewServlet;
+import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.web.PicoServletContainerFilter;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -24,8 +25,29 @@
  */
 @SuppressWarnings("serial")
 public class WaffleVelocityServlet extends VelocityViewServlet {
+
     private ControllerDefinitionFactory controllerDefinitionFactory;
 
+    private static ThreadLocal<MutablePicoContainer> currentRequestContainer = new ThreadLocal<MutablePicoContainer>();
+    private static ThreadLocal<MutablePicoContainer> currentSessionContainer = new ThreadLocal<MutablePicoContainer>();
+    private static ThreadLocal<MutablePicoContainer> currentAppContainer = new ThreadLocal<MutablePicoContainer>();
+
+    public static class ServletFilter extends WaffleServlet.ServletFilter {
+
+        protected void setAppContainer(MutablePicoContainer container) {
+            currentAppContainer.set(container);
+        }
+
+        protected void setRequestContainer(MutablePicoContainer container) {
+            currentRequestContainer.set(container);
+        }
+
+        protected void setSessionContainer(MutablePicoContainer container) {
+            currentSessionContainer.set(container);
+        }
+    }
+
+
     public WaffleVelocityServlet(ControllerDefinitionFactory controllerDefinitionFactory) {
         this.controllerDefinitionFactory = controllerDefinitionFactory;
     }
@@ -39,7 +61,7 @@
     protected Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context context)
             throws Exception {
         // Always add the controller to the context
-        ContextContainer container = (ContextContainer) RequestLevelContainer.get();
+        ContextContainer container = (ContextContainer) currentRequestContainer.get();
         MessagesContext messageContext = container.getComponent(MessagesContext.class);
         ControllerDefinition controllerDefinition = controllerDefinitionFactory.getControllerDefinition(request, response, messageContext, container);
         context.put(Constants.CONTROLLER_KEY, controllerDefinition.getController());

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/validation/DefaultValidator.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/validation/DefaultValidator.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/validation/DefaultValidator.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -10,8 +10,6 @@
 
 import org.codehaus.waffle.WaffleException;
 import org.codehaus.waffle.action.MethodDefinition;
-import org.codehaus.waffle.context.ContextContainer;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.monitor.ValidationMonitor;
 

Modified: sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinderTest.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinderTest.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinderTest.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -16,8 +16,6 @@
 
 import org.codehaus.waffle.action.annotation.ActionMethod;
 import org.codehaus.waffle.bind.StringTransmuter;
-import org.codehaus.waffle.context.ContextContainer;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.testmodel.FakeControllerWithMethodDefinitions;
 import org.jmock.Expectations;
@@ -25,7 +23,6 @@
 import org.jmock.integration.junit4.JMock;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.picocontainer.containers.AbstractDelegatingMutablePicoContainer;
 import org.picocontainer.MutablePicoContainer;
 
 /**
@@ -531,8 +528,6 @@
             }
         });
 
-        RequestLevelContainer.set(contextContainer);
-
         // Mock HttpServletRequest
         final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
 

Modified: sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/action/InterceptingActionMethodExecutorTest.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/action/InterceptingActionMethodExecutorTest.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/action/InterceptingActionMethodExecutorTest.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -10,7 +10,6 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.context.ContextContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.monitor.SilentMonitor;
@@ -25,16 +24,6 @@
 
     private ActionMethodExecutor actionMethodExecutor = new InterceptingActionMethodExecutor(new SilentMonitor());
 
-    @Before
-    public void setUp() throws Exception {
-        RequestLevelContainer.set(new ContextContainer());
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        RequestLevelContainer.set(null);
-    }
-
     @Test
     public void canInvokeNoArgumentActionMethod() throws Exception {
         FakeController fakeController = new FakeController();

Deleted: sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/context/WaffleRequestFilterTest.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/context/WaffleRequestFilterTest.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/context/WaffleRequestFilterTest.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -1,139 +0,0 @@
-package org.codehaus.waffle.context;
-
-import org.codehaus.waffle.ComponentRegistry;
-import org.codehaus.waffle.WaffleException;
-import org.codehaus.waffle.testmodel.StubActionMethodExecutor;
-import org.codehaus.waffle.testmodel.StubParameterResolver;
-import org.codehaus.waffle.action.ActionMethodExecutor;
-import org.codehaus.waffle.registrar.pico.ParameterResolver;
-import org.codehaus.waffle.monitor.ContextMonitor;
-import org.codehaus.waffle.monitor.RegistrarMonitor;
-import org.codehaus.waffle.i18n.MessageResources;
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.junit.Assert;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.picocontainer.MutablePicoContainer;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.lang.reflect.Field;
-
-
-/**
- * @author Michael Ward
- * @author Mauro Talevi
- */
-...@runwith(JMock.class)
-public class WaffleRequestFilterTest {
-
-    private Mockery mockery = new Mockery();
-
-    @Test
-    public void canInit() throws ServletException {
-
-        // Mock ServletContext
-        final ServletContext servletContext = mockery.mock(ServletContext.class);
-
-        // Mock ComponentRegistry
-        final ComponentRegistry registry = new ComponentRegistry(servletContext) {
-            protected void register(Object key, Class<?> defaultClass, ServletContext servletContext) throws WaffleException {
-            }
-
-            @SuppressWarnings("unchecked")
-            protected void registerOtherComponents(ServletContext servletContext) {
-            }
-        };
-
-        mockery.checking(new Expectations() {
-            {
-                one(servletContext).getAttribute(ComponentRegistry.class.getName());
-                will(returnValue(registry));
-            }
-        });
-
-        // Mock FilterConfig
-        final FilterConfig filterConfig = mockery.mock(FilterConfig.class);
-        mockery.checking(new Expectations() {
-            {
-                one(filterConfig).getServletContext();
-                will(returnValue(servletContext));
-            }
-        });
-
-        Filter filter = new WaffleRequestFilter();
-        filter.init(filterConfig);
-    }
-
-    @Test
-    public void canDestroy() throws Exception {
-        Filter filter = new WaffleRequestFilter();
-
-        Field field = WaffleRequestFilter.class.getDeclaredField("contextContainerFactory");
-        field.setAccessible(true);
-        field.set(filter, new ContextContainerFactory(null, null, null, null));
-
-        assertNotNull(field.get(filter));
-        filter.destroy();
-        assertNull(field.get(filter));
-    }
-
-    @Test
-    public void canDoFilter() throws Exception {
-        CurrentHttpServletRequest.set(null); // ensure clear
-
-        // Mock ContextContainer
-        final MutablePicoContainer container = mockery.mock(MutablePicoContainer.class);
-        mockery.checking(new Expectations() {
-            {
-                one(container).start();
-                one(container).addComponent(with(an(HttpServletRequest.class)));
-                will(returnValue(null));
-                one(container).addComponent(with(an(HttpServletResponse.class)));
-                will(returnValue(null));
-                one(container).stop();
-                one(container).dispose();
-            }
-        });
-
-        // Mock ContextContainerFactory
-        final ContextContainerFactory contextContainerFactory = new ContextContainerFactory(mockery.mock(MessageResources.class), mockery.mock(ContextMonitor.class), mockery.mock(RegistrarMonitor.class), new StubParameterResolver()) {
-            public MutablePicoContainer buildRequestLevelContainer(HttpServletRequest request) {
-                return container;
-            }
-        };
-
-        // Mock HttpServletRequest
-        final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
-
-        // Mock HttpServletResponse
-        final HttpServletResponse response = mockery.mock(HttpServletResponse.class);
-
-        // Mock FilterChain
-        final FilterChain filterChain = mockery.mock(FilterChain.class);
-        mockery.checking(new Expectations() {
-            {
-                one(filterChain).doFilter(with(same(request)), with(same(response)));
-            }
-        });
-
-        Filter filter = new WaffleRequestFilter();
-        Field field = WaffleRequestFilter.class.getDeclaredField("contextContainerFactory");
-        field.setAccessible(true);
-        field.set(filter, contextContainerFactory);
-
-        filter.doFilter(request, response, filterChain);
-
-        Assert.assertSame("Filter should have set request", request, CurrentHttpServletRequest.get());
-    }
-
-}

Modified: sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/controller/ContextControllerDefinitionFactoryTest.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/controller/ContextControllerDefinitionFactoryTest.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/controller/ContextControllerDefinitionFactoryTest.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -10,7 +10,6 @@
 import org.codehaus.waffle.WaffleException;
 import org.codehaus.waffle.action.MethodDefinition;
 import org.codehaus.waffle.action.MethodDefinitionFinder;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.context.ContextContainer;
 import org.codehaus.waffle.i18n.DefaultMessageResources;
 import org.codehaus.waffle.i18n.MessagesContext;
@@ -39,7 +38,6 @@
         final MutablePicoContainer pico = new DefaultPicoContainer(new Caching());
         pico.addComponent("theController", FakeController.class);
         ContextContainer container = new ContextContainer(pico);
-        RequestLevelContainer.set(container);
 
         // Mock HttpServletRequest
         final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
@@ -80,7 +78,6 @@
     public void cannotRequestControllerDefinitionThatiIsNotRegistered() {
         MutablePicoContainer pico = new DefaultPicoContainer(new Caching());
         ContextContainer container = new ContextContainer(pico);
-        RequestLevelContainer.set(container);
 
         // Mock HttpServletRequest
         final HttpServletRequest request = mockery.mock(HttpServletRequest.class);

Modified: sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java (878 => 879)

--- sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -9,7 +9,6 @@
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
-import java.io.Writer;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -41,8 +40,6 @@
 import org.codehaus.waffle.bind.ControllerDataBinder;
 import org.codehaus.waffle.bind.ognl.OgnlControllerDataBinder;
 import org.codehaus.waffle.bind.ognl.OgnlValueConverterFinder;
-import org.codehaus.waffle.context.ContextContainer;
-import org.codehaus.waffle.context.RequestLevelContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
 import org.codehaus.waffle.controller.ControllerNotFoundException;
@@ -214,8 +211,9 @@
                 will(returnValue("yy"));
             }
         });
+        
+        new WaffleServlet.ServletFilter().setRequestContainer(contextContainer);
 
-        RequestLevelContainer.set(contextContainer);
         final NonDispatchingController nonDispatchingController = new NonDispatchingController();
         List<?> list = Collections.EMPTY_LIST;
         final Enumeration<?> enumeration = Collections.enumeration(list);
@@ -324,7 +322,8 @@
             }
         });
 
-        RequestLevelContainer.set(contextContainer);
+        new WaffleServlet.ServletFilter().setRequestContainer(contextContainer);
+
         final NonDispatchingController nonDispatchingController = new NonDispatchingController();
         List<?> list = Collections.EMPTY_LIST;
         final Enumeration<?> enumeration = Collections.enumeration(list);
@@ -427,7 +426,7 @@
             }
         });
 
-        RequestLevelContainer.set(contextContainer);
+        new WaffleServlet.ServletFilter().setRequestContainer(contextContainer);
 
         // Mock ServletConfig
         final ServletConfig servletConfig = mockery.mock(ServletConfig.class);
@@ -532,7 +531,8 @@
             }
         });
 
-        RequestLevelContainer.set(contextContainer);
+        new WaffleServlet.ServletFilter().setRequestContainer(contextContainer);
+
         final NonDispatchingController nonDispatchingController = new NonDispatchingController();
         List<?> list = Collections.EMPTY_LIST;
         final Enumeration<?> enumeration = Collections.enumeration(list);
@@ -636,7 +636,7 @@
             }
         });
 
-        RequestLevelContainer.set(contextContainer);
+        new WaffleServlet.ServletFilter().setRequestContainer(contextContainer);        
 
         final NonDispatchingController nonDispatchingController = new NonDispatchingController();
         List<?> list = Collections.EMPTY_LIST;

Modified: sandbox/v2experiment/waffle-ruby/src/main/java/org/codehaus/waffle/ruby/servlet/RhtmlServlet.java (878 => 879)

--- sandbox/v2experiment/waffle-ruby/src/main/java/org/codehaus/waffle/ruby/servlet/RhtmlServlet.java	2009-01-15 16:35:45 UTC (rev 878)
+++ sandbox/v2experiment/waffle-ruby/src/main/java/org/codehaus/waffle/ruby/servlet/RhtmlServlet.java	2009-01-15 18:58:22 UTC (rev 879)
@@ -15,13 +15,14 @@
 
 import org.codehaus.waffle.Constants;
 import org.codehaus.waffle.WaffleException;
-import org.codehaus.waffle.context.RequestLevelContainer;
+import org.codehaus.waffle.servlet.WaffleServlet;
 import org.codehaus.waffle.ruby.controller.RubyController;
 import org.codehaus.waffle.controller.ScriptedController;
 import org.jruby.Ruby;
 import org.jruby.RubyModule;
 import org.jruby.javasupport.JavaEmbedUtils;
 import org.jruby.runtime.builtin.IRubyObject;
+import org.picocontainer.MutablePicoContainer;
 
 /**
  * ERB (rhtml) views support
@@ -31,12 +32,32 @@
  */
 @SuppressWarnings("serial")
 public class RhtmlServlet extends HttpServlet {
-    
+
+    private static ThreadLocal<MutablePicoContainer> currentRequestContainer = new ThreadLocal<MutablePicoContainer>();
+    private static ThreadLocal<MutablePicoContainer> currentSessionContainer = new ThreadLocal<MutablePicoContainer>();
+    private static ThreadLocal<MutablePicoContainer> currentAppContainer = new ThreadLocal<MutablePicoContainer>();
+
+    public static class ServletFilter extends WaffleServlet.ServletFilter {
+
+        protected void setAppContainer(MutablePicoContainer container) {
+            currentAppContainer.set(container);
+        }
+
+        protected void setRequestContainer(MutablePicoContainer container) {
+            currentRequestContainer.set(container);
+        }
+
+        protected void setSessionContainer(MutablePicoContainer container) {
+            currentSessionContainer.set(container);
+        }
+    }
+
+
     @Override
     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         String template = loadRhtml(request.getServletPath());
 
-        Ruby runtime = RequestLevelContainer.get().getComponent(Ruby.class);
+        Ruby runtime = currentRequestContainer.get().getComponent(Ruby.class);
         RubyModule module = runtime.getClassFromPath("ERB");
 
         IRubyObject erb = (IRubyObject) JavaEmbedUtils.invokeMethod(runtime, module, "new",


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to