Title: [waffle-scm] [441] trunk/waffle-core/src/test/java/org/codehaus/waffle/servlet: Refactored WaffleServlet not to have errors and messages context as instance variable to ensure thread-safety.
Revision
441
Author
mauro
Date
2007-11-29 06:53:57 -0600 (Thu, 29 Nov 2007)

Log Message

Refactored WaffleServlet not to have errors and messages context as instance variable to ensure thread-safety.

Modified Paths

Diff

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java (440 => 441)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2007-11-27 13:56:45 UTC (rev 440)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2007-11-29 12:53:57 UTC (rev 441)
@@ -60,8 +60,6 @@
     private DataBinder dataBinder;
     private RequestAttributeBinder requestAttributeBinder;
     private ControllerDefinitionFactory controllerDefinitionFactory;
-    private MessagesContext messagesContext;
-    private ErrorsContext errorsContext;
     private Validator validator;
     private String viewPrefix;
     private String viewSuffix;
@@ -83,8 +81,6 @@
      * @param dataBinder
      * @param requestAttributeBinder
      * @param controllerDefinitionFactory
-     * @param messagesContext 
-     * @param errorsContext
      * @param validator
      */
     public WaffleServlet(ActionMethodExecutor actionMethodExecutor,
@@ -93,15 +89,13 @@
                          DataBinder dataBinder,
                          RequestAttributeBinder requestAttributeBinder,
                          ControllerDefinitionFactory controllerDefinitionFactory, 
-                         MessagesContext messagesContext, ErrorsContext errorsContext, Validator validator) {
+                         Validator validator) {
         this.actionMethodExecutor = actionMethodExecutor;
         this.actionMethodResponseHandler = actionMethodResponseHandler;
         this.servletMonitor = servletMonitor;
         this.dataBinder = dataBinder;
         this.requestAttributeBinder = requestAttributeBinder;
         this.controllerDefinitionFactory = controllerDefinitionFactory;
-        this.messagesContext = messagesContext;
-        this.errorsContext = errorsContext;
         this.validator = validator;
         componentsRetrieved = true;
     }
@@ -118,23 +112,29 @@
         }
 
         if (!componentsRetrieved) {
-            // Retrieve required components from the Component Registry
-            ComponentRegistry componentRegistry = ServletContextHelper
-                    .getComponentRegistry(getServletContext());
-            actionMethodExecutor = componentRegistry.getActionMethodExecutor();
-            actionMethodResponseHandler = componentRegistry.getActionMethodResponseHandler();
-            servletMonitor = componentRegistry.getServletMonitor();
-            dataBinder = componentRegistry.getDataBinder();
-            requestAttributeBinder = componentRegistry.getRequestAttributeBinder();
-            controllerDefinitionFactory = componentRegistry.getControllerDefinitionFactory();
-            messagesContext = componentRegistry.getMessagesContext();
-            errorsContext = componentRegistry.getErrorsContext();
-            validator = componentRegistry.getValidator();
+            // Retrieve instance components from the ComponentRegistry
+            ComponentRegistry registry = getComponentRegistry();
+            actionMethodExecutor = registry.getActionMethodExecutor();
+            actionMethodResponseHandler = registry.getActionMethodResponseHandler();
+            servletMonitor = registry.getServletMonitor();
+            dataBinder = registry.getDataBinder();
+            requestAttributeBinder = registry.getRequestAttributeBinder();
+            controllerDefinitionFactory = registry.getControllerDefinitionFactory();
+            validator = registry.getValidator();
         }
     }
 
+    private ComponentRegistry getComponentRegistry() {
+        return ServletContextHelper.getComponentRegistry(getServletContext());
+    }
+
     /**
-     * Obtain the controller the user is requesting.
+     * Obtain the controller defition the user is requesting.
+     * 
+     * @param request the HttpServletRequest
+     * @param response the HttpServletResponse
+     * @return A ControllerDefinition
+     * @throws ServletException if controller not found
      */
     protected ControllerDefinition getControllerDefinition(HttpServletRequest request,
                                                            HttpServletResponse response) throws ServletException {
@@ -149,16 +149,21 @@
     /**
      * Responsible for servicing the requests from the users.
      *
-     * @param request
-     * @param response
+     * @param request the HttpServletResponse
+     * @param response the HttpServletResponse
      * @throws ServletException
      * @throws IOException
      */
     protected void service(HttpServletRequest request,            
                            HttpServletResponse response) throws ServletException, IOException {        
+        ComponentRegistry registry = getComponentRegistry();
+
+        ErrorsContext errorsContext = registry.getErrorsContext();
+        addErrorsToRequest(request, errorsContext);
+        
+        MessagesContext messagesContext = registry.getMessagesContext();
         messagesContext.clearMessages();
-        addErrorsToRequest(request);
-        
+
         ControllerDefinition controllerDefinition = getControllerDefinition(request, response);
         dataBinder.bind(request, response, errorsContext, controllerDefinition.getController());
         validator.validate(controllerDefinition, errorsContext);
@@ -202,7 +207,7 @@
         }
     }
 
