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:12 UTC

[16/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/formats/json/src/main/java/org/apache/tamaya/json/JSONVisitor.java
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONVisitor.java b/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONVisitor.java
index 92c81fe..07208d9 100644
--- a/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONVisitor.java
+++ b/modules/formats/json/src/main/java/org/apache/tamaya/json/JSONVisitor.java
@@ -18,10 +18,7 @@
  */
 package org.apache.tamaya.json;
 
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
 
 import javax.json.JsonArray;
 import javax.json.JsonObject;
@@ -29,7 +26,6 @@ import javax.json.JsonString;
 import javax.json.JsonStructure;
 import javax.json.JsonValue;
 
-import org.apache.tamaya.ConfigException;
 
 /**
  * Visitor implementation to read a JSON formatted input source.
@@ -64,7 +60,7 @@ class JSONVisitor {
                         case NUMBER: value = jsonValue.toString(); break;
                         case STRING: value = ((JsonString) jsonValue).getString(); break;
                         default:
-                            throw new ConfigException("Internal failure while processing JSON document.");
+                            throw new IllegalStateException("Internal failure while processing JSON document.");
                     }
                     
                     targetStore.put(key, value);
@@ -73,9 +69,11 @@ class JSONVisitor {
                     JsonObject node = (JsonObject) current.getValue();
                     stack.push(new VisitingContext(node, key));
                 } else if (current.getValue() instanceof JsonArray) {
-                    throw new ConfigException("Arrays are not supported at the moment.");
+                    String key = stack.peek().getNSPrefix() + current.getKey();
+                    JsonArray array = (JsonArray) current.getValue();
+                    stack.push(new VisitingContext(array, key));
                 } else {
-                    throw new ConfigException("Internal failure while processing JSON document.");
+                    throw new IllegalStateException("Internal failure while processing JSON document.");
                 }
 
                 goOn = stack.peek().hasNext();
@@ -94,6 +92,7 @@ class JSONVisitor {
     private static class VisitingContext {
         private final String namespace;
         private final JsonObject node;
+        private final JsonArray array;
         private final Iterator<Map.Entry<String, JsonValue>> elements;
 
         public VisitingContext(JsonObject node) {
@@ -103,9 +102,45 @@ class JSONVisitor {
         public VisitingContext(JsonObject rootNode, String currentNamespace) {
             namespace = currentNamespace;
             node = rootNode;
+            array = null;
             elements = node.entrySet().iterator();
         }
 
+        public VisitingContext(JsonArray array, String currentNamespace) {
+            namespace = currentNamespace;
+            this.array = array;
+            this.node = null;
+            Map<String,JsonValue> arrayMap = new HashMap<>();
+            arrayMap.put("[array]", formatArray(array.iterator()));
+            elements = arrayMap.entrySet().iterator();
+        }
+
+        private JsonValue formatArray(Iterator<JsonValue> iterator) {
+            StringBuilder b = new StringBuilder();
+            iterator.forEachRemaining(r -> {b.append(r.toString().replace(",", "\\,")).append(',');});
+            if(b.length()>0){
+                b.setLength(b.length()-1);
+            }
+            String elemsAsString = b.toString();
+            return new JsonString(){
+
+                @Override
+                public ValueType getValueType() {
+                    return ValueType.STRING;
+                }
+
+                @Override
+                public String getString() {
+                    return elemsAsString;
+                }
+
+                @Override
+                public CharSequence getChars() {
+                    return elemsAsString;
+                }
+            };
+        }
+
         public Map.Entry<String, JsonValue> nextElement() {
             return elements.next();
         }
@@ -116,6 +151,9 @@ class JSONVisitor {
         }
 
         public String getNSPrefix() {
+            if(array!=null){
+                return namespace;
+            }
             return namespace.isEmpty() ? namespace : namespace + ".";
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java b/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
index 209b438..73e20ed 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
+++ b/modules/formats/json/src/test/java/org/apache/tamaya/json/JSONVisitorTest.java
@@ -26,7 +26,6 @@ import javax.json.Json;
 import javax.json.JsonObject;
 import javax.json.JsonValue;
 
-import org.apache.tamaya.ConfigException;
 import org.junit.Test;
 
 public class JSONVisitorTest {
@@ -67,7 +66,7 @@ public class JSONVisitorTest {
 		assertThat(targetStore).isEmpty();
 	}
 
-	@Test(expected = ConfigException.class)
+	@Test
 	public void arraysAreNotSupported() {
 		JsonObject startNode = Json.createObjectBuilder().//
 				add("arrayKey", Json.createArrayBuilder().build()).//

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/formats/json/src/test/java/org/apache/tamaya/yaml/CommonJSONTestCaseCollection.java
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/yaml/CommonJSONTestCaseCollection.java b/modules/formats/json/src/test/java/org/apache/tamaya/yaml/CommonJSONTestCaseCollection.java
index e1f94cf..9636471 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/yaml/CommonJSONTestCaseCollection.java
+++ b/modules/formats/json/src/test/java/org/apache/tamaya/yaml/CommonJSONTestCaseCollection.java
@@ -27,20 +27,20 @@ import static org.junit.Assert.assertTrue;
 import java.io.IOException;
 import java.net.URL;
 
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.apache.tamaya.spisupport.PropertySourceComparator;
+import org.apache.tamaya.base.configsource.ConfigSourceComparator;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.Matchers;
 import org.junit.Test;
 
+import javax.config.spi.ConfigSource;
+
 /**
  * Class with a collection of common test cases each JSON processing
  * class must be able to pass.
  */
 public abstract class CommonJSONTestCaseCollection {
 
-    abstract PropertySource getPropertiesFrom(URL source) throws Exception;
+    abstract ConfigSource getPropertiesFrom(URL source) throws Exception;
 
     @Test
     public void canReadNonLatinCharacters() throws Exception {
@@ -49,12 +49,12 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, Matchers.notNullValue());
 
-        PropertySource propertySource = getPropertiesFrom(configURL);
+        ConfigSource propertySource = getPropertiesFrom(configURL);
 
-        assertThat(propertySource.get("name"), Matchers.notNullValue());
-        assertThat(propertySource.get("name").getValue(), equalTo("\u041e\u043b\u0438\u0432\u0435\u0440"));
-        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f"), Matchers.notNullValue());
-        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f").getValue(), Matchers.equalTo("Fischer"));
+        assertThat(propertySource.getValue("name"), Matchers.notNullValue());
+        assertThat(propertySource.getValue("name"), equalTo("\u041e\u043b\u0438\u0432\u0435\u0440"));
+        assertThat(propertySource.getValue("\u0444\u0430\u043c\u0438\u043b\u0438\u044f"), Matchers.notNullValue());
+        assertThat(propertySource.getValue("\u0444\u0430\u043c\u0438\u043b\u0438\u044f"), Matchers.equalTo("Fischer"));
     }
 
     @Test
@@ -64,11 +64,11 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, Matchers.notNullValue());
 
-        PropertySource propertySource = getPropertiesFrom(configURL);
+        ConfigSource propertySource = getPropertiesFrom(configURL);
 
-        assertThat(propertySource.get("onamae"), Matchers.notNullValue());
+        assertThat(propertySource.getValue("onamae"), Matchers.notNullValue());
         // 霊屋 = Tamaya
-        assertThat(propertySource.get("onamae").getValue(), equalTo("\u970a\u5c4b"));
+        assertThat(propertySource.getValue("onamae"), equalTo("\u970a\u5c4b"));
     }
 
     @Test
@@ -78,20 +78,20 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        PropertySource properties = getPropertiesFrom(configURL);
+        ConfigSource properties = getPropertiesFrom(configURL);
 
         assertTrue(properties.getProperties().keySet().size()>=5);
 
-        PropertyValue keyB = properties.get("b");
-        PropertyValue keyDO = properties.get("d.o");
-        PropertyValue keyDP = properties.get("d.p");
+        String keyB = properties.getValue("b");
+        String keyDO = properties.getValue("d.o");
+        String keyDP = properties.getValue("d.p");
 
         assertThat(keyB, notNullValue());
-        assertThat(keyB.getValue(), equalTo("B"));
+        assertThat(keyB, equalTo("B"));
         assertThat(keyDO, notNullValue());
-        assertThat(keyDO.getValue(), equalTo("O"));
+        assertThat(keyDO, equalTo("O"));
         assertThat(keyDP, Matchers.notNullValue());
-        assertThat(keyDP.getValue(), is("P"));
+        assertThat(keyDP, is("P"));
     }
 
     @Test
