anchor.diff:  
   == Rational
   
  -Typically, majority applications need to be configured based on running environment. The configuration data need to be stored in a different location so that the applications should not need to be repackaged. The configuration data (data source) can come from different locations and in different formats (e.g. system properties, system environment variables, .properties, .yml, datasource). If a property is defined in multiple data sources, which value should be used. Therefore, there should be a policy to order the data sources. Under some circumstances, some data sources may change dynamically. The changed value should be fed into the client without the need of restarting the application. This requirement is particular important for micro services running in a cloud environment.
  +Typically, the majority of applications need to be configured based on a running environment. Frequently, configuration data needs to be stored outside an application so that applications do not need to be repackaged. The configuration data (data source) can come from different locations and in different formats (e.g. system properties, system environment variables, .properties, .xml, datasource). If a property is defined in multiple data sources, which value should be used? Therefore, there should be a policy that orders the data sources. Under some circumstances, some data sources may change dynamically. The changed values should be fed into the client without the need for restarting the application. This requirement is particularly important for micro services running in a cloud environment.
   
   == Implementaions
   
  -There are a number of Config support, shown below.
  +There are a number of Config supporting projects, such as:
   
   * Netflix Archaius (https://github.com/Netflix/archaius)
   * DeltaSpike Config (https://github.com/struberg/javaConfig/)
  
positive.code: * /META-INF/config.xml (ordinal=100)
  * /META-INF/config.json (ordinal=100)
  
  If there are some custom config data to be configured, these config source can be added by calling
  'ConfigProvider.getBuilder().withSources()'
  
  A 'Config' consists of the information collected from the registered `javax.config.spi.ConfigSource` s.
  These `ConfigSource`s get sorted according to their _ordinal_.
  That way it is possible to overwrite configuration with lower importance from outside.
  
  By default there are 3 default ConfigSources:
  
negative.code: * `System.getenv()` (ordinal=300)
  * all `META-INF/config.properties` or config.xml or config.json files on the ClassPath. (ordinal=100, separately configurable via a config_ordinal property inside each file)
  
  Therefore, the default values can be specified in the above files packaged with the application and the value can be overwritten later on deployment.
  
  == Custom ConfigSources
  
  It is possible to write and register a custom `ConfigSource` s. An example would be a ConfigSource which gets the configured values from a shared database table in a cluster.
  
  == Building
  
  