-    private void addErrorsToRequest(HttpServletRequest request) {
+    private void addErrorsToRequest(HttpServletRequest request, ErrorsContext errorsContext) {
         errorsContext.clearErrorMessages();
         request.setAttribute(ERRORS_KEY, errorsContext);
     }

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java (440 => 441)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2007-11-27 13:56:45 UTC (rev 440)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2007-11-29 12:53:57 UTC (rev 441)
@@ -44,7 +44,6 @@
 import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.monitor.ServletMonitor;
 import org.codehaus.waffle.monitor.SilentMonitor;
-import org.codehaus.waffle.validation.DefaultErrorsContext;
 import org.codehaus.waffle.validation.ErrorsContext;
 import org.codehaus.waffle.validation.Validator;
 import org.codehaus.waffle.view.View;
@@ -67,31 +66,36 @@
 
     @SuppressWarnings("serial")
     @Test
-    public void canInitSetsAttributeOnServletContext() throws ServletException {
+    public void canConfigureComponentsViaInitAttributes() throws ServletException {
         // Mock ServletConfig
         final ServletConfig servletConfig = mockery.mock(ServletConfig.class);
-        final ServletContext servletContext = mockery.mock(ServletContext.class);
-        final ComponentRegistry componentRegistry = mockery.mock(ComponentRegistry.class);
-
         mockery.checking(new Expectations() {{
             one(servletConfig).getInitParameter(Constants.VIEW_PREFIX_KEY);
             will(returnValue(null));
             one(servletConfig).getInitParameter(Constants.VIEW_SUFFIX_KEY);
             will(returnValue(".jsp"));
-            one(servletContext).getAttribute(ComponentRegistry.class.getName());
-            will(returnValue(componentRegistry));
-            // Component Registry...
+        }});
+
+        // Mock ComponentRegistry        
+        final ComponentRegistry componentRegistry = mockery.mock(ComponentRegistry.class);
+        mockery.checking(new Expectations() {{
             one(componentRegistry).getActionMethodExecutor();
             one(componentRegistry).getActionMethodResponseHandler();
             one(componentRegistry).getServletMonitor();
             one(componentRegistry).getDataBinder();
             one(componentRegistry).getRequestAttributeBinder();
             one(componentRegistry).getControllerDefinitionFactory();
-            one(componentRegistry).getMessagesContext();
-            one(componentRegistry).getErrorsContext();
             one(componentRegistry).getValidator();
         }});
 
+        // Mock ServletContext        
+        final ServletContext servletContext = mockery.mock(ServletContext.class);
+        mockery.checking(new Expectations() {{
+            one(servletContext).getAttribute(ComponentRegistry.class.getName());
+            will(returnValue(componentRegistry));
+        }});
+
+
         WaffleServlet servlet = new WaffleServlet() {
             @Override
             public ServletConfig getServletConfig() {
@@ -109,12 +113,33 @@
 
     @SuppressWarnings("serial")
     @Test
-    public void canServiceForNonDispatchingController() throws Exception {
+    public void canServiceNonDispatchingController() throws Exception {
         RequestLevelContainer.set(new PicoContextContainer(new DefaultPicoContainer()));
         final NonDispatchingController nonDispatchingController = new NonDispatchingController();
         List<?> list = Collections.EMPTY_LIST;
         final Enumeration<?> enumeration = Collections.enumeration(list);
 
+        // Mock ComponentRegistry        
+        final ComponentRegistry componentRegistry = mockery.mock(ComponentRegistry.class);
+        mockery.checking(new Expectations() {{
+            one(componentRegistry).getMessagesContext();
+            one(componentRegistry).getErrorsContext();
+        }});
+
+        // Mock ServletContext        
+        final ServletContext servletContext = mockery.mock(ServletContext.class);
+        mockery.checking(new Expectations() {{
+            one(servletContext).getAttribute(ComponentRegistry.class.getName());
+            will(returnValue(componentRegistry));
+        }});
+        
+        // Mock ServletConfig
+        final ServletConfig servletConfig = mockery.mock(ServletConfig.class);
+        mockery.checking(new Expectations() {{
+            one(servletConfig).getServletContext();
+            will(returnValue(servletContext));
+        }});
+
         // Mock HttpServletRequest
         final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
         mockery.checking(new Expectations() {{
@@ -157,11 +182,15 @@
                                                         monitor,
                                                         new OgnlDataBinder(new OgnlValueConverterFinder(), null, monitor),
                                                         requestAttributeBinder,
-                                                        null, new DefaultMessagesContext(), new DefaultErrorsContext(), validator) {
+                                                        null, validator) {
             @Override
             protected ControllerDefinition getControllerDefinition(HttpServletRequest request, HttpServletResponse response) {
                 return new ControllerDefinition("no name", nonDispatchingController, methodDefinition);
             }
+            @Override
+            public ServletConfig getServletConfig() {
+                return servletConfig;
+            }
         };
 
         waffleServlet.service(request, response);
@@ -176,6 +205,27 @@
         List<?> list = Collections.EMPTY_LIST;
         final Enumeration<?> enumeration = Collections.enumeration(list);
 
+        // Mock ComponentRegistry        
+        final ComponentRegistry componentRegistry = mockery.mock(ComponentRegistry.class);
+        mockery.checking(new Expectations() {{
+            one(componentRegistry).getMessagesContext();
+            one(componentRegistry).getErrorsContext();
+        }});
+
+        // Mock ServletContext        
+        final ServletContext servletContext = mockery.mock(ServletContext.class);
+        mockery.checking(new Expectations() {{
+            one(servletContext).getAttribute(ComponentRegistry.class.getName());
+            will(returnValue(componentRegistry));
+        }});
+        
+        // Mock ServletConfig
+        final ServletConfig servletConfig = mockery.mock(ServletConfig.class);
+        mockery.checking(new Expectations() {{
+            one(servletConfig).getServletContext();
+            will(returnValue(servletContext));
+        }});
+        
         // Mock HttpServletRequest
         final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
         mockery.checking(new Expectations() {{
@@ -220,11 +270,15 @@
                                                         monitor,
                                                         new OgnlDataBinder(new OgnlValueConverterFinder(), null, monitor),
                                                         requestAttributeBinder,
-                                                        null, new DefaultMessagesContext(), new DefaultErrorsContext(), validator) {
+                                                        null, validator) {
             @Override
             protected ControllerDefinition getControllerDefinition(HttpServletRequest request, HttpServletResponse response) {
                 return new ControllerDefinition("no name", nonDispatchingController, methodDefinition);
             }
+            @Override
+            public ServletConfig getServletConfig() {
+                return servletConfig;
+            }
         };
 
         waffleServlet.service(request, response);
@@ -233,6 +287,28 @@
 
     @Test(expected = ServletException.class)
     public void cannotServiceIfControllerNotFound() throws Exception {
+        
+        // Mock ComponentRegistry        
+        final ComponentRegistry componentRegistry = mockery.mock(ComponentRegistry.class);
+        mockery.checking(new Expectations() {{
+            one(componentRegistry).getMessagesContext();
+            one(componentRegistry).getErrorsContext();
+        }});
+
+        // Mock ServletContext        
+        final ServletContext servletContext = mockery.mock(ServletContext.class);
+        mockery.checking(new Expectations() {{
+            one(servletContext).getAttribute(ComponentRegistry.class.getName());
+            will(returnValue(componentRegistry));
+        }});
+        
+        // Mock ServletConfig
+        final ServletConfig servletConfig = mockery.mock(ServletConfig.class);
+        mockery.checking(new Expectations() {{
+            one(servletConfig).getServletContext();
+            will(returnValue(servletContext));
+        }});
+        
         // Mock HttpServletRequest
         final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
         mockery.checking(new Expectations() {{
@@ -249,21 +325,18 @@
             will(returnValue(new ControllerDefinition("junk", null, null)));
         }});
 
-        WaffleServlet waffleServlet = new WaffleServlet();
+        WaffleServlet waffleServlet = new WaffleServlet(){
+            @Override
+            public ServletConfig getServletConfig() {
+                return servletConfig;
+            }
+        };
 
         // Set up what normally would happen via "init()"
         Field actionFactoryField = WaffleServlet.class.getDeclaredField("controllerDefinitionFactory");
         actionFactoryField.setAccessible(true);
         actionFactoryField.set(waffleServlet, controllerDefinitionFactory);
 
-        Field messagesContextField = WaffleServlet.class.getDeclaredField("messagesContext");
-        messagesContextField.setAccessible(true);
-        messagesContextField.set(waffleServlet, new DefaultMessagesContext());
-        
-        Field errorsContextField = WaffleServlet.class.getDeclaredField("errorsContext");
-        errorsContextField.setAccessible(true);
-        errorsContextField.set(waffleServlet, new DefaultErrorsContext());
-
         waffleServlet.service(request, null);
     }
 
@@ -274,6 +347,27 @@
         List<?> list = Collections.EMPTY_LIST;
         final Enumeration<?> enumeration = Collections.enumeration(list);
 
+        // Mock ComponentRegistry        
+        final ComponentRegistry componentRegistry = mockery.mock(ComponentRegistry.class);
+        mockery.checking(new Expectations() {{
+            one(componentRegistry).getMessagesContext();
+            one(componentRegistry).getErrorsContext();
+        }});
+
+        // Mock ServletContext        
+        final ServletContext servletContext = mockery.mock(ServletContext.class);
+        mockery.checking(new Expectations() {{
+            one(servletContext).getAttribute(ComponentRegistry.class.getName());
+            will(returnValue(componentRegistry));
+        }});
+        
+        // Mock ServletConfig
+        final ServletConfig servletConfig = mockery.mock(ServletConfig.class);
+        mockery.checking(new Expectations() {{
+            one(servletConfig).getServletContext();
+            will(returnValue(servletContext));
+        }});
+        
         // Mock HttpServletRequest
         final HttpServletRequest request  = mockery.mock(HttpServletRequest.class);
         mockery.checking(new Expectations() {{
@@ -310,13 +404,16 @@
                 new SilentMonitor(),
                 new OgnlDataBinder(new OgnlValueConverterFinder(), null, new SilentMonitor()),
                 requestAttributeBinder,
-                null, new DefaultMessagesContext(), new DefaultErrorsContext(), validator) {
+                null, validator) {
             @Override
             protected ControllerDefinition getControllerDefinition(HttpServletRequest request, HttpServletResponse response) {
                 return new ControllerDefinition("no name", nonDispatchingController, null);
             }
-
             @Override
+            public ServletConfig getServletConfig() {
+                return servletConfig;
+            }            
+            @Override
             public void log(String string) {
                 // ignore
             }
@@ -332,6 +429,27 @@
         List<?> list = Collections.EMPTY_LIST;
         final Enumeration<?> enumeration = Collections.enumeration(list);
 
+        // Mock ComponentRegistry        
+        final ComponentRegistry componentRegistry = mockery.mock(ComponentRegistry.class);
+        mockery.checking(new Expectations() {{
+            one(componentRegistry).getMessagesContext();
+            one(componentRegistry).getErrorsContext();
+        }});
+
+        // Mock ServletContext        
+        final ServletContext servletContext = mockery.mock(ServletContext.class);
+        mockery.checking(new Expectations() {{
+            one(servletContext).getAttribute(ComponentRegistry.class.getName());
+            will(returnValue(componentRegistry));
+        }});
+        
+        // Mock ServletConfig
+        final ServletConfig servletConfig = mockery.mock(ServletConfig.class);
+        mockery.checking(new Expectations() {{
+            one(servletConfig).getServletContext();
+            will(returnValue(servletContext));
+        }});
+        
         // Mock HttpServletRequest
         final HttpServletRequest request  = mockery.mock(HttpServletRequest.class);
         mockery.checking(new Expectations() {{
@@ -351,8 +469,11 @@
             @Override
             protected ControllerDefinition getControllerDefinition(HttpServletRequest request, HttpServletResponse response) {
                 return new ControllerDefinition("no name", nonDispatchingController, new MethodDefinition(null));
+            }            
+            @Override
+            public ServletConfig getServletConfig() {
+                return servletConfig;
             }
-
             @Override
             public void log(String string) {
                 // ignore
@@ -392,14 +513,6 @@
         servletMonitorField.setAccessible(true);
         servletMonitorField.set(waffleServlet, servletMonitor);
 
-        Field messagesContextField = WaffleServlet.class.getDeclaredField("messagesContext");
-        messagesContextField.setAccessible(true);
-        messagesContextField.set(waffleServlet, new DefaultMessagesContext());
-        
-        Field errorsContextField = WaffleServlet.class.getDeclaredField("errorsContext");
-        errorsContextField.setAccessible(true);
-        errorsContextField.set(waffleServlet, new DefaultErrorsContext());
-
         Field validatorFactoryField = WaffleServlet.class.getDeclaredField("validator");
         validatorFactoryField.setAccessible(true);
         validatorFactoryField.set(waffleServlet, validator);


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to