Repository: incubator-tamaya-site Updated Branches: refs/heads/master f996acade -> 06e3e4c08
Moved asciido latest from core to site. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/commit/40e8f73e Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/tree/40e8f73e Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/diff/40e8f73e Branch: refs/heads/master Commit: 40e8f73ef4a9d72313924fb29dcdb7ee838ad6e2 Parents: f996aca Author: Anatole Tresch <[email protected]> Authored: Fri Nov 18 07:02:57 2016 +0100 Committer: Anatole Tresch <[email protected]> Committed: Fri Nov 18 07:02:57 2016 +0100 ---------------------------------------------------------------------- content/extensions/mod_camel.adoc | 4 +- content/extensions/mod_cdi.adoc | 12 +- content/extensions/mod_classloader_support.adoc | 3 +- content/extensions/mod_collections.adoc | 4 +- content/extensions/mod_consul.adoc | 4 +- content/extensions/mod_environment.adoc | 3 +- content/extensions/mod_etcd.adoc | 4 +- content/extensions/mod_events.adoc | 152 +++++-------------- content/extensions/mod_filter.adoc | 33 ++-- content/extensions/mod_formats.adoc | 77 ++++------ content/extensions/mod_functions.adoc | 3 +- content/extensions/mod_injection.adoc | 24 +-- content/extensions/mod_jodatime.adoc | 5 +- content/extensions/mod_json.adoc | 5 +- content/extensions/mod_management.adoc | 4 +- content/extensions/mod_mutable_config.adoc | 151 ++++++++++-------- content/extensions/mod_optional.adoc | 3 +- content/extensions/mod_osgi.adoc | 2 - content/extensions/mod_remote.adoc | 4 +- content/extensions/mod_resolver.adoc | 23 ++- content/extensions/mod_resources.adoc | 23 ++- content/extensions/mod_server.adoc | 4 +- content/extensions/mod_spi-support.adoc | 3 +- content/extensions/mod_spring.adoc | 4 +- content/extensions/mod_yaml.adoc | 6 +- 25 files changed, 250 insertions(+), 310 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_camel.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_camel.adoc b/content/extensions/mod_camel.adoc index 9d9a60d..abb5199 100644 --- a/content/extensions/mod_camel.adoc +++ b/content/extensions/mod_camel.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Integration with Apache Camel -:jbake-type: page -:jbake-status: published toc::[] @@ -142,4 +140,4 @@ again use Tamaya as the main configuration solutions only using Camel's default </bean> </beans> ------------------------------------------------ +----------------------------------------------- \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_cdi.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_cdi.adoc b/content/extensions/mod_cdi.adoc index 41d91a8..e5fe95e 100644 --- a/content/extensions/mod_cdi.adoc +++ b/content/extensions/mod_cdi.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Classloader Isolation Support -:jbake-type: page -:jbake-status: published toc::[] @@ -51,14 +49,14 @@ components will be compatible regardless if deployed in a pure SE, a Java EE (CD <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-injection-api</artifactId> - <version>{tamaya-version}</version> + <version>{tamayaVersion}</version> </dependency> ----------------------------------------------- === Compatibility -Both modules are based on Java 7, so they will only run on Java 7 and beyond. +Both modules are based on Java 7, so they will not run on Java 7 and beyond. === Installation @@ -72,7 +70,7 @@ you never have installed both CDI extensions at the same time because this may b <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-cdi-ee</artifactId> - <version>{tamaya-version}</version> + <version>{tamayaVersion}</version> </dependency> ----------------------------------------------- @@ -82,7 +80,7 @@ you never have installed both CDI extensions at the same time because this may b <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-cdi-se</artifactId> - <version>{tamaya-version}</version> + <version>{tamayaVersion}</version> </dependency> ----------------------------------------------- @@ -230,4 +228,4 @@ private String value; -------------------------------------------------------------------------------------- In the example above +legacy.bKey+ defines an absolute key, which is not combined with any defined -default section parts. +default section parts. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_classloader_support.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_classloader_support.adoc b/content/extensions/mod_classloader_support.adoc index 7b93a4b..f8bf529 100644 --- a/content/extensions/mod_classloader_support.adoc +++ b/content/extensions/mod_classloader_support.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Classloader Isolation Support -:jbake-type: page -:jbake-status: published toc::[] @@ -89,3 +87,4 @@ hierarchies: * +PropertySource+, +PropertySourceProviders+ * +PropertyFilters+, +PropertyCombinationPolicy+ + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_collections.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_collections.adoc b/content/extensions/mod_collections.adoc index 61e5553..835a20c 100644 --- a/content/extensions/mod_collections.adoc +++ b/content/extensions/mod_collections.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Collection Support -:jbake-type: page -:jbake-status: published toc::[] @@ -245,4 +243,4 @@ Of course these settings also can be combined: redefined-map=0==none | 1==single | 2==any _redefined-map.map-entry-separator=== _redefined-map.item-separator=| ------------------------------------------------ +----------------------------------------------- \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_consul.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_consul.adoc b/content/extensions/mod_consul.adoc index f29a2e1..5aa3055 100644 --- a/content/extensions/mod_consul.adoc +++ b/content/extensions/mod_consul.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Integration with consul (Hashicorp) -:jbake-type: page -:jbake-status: published toc::[] @@ -72,4 +70,4 @@ in microservice containers to connect with the according consul cluster: server can be established a warning will be logged, but deployment will not fail. * The +ConsulPropertySource+ finally also allows the values read from the consul cluster to be mapped to prefixed context. This can be activated by setting the +-Dtamaya.consul.prefix=<PREFIX>+ system property. E.g. when the prefix is - set to +cluster-config.+ a consul key of +host:known/all+ is mapped to +cluster-config.host:known/all+. + set to +cluster-config.+ a consul key of +host:known/all+ is mapped to +cluster-config.host:known/all+. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_environment.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_environment.adoc b/content/extensions/mod_environment.adoc index df889ed..2e5921f 100644 --- a/content/extensions/mod_environment.adoc +++ b/content/extensions/mod_environment.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Classloader Isolation Support -:jbake-type: page -:jbake-status: published toc::[] @@ -56,3 +54,4 @@ tbd === Reusable Base Classes tbd + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_etcd.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_etcd.adoc b/content/extensions/mod_etcd.adoc index 4bad2a0..bfb4b30 100644 --- a/content/extensions/mod_etcd.adoc +++ b/content/extensions/mod_etcd.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Integration with etcd (Core OS) -:jbake-type: page -:jbake-status: published toc::[] @@ -202,4 +200,4 @@ in microservice containers to connect with the according etcd cluster: system or environment property. * The +EtcdPropertySource+ finally also allows the values read from the etcd cluster to be mapped to prefixed context. This can be activated by setting the +-Dtamaya.etcd.prefix=<PREFIX>+ system property. E.g. when the prefix is - set to +cluster-config.+ a etcd key of +host:known/all+ is mapped to +cluster-config.host:known/all+. + set to +cluster-config.+ a etcd key of +host:known/all+ is mapped to +cluster-config.host:known/all+. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_events.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_events.adoc b/content/extensions/mod_events.adoc index 30da423..7c2d8ef 100644 --- a/content/extensions/mod_events.adoc +++ b/content/extensions/mod_events.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Events -:jbake-type: page -:jbake-status: published toc::[] @@ -29,7 +27,7 @@ toc::[] Tamaya Events is an extension module. Refer to the link:modules.html[extensions documentation] for further details about modules. -Tamaya Events provides an abstraction for events like change events, when configuration has bee changed. +Tamaya Events provides an abstraction for events like change events, when configuration has been changed. === Compatibility @@ -72,10 +70,9 @@ public interface ConfigEventListener { } -------------------------------------------- -This mechanism can now be used to propagate configuration changes to all interested stakeholders. Hereby the payloed +This mechanism can now be used to propagate configuration changes to all interested stakeholders. Hereby the payload 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. +give more details on the the provided event types and their usage. === Modelling Configuration Changes @@ -87,18 +84,8 @@ be * removed configuration entries * changes on entries -This is also reflected in the +ChangeType+ enum -[source,java] -------------------------------------------------------- -public enum ChangeType { - NEW, - DELETED, - UPDATED, -} -------------------------------------------------------- - -This enum type is used within the +ConfigurationChange+ class, which implements the event sent for a changed +The most important event modelled is the +ConfigurationChange+ class, which implements the event sent for a changed +Configuration+: [source,java] @@ -115,8 +102,6 @@ public final class ConfigurationChange implements ConfigEvent<Configuration>, Se public String getVersion(); @Override public long getTimestamp(); - @Override - public long getTimestamp(); // Event specific methods @@ -135,7 +120,7 @@ public final class ConfigurationChange implements ConfigEvent<Configuration>, Se ------------------------------------------------------- -New instances of this class hereby are created using a fluent builder: +New instances of this class hereby can be created using a fluent builder: [source,java] ------------------------------------------------------- @@ -145,8 +130,8 @@ ConfigurationChange change = ConfigurationChangeBuilder.of(config) .removeKeys("myRemovedKey").build(); ------------------------------------------------------- -Also it is possible to directly compare 2 instances of configurations to create a matching +ConfigurationChange+ -instance: +Also it is possible to directly compare 2 instances of configurations to create +ConfigurationChange+ that +reflect the differences between the two configurations: [source,java] Comparing 2 configurations @@ -159,8 +144,8 @@ ConfigurationChange change = ConfigurationChangeBuilder.of(config) So a +ConfigurationChange+ allows you to evaluate the changes on a configuration. This allows you to listen to changes and react in your client code as useful, once you encounter changes that are relevant to you, e.g. by reconfiguring -your component. Of course, your code has to register itself to listen for appropriate changes by implementing -a +ConfigEventListener+: +your component. For listening to configuration changes you must implement the ++ConfigEventListener+ functional interface: [source,java] .Implementing a ConfigChangeListener @@ -189,52 +174,21 @@ You can *register* your implementation in 2 ways: === Modelling PropertySource Changes -Beside that a whole configuration changes, also +PropertySource+ instance can change, e.g. by a configuration file +Beside that a whole configuration changes, also +PropertySource+ instances can change, e.g. by a configuration file edited on the fly. This is similarly to a +ConfigurationChange+ reflected by the classes +PropertySourceChange, PropertySourceChangeBuilder+. -=== Modelling Configuration Context Changes - -The +ConfigurationContext+ models the container that manages all subcomponents that are used to define and -evalaute a +Configuration+. In the case where configuration is dynamically loaded, e.g. by observing changes on a -file folder, the +ConfigurationContext+ may change, so a corresponding +ConfigurationContextChange+ event is -defined: - -[source,java] -------------------------------------------------------- -public final class ConfigurationContextChange implements ConfigEvent<ConfigurationContext>, Serializable{ - - public static ConfigurationContextChange emptyChangeSet(); - - @Override - public ConfigurationContext getResource(); - @Override - public Class<ConfigurationContext> getResourceType(); - @Override - public String getVersion(); - @Override - public long getTimestamp(); - - // specific methods - public Collection<PropertySourceChange> getPropertySourceChanges(); - public Collection<PropertySourceChange> getPropertySourceUpdates(); - public Collection<PropertySource> getRemovedPropertySources(); - public Collection<PropertySource> getAddedPropertySources(); - public Collection<PropertySource> getUpdatedPropertySources(); - public boolean isAffected(PropertySource propertySource); - public boolean isEmpty(); -} -------------------------------------------------------- - -Similar to the +ConfigurationChange+ class you also must use a +ConfigurationContextChangeBuilder+ to create instances -of +ConfigurationContextChange+. - === The ConfigEventManager Singleton Main entry point of the events module is the +ConfigEventManager+ singleton class, which provides static accessor methods to the extension's functionality: +* Adding/removing of +ConfigChangeListener+ instances, either globally or per event type. +* Firing configuration events synchronously or asyncronously (mostly called by framework code). +* Configuring the monitor that periodically checks for changes on the global +Configuration+ provided + by +ConfigurationProvider.getConfiguration()+. + [source,java] ------------------------------------------------------- public final class ConfigEventManager { @@ -261,40 +215,35 @@ public final class ConfigEventManager { } ------------------------------------------------------- -Looking at the methods listed above you see that there is more functionality worth to be mentioned: - -* +ConfigCHangeListeners+ can be registered either _globally_ or for a certain _event type_ only. -* +ConfigEvents+ can be published within the same thread, or asynchronously. - ==== Monitoring of configuration changes The +ConfigEventManager+ also supports active monitoring of the current configuration to trigger corresponding change -events to listeners registered. This feature is activated by default, but can be deactivated optionally. Nevertheless -this feature is quite handy, since regularly polling your local +Configuration+ for any kind of changes is much -more simpler than implementing change management on the +PropertySource+ level. With this feature you can easily -implement also remote property source, which can deliver different configuration based on any changes done remotedly -on another node in your system. If such a change happened Tamaya identifies it and triggers corresponding -+ConfigurationChange" events automatically. Similarly changes in a configuration tree, can actively identified and -broadcasted to the targeting nodes automatically. +events to listeners registered. This feature is deactivated by default, but can be enabled by calling ++ConfigEventManager.enableChangeMonitoring(true);+. This feature avoids regularly polling your local +Configuration+ for +any kind of changes. If a change has been encountered Tamaya identifies it and triggers corresponding ++ConfigurationChange+ events automatically. === Freezing Configurations and PropertySources +Configuration+ instances as well as +PropertySources+ are explicitly not required to be serializable. To enable easy -serialization of these types as well as to fix a current state (e.g. for later comparison with a newly loaded instance) -Tamaya allows to *freeze* instances of these types. Freezing hereby means +serialization of these types a +Configuration+'s *current state can be frozen* (e.g. for later comparison with a newly +loaded version). Freezing hereby means * all key/values are read-out by calling the +getProperties()+ method. -* a meta data entry is added of the form +[meta]frozenAt=223273777652325677+, whichdefines the UTC timestamp in +* a meta data entry is added of the form +_frozenAt=223273777652325677+, whichdefines the UTC timestamp in milliseconds when this instance was frozen. +* if not already defined an +_id+ property will be added to the +Configuration+ containing the + identifier of the configuration. -In code this is done easily as follows: +In code freezing is a no-brainer: [source,java] .Freezing the current Configuration -------------------------------------------------- -Configuration frozenConfig = FrozenConfiguration.of(ConfigurationProvider.getConfiguration()); +Configuration config = ConfigurationProvider.getConfiguration(); +Configuration frozenConfig = FrozenConfiguration.of(config); -------------------------------------------------- ... and similarly for a +PropertySource+: @@ -302,51 +251,17 @@ Configuration frozenConfig = FrozenConfiguration.of(ConfigurationProvider.getCon [source,java] .Freezing the current Configuration -------------------------------------------------- -PropertySource frozenSource = FrozenPropertySource.of(ConfigurationProvider.getConfiguration()); +PropertySource propertySource = ...; +PropertySource frozenSource = FrozenPropertySource.of(propertySource); -------------------------------------------------- -=== 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+, which produces one +PropertySource+ (at least) per -file detected. 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 +ConfigEventManager.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 - -. accessing the current +Configuration+ and its +ConfigurationContext+ -. checking if the event is affecting the current +ConfigurationContext+. -. in the case the current context is affected, based on the current +ConfigurationContext+ a new context is created, - whereas - .. all +PropertySources+ provided by this provider implementation type are removed. - .. the new +PropertySources+ loaded are added. -. Finally the listener tries to apply the new +ConfigurationContext+ by calling the corresponding API methods of the - +ConfigurationProvider+: - -[source,java] --------------------------------------------------- -try { - ConfigurationProvider.setConfigurationContext(newContext); -} catch (Exception e) { - LOG.log(Level.INFO, "Failed to update the current ConfigurationContext due to config model changes", e); -} --------------------------------------------------- - -So if the current +ConfigurationProvider+ supports reloading of the current +ConfigurationContext+ this will apply the -changes to the current +Configuration+. Otherwise the change is logged, but no further actions are taken. - === SPIs This component also defines an additional SPI, which allows to adapt the implementation of the main +ConfigEventManager+ singleton. This enables, for example, using external eventing systems, such as CDI, instead of the default provided -simple SE based implementation. As normal, implementation mus be registered using the current +ServiceContext+ +simple SE based implementation. As normal, implementation must be registered using the current +ServiceContext+ active, by default using the Java +ServiceLoader+ mechanism. [source,java] @@ -370,3 +285,10 @@ public interface ConfigEventManagerSpi { void enableChangeMonitor(boolean enable); } -------------------------------------------------- + + +Summarizing with the events module you can easily observe configuration changes, record the +state of any configuration and compare configuration states to create and publish related +change events. + + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_filter.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_filter.adoc b/content/extensions/mod_filter.adoc index 30c950d..0df0035 100644 --- a/content/extensions/mod_filter.adoc +++ b/content/extensions/mod_filter.adoc @@ -15,21 +15,19 @@ // specific language governing permissions and limitations // under the License. -= Apache Tamaya -- Extension: Integration with etcd (Core OS) -:jbake-type: page -:jbake-status: published += Apache Tamaya -- Extension: User Filtering toc::[] [[Optional]] -== COnfiguration Filtering (Extension Module) +== User Filtering (Extension Module) === Overview The Tamaya filter module provides a simple singleton accessor that allows to explicitly add +PropertyFilter+ instances active on the current thread only. This can be very useful in many scenarios. Additionally this module adds standard filters that hide metadata entries when the full configuration map is accessed. When keys are accessed -explcitily no filtering is applied and everything is visible. +explicitily no filtering is applied and everything is visible. === Compatibility @@ -52,7 +50,7 @@ To benefit from configuration builder support you only must add the correspondin === The Extensions Provided -Tamaya Filter comes basically with 1 artifact: +Tamaya Filter comes basically with 3 artifacts: * The +org.apache.tamaya.filter.ConfigurationFilter+ provides several static methods to register +PropertyFilter+ instances on the current thread. @@ -62,7 +60,7 @@ instances on the current thread. === The ConfigurationFilter -The accessor mentioned implements the API for for adding 1PropertyFilters+ to the current thread (as thread local): +The accessor mentioned implements the API for for adding +PropertyFilters+ to the current thread (as thread local): [source, java] ----------------------------------------------- @@ -75,20 +73,20 @@ public final class ConfigurationFilter implements PropertyFilter{ * @see #clearFilters() * @param active true,to enable metadata filtering (default). */ - public static void setMetadataFilter(boolean active); + public static void setFilterMetadata(boolean active); /** * Access the filtering configuration that is used for filtering single property values accessed. * @return the filtering config, never null. */ - public static ProgrammableFilter getSingleFilters(); + public static FilterContext getSingleFilterContext(); /** * Access the filtering configuration that is used for filtering configuration properties accessed as full * map. * @return the filtering config, never null. */ - public static ProgrammableFilter getMapFilters(); + public static FilterContext getMapFilters(); /** * Removes all programmable filters active on the current thread. @@ -106,7 +104,7 @@ is part of this module, So you can add a customized filter as follows: [source, java] ----------------------------------------------- try{ - ConfigurationFilter.getMapFilters().addFilter(new RegexPropertyFilter("\\_.*")); + ConfigurationFilter.getMapFilters().addFilter(new myFilter()); // do your code with filtering active } @@ -116,20 +114,21 @@ finally{ } ----------------------------------------------- -The +ProgrammableFilter+ is a simple structure just providing some handy accessors to the dynamic thread-local +The +FilterContext+ is a simple structure just providing some handy accessors to the dynamic thread-local managed filters: [source, java] ----------------------------------------------- -public final class ProgrammableFilter implements PropertyFilter{ +public final class FilterContext implements PropertyFilter{ - public void addFilter(PropertyFilter filter); - public void addFilter(int pos, PropertyFilter filter); + public void addIncludes(PropertyFilter filter); + public void addExcludes(int pos, PropertyFilter filter); public PropertyFilter removeFilter(int pos); public void clearFilters(); - public void setFilters(PropertyFilter... filters); - public void setFilters(Collection<PropertyFilter> filters); + public void setIncludes(PropertyFilter... filters); + public void setExcludes(Collection<PropertyFilter> filters); public List<PropertyFilter> getFilters(); } ----------------------------------------------- + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_formats.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_formats.adoc b/content/extensions/mod_formats.adoc index 1cd1679..19b89f3 100644 --- a/content/extensions/mod_formats.adoc +++ b/content/extensions/mod_formats.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Formats -:jbake-type: page -:jbake-status: published toc::[] @@ -53,8 +51,6 @@ To benefit from dynamic value resolution you only must add the corresponding dep </dependency> ----------------------------------------------- -The module automatically registers an according +PropertyFilter+ that is automatically called, whenever a value -is accessed. === The Idea @@ -63,7 +59,7 @@ data structure (in our cases: property sources). ==== ConfigurationData -Configuration formats can be very different. Some are simpley key/value pairs, whereas other also consist of multiple sections (e.g. ini-files) or +Configuration formats can be very different. Some are simple key/value pairs, whereas other also consist of multiple sections (e.g. ini-files) or hierarchical data (e.g. yaml, xml). This is solved in Tamaya by mapping the configuration read into a normalized intermediary format called +ConfigurationData+: @@ -77,13 +73,10 @@ public final class ConfigurationData { public Set<String> getSectionNames(); public Map<String,String> getSection(String name); - public Map<String,Map<String,String>> getSections(); public boolean hasDefaultProperties(); public Map<String,String> getDefaultProperties(); - public Map<String,String> getCombinedProperties(); - public boolean hasCombinedProperties(); public boolean isEmpty(); } @@ -99,30 +92,14 @@ In detail the data read from a file is organized into _sections_ as follows: named sections, depending on the configuration format. * The method +getSectionNames()+ returns a set of all section names. * With +getSection(String name)+ a named section can be accessed. -* With +getDefaultSection()+ the default section can be accessed. +* With +getDefaultSection()+ the 'default' section can be accessed. This is a convenience method. * With +getCombinedProperties()+ a flattened entry map can be accessed built up (by default) out of ** all entries from the default section, without any changes. - ** all entries from named sections, where the key for each entry is prefix with the section name and a dot separator. + ** all entries from named sections, where the key for each entry is prefix with the section name and a '::' separator. * The configuration format used determines the mapping of configuration data read into this structure. The format implementation can as well provide alternate implementations of how the data read should be mapped into the combined properties map. -Now for the conversion of +ConfigurationData+ into a +PropertySource+ different default approaches are used: - -. The +ConfigurationFormat+ that read the data can provide the (combined) properties accessible from - +getProperties()+ explcitly, which can be used to initialize a single +PropertySource+ containing the data read. -. If the format did not set the final properties, but only a default section is present this default section - can be directly returned as combined properties. -. In all other cases a properties can be uniquely mapped into one single properties Map, by prefixing all keys of each - section present with the (unique) section name and a '.' separator. - -Nevertheless, depending on the context, where a configuration source was read (classloader, time, source etc.) the -resulting +PropertySource+ can have different semnatics, especially for the +PropertySources+ ordinal. Also section -names may be mapped into different ordinals instead of using them as key prefixes (e.g. imagine configuration formats -with a 'default', 'main', and 'overrides' sections). For such more complex or custom cases no useful default mapping -can be defined. In such cases this functionality must be implemented in a _mapData_ method, which converts -the normalized +ConfigData+ read to the appropriate collection of +PropertySource+ instances: - ==== ConfigurationFormat @@ -140,10 +117,20 @@ public interface ConfigurationFormat { ------------------------------------------------------- -Normally you need to map the resulting +ConfigurationData+ to one or multiple +PropertySources+. In case, where the -properties provided match exactly the extected properties a +FlattenedDefaultPropertySource+ is provided out-of-the-box. -If the exact mapping must be overridden, you can simply override the property source's initialize method to adapt the -mapping: +=== How to tranform ConfigurationData into a PropertySource + +For for the conversion of +ConfigurationData+ into a +PropertySource+ different approaches can be useful: + +. The +ConfigurationFormat+ that reads the data can provides all properties read either as sectioned properties + or/and as default properties. The most simple cases is, where all properties have been added as 'default' + properties. In this case the default properties can be used as the property sources properties without any change. +. If the format did also add section based properties, the combined properties returned can be used, hereby + replacing the '::' separator with a '.' separator. +. In all other cases a custom mapping is useful, which can be acomplished by using the +MappedConfigurationDataPropertySource+ + and overriding the +Map<String,String> populateData(ConfigurationData data)+ method. + +In most cases the usage of a +FlattenedDefaultPropertySource+, is a good choice to start. This class +provides a convenient default mapping and also allows to customized the mapping easily: [source,java] ------------------------------------------------------- @@ -155,23 +142,13 @@ FlattenedDefaultPropertySource ps = new FlattenedDefaultPropertySource(data){ }; ------------------------------------------------------- +Nevertheless, depending on the context, where a configuration source was read (classloader, time, source etc.) the +resulting properties can have different semnatics, especially different priorities. Also section +names may be mapped into different ordinals instead of using them as key prefixes (e.g. imagine configuration formats +with a 'default', 'main', and 'overrides' sections). For such more complex or custom cases no simple mapping +can be defined. Consequently the functionality mapping the normalized +ConfigurationData+ read to the +appropriate collection of +PropertySource+ instances must be implemented. -=== How to tranform ConfigurationData into a PropertySource - -The Tamaya main building block for configuration properties is the +PropertySource+ interface. You have several -options to implement this tranformation: - -. You can simply map the properties returned by +getCombinedProperties()+ and use them as properties returned by a - wrapping property source. Since this use case is common for all kind of non hierarchic configuration formats it - is directly supported by the +FlattenedDefaultPropertySource+ class. -. When the +ConfigurationFormat+ is more complex, multiple 'sections' are common. What a section exactly is depends on - the concrete format only. The +ConfigurationFormat+ should provide detailed information how the data read is - mapped to default properties and sections and how it is assembled into the +combinedProperties+ map. Also here - the +FlattenedDefaultPropertySource+ class can help you with its default mapping. Nevertheless in some cases it is - necessary to write an explicit mapping, e.g. when - . different sections must be mapped to multiple +PropertySources+, with optionally fixed ordinals. - . sections must be cross-checked and combined into new properties, or into several +PropertySources+. - . other complex mapping requirements apply. === Examples @@ -200,9 +177,9 @@ This file content coud be mapped to the following structure: ------------------------------------------------------- a=valA a.b=valB -section1.valA=sectionValA -section1.a.b.c=SectionValC -section2.a=val2Section2 +section1::valA=sectionValA +section1::a.b.c=SectionValC +section2::a=val2Section2 ------------------------------------------------------- Nevertheless from the +ConfigurationData+ instance a more complex algorithm can access all the different parts: @@ -241,3 +218,5 @@ module hereby ships with 3 format classes: * +PropertiesFormat+ providing support for .properties files. * +PropertiesXmlFormat+ providing support for xml.property files. * +IniConfiguratonFormat+ providing support for xml.property files. + + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_functions.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_functions.adoc b/content/extensions/mod_functions.adoc index a7e891c..041ef75 100644 --- a/content/extensions/mod_functions.adoc +++ b/content/extensions/mod_functions.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Functions -:jbake-type: page -:jbake-status: published toc::[] @@ -122,3 +120,4 @@ The following sections explain the provided functions defined by +PropertySource select of the returned values should be relative to its selection of be fully qualified. * *String stripSectionKeys(String key, String... sectionKeys)* This function strips away the matching section key as given in _sectionKeys_ from a given _key_. + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_injection.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_injection.adoc b/content/extensions/mod_injection.adoc index dc68626..47f8872 100644 --- a/content/extensions/mod_injection.adoc +++ b/content/extensions/mod_injection.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Injection -:jbake-type: page -:jbake-status: published toc::[] @@ -192,15 +190,15 @@ name=<unnamed> -------------------------------------------- -==== Accessing ConfiguredItemSupplier instances +==== Accessing Supplier instances In many cases you want to create a supplier that simply creates instances that are correctly configured as defined by the current context. This can be done using +Suppliers+: [source, java] -------------------------------------------- -ConfiguredItemSupplier<Tenant> configuredTenantSupplier = ConfigurationInjector.getInstance().getConfiguredSupplier( - new ConfiguredItemSupplier<Tenant>(){ +Supplier<Tenant> configuredTenantSupplier = ConfigurationInjector.getInstance().getConfiguredSupplier( + new Supplier<Tenant>(){ public Tenant get(){ return new Tenant(); } @@ -211,11 +209,11 @@ With Java 8 it's even more simpler: [source, java] -------------------------------------------- -ConfiguredItemSupplier<Tenant> configuredTenantSupplier = ConfigurationInjector.getInstance().getConfiguredSupplier( +Supplier<Tenant> configuredTenantSupplier = ConfigurationInjector.getInstance().getConfiguredSupplier( Tenant::new); -------------------------------------------- -Hereby this annotation can be used in multiple ways and combined with other annotations such as +@DefaultValue+, +Hereby this annotation can be used in multiple ways and combined with other annotations such as +@WithLoadPolicy+, +@WithConfigOperator+, +@WithPropertyConverter+. ==== Minimal Example @@ -247,7 +245,7 @@ In the next example we explicitly define the property value: -------------------------------------------- pubic class ConfiguredItem{ - @Config({"aValue", "a.b.value","a.b.deprecated.value"}, defaultValue="${env:java.version}") + @Config(value={"aValue", "a.b.value","a.b.deprecated.value"}, defaultValue="${env:java.version}") private String aValue; } -------------------------------------------- @@ -261,7 +259,7 @@ commit new values exactly, when convenient for you. -------------------------------------------- pubic class ConfiguredItem{ - @Config({"aValue", "a.b.value","a.b.deprecated.value"}, defaultValue="${env:java.version}") + @Config(value={"aValue", "a.b.value","a.b.deprecated.value"}, defaultValue="${env:java.version}") private DynamicValue aValue; } -------------------------------------------- @@ -294,8 +292,9 @@ public interface DynamicValue<T> { boolean isPresent(); T orElse(T other); - T orElseGet(ConfiguredItemSupplier<? extends T> other); - <X extends Throwable> T orElseThrow(ConfiguredItemSupplier<? extends X> exceptionSupplier) throws X; + // Enabled with Java 8 + // T orElseGet(ConfiguredItemSupplier<? extends T> other); + // <X extends Throwable> T orElseThrow(ConfiguredItemSupplier<? extends X> exceptionSupplier) throws X; } -------------------------------------------- @@ -443,3 +442,6 @@ public interface ConfiguredMethod { void configure(Object instance, Configuration config); } ---------------------------------------- + + + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_jodatime.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_jodatime.adoc b/content/extensions/mod_jodatime.adoc index e806af6..6dd05b6 100644 --- a/content/extensions/mod_jodatime.adoc +++ b/content/extensions/mod_jodatime.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: JodaTime -:jbake-type: page -:jbake-status: published toc::[] @@ -62,3 +60,6 @@ To be written. === Specifing periods and durations To be written. + + + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_json.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_json.adoc b/content/extensions/mod_json.adoc index 77c5b7d..691b27b 100644 --- a/content/extensions/mod_json.adoc +++ b/content/extensions/mod_json.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Builder -:jbake-type: page -:jbake-status: published toc::[] @@ -47,6 +45,7 @@ To benefit from configuration builder support you only must add the correspondin </dependency> ----------------------------------------------- +This extension also transitively requires the +tamaya.formats+ module. === Reading configuration in JSON @@ -75,3 +74,5 @@ according property maps. E.g. the following file is a simple and correct JSON co } } ---------------------------------------------------------------- + + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_management.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_management.adoc b/content/extensions/mod_management.adoc index f8050ec..b9f8de0 100644 --- a/content/extensions/mod_management.adoc +++ b/content/extensions/mod_management.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: JMX Management Access -:jbake-type: page -:jbake-status: published toc::[] @@ -105,4 +103,4 @@ public final class ConfigManagementSupport{ NOTE: The instance of +ManagedConfigMBean+ to be created and registered is evaluated by use og the +ServiceContextManager+. So you can replace the bean implementation by registering your overriding implementation using the current +ServiceContext+ (by default using - +java.util.ServiceLoader+ and +@Priority+ annotation. + +java.util.ServiceLoader+ and +@Priority+ annotation. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_mutable_config.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_mutable_config.adoc b/content/extensions/mod_mutable_config.adoc index 2c15e9b..d38626e 100644 --- a/content/extensions/mod_mutable_config.adoc +++ b/content/extensions/mod_mutable_config.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Mutable Configuration -:jbake-type: page -:jbake-status: published toc::[] @@ -49,6 +47,8 @@ To benefit from configuration mutability support you only must add the correspon === Core Architecture +==== Accessing MutableConfiguration + The core of the module is the +MutableConfigurationProvider+ singleton, which provides access to +MutableConfiguration+ instance, which extends +Configuration+. This interface adds additional methods to add/update or remove property values. Hereby changes applied are managed in a transaction like context, called +ConfigChangeContext+. Each context defines @@ -57,16 +57,17 @@ Backends for writing changes applied are of type +MutablePropertySource+, simila SPI with methods for writing changes back. Registrations and ordering policies are like with ordinary property sources, with one important difference. Mutable property source can be targeted by write operations. -Summarizing a +MutableConfiguration+ can be obtained as follows: +The example below shows how a +MutableConfiguration+ can be obtained the simplest way: [source,java] -.Accessing and changing a configuration +.Accessing and changing configuration -------------------------------------------- -MutableConfiguration config = MutableConfigurationProvider.createMutableConfiguration(); -config.set("newKey", "newValue") - .set("anotherKey", "updatedValue") +MutableConfiguration config = MutableConfigurationProvider + .createMutableConfiguration(); +config.put("newKey", "newValue") + .put("anotherKey", "updatedValue") .remove("valueNotValid") - .commit(); + .store(); -------------------------------------------- In the above scenario we use the overall system's configuration as the backend to be used. @@ -76,15 +77,16 @@ We can also pass any +Configuration+ to render it into a mutable instance, e.g. .Explicitly passing the backing configuration -------------------------------------------- Configuration config = ...; -MutableConfiguration config = - MutableConfigurationProvider.createMutableConfiguration(config); +MutableConfiguration config = MutableConfigurationProvider + .createMutableConfiguration(config); -------------------------------------------- -NOTE: If a configuration does not contain any +MutablePropertySource+ instances, a +MutableConfiguration+ built - from it will not be able to accept any changes. +NOTE: If a configuration does not contain any +MutablePropertySource+ instances, + a +MutableConfiguration+ built from it will not be able to accept any changes. -Following is the complete listing of the +MutableConfigurationProvider+ accessor: +Following you see the options how to create a +MutableConfiguration+ using the ++MutableConfigurationProvider+ singleton: [source, java] --------------------------------------------- @@ -92,8 +94,13 @@ public final class MutableConfigurationProvider { private MutableConfigurationProvider(){} - public static MutableConfiguration getMutableConfiguration(); - public static MutableConfiguration getMutableConfiguration(Configuration configuration); + public static MutableConfiguration createMutableConfiguration(); + public static MutableConfiguration createMutableConfiguration( + ChangePropagationPolicy changePropgationPolicy); + public static MutableConfiguration createMutableConfiguration(Configuration configuration); + public static MutableConfiguration createMutableConfiguration( + Configuration configuration, + ChangePropagationPolicy changePropgationPolicy); [...] } @@ -105,24 +112,11 @@ Hereby +MutableConfiguration+ is defined as follows: --------------------------------------------- public interface MutableConfiguration extends Configuration { - UUID startTransaction(); - void commitTransaction(); - void rollbackTransaction(); - UUID getTransactionId(); - boolean getAutoCommit(); - void setAutoCommit(boolean autoCommit); + void store(); - void setChangePropagationPolicy(ChangePropagationPolicy changePropagationPolicy); + ConfigChangeRequest getConfigChangeRequest(); ChangePropagationPolicy getChangePropagationPolicy(); - boolean isWritable(String keyExpression); - boolean isRemovable(String keyExpression); - boolean isExisting(String keyExpression); - List<MutablePropertySource> getMutablePropertySources(); - List<MutablePropertySource> getPropertySourcesThatCanWrite(String keyExpression); - List<MutablePropertySource> getPropertySourcesThatCanRemove(String keyExpression); - List<MutablePropertySource> getPropertySourcesThatKnow(String keyExpression); - MutableConfiguration put(String key, String value); MutableConfiguration putAll(Map<String, String> properties); MutableConfiguration remove(Collection<String> keys); @@ -134,7 +128,7 @@ public interface MutableConfiguration extends Configuration { ==== Targeting the right MutablePropertySources -A +Configuration+ may have multiple +MutablePropertySource+ present. These are members of Tamaya's oredered list of +A +Configuration+ may have multiple +MutablePropertySource+ instances present. These are members of Tamaya's oredered list of +PropertySources+ to evaluate the configuration. Nevertheless writing back changes requires additional aspects to be considered: * Should changes being written back to all mutable property sources? Or should a key that could be added or removed @@ -149,10 +143,13 @@ this aspect: .Explicitly passing the backing configuration -------------------------------------------- public interface ChangePropagationPolicy { - void applyChanges(Collection<PropertySource> propertySources, UUID transactionID, Map<String,String> changes); - void applyChange(Collection<PropertySource> propertySources, UUID transactionID, String key, String value); - void applyRemove(Collection<PropertySource> propertySources, UUID transactionID, String... keys); - + /** + * Method being called when a multiple key/value pairs are added or updated. + * @param propertySources the property sources, including readable property sources of the current configuration, + * never null. + * @param configChange the configuration change, not null. + */ + void applyChange(ConfigChangeRequest configChange, Collection<PropertySource> propertySources); } -------------------------------------------- @@ -165,10 +162,7 @@ Also the +MutableConfigurationProvider+ provides access to the most commonly use --------------------------------------------- public final class MutableConfigurationProvider { - private MutableConfigurationProvider(){} - - public static MutableConfiguration getMutableConfiguration(); - public static MutableConfiguration getMutableConfiguration(Configuration configuration); + [...] public static ChangePropagationPolicy getApplyAllChangePolicy(); public static ChangePropagationPolicy getApplyMostSignificantOnlyChangePolicy(); @@ -181,34 +175,29 @@ public final class MutableConfigurationProvider { ==== Some Aspects to consider Due to Tamaya's design the effective effect of your changes to the overall configuration, cannot -be easily predicted, since it depends on several aspects: +be sometimes a bit tricky to be predicted, since it depends on several aspects: . is the corresponding configuration resource configured as part of the current system's configuration? -. what is the +PropertySource's+ ordinal? Is it overriding or overridden by other sources? +. what is the +PropertySource's+ priority within the configuration context? Is it overriding or overridden + by other sources? . is the change directly visible to the configuration system? E.g. injected values are normally not updated, whereas injecting a +DynamicValue<T>+ instance allows to detect and react single value changes. Also the +PropertySources+ implementation must be able to detect any configuration changes and adapt its values returned - accordingly. + accordingly. Finally values also can be marked as immutable or being cached. . Is configuration cached, or written/collected directly on access? . can the changes applied be committed at all? So it is part of your application configuration design to clearly define, which property sources may be read-only, which -may be mutable, how overriding should work and to which backends finally any changes should be written back. To -support such fine granular scenarios a +MutableConfiguration+ also offers methods to determine if a key -is writable at all or can be removed or updated: +may be mutable, how overriding should work and to which backends finally any changes should be written back. Nevertheless +changing or adding value is very easy: [source,java] -.Checking for mutability +.Changing a configuration -------------------------------------------- MutableConfiguration config = MutableConfigurationProvider.createMutableConfiguration(); - -if(config,isWritable("mycluster.shared.appKey")){ - config.set("newKey", "newValue"); -} -if(config,isRemovable("mycluster.myapp.myKey")){ - config.remove("mycluster.myapp.myKey"); -} -config.commit(); +config.put("newKey", "newValue"); +config.remove("mycluster.myapp.myKey"); +config.store(); -------------------------------------------- @@ -229,11 +218,42 @@ Multiple backends are supported. E.g. the _etcd_ integration module of Tamaya al corresponding SPI implementations/backends. By default this module comes with the following +MutablePropertySource+ implementations: -* +MutablePropertySource+ resources, targeting local .properties files, following the +java.util.Properties+ +* +MutablePropertySource+ resources, targeting local +.properties+ files, using the +java.util.Properties+ format. -* +MutableXmlPropertySource+ resources, targeting local .xml property files, following the +java.util.Properties+ +* +MutableXmlPropertySource+ resources, targeting local +.xml+ property files, using the +java.util.Properties+ XML format. +==== Refreshable Property Sources + +Somehow similar to configuration changes applied explicitly is the case, where values of underlying +configuration backends change and must be reflected in the new configuration tree. Examples are: + +* Configuration files being edited, added or removed. +* Changes on remote servers like etcd, consul +* etc. + +For having a common API for refreshable items a +Refreshable+ interface is defined: + +[source,java] +.Refreshable interface +-------------------------------------------- +/** + * Interface to be implemented by items that can be refreshed. By default + * these are property sources, but more types may be supported at a later + * point in time. + */ +public interface Refreshable { + + /** + * Refreshes the item by reloading its internal state. + */ + void refresh(); + +} +-------------------------------------------- + + +==== Refreshable Property Sources === SPIs @@ -244,15 +264,20 @@ singleton accessor: .SPI: MutableConfigurationProviderSpi -------------------------------------------------- public interface MutableConfigurationProviderSpi { - MutableConfiguration createMutableConfiguration(Configuration configuration); + /** + * Creates a new {@link MutableConfiguration} with {@code autoCommit = false} as default. + * + * @param configuration the configuration, not null. + * @param propagationPolicy policy that defines how changes are published to the property + * sources. + * @return a new mutable configuration instance. + */ + MutableConfiguration createMutableConfiguration(Configuration configuration, + ChangePropagationPolicy propagationPolicy); } -------------------------------------------------- -Implementations are registered with the current +ServiceContext+, by default as a - +java.util.ServiceLoader+ service. - +Implementations are registered with the current +ServiceContext+ (using by default the + +java.util.ServiceLoader+ service). -As convenience the following base classes are provided: -* +org.apache.tamaya.mutableconfig.propertysource.AbstractMutablePropertySource+ simplifying implementation of - +MutablePropertySource+. http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_optional.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_optional.adoc b/content/extensions/mod_optional.adoc index f97e052..369df68 100644 --- a/content/extensions/mod_optional.adoc +++ b/content/extensions/mod_optional.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Optional Tamaya Configuration -:jbake-type: page -:jbake-status: published toc::[] @@ -68,3 +66,4 @@ BigDecimal interestRate = .get("com.mycomp.ratecalculator.rate", BigDecimal.class)) .orElse(BigDecimal.of(0.05d)); ----------------------------------------------- + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_osgi.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_osgi.adoc b/content/extensions/mod_osgi.adoc index 9a46fd0..52518a7 100644 --- a/content/extensions/mod_osgi.adoc +++ b/content/extensions/mod_osgi.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extensions: OSGI Integrations -:jbake-type: page -:jbake-status: published toc::[] http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_remote.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_remote.adoc b/content/extensions/mod_remote.adoc index 4d947e5..d82b7ba 100644 --- a/content/extensions/mod_remote.adoc +++ b/content/extensions/mod_remote.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Remote Configuration -:jbake-type: page -:jbake-status: published toc::[] @@ -128,4 +126,4 @@ public class RemotePropertySource extends BaseRemotePropertySource{ } } ------------------------------------------------ +----------------------------------------------- \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_resolver.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_resolver.adoc b/content/extensions/mod_resolver.adoc index 366c97e..c502272 100644 --- a/content/extensions/mod_resolver.adoc +++ b/content/extensions/mod_resolver.adoc @@ -1,8 +1,25 @@ -:jbake-type: page -:jbake-status: published +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. = Apache Tamaya -- Extension: Resolver +include::temp-properties-files-for-site/attributes.adoc[] + + [[Core]] == Tamaya Resolver (Extension Module) @@ -30,7 +47,7 @@ To benefit from dynamic value resolution you only must add the corresponding dep <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-resolver</artifactId> - <version>{tamaya_version}</version> + <version>{tamaya_version_development}</version> </dependency> ----------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_resources.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_resources.adoc b/content/extensions/mod_resources.adoc index 3081149..7506859 100644 --- a/content/extensions/mod_resources.adoc +++ b/content/extensions/mod_resources.adoc @@ -1,8 +1,24 @@ -:jbake-type: page -:jbake-status: published +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. = Apache Tamaya -- Extension: Resources +include::temp-properties-files-for-site/attributes.adoc[] + [[Core]] == Tamaya Resources (Extension Module) === Overview @@ -20,7 +36,7 @@ ant-styled resource patterns. To use this module add the following dependency: <dependency> <grooupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-resources</artifactId> - <version>{tamaya_version}</version> + <version>{tamaya_version_development}</version> </dependency> ----------------------------------------------- @@ -153,3 +169,4 @@ alternate implementation with an overriding +@Priority+ annotation added using t Additionally a +BaseResourceResolver+ class can be used to reduce the amount of code to be written on your own. + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_server.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_server.adoc b/content/extensions/mod_server.adoc index 5238aca..44398d7 100644 --- a/content/extensions/mod_server.adoc +++ b/content/extensions/mod_server.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Configuration Server -:jbake-type: page -:jbake-status: published toc::[] @@ -380,3 +378,5 @@ public final class ScopeManager { } ----------------------------------------------- + + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_spi-support.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_spi-support.adoc b/content/extensions/mod_spi-support.adoc index 0e7892f..c507c1a 100644 --- a/content/extensions/mod_spi-support.adoc +++ b/content/extensions/mod_spi-support.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Classloader Isolation Support -:jbake-type: page -:jbake-status: published toc::[] @@ -71,3 +69,4 @@ To benefit from Tamaya CDI integration you only must add the corresponding depen The component will not register any components but only providing portable base classes for some common SPI implementation tasks. It only depends on the API, so it should be safely reusable also with other implementations of the Tamaya API similarly. + http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_spring.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_spring.adoc b/content/extensions/mod_spring.adoc index 17bd96a..5f6d65e 100644 --- a/content/extensions/mod_spring.adoc +++ b/content/extensions/mod_spring.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Spring Integration -:jbake-type: page -:jbake-status: published toc::[] @@ -147,4 +145,4 @@ public class ConfiguredSpringBean { } -------------------------------------------------------- -Summarizing you get all the nice features of Tamaya out of the box running with your Spring code. +Summarizing you get all the nice features of Tamaya out of the box running with your Spring code. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/40e8f73e/content/extensions/mod_yaml.adoc ---------------------------------------------------------------------- diff --git a/content/extensions/mod_yaml.adoc b/content/extensions/mod_yaml.adoc index eeb352c..85c1871 100644 --- a/content/extensions/mod_yaml.adoc +++ b/content/extensions/mod_yaml.adoc @@ -16,8 +16,6 @@ // under the License. = Apache Tamaya -- Extension: Builder -:jbake-type: page -:jbake-status: published toc::[] @@ -44,10 +42,11 @@ To benefit from configuration builder support you only must add the correspondin <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-yaml</artifactId> - <version>{tamaya-version}</version> + <version>{tamayaVersion}</version> </dependency> ----------------------------------------------- +This extension also transitively requires the +tamaya.formats+ module. === Reading configuration in YAML @@ -125,3 +124,4 @@ tax -> 251.42 total -> 4443.52 comments -> Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338. ---------------------------------------------------------------- +
