Author: lukaszlenart Date: Mon Oct 21 10:43:53 2013 New Revision: 1534087 URL: http://svn.apache.org/r1534087 Log: WW-4129 Removes checking if configuration changed in ContainerHolder and allows to explicit set reload/cache options independent from devMode
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ContainerHolder.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/config/BeanSelectionProvider.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java?rev=1534087&r1=1534086&r2=1534087&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java Mon Oct 21 10:43:53 2013 @@ -409,16 +409,7 @@ public class BeanSelectionProvider imple alias(SecurityGate.class, StrutsConstants.STRUTS_SECURITY_GATE, builder, props); - if ("true".equalsIgnoreCase(props.getProperty(StrutsConstants.STRUTS_DEVMODE))) { - props.setProperty(StrutsConstants.STRUTS_I18N_RELOAD, "true"); - props.setProperty(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, "true"); - props.setProperty(StrutsConstants.STRUTS_FREEMARKER_TEMPLATES_CACHE, "false"); - props.setProperty(StrutsConstants.STRUTS_FREEMARKER_TEMPLATES_CACHE_UPDATE_DELAY, "0"); - // Convert struts properties into ones that xwork expects - props.setProperty(XWorkConstants.DEV_MODE, "true"); - } else { - props.setProperty(XWorkConstants.DEV_MODE, "false"); - } + switchDevMode(props); // Convert Struts properties into XWork properties convertIfExist(props, StrutsConstants.STRUTS_LOG_MISSING_PROPERTIES, XWorkConstants.LOG_MISSING_PROPERTIES); @@ -431,6 +422,32 @@ public class BeanSelectionProvider imple loadCustomResourceBundles(props); } + /** + * Enables/disables devMode and related settings if they aren't explicit set in struts.xml/struts.properties + * + * @param props configured properties + */ + private void switchDevMode(LocatableProperties props) { + if ("true".equalsIgnoreCase(props.getProperty(StrutsConstants.STRUTS_DEVMODE))) { + if (props.getProperty(StrutsConstants.STRUTS_I18N_RELOAD) == null) { + props.setProperty(StrutsConstants.STRUTS_I18N_RELOAD, "true"); + } + if (props.getProperty(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD) == null) { + props.setProperty(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, "true"); + } + if (props.getProperty(StrutsConstants.STRUTS_FREEMARKER_TEMPLATES_CACHE) == null) { + props.setProperty(StrutsConstants.STRUTS_FREEMARKER_TEMPLATES_CACHE, "false"); + } + if (props.getProperty(StrutsConstants.STRUTS_FREEMARKER_TEMPLATES_CACHE_UPDATE_DELAY) == null) { + props.setProperty(StrutsConstants.STRUTS_FREEMARKER_TEMPLATES_CACHE_UPDATE_DELAY, "0"); + } + // Convert struts properties into ones that xwork expects + props.setProperty(XWorkConstants.DEV_MODE, "true"); + } else { + props.setProperty(XWorkConstants.DEV_MODE, "false"); + } + } + private void convertIfExist(LocatableProperties props, String fromKey, String toKey) { if (props.containsKey(fromKey)) { props.setProperty(toKey, props.getProperty(fromKey)); Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ContainerHolder.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ContainerHolder.java?rev=1534087&r1=1534086&r2=1534087&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ContainerHolder.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ContainerHolder.java Mon Oct 21 10:43:53 2013 @@ -1,25 +1,21 @@ package org.apache.struts2.dispatcher; import com.opensymphony.xwork2.inject.Container; -import org.apache.struts2.StrutsConstants; /** * Simple class to hold Container instance per thread to minimise number of attempts * to read configuration and build each time a new configuration. * - * Thus depends on {@link StrutsConstants#STRUTS_CONFIGURATION_XML_RELOAD} flag, - * if set to false just use stored container, configuration will do not change. + * As ContainerHolder operates just per thread (which means per request) there is no need + * to check if configuration changed during the same request. If changed between requests, + * first call to store Container in ContainerHolder will be with the new configuration. */ class ContainerHolder { private static ThreadLocal<Container> instance = new ThreadLocal<Container>(); public static void store(Container instance) { - boolean reloadConfigs = Boolean.valueOf(instance.getInstance(String.class, StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD)); - if (!reloadConfigs) { - // reloadConfigs is false, configuration will do not change, just keep it - ContainerHolder.instance.set(instance); - } + ContainerHolder.instance.set(instance); } public static Container get() { 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?rev=1534087&r1=1534086&r2=1534087&view=diff ============================================================================== --- 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 Mon Oct 21 10:43:53 2013 @@ -194,8 +194,6 @@ public class DispatcherTest extends Stru Mock mockContainer = new Mock(Container.class); String reloadConfigs = container.getInstance(String.class, XWorkConstants.RELOAD_XML_CONFIGURATION); - mockContainer.expectAndReturn("getInstance", C.args(C.eq(String.class), C.eq(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD)), - reloadConfigs); mockContainer.expectAndReturn("getInstance", C.args(C.eq(String.class), C.eq(XWorkConstants.RELOAD_XML_CONFIGURATION)), reloadConfigs); mockContainer.expectAndReturn("getInstance", C.args(C.eq(ObjectFactory.class)), destroyedObjectFactory); @@ -230,8 +228,6 @@ public class DispatcherTest extends Stru Mock mockContainer = new Mock(Container.class); mockContainer.matchAndReturn("getInstance", C.args(C.eq(ObjectFactory.class)), new ObjectFactory()); String reloadConfigs = container.getInstance(String.class, XWorkConstants.RELOAD_XML_CONFIGURATION); - mockContainer.expectAndReturn("getInstance", C.args(C.eq(String.class), C.eq(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD)), - reloadConfigs); mockContainer.expectAndReturn("getInstance", C.args(C.eq(String.class), C.eq(XWorkConstants.RELOAD_XML_CONFIGURATION)), reloadConfigs);