@@ -102,28 +102,28 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        PropertySource properties = getPropertiesFrom(configURL);
+        ConfigSource properties = getPropertiesFrom(configURL);
 
         assertTrue(properties.getProperties().keySet().size()>=4);
 
-        PropertyValue keyA = properties.get("a");
-        PropertyValue keyDO = properties.get("b.o");
-        PropertyValue keyDP = properties.get("b.p");
-        PropertyValue keyC = properties.get("c");
+        String keyA = properties.getValue("a");
+        String keyDO = properties.getValue("b.o");
+        String keyDP = properties.getValue("b.p");
+        String keyC = properties.getValue("c");
 
         assertThat(keyA, notNullValue());
-        assertThat(keyA.getValue(), is("A"));
+        assertThat(keyA, is("A"));
         assertThat(keyC, notNullValue());
-        assertThat(keyC.getValue(), equalTo("C"));
+        assertThat(keyC, equalTo("C"));
         assertThat(keyDO, notNullValue());
-        assertThat(keyDO.getValue(), equalTo("O"));
+        assertThat(keyDO, equalTo("O"));
         assertThat(keyDP, notNullValue());
-        assertThat(keyDP.getValue(), is("P"));
+        assertThat(keyDP, is("P"));
     }
 
-    @Test(expected = IOException.class)
-    public void canHandleIllegalJSONFileWhichContainsAnArray() throws Exception {
-        URL configURL = CommonJSONTestCaseCollection.class.getResource("/configs/invalid/with-array.json");
+    @Test
+    public void canHandleJSONFileWhichContainsAnArray() throws Exception {
+        URL configURL = CommonJSONTestCaseCollection.class.getResource("/configs/valid/with-array.json");
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
@@ -154,9 +154,9 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        PropertySource properties = getPropertiesFrom(configURL);
+        ConfigSource properties = getPropertiesFrom(configURL);
 
-        assertThat(PropertySourceComparator.getOrdinal(properties), is(16784));
+        assertThat(ConfigSourceComparator.getOrdinal(properties), is(16784));
     }
 
     @Test
@@ -165,20 +165,20 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        PropertySource properties = getPropertiesFrom(configURL);
+        ConfigSource properties = getPropertiesFrom(configURL);
 
         assertTrue(properties.getProperties().keySet().size()>=3);
 
-        PropertyValue keyA = properties.get("a");
-        PropertyValue keyB = properties.get("b");
-        PropertyValue keyC = properties.get("c");
+        String keyA = properties.getValue("a");
+        String keyB = properties.getValue("b");
+        String keyC = properties.getValue("c");
 
         assertThat(keyA, notNullValue());
-        assertThat(keyA.getValue(), equalTo("A"));
+        assertThat(keyA, equalTo("A"));
         assertThat(keyB, notNullValue());
-        assertThat(keyB.getValue(), is("B"));
+        assertThat(keyB, is("B"));
         assertThat(keyC, notNullValue());
-        assertThat(keyC.getValue(), is("C"));
+        assertThat(keyC, is("C"));
     }
 
     @Test(expected = IOException.class)
@@ -187,7 +187,7 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        PropertySource properties = getPropertiesFrom(configURL);
+        ConfigSource properties = getPropertiesFrom(configURL);
 
         properties.getProperties();
     }
@@ -198,7 +198,7 @@ public abstract class CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        PropertySource properties = getPropertiesFrom(configURL);
+        ConfigSource properties = getPropertiesFrom(configURL);
 
         assertTrue(properties.getProperties().keySet().size()>=0);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONFormatTest.java
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONFormatTest.java b/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONFormatTest.java
index 216573e..ae1e6d2 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONFormatTest.java
+++ b/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONFormatTest.java
@@ -20,11 +20,11 @@ package org.apache.tamaya.yaml;
 
 
 import org.apache.tamaya.format.ConfigurationData;
-import org.apache.tamaya.format.MappedConfigurationDataPropertySource;
+import org.apache.tamaya.format.MappedConfigurationDataConfigSource;
 import org.apache.tamaya.json.JSONFormat;
-import org.apache.tamaya.spi.PropertySource;
 import org.junit.Test;
 
+import javax.config.spi.ConfigSource;
 import java.io.InputStream;
 import java.net.URL;
 
@@ -67,10 +67,10 @@ public class JSONFormatTest extends CommonJSONTestCaseCollection {
     }
 
     @Override
