anchor.diff:  
   You can *register* your implementation in 2 ways:
   
  -. Manually by calling +ConfigEvent.addListener(new MyConfigChangeListener())+
  +. Manually by calling +ConfigEventManager.addListener(new MyConfigChangeListener())+
   . Automatically by registering your listener using the +ServiceLoader+ under
  -  +META-INF/services/org.apache.tamaya.ConfigEventListener+
  +  +META-INF/services/org.apache.tamaya.events.ConfigEventListener+
  +
   
   === Modelling PropertySource Changes
   
   Beside that a whole configuration changes, also +PropertySource+ instance can change, e.g. by a configuration file
  -edited on the fly. This is similarly to +ConfigurationChange+ reflected by the classes +PropertySourceChange,
  +edited on the fly. This is similarly to a +ConfigurationChange+ reflected by the classes +PropertySourceChange,
   PropertySourceChangeBuilder+.
  +
   
   === Modelling Configuration Context Changes
   
  
positive.code: Similar to the +ConfigurationChange+ class you also must use a +ConfigurationContextChangeBuilder+ to create instances
  of +ConfigurationContextChange+.
  
  === Modelling of an observing PropertySourceProvider.
  
  In Tamaya configuration data is provided by instances of +PropertySource+, which in case of a configuration directory
  may be provided by an implementation of +PropertySourceProvider+. The events module provides a base provider
  implementation that
  
  * observes all changes in a +Path+
  * tries to reevaluate corresponding resources based on the +ConfigurationFormats+ supported.
  * it creates an instance of +ConfigurationContextChange+ reflecting the changed +ConfigurationContext+ and triggers
    this event by calling +ConfigEvent.fireEvent(contextChange);+.
  
  Additionally this module registers an instance of +ConfigEventListener<ConfigurationContextChange+>+, which listenes to
  these events. If such an event is triggered the listener tries to apply the changes by
  
negative.code: [source,java]
  .ConfigEvent
  --------------------------------------------
  public final interface ConfigEvent<T> {
  
      Class<T> getResourceType();
      T getResource();
      String getVersion();
      long getTimestamp();
  }
  
  // @FunctionalInterface
  public interface ConfigEventListener {
  
      void onConfigEvent(ConfigEvent<?> event);
  
  }
  --------------------------------------------
  
  This mechanism can now be used to propagate configuration changes to all interested stakeholders. Hereby the payloed
  can be basically arbitrary as long as it implements the +ConfigEvent+ interface. The next sections
  give more details on the the provided event implementations and abstractions that are used to implement such
  features.
  
  