You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2018/01/03 00:09:11 UTC

[15/18] incubator-tamaya-extensions git commit: Rewrite/adaptation based on JSR API.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/NotFoundNoDefault.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/NotFoundNoDefault.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/NotFoundNoDefault.java
index 6e4e50e..46f6c2a 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/NotFoundNoDefault.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/NotFoundNoDefault.java
@@ -16,8 +16,7 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.inject.api.Config;
-
+import javax.config.inject.ConfigProperty;
 import javax.enterprise.inject.Alternative;
 import javax.inject.Inject;
 import java.io.File;
@@ -28,23 +27,23 @@ import java.time.Duration;
 public class NotFoundNoDefault {
 
         @Inject
-        @Config("string.bla")
+        @ConfigProperty(name="string.bla")
         private String string;
 
         @Inject
-        @Config("file.bla")
+        @ConfigProperty(name="file.bla")
         private File file;
 
         @Inject
-        @Config("duration.bla")
+        @ConfigProperty(name="duration.bla")
         private Duration duration;
 
         @Inject
-        @Config("boolean.bla")
+        @ConfigProperty(name="boolean.bla")
         private Boolean aBoolean;
 
         @Inject
-        @Config("integer.bla")
+        @ConfigProperty(name="integer.bla")
         private Integer integer;
 
         public String getString() {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedConfigSource.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedConfigSource.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedConfigSource.java
new file mode 100644
index 0000000..b9333d1
--- /dev/null
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedConfigSource.java
@@ -0,0 +1,60 @@
+/*
+ * 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 current 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.
+ *
+ */
+package org.apache.tamaya.cdi.cfg;
+
+import javax.config.spi.ConfigSource;
+import javax.enterprise.inject.Vetoed;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by Anatole on 17.09.2015.
+ */
+@Vetoed
+class ProvidedConfigSource implements ConfigSource{
+
+    final Map<String,String> config = new HashMap<>();
+
+    public ProvidedConfigSource(){
+        config.put("a.b.c.key3", "keys current a.b.c.key3");
+        config.put("a.b.c.key4", "keys current a.b.c.key4");
+    }
+
+    @Override
+    public int getOrdinal() {
+        return 10;
+    }
+
+    @Override
+    public String getName() {
+        return getClass().getName();
+    }
+
+    @Override
+    public String getValue(String key) {
+        return config.get(key);
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return config;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java
deleted file mode 100644
index 8ed0588..0000000
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/ProvidedPropertySource.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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 current 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.
- *
- */
-package org.apache.tamaya.cdi.cfg;
-
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-
-import javax.enterprise.inject.Vetoed;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Created by Anatole on 17.09.2015.
- */
-@Vetoed
-class ProvidedPropertySource implements PropertySource{
-
-    final Map<String,PropertyValue> config = new HashMap<>();
-
-    public ProvidedPropertySource(){
-        config.put("a.b.c.key3", PropertyValue.of("a.b.c.key3","keys current a.b.c.key3",getName()));
-        config.put("a.b.c.key4", PropertyValue.of("a.b.c.key4","keys current a.b.c.key4", getName()));
-    }
-
-    @Override
-    public int getOrdinal() {
-        return 10;
-    }
-
-    @Override
-    public String getName() {
-        return getClass().getName();
-    }
-
-    @Override
-    public PropertyValue get(String key) {
-        return config.get(key);
-    }
-
-    @Override
-    public Map<String, PropertyValue> getProperties() {
-        return config;
-    }
-
-    @Override
-    public boolean isScannable() {
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestConfigProvider.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestConfigProvider.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestConfigProvider.java
index 036b9da..31bf136 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestConfigProvider.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestConfigProvider.java
@@ -18,9 +18,8 @@
  */
 package org.apache.tamaya.cdi.cfg;
 
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-
+import javax.config.spi.ConfigSource;
+import javax.config.spi.ConfigSourceProvider;
 import javax.enterprise.context.ApplicationScoped;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -30,16 +29,16 @@ import java.util.List;
  * Created by Anatole on 29.09.2014.
  */
 @ApplicationScoped
-public class TestConfigProvider implements PropertySourceProvider {
+public class TestConfigProvider implements ConfigSourceProvider {
 
-    private List<PropertySource> configs = new ArrayList<>();
+    private List<ConfigSource> configs = new ArrayList<>();
 
     public TestConfigProvider(){
-        configs.add(new ProvidedPropertySource());
+        configs.add(new ProvidedConfigSource());
     }
 
     @Override
-    public Collection<PropertySource> getPropertySources() {
+    public Collection<ConfigSource> getConfigSources(ClassLoader cl) {
         return configs;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
index e31070a..0ecfd9b 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java
@@ -19,9 +19,7 @@
  */
 package org.apache.tamaya.cdi.cfg;
 
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-
+import javax.config.spi.ConfigSource;
 import javax.inject.Singleton;
 import java.util.HashMap;
 import java.util.Map;
@@ -30,7 +28,7 @@ import java.util.Map;
  * Created by Anatole on 17.09.2015.
  */
 @Singleton
-public class TestPropertySource implements PropertySource{
+public class TestPropertySource implements ConfigSource{
 
     final Map<String,String> config = new HashMap<>();
 
@@ -62,21 +60,13 @@ public class TestPropertySource implements PropertySource{
     }
 
     @Override
-    public PropertyValue get(String key) {
-        String val = this.config.get(key);
-        if(val!=null) {
-            return PropertyValue.of(key, val, getName());
-        }
-        return null;
+    public String getValue(String key) {
+        return this.config.get(key);
     }
 
     @Override
-    public Map<String, PropertyValue> getProperties() {
-        return PropertyValue.map(config ,getName());
+    public Map<String, String> getProperties() {
+        return config;
     }
 
-    @Override
-    public boolean isScannable() {
-        return true;
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtensionTest.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtensionTest.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtensionTest.java
index 11f7dfd..15b4d47 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtensionTest.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtensionTest.java
@@ -18,12 +18,11 @@
  */
 package org.apache.tamaya.cdi.extra;
 
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.spi.ConfigurationContext;
 import org.junit.Test;
 
 
+import javax.config.Config;
+import javax.config.spi.ConfigProviderResolver;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.ProcessAnnotatedType;
 
@@ -34,13 +33,12 @@ public class ConfiguredVetoExtensionTest {
 
     @Test
     public void willBeVetoedIfTypeHasBeenConfiguredAsConcreteClassName() {
-        ConfigurationContext context = mock(ConfigurationContext.class);
-        Configuration configuration = mock(Configuration.class);
+        Config configuration = mock(Config.class);
 
-        when(configuration.getContext()).thenReturn(context);
-        when(configuration.get("javax.enterprise.inject.vetoed")).thenReturn("org.apache.tamaya.cdi.extra.TestKlazz");
+        when(configuration.getValue("javax.enterprise.inject.vetoed", String.class))
+                .thenReturn("org.apache.tamaya.cdi.extra.TestKlazz");
 
-        ConfigurationProvider.setConfiguration(configuration);
+        ConfigProviderResolver.instance().registerConfig(configuration, getClass().getClassLoader());
 
         AnnotatedType<TestKlazz> annotatedType = mock(AnnotatedType.class);
         when(annotatedType.getJavaClass()).thenReturn(TestKlazz.class);
@@ -55,13 +53,12 @@ public class ConfiguredVetoExtensionTest {
 
     @Test
     public void willNotBeVetoedIfTypeHasNotBeenConfigured() {
-        ConfigurationContext context = mock(ConfigurationContext.class);
-        Configuration configuration = mock(Configuration.class);
+        Config configuration = mock(Config.class);
 
-        when(configuration.getContext()).thenReturn(context);
-        when(configuration.get("javax.enterprise.inject.vetoed")).thenReturn("org.apache.tamaya.cdi.extra.O");
+        when(configuration.getValue("javax.enterprise.inject.vetoed", String.class))
+                .thenReturn("org.apache.tamaya.cdi.extra.O");
 
-        ConfigurationProvider.setConfiguration(configuration);
+        ConfigProviderResolver.instance().registerConfig(configuration, getClass().getClassLoader());
 
         AnnotatedType<TestKlazz> annotatedType = mock(AnnotatedType.class);
         when(annotatedType.getJavaClass()).thenReturn(TestKlazz.class);
@@ -79,13 +76,11 @@ public class ConfiguredVetoExtensionTest {
         String configuredValue = "  " + TestKlazz.class.getName() +
                                  ",\t" + TestKlazz2.class.getName();
 
-        ConfigurationContext context = mock(ConfigurationContext.class);
-        Configuration configuration = mock(Configuration.class);
+        Config configuration = mock(Config.class);
 
-        when(configuration.getContext()).thenReturn(context);
-        when(configuration.get("javax.enterprise.inject.vetoed")).thenReturn(configuredValue);
+        when(configuration.getValue("javax.enterprise.inject.vetoed", String.class)).thenReturn(configuredValue);
 
-        ConfigurationProvider.setConfiguration(configuration);
+        ConfigProviderResolver.instance().registerConfig(configuration, getClass().getClassLoader());
 
         AnnotatedType<TestKlazz> annotatedType = mock(AnnotatedType.class);
         when(annotatedType.getJavaClass()).thenReturn(TestKlazz.class);
@@ -103,13 +98,12 @@ public class ConfiguredVetoExtensionTest {
         String configuredValue = "  " + TestKlazz.class.getPackage().getName() +
                                  "\\..+";
 
-        ConfigurationContext context = mock(ConfigurationContext.class);
-        Configuration configuration = mock(Configuration.class);
+        Config configuration = mock(Config.class);
 
-        when(configuration.getContext()).thenReturn(context);
-        when(configuration.get("javax.enterprise.inject.vetoed")).thenReturn(configuredValue);
+        when(configuration.getValue("javax.enterprise.inject.vetoed", String.class))
+                .thenReturn(configuredValue);
 
-        ConfigurationProvider.setConfiguration(configuration);
+        ConfigProviderResolver.instance().registerConfig(configuration, getClass().getClassLoader());
 
         AnnotatedType<TestKlazz> annotatedType = mock(AnnotatedType.class);
         when(annotatedType.getJavaClass()).thenReturn(TestKlazz.class);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/resources/META-INF/javaconfig.properties
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/resources/META-INF/javaconfig.properties b/modules/injection/cdi/src/test/resources/META-INF/javaconfig.properties
new file mode 100644
index 0000000..c72446e
--- /dev/null
+++ b/modules/injection/cdi/src/test/resources/META-INF/javaconfig.properties
@@ -0,0 +1,35 @@
+# 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.
+#
+double1=1234.5678
+int2=13
+booleanT=y
+remote.wsdl.location = classpath:/service-wsdl.xml
+remote.port=1443
+remote.address=${remote.host}:${remote.port}
+remote.target.url = https://${remote.address}/remote/service/url
+remote.username = joecool
+
+# ciphered using built in StaticDESPasswordCipher
+remote.password = NjAq6q2agYVnvSMz+eYUZg==
+cipher=org.apache.openejb.cipher.StaticDESPasswordCipher
+
+string.value = hello
+file.value = ./conf
+duration.value = 10 minutes and 57 seconds
+boolean.value = true
+integer.value = 123

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties b/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
deleted file mode 100644
index c72446e..0000000
--- a/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-# 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.
-#
-double1=1234.5678
-int2=13
-booleanT=y
-remote.wsdl.location = classpath:/service-wsdl.xml
-remote.port=1443
-remote.address=${remote.host}:${remote.port}
-remote.target.url = https://${remote.address}/remote/service/url
-remote.username = joecool
-
-# ciphered using built in StaticDESPasswordCipher
-remote.password = NjAq6q2agYVnvSMz+eYUZg==
-cipher=org.apache.openejb.cipher.StaticDESPasswordCipher
-
-string.value = hello
-file.value = ./conf
-duration.value = 10 minutes and 57 seconds
-boolean.value = true
-integer.value = 123

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/pom.xml
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/pom.xml b/modules/injection/injection-api/pom.xml
index 82c89c3..4bd3ece 100644
--- a/modules/injection/injection-api/pom.xml
+++ b/modules/injection/injection-api/pom.xml
@@ -40,13 +40,7 @@ under the License.
     <dependencies>
         <dependency>
             <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${tamaya-apicore.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
+            <artifactId>tamaya-base</artifactId>
             <version>${tamaya-apicore.version}</version>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java
deleted file mode 100644
index 10ba0c8..0000000
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/Config.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.inject.api;
-
-
-import javax.enterprise.util.Nonbinding;
-import javax.inject.Qualifier;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to define injection of a configured property or define the configuration data
- * backing a configuration template method. Hereby this annotation can be used in multiple
- * ways and combined with other annotations such as {@link WithConfigOperator}, {@link WithPropertyConverter}.
- *
- * <h3>Simplest variant</h3>
- * Below the most simple variant of a configured class is given:
- * <pre>
- * package a.b;
- *
- * public class ConfiguredItem {
- *   &amp;Config
- *   private String aValue;
- * }
- * </pre>
- * Configuration resolution is implemented as follows:
- * <ul>
- *     <li>The current valid Configuration is evaluated by calling {@code Configuration cfg = ConfigurationProvider.getConfiguration();}</li>
- *     <li>The current possible property keys are evaluated by calling {@code cfg.get("a.b.ConfigureItem.aValue");},
- *     {@code cfg.get("ConfigureItem.aValue");}, {@code cfg.get("aValue");}</li>
- *     <li>if not successful, and since no @ConfigDefault annotation is present, the configured default value is used.
- *     <li>If no value could be evaluated a ({@link org.apache.tamaya.ConfigException} is thrown.</li>
- *     <li>On success, since no type conversion is involved, the value is injected.</li>
- * </ul>
- *
- * <h3>Explicit annotations</h3>
- * In the next example we explicitly define the configuration keys to be used:
- * <pre>
- * &amp;ConfigDefaultSections("section1")
- * public class ConfiguredItem {
- *
- *   &amp;Config(value = {"b", "[a.b.deprecated.keys]", "a"}, defaultValue = "myDefaultValue")
- *   private String aValue;
- * }
- * </pre>
- *
- * Within this example we evaluate multiple possible keys: {@code section1.b, a.b.deprecated.keys, section1.a}.
- * Evaluation is aborted if a key is resolved successfully. Hereby the ordering of the annotation values
- * define the ordering of resolution. If no value can be found, the configured default {@code myDefaultValue} is
- * injected.
- *
- * <h3>Using explicit field annotation only</h3>
- * In the last example we explicitly define the configuration keys but omit the section part, letting the default
- * section names to be taken:
- * <pre>
- * package a.b;
- *
- * public class ConfiguredItem {
- *
- *   &amp;Config(value = {"b", "[a.b.deprecated.keys]", "a"}, defaultValue = "myDefaultValue")
- *   private String aValue;
- * }
- * </pre>
- *
- * Key resolution is similar to above, but now the default package names are used, resulting in
- * {@code a.b.ConfiguredItem.b, ConfiguredItem.b, a.b.deprecated.keys, a.b.ConfiguredItem.a, ConfiguredItem.a}
- * being evaluated.
- */
-@Qualifier
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
-public @interface Config {
-
-    /** Value that is set by default as default, so it is possible to use empty Strings as default values. */
-    String UNCONFIGURED_VALUE = "org.apache.tamaya.config.configproperty.unconfigureddvalue";
-
-    /**
-     * Defines the configuration property keys to be used. Hereby the first non null value evaluated is injected as
-     * property value.
-     *
-     * @return the property keys, not null. If empty, the field or property name (of a setter method) being injected
-     * is used by default.
-     */
-    @Nonbinding
-    String[] value() default {};
-
-    /**
-     * The default value to be injected, if none of the configuration keys could be resolved. If no key has been
-     * resolved and no default value is defined, it is, by default, handled as a deployment error. Depending on the
-     * extension loaded default values can be fixed Strings or even themselves resolvable. For typed configuration of
-     * type T entries that are not Strings the default value must be a valid input to a corresponding
-     * {@link org.apache.tamaya.spi.PropertyConverter}.
-     * 
-     * @return default value used in case resolution fails.
-     */
-    @Nonbinding
-    String defaultValue() default UNCONFIGURED_VALUE;
-
-    /**
-     * Flag that defines if a configuration property is required. If a required
-     * property is missing, a {@link org.apache.tamaya.ConfigException} is raised.
-     * Default is {@code true}.
-     * @return the flag value.
-     */
-    @Nonbinding
-    boolean required() default true;
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoDetect.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoDetect.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoDetect.java
new file mode 100644
index 0000000..f3dee88
--- /dev/null
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoDetect.java
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+package org.apache.tamaya.inject.api;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Adding this annotation tells the Tamaya injection system to inject all
+ * fields found, also including fields not annotated with {@code @Config}.
+ * The configuration keys to be used for resolution are basically determined
+ * by the {@link Config} annotation(s). If missing the keys are evaluated in the
+ * following order:
+ * <ul>
+ *     <li>packagename.simpleClassname.fieldName</li>
+ *     <li>simpleClassname.fieldName</li>
+ *     <li>fieldName</li>
+ * </ul>
+ * Fields not to be injected can be annotated with {@code @NoConfig} to exclude
+ * them being elected for injection.
+ * @see Config
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = { ElementType.TYPE })
+public @interface ConfigAutoDetect {
+
+    /**
+     * Flag that tells the injection system if a {@link IllegalStateException} should
+     * be thrown when a property cannot be resolved. Default is {@code false}.
+     * @return {@code false} if no exception is thrown on unresolvable properties, {@code true} otherwise.
+     */
+    boolean failIfMissing() default false;
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoInject.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoInject.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoInject.java
deleted file mode 100644
index 251caf9..0000000
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigAutoInject.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.inject.api;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Adding this annotation tells the Tamaya injection system to inject all
- * fields found, also including fields not annotated with {@code @Config}.
- * The configuration keys to be used for resolution are basically determined
- * by the {@link Config} annotation(s). If missing the keys are evaluated in the
- * following order:
- * <ul>
- *     <li>packagename.simpleClassname.fieldName</li>
- *     <li>simpleClassname.fieldName</li>
- *     <li>fieldName</li>
- * </ul>
- * Fields not to be injected can be annotated with {@code @NoConfig} to exclude
- * them being elected for injection.
- * @see Config
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = { ElementType.TYPE })
-public @interface ConfigAutoInject {
-
-    /**
-     * Flag that tells the injection system if a {@link org.apache.tamaya.ConfigException} should
-     * be thrown when a property cannot be resolved. Default is {@code false}.
-     * @return {@code false} if no exception is thrown on unresolvable properties, {@code true} otherwise.
-     */
-    boolean failIfMissing() default false;
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigDefaultSections.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigDefaultSections.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigDefaultSections.java
index a9025f6..9071c4e 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigDefaultSections.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigDefaultSections.java
@@ -30,7 +30,7 @@ import java.lang.annotation.Target;
  * annotation(s). This annotation allows
  * to define the configuration section that is prefixed to all <b>relative</b> configuration keys.
  * @see Config
- * @see ConfigAutoInject
+ * @see ConfigAutoDetect
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(value = { ElementType.TYPE })

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigFallbackKeys.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigFallbackKeys.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigFallbackKeys.java
new file mode 100644
index 0000000..8d0aa4a
--- /dev/null
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/ConfigFallbackKeys.java
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+package org.apache.tamaya.inject.api;
+
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to define additional keys to be used as fallback keys to evaluate a configuration entry.
+ */
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
+public @interface ConfigFallbackKeys {
+
+    /**
+     * Defines the configuration property keys to be used as fallback keys.
+     *
+     * @return the property keys, not null. If empty, the field or property name (of a setter method) being injected
+     * is used by default.
+     */
+    @Nonbinding
+    String[] value() default {};
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/DynamicValue.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/DynamicValue.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/DynamicValue.java
index ef249ac..1efcb11 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/DynamicValue.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/DynamicValue.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.inject.api;
 
+import javax.inject.Provider;
 import java.beans.PropertyChangeListener;
 import java.util.function.Supplier;
 
@@ -40,13 +41,13 @@ import java.util.function.Supplier;
  *
  * @param <T> The type of the value.
  */
-public interface DynamicValue<T> {
+public interface DynamicValue<T>{
 
     /**
      * Performs a commit, if necessary, and returns the current value.
      *
      * @return the non-null value held by this {@code DynamicValue}
-     * @throws org.apache.tamaya.ConfigException if there is no value present
+     * @throws java.util.NoSuchElementException if there is no value present
      *
      * @see DynamicValue#isPresent()
      */
@@ -89,7 +90,7 @@ public interface DynamicValue<T> {
      * otherwise throws {@code ConfigException}.
      *
      * @return the non-null value held by this {@code Optional}
-     * @throws org.apache.tamaya.ConfigException if there is no value present
+     * @throws java.util.NoSuchElementException if there is no value present
      *
      * @see DynamicValue#isPresent()
      */

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/LoadPolicy.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/LoadPolicy.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/LoadPolicy.java
index b445e14..985252a 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/LoadPolicy.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/LoadPolicy.java
@@ -23,9 +23,7 @@ package org.apache.tamaya.inject.api;
  * for a {@link DynamicValue}.
  * The policy also affects the cases were any configured listeners/listener methods are called for
  * propagation current configuration changes.
- * @deprecated Currently only used internally. Future usage unclear.
  */
-@Deprecated
 public enum LoadPolicy {
     /**
      * The configuration keys is evaluated once, when the owning component is loaded/configured, but never updated later.
@@ -38,7 +36,7 @@ public enum LoadPolicy {
      */
     LAZY,
     /**
-     * The configuration value is evaluated every time it is accessed.
+     * The configuration value is (re)evaluated every time it is accessed.
      */
     ALWAYS
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/OptionalConfig.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/OptionalConfig.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/OptionalConfig.java
new file mode 100644
index 0000000..8ab2e98
--- /dev/null
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/OptionalConfig.java
@@ -0,0 +1,37 @@
+///*
+// * 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.
+// */
+//package org.apache.tamaya.inject.api;
+//
+//
+//import javax.enterprise.util.Nonbinding;
+//import javax.inject.Qualifier;
+//import java.lang.annotation.ElementType;
+//import java.lang.annotation.Retention;
+//import java.lang.annotation.RetentionPolicy;
+//import java.lang.annotation.Target;
+//
+///**
+// * Annotation to mark a configuration entry as optional, thus not throwing any exceptions if not satisfied.
+// */
+//@Qualifier
+//@Retention(RetentionPolicy.RUNTIME)
+//@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
+//public @interface OptionalConfig {
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/UpdatePolicy.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/UpdatePolicy.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/UpdatePolicy.java
index ddee4e0..3183938 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/UpdatePolicy.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/UpdatePolicy.java
@@ -22,11 +22,6 @@ package org.apache.tamaya.inject.api;
  * Policy to control how new values are applied to a {@link DynamicValue}.
  */
 public enum UpdatePolicy {
-    /**
-     * @deprecated Use {@link #IMMEDIATE} instead of.
-     */
-    @Deprecated
-    IMMEDEATE,
     /** New values are applied immediately and registered listeners are informed about the change. */
     IMMEDIATE,
     /** New values or not applied, but stored in the newValue property. Explicit call to DynamicValue#commit
@@ -35,11 +30,6 @@ public enum UpdatePolicy {
      */
     EXPLICIT,
     /**
-     * @deprecated Use {@link #EXPLICIT} instead of.
-     */
-    @Deprecated
-    EXPLCIT,
-    /**
      * New values are always immediately discarded, listeners are not triggered.
      */
     NEVER,

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConfigOperator.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConfigOperator.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConfigOperator.java
deleted file mode 100644
index 6630e53..0000000
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConfigOperator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.inject.api;
-
-import org.apache.tamaya.ConfigOperator;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to define an configuration operator to be used before accessing a configured key.
- * This allows filtering the current configuration, e.g. to realize views or ensure security
- * constraints.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = {ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
-public @interface WithConfigOperator {
-
-    /**
-     * Define a custom adapter that should be used to adapt the configuration entry injected. This overrides any
-     * general org.apache.tamaya.core.internal registered. If no adapter is defined (default) and no corresponding adapter is
-     * registered, it is handled as a deployment error.
-     * @return adapter used to transform the configuration entry.
-     */
-    Class<? extends ConfigOperator> value();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConverter.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConverter.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConverter.java
new file mode 100644
index 0000000..b831afc
--- /dev/null
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithConverter.java
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+package org.apache.tamaya.inject.api;
+
+
+import javax.config.spi.Converter;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to define a type adapter to be used before injecting a configured key, or for applying changes.
+ * This will override any other adapter for performing the type conversion before
+ * injecting the field keys.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = {ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
+public @interface WithConverter {
+
+    /**
+     * Define a custom adapter or codec that should be used to adapt the configuration entry injected. This overrides any
+     * general org.apache.tamaya.core.internal registered. If no adapter is defined (default) and no corresponding adapter is
+     * registered, it is handled as a deployment error.
+     * @return adapter used to change the configuration entry.
+     */
+    Class<? extends Converter<?>> value();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithPropertyConverter.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithPropertyConverter.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithPropertyConverter.java
deleted file mode 100644
index 499360c..0000000
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/WithPropertyConverter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.inject.api;
-
-
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to define a type adapter to be used before injecting a configured key, or for applying changes.
- * This will override any other adapter for performing the type conversion before
- * injecting the field keys.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = {ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
-public @interface WithPropertyConverter {
-
-    /**
-     * Define a custom adapter or codec that should be used to adapt the configuration entry injected. This overrides any
-     * general org.apache.tamaya.core.internal registered. If no adapter is defined (default) and no corresponding adapter is
-     * registered, it is handled as a deployment error.
-     * @return adapter used to change the configuration entry.
-     */
-    Class<? extends PropertyConverter<?>> value();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/package-info.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/package-info.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/package-info.java
index b5d8bc3..b0cac4e 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/package-info.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/api/package-info.java
@@ -17,6 +17,6 @@
  * under the License.
  */
 /**
- * Common njection API.
+ * Common injection API.
  */
 package org.apache.tamaya.inject.api;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/BaseDynamicValue.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/BaseDynamicValue.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/BaseDynamicValue.java
index e8a081a..87da886 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/BaseDynamicValue.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/BaseDynamicValue.java
@@ -18,18 +18,15 @@
  */
 package org.apache.tamaya.inject.spi;
 
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
+import javax.config.Config;
 import org.apache.tamaya.inject.api.DynamicValue;
 import org.apache.tamaya.inject.api.UpdatePolicy;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
 
+import javax.config.spi.Converter;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.io.Serializable;
 import java.lang.ref.WeakReference;
+import java.lang.reflect.Type;
 import java.util.*;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
@@ -72,7 +69,7 @@ public abstract class BaseDynamicValue<T> implements DynamicValue<T> {
      */
     private UpdatePolicy updatePolicy = UpdatePolicy.NEVER;
     /** The targe type. */
-    private TypeLiteral<T> targetType;
+    private Type targetType;
     /**
      * The current value, never null.
      */
@@ -95,9 +92,9 @@ public abstract class BaseDynamicValue<T> implements DynamicValue<T> {
      * @param targetType the target type.
      * @param keys the candidate keys.
      */
-    public BaseDynamicValue(Object owner, String propertyName, TypeLiteral targetType, List<String> keys){
+    public BaseDynamicValue(Object owner, String propertyName, Type targetType, List<String> keys){
         if(keys == null || keys.isEmpty()){
-            throw new ConfigException("At least one key is required.");
+            throw new IllegalArgumentException("At least one key is required.");
         }
         this.owner = owner;
         this.propertyName = Objects.requireNonNull(propertyName);
@@ -125,7 +122,7 @@ public abstract class BaseDynamicValue<T> implements DynamicValue<T> {
      * Get the configuration to evaluate.
      * @return the configuration, never null.
      */
-    protected abstract Configuration getConfiguration();
+    protected abstract Config getConfiguration();
 
     /**
      * Get the corresponding property name.
@@ -155,7 +152,7 @@ public abstract class BaseDynamicValue<T> implements DynamicValue<T> {
      * Get the target type.
      * @return the target type, not null.
      */
-    public TypeLiteral<T> getTargetType(){
+    public Type getTargetType(){
         return targetType;
     }
 
@@ -207,7 +204,7 @@ public abstract class BaseDynamicValue<T> implements DynamicValue<T> {
 
     @Override
     public boolean updateValue() {
-        Configuration config = getConfiguration();
+        Config config = getConfiguration();
         T val = evaluateValue();
         if(value == null){
             value = val;
@@ -262,48 +259,21 @@ public abstract class BaseDynamicValue<T> implements DynamicValue<T> {
      * Allows to customize type conversion if needed, e.g. based on some annotations defined.
      * @return the custom converter, which replaces the default converters, ot null.
      */
-    protected PropertyConverter<T> getCustomConverter(){
+    protected Converter<T> getCustomConverter(){
         return null;
     }
 
     @Override
     public T evaluateValue() {
         T value = null;
-        List<PropertyConverter<T>> converters = new ArrayList<>();
-        if (this.getCustomConverter() != null) {
-            converters.add(this.getCustomConverter());
-        }
-        converters.addAll(getConfiguration().getContext().getPropertyConverters(targetType));
-
+        Converter<T> customConverter = getCustomConverter();
         for (String key : keys) {
-            ConversionContext ctx = new ConversionContext.Builder(key, targetType).build();
-            String stringVal = getConfiguration().getOrDefault(key, String.class, null);
-            if(stringVal!=null) {
-                if(String.class.equals(targetType.getType())){
-                    value = (T)stringVal;
-                }
-                for(PropertyConverter<T> conv:converters){
-                    try{
-                        value = conv.convert(stringVal, ctx);
-                        if(value!=null){
-                            break;
-                        }
-                    }catch(Exception e){
-                        LOG.warning("failed to convert: " + ctx);
-                    }
-                }
-            }
-        }
-        if(value == null && defaultValue!=null){
-            ConversionContext ctx = new ConversionContext.Builder("<defaultValue>", targetType).build();
-            for(PropertyConverter<T> conv:converters){
-                try{
-                    value = conv.convert(defaultValue, ctx);
-                    if(value!=null){
-                        break;
-                    }
-                }catch(Exception e){
-                    LOG.warning("failed to convert: " + ctx);
+            Optional<String> stringVal = getConfiguration().getOptionalValue(key, String.class);
+            if(stringVal.isPresent()) {
+                if(customConverter!=null){
+                    return customConverter.convert(stringVal.get());
+                }else{
+                    return (T)getConfiguration().getValue(key, (Class)getTargetType());
                 }
             }
         }
@@ -324,7 +294,7 @@ public abstract class BaseDynamicValue<T> implements DynamicValue<T> {
      * Performs a commit, if necessary, and returns the current value.
      *
      * @return the non-null value held by this {@code DynamicValue}
-     * @throws org.apache.tamaya.ConfigException if there is no value present
+     * @throws IllegalArgumentException if there is no value present
      * @see DynamicValue#isPresent()
      */
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredField.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredField.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredField.java
index 94c0091..30740c6 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredField.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredField.java
@@ -18,8 +18,7 @@
  */
 package org.apache.tamaya.inject.spi;
 
-import org.apache.tamaya.Configuration;
-
+import javax.config.Config;
 import java.lang.reflect.Field;
 import java.util.Collection;
 
@@ -64,5 +63,5 @@ public interface ConfiguredField {
      * @param instance the instance, not null.
      * @param config the configuration, not null.
      */
-    void configure(Object instance, Configuration config);
+    void configure(Object instance, Config config);
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredMethod.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredMethod.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredMethod.java
index d8b0d09..00775c5 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredMethod.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredMethod.java
@@ -18,8 +18,7 @@
  */
 package org.apache.tamaya.inject.spi;
 
-import org.apache.tamaya.Configuration;
-
+import javax.config.Config;
 import java.lang.reflect.Method;
 import java.util.Collection;
 
@@ -64,7 +63,7 @@ public interface ConfiguredMethod {
      *
      * @param instance the target instance, not null.
      * @param config the configuration, not null.
-     * @throws org.apache.tamaya.ConfigException if evaluation or conversion failed.
+     * @throws IllegalArgumentException if evaluation or conversion failed.
      */
-    void configure(Object instance, Configuration config);
+    void configure(Object instance, Config config);
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredType.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredType.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredType.java
index 0f81dc7..f7a10ad 100644
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredType.java
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/ConfiguredType.java
@@ -18,8 +18,7 @@
  */
 package org.apache.tamaya.inject.spi;
 
-import org.apache.tamaya.Configuration;
-
+import javax.config.Config;
 import java.util.Collection;
 
 /**
@@ -57,7 +56,7 @@ public interface ConfiguredType{
      * @param instance The instance to be configured, not null.
      * @param config  the target config, not null.
      */
-    void configure(Object instance, Configuration config);
+    void configure(Object instance, Config config);
 
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionEvaluator.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionEvaluator.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionEvaluator.java
new file mode 100644
index 0000000..4374819
--- /dev/null
+++ b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionEvaluator.java
@@ -0,0 +1,159 @@
+/*
+ * 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.
+ */
+package org.apache.tamaya.inject.spi;
+
+import org.apache.tamaya.inject.api.ConfigDefaultSections;
+import org.apache.tamaya.inject.api.ConfigFallbackKeys;
+
+import javax.config.inject.ConfigProperty;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Utility class with several commonly used functions.
+ */
+public final class InjectionEvaluator {
+
+    private InjectionEvaluator(){}
+
+
+    /**
+     * Collects all keys to be be accessed as defined by any annotations of type
+     * {@link ConfigDefaultSections}, {@link javax.config.inject.ConfigProperty}.
+     * @param member the (optionally) annotated member instance
+     * @return the regarding key list to be accessed fomr the {@link javax.config.Config}.
+     */
+    public static List<String> getKeys(AccessibleObject member) {
+        if(member instanceof Field){
+            Field f = (Field)member;
+            return getKeys(f, f.getDeclaringClass().getAnnotation(ConfigDefaultSections.class));
+        } else if(member instanceof Method){
+            Method m = (Method)member;
+            return getKeys(m, m.getDeclaringClass().getAnnotation(ConfigDefaultSections.class));
+        }
+        return Collections.emptyList();
+    }
+
+    /**
+     * Evaluates all absolute configuration keys based on the annotations found in a field/class.
+     *
+     * @param method method to analyze.
+     * @return the list current keys in order how they should be processed/looked up.
+     */
+    private static List<String> getKeys(Method method, ConfigDefaultSections sectionAnnot) {
+        return getKeys(method,
+                sectionAnnot,
+                method.getAnnotation(ConfigProperty.class),
+                method.getAnnotation(ConfigFallbackKeys.class));
+    }
+
+    /**
+     * Evaluates all absolute configuration keys based on the annotations found in a field/class.
+     *
+     * @param field field to analyze.
+     * @return the list current keys in order how they should be processed/looked up.
+     */
+    private static List<String> getKeys(Field field, ConfigDefaultSections sectionAnnot) {
+        return getKeys(field,
+                sectionAnnot,
+                field.getAnnotation(ConfigProperty.class),
+                field.getAnnotation(ConfigFallbackKeys.class));
+    }
+
+    /**
+     * Evaluates all absolute configuration keys based on the annotations found in a class.
+     * 
+     * @param member member to analyze.
+     * @param sectionsAnnot         the (optional) annotation definining sections to be looked up.
+     * @param propertyAnnotation the annotation on field/method level that may defined one or
+     *                           several keys to be looked up (in absolute or relative form).
+     * @return the list current keys in order how they should be processed/looked up.
+     */
+    private static List<String> getKeys(Member member,
+                                        ConfigDefaultSections sectionsAnnot,
+                                        ConfigProperty propertyAnnotation,
+                                        ConfigFallbackKeys configFallbackKeys) {
+        List<String> result = new ArrayList<>();
+        List<String> memberKeys = new ArrayList<>();
+        if(propertyAnnotation!=null && !propertyAnnotation.name().isEmpty()){
+            memberKeys.add(propertyAnnotation.name());
+        }
+        if(configFallbackKeys !=null){
+            memberKeys.addAll(Arrays.asList(configFallbackKeys.value()));
+        }
+        if (memberKeys.isEmpty()) {
+            memberKeys.add(member.getName());
+        }
+        List<String> areaKeys = getSectionKeys(member, sectionsAnnot);
+        for(String memberKey:memberKeys){
+            if (memberKey.startsWith("[") && memberKey.endsWith("]")) {
+                // absolute key, strip away brackets, take key as is
+                result.add(memberKey.substring(1, memberKey.length()-1));
+            }else{
+                for(String areaKey:areaKeys) {
+                    result.add(areaKey + '.' + memberKey);
+                }
+                result.add(memberKey);
+            }
+        }
+        return result;
+    }
+
+    private static List<String> getSectionKeys(Member member, ConfigDefaultSections sectionsAnnot) {
+        if(member instanceof Field){
+            Field f = (Field)member;
+            return getSectionKeys(f,sectionsAnnot);
+        } else if(member instanceof Method){
+            Method m = (Method)member;
+            return getSectionKeys(m,sectionsAnnot);
+        }
+        return Collections.emptyList();
+    }
+
+    private static List<String> getSectionKeys(Method method, ConfigDefaultSections sectionAnnot) {
+        List<String> areaKeys = new ArrayList<>();
+        if (sectionAnnot != null && sectionAnnot.value().length>0) {
+            // Remove original entry, since it will be replaced with prefixed entries
+            areaKeys.addAll(Arrays.asList(sectionAnnot.value()));
+        }else{
+            areaKeys.add(method.getDeclaringClass().getName());
+            areaKeys.add(method.getDeclaringClass().getSimpleName());
+        }
+        return areaKeys;
+    }
+
+    private static List<String> getSectionKeys(Field field, ConfigDefaultSections sectionAnnot) {
+        List<String> areaKeys = new ArrayList<>();
+        if (sectionAnnot != null && sectionAnnot.value().length>0) {
+            // Remove original entry, since it will be replaced with prefixed entries
+            areaKeys.addAll(Arrays.asList(sectionAnnot.value()));
+        }else{
+            areaKeys.add(field.getDeclaringClass().getName());
+            areaKeys.add(field.getDeclaringClass().getSimpleName());
+        }
+        return areaKeys;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java b/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java
deleted file mode 100644
index d5ab2ef..0000000
--- a/modules/injection/injection-api/src/main/java/org/apache/tamaya/inject/spi/InjectionUtils.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tamaya.inject.spi;
-
-import org.apache.tamaya.inject.api.Config;
-import org.apache.tamaya.inject.api.ConfigDefaultSections;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Utility class with several commonly used functions.
- */
-public final class InjectionUtils {
-
-    private InjectionUtils(){}
-
-
-    /**
-     * Collects all keys to be be accessed as defined by any annotations of type
-     * {@link ConfigDefaultSections}, {@link Config}.
-     * @param field the (optionally) annotated field instance
-     * @return the regarding key list to be accessed fomr the {@link org.apache.tamaya.Configuration}.
-     */
-    public static List<String> getKeys(Field field) {
-        ConfigDefaultSections areasAnnot = field.getDeclaringClass().getAnnotation(ConfigDefaultSections.class);
-        return InjectionUtils.evaluateKeys(field, areasAnnot, field.getAnnotation(Config.class));
-    }
-
-    /**
-     * Collects all keys to be be accessed as defined by any annotations of type
-     * {@link ConfigDefaultSections}, {@link Config}.
-     * @param method the (optionally) annotated method instance
-     * @return the regarding key list to be accessed fomr the {@link org.apache.tamaya.Configuration}.
-     */
-    public static List<String> getKeys(Method method) {
-        ConfigDefaultSections areasAnnot = method.getDeclaringClass().getAnnotation(ConfigDefaultSections.class);
-        return InjectionUtils.evaluateKeys(method, areasAnnot, method.getAnnotation(Config.class));
-    }
-
-    /**
-     * Evaluates all absolute configuration keys based on the member name found.
-     *
-     * @param member member to analyze.
-     * @param sectionAnnot the (optional) annotation defining areas to be looked up.
-     * @return the list of current keys in order how they should be processed/looked up.
-     */
-    public static List<String> evaluateKeys(Member member, ConfigDefaultSections sectionAnnot) {
-        List<String> keys = new ArrayList<>();
-        List<String> areaKeys = evaluateSectionKeys(member, sectionAnnot);
-        String key = null;
-        String name = member.getName();
-        if (name.startsWith("get") || name.startsWith("set")) {
-            key = Character.toLowerCase(name.charAt(3)) + name.substring(4);
-        } else {
-            key = Character.toLowerCase(name.charAt(0)) + name.substring(1);
-        }
-        for(String areaKey:areaKeys) {
-            keys.add(areaKey + '.' + key);
-        }
-        keys.add(key);
-        return keys;
-    }
-
-    /**
-     * Evaluates all absolute configuration keys based on the annotations found in a class.
-     * 
-     * @param member member to analyze.
-     * @param areasAnnot         the (optional) annotation definining areas to be looked up.
-     * @param propertyAnnotation the annotation on field/method level that may defined one or
-     *                           several keys to be looked up (in absolute or relative form).
-     * @return the list current keys in order how they should be processed/looked up.
-     */
-    public static List<String> evaluateKeys(Member member, ConfigDefaultSections areasAnnot, Config propertyAnnotation) {
-        if(propertyAnnotation==null){
-            return evaluateKeys(member, areasAnnot);
-        }
-        List<String> result = new ArrayList<>();
-        List<String> memberKeys = new ArrayList<>(Arrays.asList(propertyAnnotation.value()));
-        if (memberKeys.isEmpty()) {
-            memberKeys.add(member.getName());
-        }
-        List<String> areaKeys = evaluateSectionKeys(member, areasAnnot);
-        for(String memberKey:memberKeys){
-            if (memberKey.startsWith("[") && memberKey.endsWith("]")) {
-                // absolute key, strip away brackets, take key as is
-                result.add(memberKey.substring(1, memberKey.length()-1));
-            }else{
-                for(String areaKey:areaKeys) {
-                    result.add(areaKey + '.' + memberKey);
-                }
-                result.add(memberKey);
-            }
-        }
-        return result;
-    }
-
-    private static List<String> evaluateSectionKeys(Member member, ConfigDefaultSections sectionAnnot) {
-        List<String> areaKeys = new ArrayList<>();
-        if (sectionAnnot != null && sectionAnnot.value().length>0) {
-            // Remove original entry, since it will be replaced with prefixed entries
-            areaKeys.addAll(Arrays.asList(sectionAnnot.value()));
-        }else{
-            areaKeys.add(member.getDeclaringClass().getName());
-            areaKeys.add(member.getDeclaringClass().getSimpleName());
-        }
-        return areaKeys;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/BaseDynamicValueTest.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/BaseDynamicValueTest.java b/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/BaseDynamicValueTest.java
index bb568a5..6f2a88b 100644
--- a/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/BaseDynamicValueTest.java
+++ b/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/BaseDynamicValueTest.java
@@ -18,13 +18,11 @@
  */
 package org.apache.tamaya.inject.spi;
 
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.inject.api.UpdatePolicy;
 import org.junit.Test;
 
+import javax.config.Config;
+import javax.config.ConfigProvider;
 import java.util.Arrays;
 
 import static org.junit.Assert.*;
@@ -36,7 +34,7 @@ public class BaseDynamicValueTest {
         new MyDynamicValue("a", "b");
     }
 
-    @Test(expected = ConfigException.class)
+    @Test(expected = IllegalArgumentException.class)
     public void create_nokeys(){
         new MyDynamicValue();
     }
@@ -79,12 +77,12 @@ public class BaseDynamicValueTest {
     private static final class MyDynamicValue extends BaseDynamicValue{
 
         public MyDynamicValue(String... keys){
-            super(null, "test", TypeLiteral.of(String.class), Arrays.asList(keys));
+            super(null, "test", String.class, Arrays.asList(keys));
         }
 
         @Override
-        protected Configuration getConfiguration() {
-            return ConfigurationProvider.getConfiguration();
+        protected Config getConfiguration() {
+            return ConfigProvider.getConfig();
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/InjectionUtilsTest.java
----------------------------------------------------------------------
diff --git a/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/InjectionUtilsTest.java b/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/InjectionUtilsTest.java
index fee1a58..4b76d36 100644
--- a/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/InjectionUtilsTest.java
+++ b/modules/injection/injection-api/src/test/java/org/apache/tamaya/inject/spi/InjectionUtilsTest.java
@@ -18,10 +18,11 @@
  */
 package org.apache.tamaya.inject.spi;
 
-import org.apache.tamaya.inject.api.Config;
 import org.apache.tamaya.inject.api.ConfigDefaultSections;
+import org.apache.tamaya.inject.api.ConfigFallbackKeys;
 import org.junit.Test;
 
+import javax.config.inject.ConfigProperty;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.List;
@@ -33,13 +34,14 @@ public class InjectionUtilsTest {
     @Test
     public void getKeysMethod() {
         class Klazz {
-            @Config({"val", "val2", "[vvv]"})
+            @ConfigProperty(name="val")
+            @ConfigFallbackKeys({"val2", "[vvv]"})
             public void setValue(String field){}
         }
 
         Method method = Klazz.class.getMethods()[0];
 
-        List<String> foundKeys = InjectionUtils.getKeys(method);
+        List<String> foundKeys = InjectionEvaluator.getKeys(method);
 
         assertThat(foundKeys).isNotNull()
                 .contains("org.apache.tamaya.inject.spi.InjectionUtilsTest$1Klazz.val",
@@ -61,7 +63,7 @@ public class InjectionUtilsTest {
 
         Field field = Klazz.class.getFields()[0];
 
-        List<String> foundKeys = InjectionUtils.getKeys(field);
+        List<String> foundKeys = InjectionEvaluator.getKeys(field);
 
         assertThat(foundKeys).isNotNull()
                              .contains("org.apache.tamaya.inject.spi.InjectionUtilsTest$2Klazz.field",
@@ -80,7 +82,7 @@ public class InjectionUtilsTest {
 
         Field field = Klazz.class.getFields()[0];
 
-        List<String> foundKeys = InjectionUtils.evaluateKeys(field, Klazz.class.getAnnotation(ConfigDefaultSections.class));
+        List<String> foundKeys = InjectionEvaluator.getKeys(field);
         assertThat(foundKeys).isNotNull()
                 .contains("basic.field",
                         "field");
@@ -90,7 +92,8 @@ public class InjectionUtilsTest {
     public void evaluateKeysWithSectionAndMemberAnnotation() {
         @ConfigDefaultSections("basic")
         class Klazz {
-            @Config({"val", "[absoluteVal]"})
+            @ConfigProperty(name="val")
+            @ConfigFallbackKeys({"absoluteVal"})
             public String field;
             protected String protectedField;
             private String privateField;
@@ -98,8 +101,7 @@ public class InjectionUtilsTest {
 
         Field field = Klazz.class.getFields()[0];
 
-        List<String> foundKeys = InjectionUtils.evaluateKeys(field, Klazz.class.getAnnotation(ConfigDefaultSections.class),
-                field.getAnnotation(Config.class));
+        List<String> foundKeys = InjectionEvaluator.getKeys(field);
         assertThat(foundKeys).isNotNull()
                 .contains("basic.val", "val",
                         "absoluteVal");
@@ -108,7 +110,8 @@ public class InjectionUtilsTest {
     @Test
     public void evaluateKeysWithMemberAnnotation() {
         class Klazz {
-            @Config({"val", "[absoluteVal]"})
+            @ConfigProperty(name="val")
+            @ConfigFallbackKeys("[absoluteVal]")
             public String field;
             protected String protectedField;
             private String privateField;
@@ -116,8 +119,7 @@ public class InjectionUtilsTest {
 
         Field field = Klazz.class.getFields()[0];
 
-        List<String> foundKeys = InjectionUtils.evaluateKeys(field, null,
-                field.getAnnotation(Config.class));
+        List<String> foundKeys = InjectionEvaluator.getKeys(field);
         assertThat(foundKeys).isNotNull()
                 .contains("Klazz.val", "val",
                         "absoluteVal");

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/pom.xml
----------------------------------------------------------------------
diff --git a/modules/injection/pom.xml b/modules/injection/pom.xml
index d811715..c7da6e0 100644
--- a/modules/injection/pom.xml
+++ b/modules/injection/pom.xml
@@ -35,4 +35,13 @@
         <module>cdi</module>
     </modules>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/standalone/pom.xml
----------------------------------------------------------------------
diff --git a/modules/injection/standalone/pom.xml b/modules/injection/standalone/pom.xml
index e3f646e..f677ca2 100644
--- a/modules/injection/standalone/pom.xml
+++ b/modules/injection/standalone/pom.xml
@@ -35,7 +35,7 @@ under the License.
     <dependencies>
         <dependency>
             <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
+            <artifactId>tamaya-base</artifactId>
             <version>${tamaya-apicore.version}</version>
             <scope>provided</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
----------------------------------------------------------------------
diff --git a/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java b/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
index 898e937..042efc0 100644
--- a/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
+++ b/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/ConfigurationInjector.java
@@ -19,8 +19,7 @@
 package org.apache.tamaya.inject;
 
 
-import org.apache.tamaya.Configuration;
-
+import javax.config.Config;
 import java.util.function.Supplier;
 
 /**
@@ -51,7 +50,7 @@ public interface ConfigurationInjector {
      * @param config the configuration to be used for injection.
      * @return the configured instance (allows chaining of operations).
      */
-    <T> T configure(T instance, Configuration config);
+    <T> T configure(T instance, Config config);
 
     /**
      * Creates a template implementing the annotated methods based on current configuration data.
@@ -70,7 +69,7 @@ public interface ConfigurationInjector {
      * @param templateType the type of the template to be created.
      * @return the configured template.
      */
-    <T> T createTemplate(Class<T> templateType, Configuration config);
+    <T> T createTemplate(Class<T> templateType, Config config);
 
 
     /**
@@ -90,6 +89,13 @@ public interface ConfigurationInjector {
      * @param <T> the target type.
      * @return a supplier creating configured instances of {@code T}.
      */
-    <T> Supplier<T> getConfiguredSupplier(Supplier<T> supplier, Configuration config);
+    <T> Supplier<T> getConfiguredSupplier(Supplier<T> supplier, Config config);
 
+    /**
+     * Method checks if the given instance is annotated for being configured using {@link javax.config.inject.ConfigProperty}
+     * annotations.
+     * @param o the instance, not null.
+     * @return true, if the instance has any fields or setter methods annotated with {@link javax.config.inject.ConfigProperty}.
+     */
+    boolean isConfigured(Object o);
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/internal/ConfigTemplateInvocationHandler.java
----------------------------------------------------------------------
diff --git a/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/internal/ConfigTemplateInvocationHandler.java b/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/internal/ConfigTemplateInvocationHandler.java
index fd9f7be..bee17a0 100644
--- a/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/internal/ConfigTemplateInvocationHandler.java
+++ b/modules/injection/standalone/src/main/java/org/apache/tamaya/inject/internal/ConfigTemplateInvocationHandler.java
@@ -18,12 +18,10 @@
  */
 package org.apache.tamaya.inject.internal;
 
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.inject.api.DynamicValue;
 import org.apache.tamaya.inject.spi.ConfiguredType;
 
+import javax.config.ConfigProvider;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.util.Objects;
@@ -53,7 +51,7 @@ public final class ConfigTemplateInvocationHandler implements InvocationHandler
 
     @Override
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-        Configuration config = ConfigurationProvider.getConfiguration();
+        javax.config.Config config = ConfigProvider.getConfig();
         if ("toString".equals(method.getName())) {
             return "Configured Proxy -> " + this.type.getType().getName();
         } else if ("hashCode".equals(method.getName())) {
@@ -66,8 +64,6 @@ public final class ConfigTemplateInvocationHandler implements InvocationHandler
         if (method.getReturnType() == DynamicValue.class) {
             return DefaultDynamicValue.of(proxy, method, config);
         }
-        String[] retKey = new String[1];
-        String configValue = InjectionHelper.getConfigValue(method, retKey, config);
-        return InjectionHelper.adaptValue(method, TypeLiteral.of(method.getReturnType()), retKey[0], configValue);
+        return InjectionHelper.getConfigValue(method, method.getReturnType(), config);
     }
 }