Author: tmjee
Date: Fri Nov 17 22:59:27 2006
New Revision: 476459

URL: http://svn.apache.org/viewvc?view=rev&rev=476459
Log:
WW-1511
 - Dispatcher should cleaning up ConfigurationManager 


Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?view=diff&rev=476459&r1=476458&r2=476459
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
 Fri Nov 17 22:59:27 2006
@@ -239,6 +239,8 @@
      * Release local threads and destroy any DispatchListeners.
      */
     public void cleanup() {
+       
+       // clean up ObjectFactory
         ObjectFactory objectFactory = ObjectFactory.getObjectFactory();
         if (objectFactory == null) {
             LOG.warn("Object Factory is null, something is seriously wrong, no 
clean up will be performed");
@@ -252,7 +254,11 @@
                 LOG.error("exception occurred while destroying ObjectFactory 
["+objectFactory+"]", e);
             }
         }
+        
+        // clean up Dispatcher itself
         instance.set(null);
+        
+        // clean up DispatcherListeners
         synchronized(Dispatcher.class) {
             if (dispatcherListeners.size() > 0) {
                 for (DispatcherListener l : dispatcherListeners) {
@@ -260,6 +266,10 @@
                 }
             }
         }
+        
+        // clean up configuration 
+       configurationManager.destroyConfiguration();
+       configurationManager = null;
     }
 
     /**

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java?view=diff&rev=476459&r1=476458&r2=476459
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
 Fri Nov 17 22:59:27 2006
@@ -30,7 +30,9 @@
 import org.apache.struts2.StrutsTestCase;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockServletContext;
 
+import com.opensymphony.xwork2.config.ConfigurationManager;
 import com.opensymphony.xwork2.util.LocalizedTextUtil;
 
 /**
@@ -77,5 +79,71 @@
         du.prepare(req, res);
 
         assertEquals("utf-8", req.getCharacterEncoding());
+    }
+    
+    public void testDispatcherListener() throws Exception {
+       
+       final DispatcherListenerState state = new DispatcherListenerState();
+       
+       Dispatcher.addDispatcherListener(new DispatcherListener() {
+                       public void dispatcherDestroyed(Dispatcher du) {
+                               state.isDestroyed = true;
+                       }
+                       public void dispatcherInitialized(Dispatcher du) {
+                               state.isInitialized = true;
+                       }
+       });
+       
+       
+       assertFalse(state.isDestroyed);
+       assertFalse(state.isInitialized);
+       
+        Dispatcher du = initDispatcher(new HashMap<String, String>() );
+       
+       assertTrue(state.isInitialized);
+       
+       du.cleanup();
+       
+       assertTrue(state.isDestroyed);
+    }
+    
+    
+    public void testConfigurationManager() {
+       Dispatcher du = null;
+       final InternalConfigurationManager configurationManager = new 
InternalConfigurationManager();
+       try {
+               du = new Dispatcher(new MockServletContext(), new 
HashMap<String, String>()) {
+                       {
+                               setConfigurationManager(configurationManager);
+                       }
+               };
+            Dispatcher.setInstance(du);
+            
+            assertFalse(configurationManager.destroyConfiguration);
+            
+            du.cleanup();
+            
+            assertTrue(configurationManager.destroyConfiguration);
+            
+       }
+       finally {
+               du.setInstance(null);
+       }
+    }
+    
+    class InternalConfigurationManager extends ConfigurationManager {
+       public boolean destroyConfiguration = false;
+       
+       @Override
+       public synchronized void destroyConfiguration() {
+               super.destroyConfiguration();
+               destroyConfiguration = true;
+       }
+    }
+    
+    
+    class DispatcherListenerState {
+       public boolean isInitialized = false;
+       public boolean isDestroyed = false;
     }
 }


Reply via email to