Package org.apache.struts2.spring

# 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 ClassReloadingBeanFactory`
  `beanFactory`
  `protected ReloadingClassLoader`
  `classLoader`
  `protected org.apache.commons.jci.monitor.FilesystemAlterationMonitor`
  `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
  `ClassReloadingXMLWebApplicationContext()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  `protected org.springframework.beans.factory.support.DefaultListableBeanFactory`
  `createBeanFactory()`
  `ReloadingClassLoader`
  `getReloadingClassLoader()`
  `void`
  `onDirectoryChange(File file)`
  `void`
  `onDirectoryCreate(File file)`
  `void`
  `onDirectoryDelete(File file)`
  `void`
  `onFileChange(File file)`
  `void`
  `onFileCreate(File file)`
  `void`
  `onFileDelete(File file)`
  `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`
  `refresh()`
  `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()