Class CombinedReloadingController

java.lang.Object
org.apache.commons.configuration2.reloading.ReloadingController
org.apache.commons.configuration2.reloading.CombinedReloadingController
All Implemented Interfaces:
EventSource

public class CombinedReloadingController extends ReloadingController

A specialized ReloadingController implementation which manages an arbitrary number of other ReloadingController objects.

This class can be used to handle multiple simple controllers for reload operations as a single object. As a usage example consider a combined configuration containing a number of configuration sources of which some support reloading. In this scenario all ReloadingController instances for the reloading-enabled sources can be added to a CombinedReloadingController. Then by triggering the combined controller a reload check is performed on all child sources.

This class is a typical implementation of the composite pattern. An instance is constructed with a collection of sub ReloadingController objects. Its operations are implemented by delegating to all child controllers.

This class expects the managed controller objects to be passed to the constructor. From this list a defensive copy is created so that it cannot be changed later on. Derived classes can override the getSubControllers() method if they need another way to handle child controllers (e.g. a more dynamic way). However, they are then responsible to ensure a safe access to this list in a multi-threaded environment.

Since:
2.0
  • Field Details

    • DUMMY

      private static final ReloadingDetector DUMMY
      Constant for a dummy reloading detector.
    • controllers

      private final Collection<ReloadingController> controllers
      The collection with managed reloading controllers.
    • detector

      private final ReloadingDetector detector
      The reloading detector used by this instance.
  • Constructor Details

    • CombinedReloadingController

      public CombinedReloadingController(Collection<? extends ReloadingController> subCtrls)
      Creates a new instance of CombinedReloadingController and initializes it with the ReloadingController objects to be managed.
      Parameters:
      subCtrls - the collection with sub ReloadingControllers (must not be null or contain null entries)
      Throws:
      IllegalArgumentException - if the passed in collection is null or contains null entries
  • Method Details

    • checkManagedControllers

      private static Collection<ReloadingController> checkManagedControllers(Collection<? extends ReloadingController> subCtrls)
      Checks the collection with the passed in sub controllers and creates a defensive copy.
      Parameters:
      subCtrls - the collection with sub controllers
      Returns:
      a copy of the collection to be stored in the newly created instance
      Throws:
      IllegalArgumentException - if the passed in collection is null or contains null entries
    • getDetector

      public ReloadingDetector getDetector()
      Gets the ReloadingDetector used by this controller. This implementation returns a special reloading detector which operates on all managed controllers.
      Overrides:
      getDetector in class ReloadingController
      Returns:
      the ReloadingDetector
    • getSubControllers

      public Collection<ReloadingController> getSubControllers()
      Gets a (unmodifiable) collection with the sub controllers managed by this combined controller.
      Returns:
      a collection with sub controllers
    • resetInitialReloadingState

      public void resetInitialReloadingState()
      Resets the reloading state of all managed sub controllers unconditionally. This method is intended to be called after the creation of an instance. It may be the case that some of the sub controllers are already in reloading state, so their state is out of sync with this controller's global reloading state. This method ensures that the reloading state of all sub controllers is reset.