You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2009/09/05 21:06:34 UTC

svn commit: r811700 - in /struts/struts2/trunk/plugins/spring/src: main/java/org/apache/struts2/spring/ main/resources/ test/java/org/apache/struts2/spring/

Author: musachy
Date: Sat Sep  5 19:06:34 2009
New Revision: 811700

URL: http://svn.apache.org/viewvc?rev=811700&view=rev
Log:
Add constant to reload config when a change is detected

Modified:
    struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/ClassReloadingXMLWebApplicationContext.java
    struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
    struts/struts2/trunk/plugins/spring/src/main/resources/struts-plugin.xml
    struts/struts2/trunk/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java

Modified: struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/ClassReloadingXMLWebApplicationContext.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/ClassReloadingXMLWebApplicationContext.java?rev=811700&r1=811699&r2=811700&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/ClassReloadingXMLWebApplicationContext.java (original)
+++ struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/ClassReloadingXMLWebApplicationContext.java Sat Sep  5 19:06:34 2009
@@ -29,6 +29,7 @@
 import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;
 import org.apache.commons.jci.monitor.FilesystemAlterationObserver;
 import org.apache.commons.lang.xwork.StringUtils;
+import org.apache.struts2.dispatcher.Dispatcher;
 import org.springframework.web.context.support.XmlWebApplicationContext;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
@@ -76,13 +77,17 @@
     protected FilesystemAlterationMonitor fam;
 
     protected ClassReloadingBeanFactory beanFactory;
+    //reload the runtime configuration when a change is detected
+    private boolean reloadConfig;
+
+    public void setupReloading(String[] watchList, String acceptClasses, ServletContext servletContext, boolean reloadConfig) {
+        this.reloadConfig = reloadConfig;
 
-    public void setupReloading(String[] watchList, String acceptClasses, ServletContext servletContext) {
         classLoader = new ReloadingClassLoader(ClassReloadingXMLWebApplicationContext.class.getClassLoader());
 
         //make a list of accepted classes
         if (StringUtils.isNotBlank(acceptClasses)) {
-            String[] splitted =  acceptClasses.split(",");
+            String[] splitted = acceptClasses.split(",");
             Set<Pattern> patterns = new HashSet<Pattern>(splitted.length);
             for (String pattern : splitted)
                 patterns.add(Pattern.compile(pattern));
@@ -176,32 +181,34 @@
     }
 
     public void onDirectoryChange(File file) {
+        reload(file);
     }
 
     public void onDirectoryCreate(File file) {
-        if (classLoader != null) {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Change detected in file [#0], reloading class loader", file.getAbsolutePath());
-            classLoader.reload();
-        }
+        reload(file);
     }
 
     public void onDirectoryDelete(File file) {
     }
 
     public void onFileChange(File file) {
+        reload(file);
+    }
+
+    public void onFileCreate(File file) {
+        reload(file);
+    }
+
+    private void reload(File file) {
         if (classLoader != null) {
             if (LOG.isDebugEnabled())
                 LOG.debug("Change detected in file [#0], reloading class loader", file.getAbsolutePath());
             classLoader.reload();
+            if (reloadConfig && Dispatcher.getInstance() != null)
+                Dispatcher.getInstance().getConfigurationManager().reload();
         }
     }
 
-    public void onFileCreate(File file) {
-        if (classLoader != null)
-            classLoader.reload();
-    }
-
     public void onFileDelete(File file) {
     }
 

Modified: struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java?rev=811700&r1=811699&r2=811700&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java (original)
+++ struts/struts2/trunk/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java Sat Sep  5 19:06:34 2009
@@ -69,7 +69,8 @@
             @Inject ServletContext servletContext,
             @Inject(StrutsConstants.STRUTS_DEVMODE) String devMode,
             @Inject(value = "struts.class.reloading.watchList", required = false) String watchList,
-            @Inject(value = "struts.class.reloading.acceptClasses", required = false) String acceptClasses) {
+            @Inject(value = "struts.class.reloading.acceptClasses", required = false) String acceptClasses,
+            @Inject(value = "struts.class.reloading.reloadConfig", required = false) String reloadConfig) {
           
         super();
         boolean useClassCache = "true".equals(useClassCacheStr);
@@ -96,7 +97,7 @@
             useClassCache = false;
 
             ClassReloadingXMLWebApplicationContext reloadingContext = (ClassReloadingXMLWebApplicationContext) appContext;
-            reloadingContext.setupReloading(watchList.split(","), acceptClasses, servletContext);
+            reloadingContext.setupReloading(watchList.split(","), acceptClasses, servletContext, "true".equals(reloadConfig));
             LOG.info("Class reloading is enabled. Make sure this is not used on a production environment!", watchList);
 
             setClassLoader(reloadingContext.getReloadingClassLoader());

Modified: struts/struts2/trunk/plugins/spring/src/main/resources/struts-plugin.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/spring/src/main/resources/struts-plugin.xml?rev=811700&r1=811699&r2=811700&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/spring/src/main/resources/struts-plugin.xml (original)
+++ struts/struts2/trunk/plugins/spring/src/main/resources/struts-plugin.xml Sat Sep  5 19:06:34 2009
@@ -33,6 +33,7 @@
 
     <constant name="struts.class.reloading.watchList" value="" />
     <constant name="struts.class.reloading.acceptClasses" value="" />
+    <constant name="struts.class.reloading.reloadConfig" value="false" />
 
     <package name="spring-default">
         <interceptors>

Modified: struts/struts2/trunk/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java?rev=811700&r1=811699&r2=811700&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java (original)
+++ struts/struts2/trunk/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java Sat Sep  5 19:06:34 2009
@@ -39,7 +39,7 @@
 
     public void testNoSpringContext() throws Exception {
         // to cover situations where there will be logged an error
-        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory(null, null, null, new MockServletContext(), null, "false", null);
+        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory(null, null, null, new MockServletContext(), null, "false", null, null);
 
         assertEquals(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, fac.getAutowireStrategy());
     }
@@ -53,7 +53,7 @@
         ac.setServletContext(msc);
         ac.setConfigLocations(new String[] {"org/apache/struts2/spring/StrutsSpringObjectFactoryTest-applicationContext.xml"});
         ac.refresh();
-        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory("constructor", null, null, msc, null, "true", null);
+        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory("constructor", null, null, msc, null, "true", null, null);
 
         assertEquals(AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, fac.getAutowireStrategy());
     }