Class ClassReloadingXMLWebApplicationContext

java.lang.Object
org.springframework.core.io.DefaultResourceLoader
org.springframework.context.support.AbstractApplicationContext
org.springframework.context.support.AbstractRefreshableApplicationContext
org.springframework.context.support.AbstractRefreshableConfigApplicationContext
org.springframework.web.context.support.AbstractRefreshableWebApplicationContext
org.springframework.web.context.support.XmlWebApplicationContext
org.apache.struts2.spring.ClassReloadingXMLWebApplicationContext
All Implemented Interfaces:
Closeable, AutoCloseable, org.apache.commons.jci.monitor.FilesystemAlterationListener, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanFactory, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.HierarchicalBeanFactory, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.ListableBeanFactory, org.springframework.context.ApplicationContext, org.springframework.context.ApplicationEventPublisher, org.springframework.context.ConfigurableApplicationContext, org.springframework.context.Lifecycle, org.springframework.context.MessageSource, org.springframework.core.env.EnvironmentCapable, org.springframework.core.io.ResourceLoader, org.springframework.core.io.support.ResourcePatternResolver, org.springframework.ui.context.ThemeSource, org.springframework.web.context.ConfigurableWebApplicationContext, org.springframework.web.context.WebApplicationContext

public class ClassReloadingXMLWebApplicationContext extends org.springframework.web.context.support.XmlWebApplicationContext implements org.apache.commons.jci.monitor.FilesystemAlterationListener

This class can be used instead of XmlWebApplicationContext, and it will watch jar files and directories for changes and reload then changed classes.