-    PropertySource getPropertiesFrom(URL source) throws Exception {
+    ConfigSource getPropertiesFrom(URL source) throws Exception {
         try (InputStream is = source.openStream()) {
             ConfigurationData data = format.readConfiguration(source.toString(), is);
-            return new MappedConfigurationDataPropertySource(data);
+            return new MappedConfigurationDataConfigSource(data);
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONPropertySourceTest.java b/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONPropertySourceTest.java
index 0555bb8..3e9126a 100644
--- a/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONPropertySourceTest.java
+++ b/modules/formats/json/src/test/java/org/apache/tamaya/yaml/JSONPropertySourceTest.java
@@ -24,11 +24,12 @@ import static org.junit.Assert.assertEquals;
 import java.io.IOException;
 import java.net.URL;
 
-import org.apache.tamaya.json.JSONPropertySource;
-import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.json.JSONConfigSource;
 import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
+import javax.config.spi.ConfigSource;
+
 public class JSONPropertySourceTest extends CommonJSONTestCaseCollection {
 
     @Test
@@ -37,7 +38,7 @@ public class JSONPropertySourceTest extends CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        JSONPropertySource source = new JSONPropertySource(configURL, 4);
+        JSONConfigSource source = new JSONConfigSource(configURL, 4);
         assertEquals(source.getOrdinal(), 16784);
     }
     
@@ -47,11 +48,11 @@ public class JSONPropertySourceTest extends CommonJSONTestCaseCollection {
 
         assertThat(configURL, CoreMatchers.notNullValue());
 
-        new JSONPropertySource(configURL);
+        new JSONConfigSource(configURL);
     }
 
     @Override
-    PropertySource getPropertiesFrom(URL source) throws Exception {
-        return new JSONPropertySource(source);
+    ConfigSource getPropertiesFrom(URL source) throws Exception {
+        return new JSONConfigSource(source);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/formats/json/src/test/resources/configs/invalid/with-array.json
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/test/resources/configs/invalid/with-array.json b/modules/formats/json/src/test/resources/configs/invalid/with-array.json
deleted file mode 100644
index e623e49..0000000
--- a/modules/formats/json/src/test/resources/configs/invalid/with-array.json
+++ /dev/null
@@ -1,27 +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.
-*/
-{
-  "a" : "A",
-  "b" : {
-    "c" : "C",
-    "d" : [
-      "1", "2"
-    ]
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/formats/json/src/test/resources/configs/valid/with-array.json
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/test/resources/configs/valid/with-array.json b/modules/formats/json/src/test/resources/configs/valid/with-array.json
new file mode 100644
index 0000000..e623e49
--- /dev/null
+++ b/modules/formats/json/src/test/resources/configs/valid/with-array.json
@@ -0,0 +1,27 @@
+/*
+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.
+*/
+{
+  "a" : "A",
+  "b" : {
+    "c" : "C",
+    "d" : [
+      "1", "2"
+    ]
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/formats/json/src/test/resources/configs/valid/with-explicit-priority.json
----------------------------------------------------------------------
diff --git a/modules/formats/json/src/test/resources/configs/valid/with-explicit-priority.json b/modules/formats/json/src/test/resources/configs/valid/with-explicit-priority.json
index ed7acc2..fe9b61b 100644
--- a/modules/formats/json/src/test/resources/configs/valid/with-explicit-priority.json
+++ b/modules/formats/json/src/test/resources/configs/valid/with-explicit-priority.json
@@ -20,6 +20,6 @@ under the License.
   /*
    some useful comment here
    */
-  "tamaya.ordinal" : 16784,
+  "config_ordinal" : 16784,
   "a" : "A" // another comment
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/pom.xml
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/pom.xml b/modules/injection/cdi/pom.xml
index e1e59a5..f033574 100644
--- a/modules/injection/cdi/pom.xml
+++ b/modules/injection/cdi/pom.xml
@@ -100,13 +100,7 @@ under the License.
         </dependency>
         <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-spisupport</artifactId>
+            <artifactId>tamaya-base</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java
index 20c3bbd..ffb3236 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIAwareServiceContext.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.spi.ServiceContext;
 
 import javax.annotation.Priority;
@@ -57,13 +56,17 @@ public class CDIAwareServiceContext implements ServiceContext {
 
     private ServiceContext defaultServiceContext = new ServiceLoaderServiceContext();
 
-
     @Override
     public <T> T getService(Class<T> serviceType) {
+        return getService(serviceType, ServiceContext.defaultClassLoader());
+    }
+
+    @Override
+    public <T> T getService(Class<T> serviceType, ClassLoader classLoader) {
         Object cached = singletons.get(serviceType);
 
         if (cached == null) {
-            Collection<T> services = getServices(serviceType);
+            Collection<T> services = getServices(serviceType, classLoader);
             if (services.isEmpty()) {
                 cached = null;
             } else {
@@ -78,7 +81,12 @@ public class CDIAwareServiceContext implements ServiceContext {
 
     @Override
     public <T> T create(Class<T> serviceType) {
-        T serv = getService(serviceType);
+        return create(serviceType, ServiceContext.defaultClassLoader());
+    }
+
+    @Override
+    public <T> T create(Class<T> serviceType, ClassLoader classLoader) {
+        T serv = getService(serviceType, classLoader);
         if(serv!=null){
             try {
                 return (T)serv.getClass().newInstance();
@@ -99,7 +107,19 @@ public class CDIAwareServiceContext implements ServiceContext {
      */
     @Override
     public <T> List<T> getServices(final Class<T> serviceType) {
-        List<T> found = defaultServiceContext.getServices(serviceType);
+        return  getServices(serviceType, ServiceContext.defaultClassLoader());
+    }
+
+    /**
+     * Loads and registers services.
+     *
+     * @param <T>         the concrete type.
+     * @param serviceType The service type.
+     * @return the items found, never {@code null}.
+     */
+    @Override
+    public <T> List<T> getServices(final Class<T> serviceType, ClassLoader classLoader) {
+        List<T> found = defaultServiceContext.getServices(serviceType, classLoader);
         BeanManager beanManager = TamayaCDIAccessor.getBeanManager();
         Instance<T> cdiInstances = null;
         if(beanManager!=null){
@@ -159,7 +179,7 @@ public class CDIAwareServiceContext implements ServiceContext {
      *
      * @return the service with the highest {@link Priority#value()}
      *
-     * @throws ConfigException if there are multiple service implementations with the maximum priority
+     * @throws IllegalStateException if there are multiple service implementations with the maximum priority
      */
     private <T> T getServiceWithHighestPriority(Collection<T> services, Class<T> serviceType) {
 
@@ -184,7 +204,7 @@ public class CDIAwareServiceContext implements ServiceContext {
         }
 
         if (highestPriorityServiceCount > 1) {
-            throw new ConfigException(MessageFormat.format("Found {0} implementations for Service {1} with Priority {2}: {3}",
+            throw new IllegalStateException(MessageFormat.format("Found {0} implementations for Service {1} with Priority {2}: {3}",
                     highestPriorityServiceCount,
                     serviceType.getName(),
                     highestPriority,

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredField.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredField.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredField.java
index 3331d9a..5ed58c5 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredField.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredField.java
@@ -16,9 +16,9 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.Configuration;
 import org.apache.tamaya.inject.spi.ConfiguredField;
 
+import javax.config.Config;
 import javax.enterprise.inject.spi.InjectionPoint;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -66,7 +66,7 @@ class CDIConfiguredField implements ConfiguredField{
     }
 
     @Override
-    public void configure(Object instance, Configuration config) {
+    public void configure(Object instance, Config config) {
         throw new UnsupportedOperationException("Use CDI annotations for configuration injection.");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredMethod.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredMethod.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredMethod.java
index c38fc23..8424f00 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredMethod.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredMethod.java
@@ -16,9 +16,9 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.Configuration;
 import org.apache.tamaya.inject.spi.ConfiguredMethod;
 
+import javax.config.Config;
 import javax.enterprise.inject.spi.InjectionPoint;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -79,7 +79,7 @@ public class CDIConfiguredMethod implements ConfiguredMethod{
     }
 
     @Override
-    public void configure(Object instance, Configuration config) {
+    public void configure(Object instance, Config config) {
         throw new UnsupportedOperationException("Use CDI annotations for configuration injection.");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredType.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredType.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredType.java
index 0c7e34a..c5fae2f 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredType.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/CDIConfiguredType.java
@@ -16,11 +16,11 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.Configuration;
 import org.apache.tamaya.inject.spi.ConfiguredField;
 import org.apache.tamaya.inject.spi.ConfiguredMethod;
 import org.apache.tamaya.inject.spi.ConfiguredType;
 
+import javax.config.Config;
 import javax.enterprise.inject.spi.InjectionPoint;
 import java.lang.reflect.Field;
 import java.lang.reflect.Member;
@@ -65,7 +65,7 @@ class CDIConfiguredType implements ConfiguredType{
     }
 
     @Override
-    public void configure(Object instance, Configuration config) {
+    public void configure(Object instance, Config config) {
         throw new UnsupportedOperationException("Use CDI annotations for configuration injection.");
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigProducer.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigProducer.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigProducer.java
new file mode 100644
index 0000000..10e92dc
--- /dev/null
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigProducer.java
@@ -0,0 +1,200 @@
+/*
+ * 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.cdi;
+
+import org.apache.tamaya.base.convert.ConversionContext;
+import org.apache.tamaya.base.convert.ConverterManager;
+import org.apache.tamaya.functions.Supplier;
+import org.apache.tamaya.inject.api.ConfigDefaultSections;
+import org.apache.tamaya.inject.api.DynamicValue;
+import org.apache.tamaya.inject.api.WithConverter;
+import org.apache.tamaya.spi.ConfigContextSupplier;
+import org.apache.tamaya.spi.TypeLiteral;
+
+import javax.config.Config;
+import javax.config.ConfigProvider;
+import javax.config.inject.ConfigProperty;
+import javax.config.spi.ConfigBuilder;
+import javax.config.spi.ConfigProviderResolver;
+import javax.config.spi.Converter;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.inject.Provider;
+import java.lang.reflect.*;
+import java.util.List;
+import java.util.Optional;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Producer bean for configuration properties.
+ */
+@ApplicationScoped
+public class ConfigProducer {
+
+    private static final Logger LOGGER = Logger.getLogger(ConfigProducer.class.getName());
+
+    private DynamicValue createDynamicValue(final InjectionPoint injectionPoint) {
+        Member member = injectionPoint.getMember();
+        if (member instanceof Field) {
+            return DefaultDynamicValue.of(injectionPoint.getBean(), (Field) member, ConfigProvider.getConfig());
+        } else if (member instanceof Method) {
+            return DefaultDynamicValue.of(injectionPoint.getBean(), (Method) member, ConfigProvider.getConfig());
+        }
+        return null;
+    }
+
+    @Produces
+    @ConfigProperty
+    public Object resolveAndConvert(final InjectionPoint injectionPoint) {
+        if (DynamicValue.class.equals(injectionPoint.getAnnotated().getBaseType())) {
+            return createDynamicValue(injectionPoint);
+        }
+        final ConfigProperty annotation = injectionPoint.getAnnotated().getAnnotation(ConfigProperty.class);
+        final ConfigDefaultSections typeAnnot = injectionPoint.getMember().getDeclaringClass().getAnnotation(ConfigDefaultSections.class);
+        final List<String> keys = TamayaCDIInjectionExtension.evaluateKeys(injectionPoint.getMember().getName(),
+                annotation != null ? new String[]{annotation.name()} : null,
+                typeAnnot != null ? typeAnnot.value() : null);
+
+        Converter customConverter = null;
+        final WithConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithConverter.class);
+        if (withConverterAnnot != null) {
+            customConverter = TamayaCDIInjectionExtension.CUSTOM_CONVERTERS.get(withConverterAnnot.value());
+        }
+        String defaultTextValue = null;
+        if(annotation!=null && !annotation.defaultValue().equals(ConfigProperty.UNCONFIGURED_VALUE)){
+            defaultTextValue = annotation.defaultValue();
+        }
+        Config config = ConfigProvider.getConfig();
+//        final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
+//        ConfigOperator operator = null;
+//        if (withOperatorAnnot != null) {
+//            operator = TamayaCDIInjectionExtension.CUSTOM_OPERATORS.get(withOperatorAnnot.value());
+//        }
+//        config = Objects.requireNonNull(operator.apply(config));
+
+        Optional<String> textValue = Optional.empty();
+        // Try to esolve using type, non present is possible, conversion issues are errors.
+        String keyFound = null;
+        for(String key:keys) {
+            textValue = config.getOptionalValue(key, String.class);
+            if(textValue.isPresent()) {
+                keyFound = key;
+                break;
+            }
+        }
+        LOGGER.info("Converting config value found for " + injectionPoint );
+        ConversionContext conversionContext = createConversionContext(keyFound, keys, config, injectionPoint);
+
+        Object value = convertValue(textValue.orElse(defaultTextValue), conversionContext, customConverter);
+        if (value == null) {
+            throw new IllegalArgumentException(String.format(
+                    "Can't resolve any of the possible config keys: %s to the required target type: %s, supported formats: %s",
+                    keys, conversionContext.getTargetType(), conversionContext.getSupportedFormats().toString()));
+        }
+        LOGGER.finest(String.format("Injecting %s for key %s in class %s", keyFound, value.toString(), injectionPoint.toString()));
+        if(TypeLiteral.of(injectionPoint.getAnnotated().getBaseType()).getRawType().equals(Optional.class)){
+            return Optional.ofNullable(value);
+        }
+        return value;
+    }
+
+//    private Class getClass(Type baseType) {
+//        if(baseType instanceof Class){
+//            return Class.class.cast(baseType);
+//        }else if(baseType instanceof ParameterizedType){
+//            return getClass(((ParameterizedType)baseType).getRawType());
+//        }else{
+//            try {
+//                return Class.forName(baseType.getTypeName());
+//            } catch (ClassNotFoundException e) {
+//                throw new IllegalArgumentException("Not a class tape: " + baseType.getTypeName());
+//            }
+//        }
+//    }
+
+    static ConversionContext createConversionContext(String key, List<String> keys, Config config, InjectionPoint injectionPoint) {
+        final Type targetType = resolveTargetType(injectionPoint.getAnnotated().getBaseType());
+        ConversionContext.Builder builder = new ConversionContext.Builder(config, key, targetType);
+        if (injectionPoint.getMember() instanceof Field) {
+            Field annotated = (Field)injectionPoint.getMember();
+            if(annotated.isAnnotationPresent(ConfigProperty.class)) {
+                builder.setAnnotatedElement(annotated);
+            }
+        }else if(injectionPoint.getMember() instanceof Method){
+            Method method = (Method)injectionPoint.getMember();
+            for(Type type:method.getParameterTypes()){
+                if(type instanceof AnnotatedElement){
+                    AnnotatedElement annotated = (AnnotatedElement)type;
+                    if(annotated.isAnnotationPresent(ConfigProperty.class)) {
+                        builder.setAnnotatedElement(annotated);
+                    }
+                }
+            }
+        }
+        return builder.build();
+    }
+
+    private static <T> T convertValue(String textValue, ConversionContext conversionContext,
+                               Converter<T> customConverter) {
+        try {
+            ConversionContext.setContext(conversionContext);
+            if(customConverter!=null) {
+                return customConverter.convert(textValue);
+            }
+
+            if(conversionContext.getConfiguration() instanceof ConfigContextSupplier){
+                try {
+                    return ConverterManager.defaultInstance().convertValue(textValue, conversionContext.getTargetType(),
+                            ((ConfigContextSupplier) conversionContext.getConfiguration()).getConfigContext()
+                                    .getConverters(conversionContext.getTargetType()));
+                }catch(IllegalArgumentException e){
+                    return null;
+                }
+            }
+            return ConverterManager.defaultInstance().convertValue(textValue, conversionContext.getTargetType());
+        }finally{
+            ConversionContext.reset();
+        }
+    }
+
+    private static Type resolveTargetType(Type targetType) {
+        if(targetType instanceof ParameterizedType){
+            ParameterizedType pt = (ParameterizedType)targetType;
+            if(Provider.class.equals(pt.getRawType()) || Supplier.class.equals(pt.getRawType())
+                    || Instance.class.equals(pt.getRawType())
+                    || Optional.class.equals(pt.getRawType())){
+               return pt.getActualTypeArguments()[0];
+            }
+        }
+        return targetType;
+    }
+
+
+    @Produces
+    public Config getConfig(){
+        return ConfigProvider.getConfig();
+    }
+
+    @Produces
+    public ConfigBuilder getConfigBuilder(){
+        return ConfigProviderResolver.instance().getBuilder();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
deleted file mode 100644
index fdcf995..0000000
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java
+++ /dev/null
@@ -1,202 +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.cdi;
-
-import org.apache.tamaya.*;
-import org.apache.tamaya.inject.api.*;
-import org.apache.tamaya.spi.*;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Provider;
-import java.lang.reflect.*;
-import java.util.List;
-import java.util.Optional;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Producer bean for configuration properties.
- */
-@ApplicationScoped
-public class ConfigurationProducer {
-
-    private static final Logger LOGGER = Logger.getLogger(ConfigurationProducer.class.getName());
-
-    private DynamicValue createDynamicValue(final InjectionPoint injectionPoint) {
-        Member member = injectionPoint.getMember();
-        if (member instanceof Field) {
-            return DefaultDynamicValue.of(injectionPoint.getBean(), (Field) member, ConfigurationProvider.getConfiguration());
-        } else if (member instanceof Method) {
-            return DefaultDynamicValue.of(injectionPoint.getBean(), (Method) member, ConfigurationProvider.getConfiguration());
-        }
-        return null;
-    }
-
-    @Produces
-    @Config
-    public Object resolveAndConvert(final InjectionPoint injectionPoint) {
-        if (DynamicValue.class.equals(injectionPoint.getAnnotated().getBaseType())) {
-            return createDynamicValue(injectionPoint);
-        }
-        final Config annotation = injectionPoint.getAnnotated().getAnnotation(Config.class);
-        final ConfigDefaultSections typeAnnot = injectionPoint.getMember().getDeclaringClass().getAnnotation(ConfigDefaultSections.class);
-        final List<String> keys = TamayaCDIInjectionExtension.evaluateKeys(injectionPoint.getMember().getName(),
-                annotation != null ? annotation.value() : null,
-                typeAnnot != null ? typeAnnot.value() : null);
-
-        final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
-        ConfigOperator operator = null;
-        if (withOperatorAnnot != null) {
-            operator = TamayaCDIInjectionExtension.CUSTOM_OPERATORS.get(withOperatorAnnot.value());
-        }
-        PropertyConverter customConverter = null;
-        final WithPropertyConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithPropertyConverter.class);
-        if (withConverterAnnot != null) {
-            customConverter = TamayaCDIInjectionExtension.CUSTOM_CONVERTERS.get(withConverterAnnot.value());
-        }
-
-        // unless the extension is not installed, this should never happen because the extension
-        // enforces the resolvability of the config
-
-        String defaultTextValue = annotation.defaultValue().equals(Config.UNCONFIGURED_VALUE) ? null : annotation.defaultValue();
-        String textValue = null;
-        Configuration config = ConfigurationProvider.getConfiguration();
-        if(operator!=null) {
-            config = config.with(operator);
-        }
-        String keyFound = null;
-        for(String key:keys) {
-            textValue = config.get(key);
-            if(textValue!=null) {
-                keyFound = key;
-                break;
-            }
-        }
-        if(textValue==null) {
-            LOGGER.info("Using default value: '" + defaultTextValue + "' for IP: " + injectionPoint );
-            textValue = defaultTextValue;
-        }
-        ConversionContext conversionContext = createConversionContext(keyFound, keys, injectionPoint);
-        Object value = convertValue(textValue, conversionContext, injectionPoint, customConverter);
-        if (value == null) {
-            throw new ConfigException(String.format(
-                    "Can't resolve any of the possible config keys: %s to the required target type: %s, supported formats: %s",
-                    keys, conversionContext.getTargetType(), conversionContext.getSupportedFormats().toString()));
-        }
-        LOGGER.finest(String.format("Injecting %s for key %s in class %s", keyFound, value.toString(), injectionPoint.toString()));
-        return value;
-    }
-
-    static ConversionContext createConversionContext(String key, List<String> keys, InjectionPoint injectionPoint) {
-        final Type targetType = injectionPoint.getAnnotated().getBaseType();
-        Configuration config = ConfigurationProvider.getConfiguration();
-        ConversionContext.Builder builder = new ConversionContext.Builder(config,
-                ConfigurationProvider.getConfiguration().getContext(), key, TypeLiteral.of(targetType));
-        // builder.setKeys(keys);
-        if(targetType instanceof ParameterizedType){
-            ParameterizedType pt = (ParameterizedType)targetType;
-            if(pt.getRawType().equals(Provider.class)) {
-                builder.setTargetType(
-                        TypeLiteral.of(pt.getActualTypeArguments()[0]));
-            }
-        }
-        if (injectionPoint.getMember() instanceof Field) {
-            Field annotated = (Field)injectionPoint.getMember();
-            if(annotated.isAnnotationPresent(Config.class)) {
-                builder.setAnnotatedElement(annotated);
-            }
-        }else if(injectionPoint.getMember() instanceof Method){
-            Method method = (Method)injectionPoint.getMember();
-            for(Type type:method.getParameterTypes()){
-                if(type instanceof AnnotatedElement){
-                    AnnotatedElement annotated = (AnnotatedElement)type;
-                    if(annotated.isAnnotationPresent(Config.class)) {
-                        builder.setAnnotatedElement(annotated);
-                    }
-                }
-            }
-        }
-        return builder.build();
-    }
-
-    static Object convertValue(String textValue, ConversionContext conversionContext, InjectionPoint injectionPoint,
-                               PropertyConverter customConverter) {
-        if (customConverter != null) {
-            return customConverter.convert(textValue, conversionContext);
-        }
-        if(String.class.equals(conversionContext.getTargetType().getRawType())){
-            return textValue;
-        }
-        Object value = null;
-        ParameterizedType pt = null;
-        Type toType = injectionPoint.getAnnotated().getBaseType();
-        if(toType instanceof ParameterizedType){
-            pt = (ParameterizedType)toType;
-            if(Provider.class.equals(pt.getRawType()) || Instance.class.equals(pt.getRawType())
-                    || Optional.class.equals(pt.getRawType())){
-                toType = pt.getActualTypeArguments()[0];
-            }
-            if(toType.equals(String.class)){
-                value = textValue;
-            }
-        }
-        List<PropertyConverter<Object>> converters = ConfigurationProvider.getConfiguration().getContext()
-                .getPropertyConverters(TypeLiteral.of(toType));
-        for (PropertyConverter<Object> converter : converters) {
-            try {
-                value = converter.convert(textValue, conversionContext);
-                if (value != null) {
-                    LOGGER.log(Level.INFO, "Parsed value from '" + textValue + "' into " +
-                            injectionPoint);
-                    break;
-                }
-            } catch (Exception e) {
-                LOGGER.log(Level.INFO, "Failed to convert value '" + textValue + "' for " +
-                        injectionPoint, e);
-            }
-        }
-        if(pt != null && Optional.class.equals(pt.getRawType())){
-            return Optional.ofNullable(value);
-        }
-        return value;
-    }
-
-    @Produces
-    public Configuration getConfiguration(){
-        return ConfigurationProvider.getConfiguration();
-    }
-
-    @Produces
-    public ConfigurationContext getConfigurationContext(){
-        return ConfigurationProvider.getConfiguration().getContext();
-    }
-
-    @Deprecated
-    @Produces
-    public ConfigurationContextBuilder getConfigurationContextBuilder(){
-        return ConfigurationProvider.getConfigurationContextBuilder();
-    }
-
-    @Produces
-    public ConfigurationBuilder getConfigurationBuilder(){
-        return ConfigurationProvider.getConfigurationBuilder();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/DefaultDynamicValue.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/DefaultDynamicValue.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/DefaultDynamicValue.java
index 8c6dfee..6b31196 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/DefaultDynamicValue.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/DefaultDynamicValue.java
@@ -18,17 +18,15 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.inject.api.DynamicValue;
 import org.apache.tamaya.inject.api.LoadPolicy;
 import org.apache.tamaya.inject.api.UpdatePolicy;
-import org.apache.tamaya.inject.api.WithPropertyConverter;
+import org.apache.tamaya.inject.api.WithConverter;
 import org.apache.tamaya.inject.spi.BaseDynamicValue;
-import org.apache.tamaya.inject.spi.InjectionUtils;
-import org.apache.tamaya.spi.PropertyConverter;
+import org.apache.tamaya.inject.spi.InjectionEvaluator;
 
+import javax.config.Config;
+import javax.config.spi.Converter;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
@@ -55,12 +53,12 @@ final class DefaultDynamicValue<T> extends BaseDynamicValue<T> {
      * Back reference to the base configuration instance. This reference is used reevalaute the given property and
      * compare the result with the previous value after a configuration change was triggered.
      */
-    private final Configuration configuration;
+    private final Config configuration;
 
     /**
      * The property converter to be applied, may be null. In the ladder case targetType is not null.
      */
-    private final PropertyConverter<T> customConverter;
+    private final Converter<T> customConverter;
     /**
      * Load policy.
      */
@@ -75,8 +73,8 @@ final class DefaultDynamicValue<T> extends BaseDynamicValue<T> {
      * @param targetType        the target type, not null.
      * @param customConverter the optional converter to be used.
      */
-    private DefaultDynamicValue(Object owner, String propertyName, Configuration configuration, TypeLiteral<T> targetType,
-                                PropertyConverter<T> customConverter, List<String> keys, LoadPolicy loadPolicy,
+    private DefaultDynamicValue(Object owner, String propertyName, Config configuration, Type targetType,
+                                Converter<T> customConverter, List<String> keys, LoadPolicy loadPolicy,
                                 UpdatePolicy updatePolicy) {
         super(owner, propertyName, targetType, keys);
         this.configuration = Objects.requireNonNull(configuration);
@@ -88,103 +86,104 @@ final class DefaultDynamicValue<T> extends BaseDynamicValue<T> {
         }
     }
 
-    public static DynamicValue of(Object owner, Field annotatedField, Configuration configuration) {
+    public static DynamicValue of(Object owner, Field annotatedField, Config configuration) {
         return of(owner, annotatedField, configuration, LoadPolicy.ALWAYS, UpdatePolicy.IMMEDIATE);
     }
 
-    public static DynamicValue of(Object owner, Field annotatedField, Configuration configuration, LoadPolicy loadPolicy) {
+    public static DynamicValue of(Object owner, Field annotatedField, Config configuration, LoadPolicy loadPolicy) {
         return of(owner, annotatedField, configuration, loadPolicy, UpdatePolicy.IMMEDIATE);
     }
 
-    public static DynamicValue of(Object owner, Field annotatedField, Configuration configuration, UpdatePolicy updatePolicy) {
+    public static DynamicValue of(Object owner, Field annotatedField, Config configuration, UpdatePolicy updatePolicy) {
         return of(owner, annotatedField, configuration, LoadPolicy.ALWAYS, updatePolicy);
     }
 
-    public static DynamicValue of(Object owner, Field annotatedField, Configuration configuration, LoadPolicy loadPolicy, UpdatePolicy updatePolicy) {
+    public static DynamicValue of(Object owner, Field annotatedField, Config configuration, LoadPolicy loadPolicy,
+                                  UpdatePolicy updatePolicy) {
         // Check for adapter/filter
         Type targetType = annotatedField.getGenericType();
         if (targetType == null) {
-            throw new ConfigException("Failed to evaluate target type for " + annotatedField.getDeclaringClass().getName()
+            throw new IllegalArgumentException("Failed to evaluate target type for " + annotatedField.getDeclaringClass().getName()
                     + '.' + annotatedField.getName());
         }
         if (targetType instanceof ParameterizedType) {
             ParameterizedType pt = (ParameterizedType) targetType;
             Type[] types = pt.getActualTypeArguments();
             if (types.length != 1) {
-                throw new ConfigException("Failed to evaluate target type for " + annotatedField.getDeclaringClass().getName()
+                throw new IllegalArgumentException("Failed to evaluate target type for " + annotatedField.getDeclaringClass().getName()
                         + '.' + annotatedField.getName());
             }
             targetType = types[0];
         }
-        PropertyConverter<?> propertyConverter = null;
-        WithPropertyConverter annot = annotatedField.getAnnotation(WithPropertyConverter.class);
+        Converter<?> propertyConverter = null;
+        WithConverter annot = annotatedField.getAnnotation(WithConverter.class);
         if (annot != null) {
             try {
                 propertyConverter = annot.value().newInstance();
             } catch (Exception e) {
-                throw new ConfigException("Failed to instantiate annotated PropertyConverter on " +
+                throw new IllegalArgumentException("Failed to instantiate annotated Converter on " +
                         annotatedField.getDeclaringClass().getName()
                         + '.' + annotatedField.getName(), e);
             }
         }
-        List<String> keys = InjectionUtils.getKeys(annotatedField);
+        List<String> keys = InjectionEvaluator.getKeys(annotatedField);
         return new DefaultDynamicValue(owner, annotatedField.getName(), configuration,
-                TypeLiteral.of(targetType), propertyConverter, keys, loadPolicy, updatePolicy);
+                targetType, propertyConverter, keys, loadPolicy, updatePolicy);
     }
 
-    public static DynamicValue of(Object owner, Method method, Configuration configuration) {
+    public static DynamicValue of(Object owner, Method method, Config configuration) {
         return of(owner, method, configuration, LoadPolicy.ALWAYS, UpdatePolicy.IMMEDIATE);
     }
 
-    public static DynamicValue of(Object owner, Method method, Configuration configuration, UpdatePolicy updatePolicy) {
+    public static DynamicValue of(Object owner, Method method, Config configuration, UpdatePolicy updatePolicy) {
         return of(owner, method, configuration, LoadPolicy.ALWAYS, updatePolicy);
     }
 
-    public static DynamicValue of(Object owner, Method method, Configuration configuration, LoadPolicy loadPolicy) {
+    public static DynamicValue of(Object owner, Method method, Config configuration, LoadPolicy loadPolicy) {
         return of(owner, method, configuration, loadPolicy, UpdatePolicy.IMMEDIATE);
     }
 
-    public static DynamicValue of(Object owner, Method method, Configuration configuration, LoadPolicy loadPolicy, UpdatePolicy updatePolicy) {
+    public static DynamicValue of(Object owner, Method method, Config configuration, LoadPolicy loadPolicy, UpdatePolicy updatePolicy) {
         // Check for adapter/filter
         Type targetType = method.getGenericReturnType();
         if (targetType == null) {
-            throw new ConfigException("Failed to evaluate target type for " + method.getDeclaringClass()
+            throw new IllegalArgumentException("Failed to evaluate target type for " + method.getDeclaringClass()
                     .getName() + '.' + method.getName());
         }
         if (targetType instanceof ParameterizedType) {
             ParameterizedType pt = (ParameterizedType) targetType;
             Type[] types = pt.getActualTypeArguments();
             if (types.length != 1) {
-                throw new ConfigException("Failed to evaluate target type for " + method.getDeclaringClass()
+                throw new IllegalArgumentException("Failed to evaluate target type for " + method.getDeclaringClass()
                         .getName() + '.' + method.getName());
             }
             targetType = types[0];
         }
-        PropertyConverter<Object> propertyConverter = null;
-        WithPropertyConverter annot = method.getAnnotation(WithPropertyConverter.class);
+        Converter<Object> propertyConverter = null;
+        WithConverter annot = method.getAnnotation(WithConverter.class);
         if (annot != null) {
             try {
-                propertyConverter = (PropertyConverter<Object>) annot.value().newInstance();
+                propertyConverter = (Converter<Object>) annot.value().newInstance();
             } catch (Exception e) {
-                throw new ConfigException("Failed to instantiate annotated PropertyConverter on " +
+                throw new IllegalArgumentException("Failed to instantiate annotated Converter on " +
                         method.getDeclaringClass().getName()
                         + '.' + method.getName(), e);
             }
         }
         return new DefaultDynamicValue<>(owner, method.getName(),
-                configuration, TypeLiteral.of(targetType), propertyConverter, InjectionUtils.getKeys(method),
+                configuration, targetType, propertyConverter, InjectionEvaluator.getKeys(method),
                 loadPolicy, updatePolicy);
     }
 
 
     @Override
-    protected Configuration getConfiguration() {
+    protected Config getConfiguration() {
         return configuration;
     }
 
 
     @Override
-    protected PropertyConverter<T> getCustomConverter() {
+    protected Converter<T> getCustomConverter() {
         return customConverter;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java
index f5a5f6c..f56c199 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ServiceLoaderServiceContext.java
@@ -18,9 +18,8 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.base.PriorityServiceComparator;
 import org.apache.tamaya.spi.ServiceContext;
-import org.apache.tamaya.spisupport.PriorityServiceComparator;
 
 import javax.annotation.Priority;
 import java.io.IOException;
@@ -49,6 +48,11 @@ final class ServiceLoaderServiceContext implements ServiceContext {
 
     @Override
     public <T> T getService(Class<T> serviceType) {
+        return getService(serviceType, ServiceContext.defaultClassLoader());
+    }
+
+    @Override
+    public <T> T getService(Class<T> serviceType, ClassLoader classLoader) {
         Object cached = singletons.get(serviceType);
         if (cached == null) {
             cached = create(serviceType);
@@ -61,9 +65,15 @@ final class ServiceLoaderServiceContext implements ServiceContext {
 
     @Override
     public <T> T create(Class<T> serviceType) {
+        return create(serviceType, ServiceContext.defaultClassLoader());
+    }
+
+    @Override
+    public <T> T create(Class<T> serviceType, ClassLoader classLoader) {
+        @SuppressWarnings("unchecked")
         Class<? extends T> implType = factoryTypes.get(serviceType);
         if(implType==null) {
-            Collection<T> services = getServices(serviceType);
+            Collection<T> services = getServices(serviceType, classLoader);
             if (services.isEmpty()) {
                 return null;
             } else {
@@ -87,13 +97,25 @@ final class ServiceLoaderServiceContext implements ServiceContext {
      */
     @Override
     public <T> List<T> getServices(final Class<T> serviceType) {
+        return  getServices(serviceType, ServiceContext.defaultClassLoader());
+    }
+
+    /**
+     * Loads and registers services.
+     *
+     * @param <T>         the concrete type.
+     * @param serviceType The service type.
+     * @return the items found, never {@code null}.
+     */
+    @Override
+    public <T> List<T> getServices(final Class<T> serviceType, ClassLoader classLoader) {
         List<T> found = (List<T>) servicesLoaded.get(serviceType);
         if (found != null) {
             return found;
         }
         List<T> services = new ArrayList<>();
         try {
-            for (T t : ServiceLoader.load(serviceType)) {
+            for (T t : ServiceLoader.load(serviceType, classLoader)) {
                 services.add(t);
             }
             Collections.sort(services, PriorityServiceComparator.getInstance());
@@ -130,7 +152,7 @@ final class ServiceLoaderServiceContext implements ServiceContext {
      *
      * @return the service with the highest {@link Priority#value()}
      *
-     * @throws ConfigException if there are multiple service implementations with the maximum priority
+     * @throws IllegalStateException if there are multiple service implementations with the maximum priority
      */
     private <T> T getServiceWithHighestPriority(Collection<T> services, Class<T> serviceType) {
         T highestService = null;
@@ -156,7 +178,7 @@ final class ServiceLoaderServiceContext implements ServiceContext {
         }
 
         if (highestPriorityServiceCount > 1) {
-            throw new ConfigException(MessageFormat.format("Found {0} implementations for Service {1} with Priority {2}: {3}",
+            throw new IllegalStateException(MessageFormat.format("Found {0} implementations for Service {1} with Priority {2}: {3}",
                     highestPriorityServiceCount,
                     serviceType.getName(),
                     highestPriority,

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaCDIInjectionExtension.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaCDIInjectionExtension.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaCDIInjectionExtension.java
index 2485f05..2d95401 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaCDIInjectionExtension.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaCDIInjectionExtension.java
@@ -16,14 +16,11 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.inject.api.Config;
 import org.apache.tamaya.inject.api.ConfigDefaultSections;
-import org.apache.tamaya.inject.api.WithConfigOperator;
-import org.apache.tamaya.inject.api.WithPropertyConverter;
-import org.apache.tamaya.spi.PropertyConverter;
+import org.apache.tamaya.inject.api.WithConverter;
 
+import javax.config.inject.ConfigProperty;
+import javax.config.spi.Converter;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Instance;
@@ -39,16 +36,15 @@ import java.util.logging.Logger;
 /**
  * CDI Extension module that adds injection mechanism for configuration.
  *
- * @see Config
+ * @see javax.config.inject.ConfigProperty
  * @see ConfigDefaultSections
- * @see ConfigException
  */
 public class TamayaCDIInjectionExtension implements Extension {
 
     private static final Logger LOG = Logger.getLogger(TamayaCDIInjectionExtension.class.getName());
 
-    static final Map<Class, ConfigOperator> CUSTOM_OPERATORS = new ConcurrentHashMap<>();
-    static final Map<Class, PropertyConverter> CUSTOM_CONVERTERS = new ConcurrentHashMap<>();
+//    static final Map<Class, ConfigOperator> CUSTOM_OPERATORS = new ConcurrentHashMap<>();
+    static final Map<Class, Converter> CUSTOM_CONVERTERS = new ConcurrentHashMap<>();
 
     private final Set<Type> types = new HashSet<>();
     private Bean<?> tamayaProducerBean;
@@ -72,18 +68,18 @@ public class TamayaCDIInjectionExtension implements Extension {
 
         boolean configured = false;
         for (InjectionPoint injectionPoint : ips) {
-            if (injectionPoint.getAnnotated().isAnnotationPresent(Config.class)) {
+            if (injectionPoint.getAnnotated().isAnnotationPresent(ConfigProperty.class)) {
                 LOG.fine("Configuring: " + injectionPoint);
-                final Config annotation = injectionPoint.getAnnotated().getAnnotation(Config.class);
+                final ConfigProperty annotation = injectionPoint.getAnnotated().getAnnotation(ConfigProperty.class);
                 final ConfigDefaultSections typeAnnot = injectionPoint.getMember().getDeclaringClass().getAnnotation(ConfigDefaultSections.class);
                 final List<String> keys = evaluateKeys(injectionPoint.getMember().getName(),
-                        annotation!=null?annotation.value():null,
+                        (annotation!=null && !annotation.name().isEmpty())?new String[]{annotation.name()}:null,
                         typeAnnot!=null?typeAnnot.value():null);
-                final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
-                if(withOperatorAnnot!=null){
-                    tryLoadOpererator(withOperatorAnnot.value());
-                }
-                final WithPropertyConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithPropertyConverter.class);
+//                final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
+//                if(withOperatorAnnot!=null){
+//                    tryLoadOpererator(withOperatorAnnot.value());
+//                }
+                final WithConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithConverter.class);
                 if(withConverterAnnot!=null){
                     tryLoadConverter(withConverterAnnot.value());
                 }
@@ -102,7 +98,7 @@ public class TamayaCDIInjectionExtension implements Extension {
 
 
     public void captureConvertBean(@Observes final ProcessProducerMethod<?, ?> ppm) {
-        if (ppm.getAnnotated().isAnnotationPresent(Config.class)) {
+        if (ppm.getAnnotated().isAnnotationPresent(ConfigProperty.class)) {
             tamayaProducerBean = ppm.getBean();
         }
     }
@@ -123,23 +119,23 @@ public class TamayaCDIInjectionExtension implements Extension {
         return type;
     }
 
-    private void tryLoadOpererator(Class<? extends ConfigOperator> operatorClass) {
-        Objects.requireNonNull(operatorClass);
-        if(ConfigOperator.class == operatorClass){
-            return;
-        }
-        try{
-            if(!CUSTOM_OPERATORS.containsKey(operatorClass)) {
-                CUSTOM_OPERATORS.put(operatorClass, operatorClass.newInstance());
-            }
-        } catch(Exception e){
-            throw new ConfigException("Custom ConfigOperator could not be loaded: " + operatorClass.getName(), e);
-        }
-    }
-
-    private void tryLoadConverter(Class<? extends PropertyConverter> converterClass) {
+//    private void tryLoadOpererator(Class<? extends ConfigOperator> operatorClass) {
+//        Objects.requireNonNull(operatorClass);
+//        if(ConfigOperator.class == operatorClass){
+//            return;
+//        }
+//        try{
+//            if(!CUSTOM_OPERATORS.containsKey(operatorClass)) {
+//                CUSTOM_OPERATORS.put(operatorClass, operatorClass.newInstance());
+//            }
+//        } catch(Exception e){
+//            throw new ConfigException("Custom ConfigOperator could not be loaded: " + operatorClass.getName(), e);
+//        }
+//    }
+
+    private void tryLoadConverter(Class<? extends Converter> converterClass) {
         Objects.requireNonNull(converterClass);
-        if(PropertyConverter.class == converterClass){
+        if(Converter.class == converterClass){
             return;
         }
         try{
@@ -147,7 +143,7 @@ public class TamayaCDIInjectionExtension implements Extension {
                 CUSTOM_CONVERTERS.put(converterClass, converterClass.newInstance());
             }
         } catch(Exception e){
-            throw new ConfigException("Custom PropertyConverter could not be loaded: " + converterClass.getName(), e);
+            throw new IllegalArgumentException("Custom PropertyConverter could not be loaded: " + converterClass.getName(), e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaSEInjectionExtension.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaSEInjectionExtension.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaSEInjectionExtension.java
index 024b895..6ab73b0 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaSEInjectionExtension.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/TamayaSEInjectionExtension.java
@@ -20,9 +20,9 @@ package org.apache.tamaya.cdi;
 
 
 import org.apache.tamaya.inject.ConfigurationInjection;
-import org.apache.tamaya.inject.api.Config;
 import org.apache.tamaya.inject.api.ConfigDefaultSections;
 
+import javax.config.inject.ConfigProperty;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Vetoed;
@@ -92,13 +92,13 @@ public final class TamayaSEInjectionExtension implements Extension {
         }
         // if no class level annotation is there we might have field level annotations only
         for (Field field : type.getDeclaredFields()) {
-            if (field.isAnnotationPresent(Config.class) && !field.isAnnotationPresent(Inject.class)) {
+            if (field.isAnnotationPresent(ConfigProperty.class) && !field.isAnnotationPresent(Inject.class)) {
                 return true;
             }
         }
         // if no class level annotation is there we might have method level annotations only
         for (Method method : type.getDeclaredMethods()) {
-            if(method.isAnnotationPresent(Config.class)) {
+            if(method.isAnnotationPresent(ConfigProperty.class)) {
                 return true;
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtension.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtension.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtension.java
index e86ee89..93fbdd2 100644
--- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtension.java
+++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/extra/ConfiguredVetoExtension.java
@@ -18,8 +18,7 @@
  */
 package org.apache.tamaya.cdi.extra;
 
-import org.apache.tamaya.ConfigurationProvider;
-
+import javax.config.ConfigProvider;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.ProcessAnnotatedType;
@@ -31,7 +30,7 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType;
 public class ConfiguredVetoExtension implements Extension {
 
     public void observesBean(@Observes ProcessAnnotatedType<?> type) {
-        String vetoedTypesVal = ConfigurationProvider.getConfiguration().get("javax.enterprise.inject.vetoed");
+        String vetoedTypesVal = ConfigProvider.getConfig().getValue("javax.enterprise.inject.vetoed", String.class);
         String[] vetoedTypes = vetoedTypesVal.split(",");
         for (String typeExpr : vetoedTypes) {
             String typeExprTrimmed = typeExpr.trim();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/BaseTestConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/BaseTestConfiguration.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/BaseTestConfiguration.java
index ad762a7..0365195 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/BaseTestConfiguration.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/BaseTestConfiguration.java
@@ -34,10 +34,10 @@ abstract class BaseTestConfiguration {
         return ShrinkWrap.create(WebArchive.class)
                          .addClasses(ConfiguredTest.class, ConfiguredClass.class, InjectedClass.class,
                                      AdditionalMatchers.class, NotFoundNoDefault.class,
-                                     ConfigurationProducer.class)
+                                     ConfigProducer.class)
                          .addAsServiceProvider(Extension.class, TamayaCDIInjectionExtension.class)
                          .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
-                         .addAsWebInfResource("META-INF/javaconfiguration.properties", "META-INF/javaconfiguration.properties");
+                         .addAsWebInfResource("META-INF/javaconfig.properties", "META-INF/javaconfig.properties");
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfigurationProducerTest.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfigurationProducerTest.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfigurationProducerTest.java
index b3459b7..bf7e55a 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfigurationProducerTest.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfigurationProducerTest.java
@@ -23,11 +23,11 @@ import static org.junit.Assert.assertTrue;
 import java.io.File;
 import java.util.Optional;
 
+import javax.config.inject.ConfigProperty;
 import javax.enterprise.inject.spi.Extension;
 import javax.inject.Inject;
 import javax.inject.Provider;
 
-import org.apache.tamaya.inject.api.Config;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.shrinkwrap.api.Archive;
@@ -45,10 +45,10 @@ public class ConfigurationProducerTest {
         return ShrinkWrap.create(WebArchive.class)
                 .addClasses(ConfiguredClass.class, InjectedClass.class,
                         TamayaCDIInjectionExtension.class, TamayaCDIAccessor.class,
-                        org.apache.tamaya.cdi.ConfigurationProducer.class)
+                        org.apache.tamaya.cdi.ConfigProducer.class)
                 .addAsServiceProvider(Extension.class, TamayaCDIInjectionExtension.class)
                 .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
-                .addAsWebInfResource("META-INF/javaconfiguration.properties", "META-INF/javaconfiguration.properties");
+                .addAsWebInfResource("META-INF/javaconfig.properties", "META-INF/javaconfig.properties");
     }
 
     @Inject
@@ -116,51 +116,51 @@ public class ConfigurationProducerTest {
         private Provider<Integer> providerIntegerAsMethodParam;
 
         @Inject
-        @Config(value = "string.value", defaultValue = "defaultString")
+        @ConfigProperty(name = "string.value", defaultValue = "defaultString")
         private String string;
 
         @Inject
-        @Config(value = "string.value", defaultValue = "defaultString")
+        @ConfigProperty(name = "string.value", defaultValue = "defaultString")
         private Optional<String> optionalString;
 
         @Inject
-        @Config(value = "string.value", defaultValue = "defaultString")
+        @ConfigProperty(name = "string.value", defaultValue = "defaultString")
         private Provider<String> providerString;
 
         @Inject
-        @Config(value = "defaultString.value", defaultValue = "defaultString")
+        @ConfigProperty(name = "defaultString.value", defaultValue = "defaultString")
         private String defaultString;
 
         @Inject
-        @Config(value = "file.value", defaultValue = "./")
+        @ConfigProperty(name = "file.value", defaultValue = "./")
         private File file;
 
         @Inject
-        @Config(value = "defaultFile.value", defaultValue = "./")
+        @ConfigProperty(name = "defaultFile.value", defaultValue = "./")
         private File defaultFile;
 
         @Inject
-        @Config(value = "boolean.value", defaultValue = "true")
+        @ConfigProperty(name = "boolean.value", defaultValue = "true")
         private Boolean aBoolean;
 
         @Inject
-        @Config(value = "defaultBoolean.value", defaultValue = "true")
+        @ConfigProperty(name = "defaultBoolean.value", defaultValue = "true")
         private Boolean defaultBoolean;
 
         @Inject
-        @Config(value = "integer.value", defaultValue = "45")
+        @ConfigProperty(name = "integer.value", defaultValue = "45")
         private Integer integer;
 
         @Inject
-        @Config(value = "defaultInteger.value", defaultValue = "45")
+        @ConfigProperty(name = "defaultInteger.value", defaultValue = "45")
         private Integer defaultInteger;
 
         @Inject
-        @Config(value = "integer.value", defaultValue = "45")
+        @ConfigProperty(name = "integer.value", defaultValue = "45")
         private Optional<Integer> optionalInteger;
 
         @Inject
-        @Config(value = "integer.value", defaultValue = "45")
+        @ConfigProperty(name = "integer.value", defaultValue = "45")
         private Provider<Integer> providerInteger;
 
         public String getString() {
@@ -197,32 +197,32 @@ public class ConfigurationProducerTest {
 
 
         @Inject
-        public void setStringAsMethodParam(@Config(value = "string.value", defaultValue = "defaultString") String stringAsMethodParam) {
+        public void setStringAsMethodParam(@ConfigProperty(name = "string.value", defaultValue = "defaultString") String stringAsMethodParam) {
             this.stringAsMethodParam = stringAsMethodParam;
         }
 
         @Inject
-        public void setIntegerAsMethodParam(@Config(value = "integer.value", defaultValue = "45")Integer integerAsMethodParam) {
+        public void setIntegerAsMethodParam(@ConfigProperty(name = "integer.value", defaultValue = "45")Integer integerAsMethodParam) {
             this.integerAsMethodParam = integerAsMethodParam;
         }
 
         @Inject
-        public void setOptionalStringAsMethodParam(@Config(value = "string.value", defaultValue = "defaultString") Optional<String> optionalStringAsMethodParam) {
+        public void setOptionalStringAsMethodParam(@ConfigProperty(name = "string.value", defaultValue = "defaultString") Optional<String> optionalStringAsMethodParam) {
             this.optionalStringAsMethodParam = optionalStringAsMethodParam;
         }
 
         @Inject
-        public void setOptionalIntegerAsMethodParam(@Config(value = "integer.value", defaultValue = "45") Optional<Integer> optionalIntegerAsMethodParam) {
+        public void setOptionalIntegerAsMethodParam(@ConfigProperty(name = "integer.value", defaultValue = "45") Optional<Integer> optionalIntegerAsMethodParam) {
             this.optionalIntegerAsMethodParam = optionalIntegerAsMethodParam;
         }
 
         @Inject
-        public void setProviderStringAsMethodParam(@Config(value = "string.value", defaultValue = "defaultString") Provider<String> providerStringAsMethodParam) {
+        public void setProviderStringAsMethodParam(@ConfigProperty(name = "string.value", defaultValue = "defaultString") Provider<String> providerStringAsMethodParam) {
             this.providerStringAsMethodParam = providerStringAsMethodParam;
         }
 
         @Inject
-        public void setProviderIntegerAsMethodParam(@Config(value = "integer.value", defaultValue = "45") Provider<Integer> providerIntegerAsMethodParam) {
+        public void setProviderIntegerAsMethodParam(@ConfigProperty(name = "integer.value", defaultValue = "45") Provider<Integer> providerIntegerAsMethodParam) {
             this.providerIntegerAsMethodParam = providerIntegerAsMethodParam;
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
index 5d71d5d..29c20c0 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java
@@ -20,8 +20,9 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.inject.api.Config;
+import org.apache.tamaya.inject.api.ConfigFallbackKeys;
 
+import javax.config.inject.ConfigProperty;
 import javax.inject.Singleton;
 import java.math.BigDecimal;
 
@@ -31,34 +32,36 @@ import java.math.BigDecimal;
 @Singleton
 public class ConfiguredClass{
 
-    @Config
+    @ConfigProperty
     private String testProperty;
 
-    @Config(value = {"a.b.c.key1","a.b.c.key2","a.b.c.key3"}, defaultValue = "The current \\${JAVA_HOME} env property is ${env:JAVA_HOME}.")
+    @ConfigProperty(name = "a.b.c.key1", defaultValue = "The current \\${JAVA_HOME} env property is ${env:JAVA_HOME}.")
+    @ConfigFallbackKeys({"a.b.c.key2","a.b.c.key3"})
     String value1;
 
-    @Config({"foo","a.b.c.key2"})
+    @ConfigProperty(name="foo")
+    @ConfigFallbackKeys({"a.b.c.key2"})
     private String value2;
 
-    @Config(defaultValue = "N/A")
+    @ConfigProperty(defaultValue = "N/A")
     private String runtimeVersion;
 
-    @Config(defaultValue = "${sys:java.version}")
+    @ConfigProperty(defaultValue = "${sys:java.version}")
     private String javaVersion2;
 
-    @Config(defaultValue = "5")
+    @ConfigProperty(defaultValue = "5")
     private Integer int1;
 
-    @Config
+    @ConfigProperty
     private int int2;
 
-    @Config
+    @ConfigProperty
     private boolean booleanT;
 
-    @Config("BD")
+    @ConfigProperty(name="BD")
     private BigDecimal bigNumber;
 
-    @Config("double1")
+    @ConfigProperty(name="double1")
     private double doubleValue;
 
     public String getTestProperty() {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredTest.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredTest.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredTest.java
index 8143d95..95435e7 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredTest.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredTest.java
@@ -52,7 +52,7 @@ public class ConfiguredTest extends BaseTestConfiguration {
         assertNotNull(injectedClass.builder1);
         assertNotNull(injectedClass.builder2);
         assertNotNull(injectedClass.config);
-        assertNotNull(injectedClass.configContext);
+        assertNotNull(injectedClass.config2);
     }
 
     @Test
@@ -67,12 +67,6 @@ public class ConfiguredTest extends BaseTestConfiguration {
         assertTrue(injectedClass.config == injectedClass.config2);
     }
 
-    @Test
-    public void test_Injected_configContexts_are_same(){
-        InjectedClass injectedClass =  CDI.current().select(InjectedClass.class).get();
-        assertTrue(injectedClass.configContext == injectedClass.configContext2);
-    }
-
     @Test(expected=Exception.class)
     public void test_error_Injection() {
         NotFoundNoDefault injectedClass = CDI.current().select(NotFoundNoDefault.class).get();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cfb364cd/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/InjectedClass.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/InjectedClass.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/InjectedClass.java
index 3c6ca51..e3d6fa2 100644
--- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/InjectedClass.java
+++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/InjectedClass.java
@@ -19,10 +19,8 @@
  */
 package org.apache.tamaya.cdi;
 
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationBuilder;
-
+import javax.config.Config;
+import javax.config.spi.ConfigBuilder;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
@@ -33,28 +31,21 @@ import javax.inject.Singleton;
 public class InjectedClass {
 
     @Inject
-    Configuration config;
-
-    @Inject
-    Configuration config2;
-
-    @Inject
-    ConfigurationContext configContext;
+    Config config;
 
     @Inject
-    ConfigurationContext configContext2;
+    Config config2;
 
     @Inject
-    ConfigurationBuilder builder1;
+    ConfigBuilder builder1;
 
     @Inject
-    ConfigurationBuilder builder2;
+    ConfigBuilder builder2;
 
     @Override
     public String toString() {
         return "InjectedClass{" +
                 "config=" + config +
-                ", configContext=" + configContext +
                 ", builder1=" + builder1 +
                 ", builder2=" + builder2 +
                 '}';