Author: tmjee Date: Sat Nov 18 19:56:18 2006 New Revision: 476696 URL: http://svn.apache.org/viewvc?view=rev&rev=476696 Log: WW-1513 - Dispatcher's setConfigurationManager() method has no effect
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java?view=diff&rev=476696&r1=476695&r2=476696 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsTestCase.java Sat Nov 18 19:56:18 2006 @@ -53,6 +53,7 @@ params = new HashMap<String,String>(); } Dispatcher du = new Dispatcher(new MockServletContext(), params); + du.init(); Dispatcher.setInstance(du); configurationManager = du.getConfigurationManager(); configuration = configurationManager.getConfiguration(); 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=476696&r1=476695&r2=476696 ============================================================================== --- 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 Sat Nov 18 19:56:18 2006 @@ -189,14 +189,19 @@ dispatcherListeners.remove(listener); } + private ServletContext servletContext; + private Map<String, String> initParams; + + /** * Create the Dispatcher instance for a given ServletContext and set of initialization parameters. * * @param servletContext Our servlet context * @param initParams The set of initialization parameters */ - public Dispatcher(ServletContext servletContext, Map initParams) { - init(servletContext, initParams); + public Dispatcher(ServletContext servletContext, Map<String, String> initParams) { + this.servletContext = servletContext; + this.initParams = initParams; } /** @@ -275,15 +280,18 @@ /** * Load configurations, including both XML and zero-configuration strategies, * and update optional settings, including whether to reload configurations and resource files. - * - * @param servletContext Our servlet context - * @param initParams The set of initialization parameters */ - private void init(final ServletContext servletContext, final Map<String,String> initParams) { + public void init() { - configurationManager = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); + if (configurationManager == null) { + configurationManager = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); + } + // 1] Configuration: legacy properties file (struts.properties) configurationManager.addConfigurationProvider(new LegacyPropertiesConfigurationProvider()); + + + // 2] Configuration: traditional xml configuration (eg. struts-default.xml, struts-plugin.xml, struts.xml) // Load traditional xml configuration String configPaths = initParams.get("config"); if (configPaths == null) { @@ -302,6 +310,7 @@ } } + // 3] Configuration: zero-configuration stuff // Load configuration from a scan of the classloader String packages = initParams.get("actionPackages"); if (packages != null) { @@ -314,6 +323,7 @@ } } + // 4] Configuration: custom ConfigurationProviders String configProvs = initParams.get("configProviders"); if (configProvs != null) { String[] classes = configProvs.split("\\s*[,]\\s*"); @@ -332,6 +342,7 @@ } } + // 5] Configurations: Filter's init-parameters as constants to be injected // Load filter init params as constants configurationManager.addConfigurationProvider(new ConfigurationProvider() { public void destroy() {} @@ -344,6 +355,8 @@ } }); + + // 6] Configurations: Alias standard Struts2 beans configurationManager.addConfigurationProvider(new BeanSelectionProvider()); // Preload the configuration Configuration config = configurationManager.getConfiguration(); Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java?view=diff&rev=476696&r1=476695&r2=476696 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java Sat Nov 18 19:56:18 2006 @@ -207,8 +207,11 @@ * @param filterConfig The filter configuration */ public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + dispatcher = createDispatcher(filterConfig); - this.filterConfig = filterConfig; + dispatcher.init(); + String param = filterConfig.getInitParameter("packages"); String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging"; if (param != null) { @@ -388,6 +391,7 @@ */ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; ServletContext servletContext = getServletContext(); Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java?view=diff&rev=476696&r1=476695&r2=476696 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java Sat Nov 18 19:56:18 2006 @@ -187,6 +187,7 @@ Dispatcher.setPortletSupportActive(true); dispatcherUtils = new Dispatcher(ServletContextHolderListener.getServletContext(), params); + dispatcherUtils.init(); // For testability if (factory == 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=476696&r1=476695&r2=476696 ============================================================================== --- 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 Sat Nov 18 19:56:18 2006 @@ -110,13 +110,13 @@ public void testConfigurationManager() { Dispatcher du = null; - final InternalConfigurationManager configurationManager = new InternalConfigurationManager(); + InternalConfigurationManager configurationManager = new InternalConfigurationManager(); try { - du = new Dispatcher(new MockServletContext(), new HashMap<String, String>()) { - { - setConfigurationManager(configurationManager); - } - }; + du = new Dispatcher(new MockServletContext(), new HashMap<String, String>()); + du.setConfigurationManager(configurationManager); + + du.init(); + Dispatcher.setInstance(du); assertFalse(configurationManager.destroyConfiguration); Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java?view=diff&rev=476696&r1=476695&r2=476696 ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java Sat Nov 18 19:56:18 2006 @@ -44,6 +44,8 @@ import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.config.impl.DefaultConfiguration; +import com.opensymphony.xwork2.inject.Container; +import com.opensymphony.xwork2.inject.ContainerBuilder; /** * FilterDispatcher TestCase. @@ -128,8 +130,15 @@ final InnerDispatcher _dispatcher = new InnerDispatcher(servletContext); Dispatcher.setInstance(null); + DefaultConfiguration conf = new DefaultConfiguration() { + @Override + public Container getContainer() { + return new ContainerBuilder().create(false); + } + }; + ConfigurationManager confManager = new ConfigurationManager(); - confManager.setConfiguration(new DefaultConfiguration()); + confManager.setConfiguration(conf); _dispatcher.setConfigurationManager(confManager); @@ -142,8 +151,8 @@ return _dispatcher; } }; - filter.init(filterConfig); filter.setActionMapper(new InnerActionMapper()); + filter.init(filterConfig); filter.doFilter(req, res, chain); assertTrue(_dispatcher.wrappedRequest); Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java?view=diff&rev=476696&r1=476695&r2=476696 ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java Sat Nov 18 19:56:18 2006 @@ -33,7 +33,6 @@ import junit.framework.TestCase; -import org.apache.struts2.StrutsConstants; import org.apache.struts2.dispatcher.mapper.ActionMapper; import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.springframework.mock.web.MockFilterConfig; @@ -124,7 +123,7 @@ filterDispatcherCreateDispatcherCount++; return _dispatcher2; } - + @Override public String toString() { return "filterDispatcher"; @@ -132,32 +131,35 @@ }; } - public void testUsingFilterDispatcherOnly() throws Exception { ObjectFactory oldObjecFactory = ObjectFactory.getObjectFactory(); try { ObjectFactory.setObjectFactory(new InnerObjectFactory()); - filterDispatcher.setActionMapper(new FilterTest.InnerMapper()); assertEquals(cleanUpFilterCreateDispatcherCount, 0); assertEquals(filterDispatcherCreateDispatcherCount, 0); + assertFalse(_dispatcher1.init); assertFalse(_dispatcher1.prepare); assertFalse(_dispatcher1.wrapRequest); assertFalse(_dispatcher1.service); + assertFalse(_dispatcher2.init); assertFalse(_dispatcher2.prepare); assertFalse(_dispatcher2.wrapRequest); assertFalse(_dispatcher2.service); filterDispatcher.init(filterConfig); + FilterDispatcher.setActionMapper(new FilterTest.InnerMapper()); filterDispatcher.doFilter(request, response, filterChain2); filterDispatcher.destroy(); // we are using FilterDispatcher only, so cleanUp filter's Dispatcher should not be created. assertEquals(cleanUpFilterCreateDispatcherCount, 0); assertEquals(filterDispatcherCreateDispatcherCount, 1); + assertFalse(_dispatcher1.init); assertFalse(_dispatcher1.prepare); assertFalse(_dispatcher1.wrapRequest); assertFalse(_dispatcher1.service); + assertTrue(_dispatcher2.init); assertTrue(_dispatcher2.prepare); assertTrue(_dispatcher2.wrapRequest); assertTrue(_dispatcher2.service); @@ -168,6 +170,7 @@ } } + public void testUsingFilterDispatcherOnly_Multiple() throws Exception { ObjectFactory oldObjecFactory = ObjectFactory.getObjectFactory(); try { @@ -179,11 +182,14 @@ assertFalse(_dispatcher1.prepare); assertFalse(_dispatcher1.wrapRequest); assertFalse(_dispatcher1.service); + assertFalse(_dispatcher1.cleanUp); assertFalse(_dispatcher2.prepare); assertFalse(_dispatcher2.wrapRequest); assertFalse(_dispatcher2.service); + assertFalse(_dispatcher2.cleanUp); filterDispatcher.init(filterConfig); + FilterDispatcher.setActionMapper(new FilterTest.InnerMapper()); filterDispatcher.doFilter(request, response, filterChain2); filterDispatcher.doFilter(request, response, filterChain2); filterDispatcher.destroy(); @@ -194,9 +200,11 @@ assertFalse(_dispatcher1.prepare); assertFalse(_dispatcher1.wrapRequest); assertFalse(_dispatcher1.service); + assertFalse(_dispatcher1.cleanUp); assertTrue(_dispatcher2.prepare); assertTrue(_dispatcher2.wrapRequest); assertTrue(_dispatcher2.service); + assertTrue(_dispatcher2.cleanUp); assertTrue(Dispatcher.getInstance() == null); } finally { @@ -204,6 +212,8 @@ } } + + /*public void testUsingCleanUpAndFilterDispatcher() throws Exception { ObjectFactory oldObjecFactory = ObjectFactory.getObjectFactory(); try { @@ -281,12 +291,19 @@ class InnerDispatcher extends Dispatcher { + public boolean init = false; public boolean prepare = false; public boolean wrapRequest = false; public boolean service = false; + public boolean cleanUp = false; public InnerDispatcher(ServletContext servletContext) { - super(servletContext, new HashMap()); + super(servletContext, new HashMap<String, String>()); + } + + @Override + public void init() { + init= true; } @Override @@ -303,6 +320,11 @@ @Override public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException { service = true; + } + + @Override + public void cleanup() { + cleanUp = true; } } Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java?view=diff&rev=476696&r1=476695&r2=476696 ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java Sat Nov 18 19:56:18 2006 @@ -108,6 +108,7 @@ mockContainer = new Mock(Container.class); Dispatcher du = new Dispatcher(pageContext.getServletContext(), new HashMap()); + du.init(); Dispatcher.setInstance(du); du.setConfigurationManager(configurationManager); session = new SessionMap(request); Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java?view=diff&rev=476696&r1=476695&r2=476696 ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Sat Nov 18 19:56:18 2006 @@ -80,7 +80,9 @@ public void setUp() throws Exception { super.setUp(); - Dispatcher.setInstance(new Dispatcher(null, new HashMap())); + Dispatcher du = new Dispatcher(null, new HashMap()); + du.init(); + Dispatcher.setInstance(du); mockPortletApiAvailable();