To use this class:

  • Set "struts.devMode" to "true"
  • Set "struts.objectFactory.spring.class.reloading.watchList" to a comma separated list of directories, or jar files (absolute paths)
  • Add this to web.xml:
      <context-param>
           <param-name>contextClass</param-name>
           <param-value>org.apache.struts2.spring.ClassReloadingXMLWebApplicationContext</param-value>
       </context-param>
       
  • Add Apache Commons JCI FAM to the classpath. If you are using maven, add this to pom.xml:
      <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-jci-fam</artifactId>
           <version>1.0</version>
           <optional>true</optional>
      </dependency>
      
  • Nested Class Summary

    Nested classes/interfaces inherited from class org.springframework.core.io.DefaultResourceLoader

    org.springframework.core.io.DefaultResourceLoader.ClassPathContextResource
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
     
     
    protected org.apache.commons.jci.monitor.FilesystemAlterationMonitor
     

    Fields inherited from class org.springframework.web.context.support.XmlWebApplicationContext

    DEFAULT_CONFIG_LOCATION, DEFAULT_CONFIG_LOCATION_PREFIX, DEFAULT_CONFIG_LOCATION_SUFFIX

    Fields inherited from class org.springframework.context.support.AbstractApplicationContext

    APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME

    Fields inherited from interface org.springframework.beans.factory.BeanFactory

    FACTORY_BEAN_PREFIX

    Fields inherited from interface org.springframework.context.ConfigurableApplicationContext

    APPLICATION_STARTUP_BEAN_NAME, CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SHUTDOWN_HOOK_THREAD_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME

    Fields inherited from interface org.springframework.web.context.ConfigurableWebApplicationContext

    APPLICATION_CONTEXT_ID_PREFIX, SERVLET_CONFIG_BEAN_NAME

    Fields inherited from interface org.springframework.core.io.ResourceLoader

    CLASSPATH_URL_PREFIX

    Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver

    CLASSPATH_ALL_URL_PREFIX

    Fields inherited from interface org.springframework.web.context.WebApplicationContext

    CONTEXT_ATTRIBUTES_BEAN_NAME, CONTEXT_PARAMETERS_BEAN_NAME, ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, SCOPE_APPLICATION, SCOPE_REQUEST, SCOPE_SESSION, SERVLET_CONTEXT_BEAN_NAME
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    protected org.springframework.beans.factory.support.DefaultListableBeanFactory
     
     
    void
     
    void
     
    void
     
    void
     
    void
     
    void
     
    void
    onStart(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)
     
    void
    onStop(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)
     
    protected void
    prepareBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
     
    void
     
    void
    setupReloading(String[] watchList, String acceptClasses, jakarta.servlet.ServletContext servletContext, boolean reloadConfig)
     

    Methods inherited from class org.springframework.web.context.support.XmlWebApplicationContext

    getDefaultConfigLocations, initBeanDefinitionReader, loadBeanDefinitions, loadBeanDefinitions

    Methods inherited from class org.springframework.web.context.support.AbstractRefreshableWebApplicationContext

    createEnvironment, getApplicationName, getConfigLocations, getNamespace, getResourceByPath, getResourcePatternResolver, getServletConfig, getServletContext, getTheme, initPropertySources, onRefresh, postProcessBeanFactory, setNamespace, setServletConfig, setServletContext

    Methods inherited from class org.springframework.context.support.AbstractRefreshableConfigApplicationContext

    afterPropertiesSet, resolvePath, setBeanName, setConfigLocation, setConfigLocations, setId

    Methods inherited from class org.springframework.context.support.AbstractRefreshableApplicationContext

    assertBeanFactoryActive, cancelRefresh, closeBeanFactory, customizeBeanFactory, getBeanFactory, hasBeanFactory, refreshBeanFactory, setAllowBeanDefinitionOverriding, setAllowCircularReferences

    Methods inherited from class org.springframework.context.support.AbstractApplicationContext

    addApplicationListener, addBeanFactoryPostProcessor, containsBean, containsBeanDefinition, containsLocalBean, destroyBeans, doClose, findAllAnnotationsOnBean, findAnnotationOnBean, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationStartup, getAutowireCapableBeanFactory, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResources, getStartupDate, getType, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, prepareRefresh, publishEvent, publishEvent, publishEvent, registerBeanPostProcessors, registerListeners, registerShutdownHook, removeApplicationListener, resetCommonCaches, setApplicationStartup, setDisplayName, setEnvironment, setParent, start, stop, toString

    Methods inherited from class org.springframework.core.io.DefaultResourceLoader

    addProtocolResolver, clearResourceCaches, getClassLoader, getProtocolResolvers, getResource, getResourceCache, setClassLoader

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.springframework.context.ApplicationContext

    getAutowireCapableBeanFactory, getDisplayName, getId, getParent, getStartupDate

    Methods inherited from interface org.springframework.context.ApplicationEventPublisher

    publishEvent, publishEvent

    Methods inherited from interface org.springframework.beans.factory.BeanFactory

    containsBean, getAliases, getBean, getBean, getBean, getBean, getBean, getBeanProvider, getBeanProvider, getType, getType, isPrototype, isSingleton, isTypeMatch, isTypeMatch

    Methods inherited from interface org.springframework.context.ConfigurableApplicationContext

    addApplicationListener, addBeanFactoryPostProcessor, addProtocolResolver, getApplicationStartup, getBeanFactory, getEnvironment, isActive, registerShutdownHook, removeApplicationListener, setApplicationStartup, setClassLoader, setEnvironment, setId, setParent

    Methods inherited from interface org.springframework.web.context.ConfigurableWebApplicationContext

    setConfigLocation, setConfigLocations

    Methods inherited from interface org.springframework.beans.factory.HierarchicalBeanFactory

    containsLocalBean, getParentBeanFactory

    Methods inherited from interface org.springframework.context.Lifecycle

    isRunning, start, stop

    Methods inherited from interface org.springframework.beans.factory.ListableBeanFactory

    containsBeanDefinition, findAllAnnotationsOnBean, findAnnotationOnBean, findAnnotationOnBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation

    Methods inherited from interface org.springframework.context.MessageSource

    getMessage, getMessage, getMessage

    Methods inherited from interface org.springframework.core.io.ResourceLoader

    getClassLoader, getResource

    Methods inherited from interface org.springframework.core.io.support.ResourcePatternResolver

    getResources
  • Field Details

    • classLoader

      protected ReloadingClassLoader classLoader
    • filesystemAlterationMonitor

      protected org.apache.commons.jci.monitor.FilesystemAlterationMonitor filesystemAlterationMonitor
    • beanFactory

      protected ClassReloadingBeanFactory beanFactory
  • Constructor Details

    • ClassReloadingXMLWebApplicationContext

      public ClassReloadingXMLWebApplicationContext()
  • Method Details

    • setupReloading

      public void setupReloading(String[] watchList, String acceptClasses, jakarta.servlet.ServletContext servletContext, boolean reloadConfig)
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface org.springframework.context.ConfigurableApplicationContext
      Overrides:
      close in class org.springframework.context.support.AbstractApplicationContext
    • refresh

      public void refresh() throws org.springframework.beans.BeansException, IllegalStateException
      Specified by:
      refresh in interface org.springframework.context.ConfigurableApplicationContext
      Overrides:
      refresh in class org.springframework.context.support.AbstractApplicationContext
      Throws:
      org.springframework.beans.BeansException
      IllegalStateException
    • createBeanFactory

      protected org.springframework.beans.factory.support.DefaultListableBeanFactory createBeanFactory()
      Overrides:
      createBeanFactory in class org.springframework.context.support.AbstractRefreshableApplicationContext
    • prepareBeanFactory

      protected void prepareBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
      Overrides:
      prepareBeanFactory in class org.springframework.context.support.AbstractApplicationContext
    • onDirectoryChange

      public void onDirectoryChange(File file)
      Specified by:
      onDirectoryChange in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • onDirectoryCreate

      public void onDirectoryCreate(File file)
      Specified by:
      onDirectoryCreate in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • onDirectoryDelete

      public void onDirectoryDelete(File file)
      Specified by:
      onDirectoryDelete in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • onFileChange

      public void onFileChange(File file)
      Specified by:
      onFileChange in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • onFileCreate

      public void onFileCreate(File file)
      Specified by:
      onFileCreate in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • onFileDelete

      public void onFileDelete(File file)
      Specified by:
      onFileDelete in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • onStart

      public void onStart(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)
      Specified by:
      onStart in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • onStop

      public void onStop(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)
      Specified by:
      onStop in interface org.apache.commons.jci.monitor.FilesystemAlterationListener
    • getReloadingClassLoader

      public ReloadingClassLoader getReloadingClassLoader()