Moved asciidocs latest from core to site, keeping jbake headers in place.
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/06e3e4c0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/tree/06e3e4c0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/diff/06e3e4c0 Branch: refs/heads/master Commit: 06e3e4c088177bc14d476ab2414300de94342b23 Parents: 40e8f73 Author: Anatole Tresch <anat...@apache.org> Authored: Fri Nov 18 07:07:11 2016 +0100 Committer: Anatole Tresch <anat...@apache.org> Committed: Fri Nov 18 07:07:11 2016 +0100 ---------------------------------------------------------------------- content/api.adoc | 125 ++++++++++++++++++++++++++++++++++++------- content/core.adoc | 6 ++- content/extensions.adoc | 74 +++++++++---------------- 3 files changed, 136 insertions(+), 69 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/06e3e4c0/content/api.adoc ---------------------------------------------------------------------- diff --git a/content/api.adoc b/content/api.adoc index f830585..98256ce 100644 --- a/content/api.adoc +++ b/content/api.adoc @@ -23,7 +23,7 @@ == Apache Tamaya: API Though Tamaya is a very powerful and flexible solution there are basically only a few simple core concepts required -that build the base of all the other mechanisms. As a starting point we recommend you read the corresponding +that are the base of all the other mechanisms. As a starting point we recommend you read the corresponding llink:HighLevelDesign.html[High Level Design Documentation] [[API]] @@ -51,10 +51,14 @@ The API provides the artifacts as described in the link:HighLevelDesign.html[Hig ** +ConfigurationProviderSpi+ defines the SPI that is used as a backing bean for the +ConfigurationProvider+ singleton. ** +PropertyFilter+, which allows filtering of property values prior getting returned to the caller. - ** +ConfigurationContext+, which provides the container that contains the property sources and filters that form a - configuration. ** +PropertyValueCombinationPolicy+ optionally can be registered to change the way how different key/value pairs are combined to build up the final +Configuration+ passed over to the filters registered. + ** +ConfigurationContext+, which provides a container for all the artifacts needed to build up a +Configuration+. + For example a context contains the property sources, property filters, converters and combination policy used. + Also the ordering of the property sources is defined by the context. A context instance given a + +Configuration+ can be created by calling +ConfigurationProvider.createConfiguration(context);+. + ** Similarly a +ConfigurationContext+ can be created using a +ConfigurationContextBuilder+. This builder can be + obtained calling +ConfigurationProvider.getConfigurationContextBuilder();+. ** +ServiceContext+, which provides access to the components loaded, depending on the current runtime stack. ** +ServiceContextManager+ provides static access to the +ServiceContext+ loaded. @@ -202,7 +206,7 @@ Hereby the singleton is backed up by an instance of +ConfigurationProviderSpi+. [[PropertyConverter]] -==== Property Converters +==== Property Type Conversion As illustrated in the previous section, +Configuration+ also to access non String types. Nevertheless internally all properties are strictly modelled as pure Strings only, so non String types must be derived by converting the @@ -328,7 +332,7 @@ property sources with additional combination/aggregation rules in place. [[PropertySourceProvider]] -==== Interface PropertySourceProvider +=== Interface PropertySourceProvider Instances of this type can be used to register multiple instances of +PropertySource+. @@ -349,7 +353,7 @@ current active +ServiceContext+. [[PropertyFilter]] -==== Interface PropertyFilter +=== Interface PropertyFilter Also +PropertyFilters+ can be added to a +Configuration+. They are evaluated before a +Configuration+ instance is passed to the user. Filters can hereby used for multiple purposes, such as @@ -420,7 +424,7 @@ public interface PropertyValueCombinationPolicy{ [[ConfigurationContext]] ==== The Configuration Context -A +Configuration+ is basically based on a so called +ConfigurationContext+, which is +A +Configuration+ is created from a +ConfigurationContext+, which is accessible from +Configuration.getContext()+: [source,java] @@ -429,7 +433,8 @@ accessible from +Configuration.getContext()+: ConfigurationContext context = ConfigurationProvider.getConfiguration().getContext(); -------------------------------------------- -The +ConfigurationContext+ provides access to the internal building blocks that determine the final +Configuration+: +The +ConfigurationContext+ provides access to the internal artifacts that determine the final +Configuration+ and +also defines the ordering of the property sources, filters and converters contained: * +PropertySources+ registered (including the PropertySources provided from +PropertySourceProvider+ instances). * +PropertyFilters+ registered, which filter values before they are returned to the client @@ -441,8 +446,8 @@ The +ConfigurationContext+ provides access to the internal building blocks that [[Mutability]] ==== Changing the current Configuration Context -By default the +ConfigurationContext+ is not mutable once it is created. In many cases mutability is also not needed -or even not wanted. Nevertheless there are use cases where the current +ConfigurationContext+ (and +A +ConfigurationContext+ is not mutable once it is created. In many cases mutability is also not needed. Nevertheless +there are use cases where the current +ConfigurationContext+ (and consequently +Configuration+) must be adapted: * New configuration files where detected in a folder observed by Tamaya. @@ -452,7 +457,7 @@ consequently +Configuration+) must be adapted: * Within unit testing alternate configuration setup should be setup to meet the configuration requirements of the tests executed. -In such cases the +ConfigurationContext+ must be mutable, meaning it must be possible: +In such cases the +ConfigurationContext+ must be changed, meaning it must be possible: * to add or remove +PropertySource+ instances * to add or remove +PropertyFilter+ instances @@ -462,9 +467,9 @@ In such cases the +ConfigurationContext+ must be mutable, meaning it must be pos This can be achieved by obtaining an instance of +ConfigurationContextBuilder+. Instances of this builder can be accessed either -* from the current +ConfigurationContext+, hereby returning a builder instance preinitialized with the values from the - current +ConfigurationContext+ -* from the current +ConfigurationProvider+ singleton. +* calling +ConfigurationContext.toBuilder()+, hereby returning a builder instance preinitialized with the values from the + current +ConfigurationContext+. +* calling +ConfigurationProvider.getConfigurationContextBuilder()+. [source,java] .Accessing a +ConfigurationContextBuilder+ @@ -478,10 +483,41 @@ With such a builder a new +ConfigurationContext+ can be created and then applied [source,java] .Creating and applying a new +ConfigurationContext+ -------------------------------------------- -ConfigurationContextBuilder preinitializedContextBuilder = ConfigurationProvider.getConfiguration().getContext() - .toBuilder(); -ConfigurationContext context = preinitializedContextBuilder.addPropertySources(new MyPropertySource()) - .addPropertyFilter(new MyFilter()).build(); +ConfigurationContext context = ConfigurationProvider.getConfiguration().getContext() + .toBuilder(); + .addPropertySources(new MyPropertySource()) + .addPropertyFilter(new MyFilter()) + .build(); +-------------------------------------------- + +Hereby the builder provides several methods for adding, removing of property sources and also operations +for programmatically change the property sourcepriorities, e.g. + +[source,java] +.Chain manipulation using +ConfigurationContextBuilder+ +-------------------------------------------- +PropertySource propertySource = builder.getPropertySource("sourceId"); + +// changing the priority of a property source. The ordinal value hereby is not considered. +// Instead the position of the property source within the chain is changed. +builder.decreasePriority(propertySource); + +// Alternately a comparator expression can be passed to establish the defined ordering... +builder.sortPropertyFilters(MyFilterComparator::compare); +-------------------------------------------- + +Finally if the new context is ready a new configuration can be created, or the context is applied to the +current configuration. + +[source,java] +.Creating and applying a new +ConfigurationContext+ +-------------------------------------------- +ConfigurationContext context = builder.build(); + +// Creates a new matching Configuration instance +Configuration newConfig = ConfigurationProvider.createConfiguration(context); + +// Apply the new context to replace the current configuration: ConfigurationProvider.setConfigurationContext(context); -------------------------------------------- @@ -500,6 +536,59 @@ One of the most important SPI in Tamaya if the +ConfigurationProviderSpi+ interf * to provide access to the right +Configuration/ConfigurationContext+ based on the current runtime context. * Performing changes as set with the current +ConfigurationContextBuilder+. += Interface ConfigurationContextBuilder + +include::temp-properties-files-for-site/attributes.adoc[] + +[[BuilderCore]] +== Interface ConfigurationContextBuilder +=== Overview + +The Tamaya builder module provides a generic (one time) builder for creating +Configuration+ instances, +e.g. as follows: + +[source,java] +--------------------------------------------------------------- +ConfigurationBuilder builder = new ConfigurationBuilder(); +// do something +Configuration config = builder.build(); +--------------------------------------------------------------- + +Basically the builder allows to create configuration instances completely independent of the current configuration +setup. This gives you full control on the +Configuration+ setup. + + +=== Supported Functionality + +The builder allows you to add +PropertySource+ instances: + +[source,java] +---------------------------------------------------------------- +ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder(); +builder.addPropertySources(sourceOne, sourceTwo, sourceThree +Configuration config = ConfigurationProvider.createConfiguration(builder.build()); +---------------------------------------------------------------- + +Hereby the ordering of the propertysources is not changed, regardless of the ordinals provided +by the property sources. This allows alternate ordering policies easily being implemented because +creating a configuration based on a configuration context is already implemented and provided by the core +API. + +Similarly you can add filters: + +[source,java] +---------------------------------------------------------------- +builder.addPropertyFilters(new MyConfigFilter()); +---------------------------------------------------------------- + +...or +PropertySourceProvider+ instances: + +[source,java] +---------------------------------------------------------------- +builder.addPropertySourceProvider(new MyPropertySourceProvider()); +---------------------------------------------------------------- + + [[ServiceContext]] ==== The ServiceContext http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/06e3e4c0/content/core.adoc ---------------------------------------------------------------------- diff --git a/content/core.adoc b/content/core.adoc index fe891b2..ea3a7c6 100644 --- a/content/core.adoc +++ b/content/core.adoc @@ -36,7 +36,8 @@ hereby providing type conversion for all important types. * A simple default configuration setup using the current classpath and an optional staging variable. * It collects all +PropertySource+ and +PropertySourceProvider+ instances registered with the +ServiceLoader+ and registers them in the global +ConfigurationContext+ -* It provides a +ConfigurationContextBuilder+ and allows changing the current +ConfigurationContext+. +* It provides a +ConfigurationContextBuilder+ implementation (class +DefaultConfigurationContextBuilder+) and allows + changing the current +ConfigurationContext+. The overall size of the library is very small. All required components are implemented and registered, so basically the Core module is a complete configuration solution. Nevertheless it is also very minimalistic, but fortunately is flexible @@ -116,6 +117,9 @@ By default, and if no annotation is added +0+ is used as priority. Hereby higher * if priorities match Tamaya Core additionally sorts them using the simple class name. This ensures that ordering is still defined and predictable in almost all scenarios. +NOTE: Sorting the property sources based on their ordinal value is only the default ordering principle applied. By implementing + your own implementation of +ConfigurationProviderSpi+ you can apply a different logic: + [[RegisteringPropertySources]] === Registering Property Sources http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/06e3e4c0/content/extensions.adoc ---------------------------------------------------------------------- diff --git a/content/extensions.adoc b/content/extensions.adoc index 93b34b5..577fd67 100644 --- a/content/extensions.adoc +++ b/content/extensions.adoc @@ -36,72 +36,46 @@ Mature extensions have a stable API and SPI, similar to the API and Implementati |+org.apache.tamaya.ext:tamaya-json+ |Provides format support for JSON based configuration. |link:extensions/mod_json.html[Documentation] |+org.apache.tamaya.ext:tamaya-optional+ |Lets a Tamaya configuration to be used as an optional project extension only. |link:extensions/mod_optional.html[Documentation] |+org.apache.tamaya.ext:tamaya-resolver+ |Provides placeholder and dynamic resolution functionality for configuration values. |link:extensions/mod_resolver.html[Documentation] -|+org.apache.tamaya.ext:tamaya-spi-support+ |Tamaya support module for SPI implementation. |link:extensions/mod_spi-support.html[Documentation] -|======= - - -=== Extensions - -Extensions in _draft state_ are tested well and normally should have rather stable APIs. Nevertheless API changes may -still occurr, but we try to prevent such changes if possible. - -NOTE All extensions currently run on Java 7 as well as on Java 8. - -[width="100%",frame="1",options="header",grid="all"] -|======= -|_Artifact_ |_Description_ |_Links_ -|+org.apache.tamaya.ext:tamaya-builder+ |Provides a fluent-style builder for configurations | link:extensions/mod_builder.html[Documentation] -|+org.apache.tamaya.ext:tamaya-classloader-support+ |Manages Tamaya configuration and services considering classloading hierarchies. |link:extensions/mod_classloader_support.html[Documentation] |+org.apache.tamaya.ext:tamaya-events+ |Provides support for publishing configuration changes |link:extensions/mod_events.html[Documentation] |+org.apache.tamaya.ext:tamaya-filter+ |Provides a programmatic filter for config entries. | link:extensions/mod_filter.html[Documentation] +|+org.apache.tamaya.ext:tamaya-injection-api+ |Provides Tamaya's injection annotations API. |link:extensions/mod_injection.html[Documentation] |+org.apache.tamaya.ext:tamaya-injection+ |Provides configuration injection services and congiruation template support. |link:extensions/mod_injection.html[Documentation] -|+org.apache.tamaya.ext:tamaya-management+ |Provides JMX support for inspecting configuration. |link:extensions/mod_management.html[Documentation] -|+org.apache.tamaya.ext:tamaya-model+ |Provides support documenting ang validating configuration during runtime. |link:extensions/mod_model.html[Documentation] +|+org.apache.tamaya.ext:tamaya-injection-cdi+ | Java EE/standalone compliant CDI integration using CDI for injection. | link:extensions/mod_cdi.html[Documentation] +|+org.apache.tamaya.ext:tamaya-injection-cdi-se+ | Java EE/standalone compliant CDI integration using Tamaya SE injection mechanism. | link:extensions/mod_cdi.html[Documentation] |+org.apache.tamaya.ext:tamaya-mutable-config+|Provides API/SPI for writing configuration |link:extensions/mod_mutable_config.html[Documentation] -|+org.apache.tamaya.ext:tamaya-remote+ |Provides remote configuration support. |link:extensions/mod_remote.html[Documentation] +|+org.apache.tamaya.ext:tamaya-spi-support+ |Tamaya support module for SPI implementation. |link:extensions/mod_spi-support.html[Documentation] |+org.apache.tamaya.ext:tamaya-resources+ |Provides ant-style resource path resolution |link:extensions/mod_resources.html[Documentation] -|+org.apache.tamaya.ext:tamaya-server+ |Lets a Tamaya configuration instance provide scoped configuration as a REST service. |link:extensions/mod_server.html[Documentation] |+org.apache.tamaya.ext:tamaya-yaml+ |Support for using yaml as a configuration format. |link:extensions/mod_yaml.html[Documentation] |+org.apache.tamaya.ext:tamaya-collections+ |Collections support. |link:extensions/mod_collections.html[Documentation] -|======= - -=== Integrations - -These extensions integrate/bridge Tamayas functionality with other frameworks turning their configuration capabilities -from a sledgehammer to a scalpell: - -[width="100%",frame="1",options="header",grid="all"] -|======= -|_Artifact_ |_Description_ |_Links_ -|+org.apache.tamaya.ext:tamaya-cdi+ | Java EE/standalone compliant CDI integration | link:extensions/mod_cdi.html[Documentation] -|+org.apache.tamaya.ext:tamaya-camel+ | Integration for Apache Camel. | link:extensions/mod_camel.html[Documentation] |+org.apache.tamaya.ext:tamaya-spring+ | Integration for Spring / Spring Boot. | link:extensions/mod_spring.html[Documentation] -|+org.apache.tamaya.ext:tamaya-osgi+ | Integration for OSGI containers. | link:extensions/mod_osgi.html[Documentation] -|+org.apache.tamaya.ext:tamaya-consul+ | Integration with consul clusters. | link:extensions/mod_consul.html[Documentation] -|+org.apache.tamaya.ext:tamaya-etcd+ | Integration with etcd clusters. | link:extensions/mod_etcd.html[Documentation] |======= -=== Extensions in Experimental Stage +=== Extensions Sandbox -Extensions in _experimental mode_ may still be under discussions. API changes may still happen, so use them -very carefully and especially give us feedback, so we can improve them before progressing to _draft_ state. +Extensions in _draft state_ rather experimental or not yet very mature. API changes may occurr at any time +and the may also have severe issues. So use at your own risk or join and help us getting them stable and +well tested! + +NOTE All extensions currently run on Java 7 as well as on Java 8. [width="100%",frame="1",options="header",grid="all"] |======= |_Artifact_ |_Description_ |_Links_ +|+org.apache.tamaya.ext:tamaya-commons+ |Combines Tamaya's Format Abstraction with Apache Commons. | - |+org.apache.tamaya.ext:tamaya-jodatime+ |Provides support for JodaTime. | link:extensions/mod_jodatime.html[Documentation] -|+org.apache.tamaya.ext:tamaya-staged+ |Simple configuration extension to add staged config. | link:extensions/mod_metamodel-staged.html[Documentation] +|+org.apache.tamaya.ext:tamaya-classloader-support+ |Manages Tamaya configuration and services considering classloading hierarchies. |link:extensions/mod_classloader_support.html[Documentation] +|+org.apache.tamaya.ext:tamaya-management+ |Provides JMX support for inspecting configuration. |link:extensions/mod_management.html[Documentation] +|+org.apache.tamaya.ext:tamaya-metamodel+ |Provides support defining configuration using XML based meta-configuration. |link:extensions/mod_metamodel.html[Documentation] +|+org.apache.tamaya.ext:tamaya-validation+ |Provides support for XML based meta-configuration allowing to validate configuration read. |link:extensions/mod_validation.html[Documentation] +|+org.apache.tamaya.ext:tamaya-usagetracker+ |Provides support tracking of configuration usage and the consumer locations consuming configuration. |link:extensions/mod_usagetracker.html[Documentation] +|+org.apache.tamaya.ext:tamaya-camel+ | Integration for Apache Camel. | link:extensions/mod_camel.html[Documentation] +|+org.apache.tamaya.ext:tamaya-osgi+ | Integration for OSGI containers. | link:extensions/mod_osgi.html[Documentation] +|+org.apache.tamaya.ext:tamaya-consul+ | Integration with consul clusters. | link:extensions/mod_consul.html[Documentation] +|+org.apache.tamaya.ext:tamaya-etcd+ | Integration with etcd clusters. | link:extensions/mod_etcd.html[Documentation] +|+org.apache.tamaya.ext:tamaya-configured-sysprops+ | Allows Tamaya to integrate with +System.getProperties()+. | link:extensions/mod_sysprops.html[Documentation] +|+org.apache.tamaya.ext:tamaya-remote+ |Provides remote configuration support. |link:extensions/mod_remote.html[Documentation] +|+org.apache.tamaya.ext:tamaya-server+ |Lets a Tamaya configuration instance provide scoped configuration as a REST service. |link:extensions/mod_server.html[Documentation] +|+org.apache.tamaya.ext:tamaya-ui+ |Provides a web UI for a VM running Tamaya. |link:extensions/mod_ui.html[Documentation] |======= - -=== Integrations in Experimental Stage - -Integrations in _experimental mode_ may still be under discussions, or may even not compile ! API changes may still happen, so use them -very carefully and especially give us feedback, so we can improve them before progressing to _draft_ state. - -[width="100%",frame="1",options="header",grid="all"] -|======= -|_Artifact_ |_Description_ |_Links_ -|+org.apache.tamaya.ext:tamaya-commons+ |Integration with Apache Commons Configuration. | - -|=======