You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by st...@apache.org on 2014/12/27 14:57:51 UTC

[07/34] incubator-tamaya git commit: first step: move all sources to a 'dormant' directory

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/managed/pom.xml
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/managed/pom.xml b/dormant/modules/integration/managed/pom.xml
new file mode 100644
index 0000000..3b4f5bc
--- /dev/null
+++ b/dormant/modules/integration/managed/pom.xml
@@ -0,0 +1,71 @@
+<!-- 
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.integration</groupId>
+        <artifactId>tamaya-integration-all</artifactId>
+        <version>0.1-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+    <artifactId>tamaya-integration-managed</artifactId>
+    <name>Apache Tamaya Modules Integration - Java Management Extensions</name>
+    <packaging>jar</packaging>
+
+    <properties>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>prepare-agent</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfig.java
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfig.java b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfig.java
new file mode 100644
index 0000000..b991690
--- /dev/null
+++ b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfig.java
@@ -0,0 +1,95 @@
+/*
+ * 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.se;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.AggregationPolicy;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created by Anatole on 24.11.2014.
+ */
+public class ManagedConfig implements ManagedConfigMBean{
+    @Override
+    public Set<String> getConfigurationNames() {
+        return null;
+    }
+
+    @Override
+    public String getConfigurationInfo(String configName) {
+        return null;
+    }
+
+    @Override
+    public boolean isConfigurationAvailable(String configName, String envType, String context) {
+        return false;
+    }
+
+    @Override
+    public boolean isConfigurationLoaded(String configName, String envType, String context) {
+        return false;
+    }
+
+    @Override
+    public Map<String, String> getConfiguration(String configName, String envType, String context) throws ConfigException {
+        return null;
+    }
+
+    @Override
+    public Map<String, String> getRecursiveConfigValues(String area, String configName, String envType, String context) throws ConfigException {
+        return null;
+    }
+
+    @Override
+    public Map<String, String> getConfigValues(String area, String configName, String envType, String context) throws ConfigException {
+        return null;
+    }
+
+    @Override
+    public Map<String, String> updateConfiguration(String configName, String envType, String context, Map<String, String> values, AggregationPolicy aggregationPolicy) throws ConfigException {
+        return null;
+    }
+
+    @Override
+    public String getConfigurationInfo(String configName, String envType, String context) {
+        return null;
+    }
+
+    @Override
+    public Set<String> getAreas(String configName, String envType, String context) {
+        return null;
+    }
+
+    @Override
+    public Set<String> getTransitiveAreas(String configName, String envType, String context) {
+        return null;
+    }
+
+    @Override
+    public boolean isAreaExisting(String area, String configName, String envType, String context) {
+        return false;
+    }
+
+    @Override
+    public boolean isAreaEmpty(String area, String configName, String envType, String context) {
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java
new file mode 100644
index 0000000..c2ade13
--- /dev/null
+++ b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java
@@ -0,0 +1,176 @@
+/*
+ * 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.se;
+
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.AggregationPolicy;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Managed bean interface for accessing environment data.
+ */
+public interface ManagedConfigMBean {
+    /**
+     * Get the names current the configuration's defined.
+     *
+     * @return the names current the configuration's defined.
+     */
+    public Set<String> getConfigurationNames();
+
+    /**
+     * Get a general configuration info descriptor in JSON format for a configuration
+     * type in the following form:
+     * <pre>
+     *     tbd
+     * </pre>
+     *
+     * @param configName the configuration name, not null.
+     * @return a JSON formatted meta-information.
+     */
+    public String getConfigurationInfo(String configName);
+
+    /**
+     * Allows to determine if a configuration current a given type is available (accessible) in the
+     * given environment context.
+     *
+     * @param configName the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return true, if such a configuration is accessible.
+     */
+    public boolean isConfigurationAvailable(String configName, String envType, String envContext);
+
+    /**
+     * Allows to determine if a configuration current a given type is loaded in the
+     * given environment context.
+     *
+     * @param configName the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return true, if such a configuration is accessible.
+     */
+    public boolean isConfigurationLoaded(String configName, String envType, String envContext);
+
+    /**
+     * Accesses a configuration current a given type as Map.
+     *
+     * @param configName the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return true, if such a configuration is accessible.
+     * @throws org.apache.tamaya.ConfigException If the configuration is not yet loaded.
+     */
+    public Map<String, String> getConfiguration(String configName, String envType, String envContext)
+            throws ConfigException;
+
+    /**
+     * Accesses a configuration values for current a given config area as Map.
+     * @param area the target area key, not null.
+     * @param configName the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return the key/values found, including the recursive child values.
+     * @throws org.apache.tamaya.ConfigException If the configuration is not yet loaded.
+     */
+    public Map<String, String> getRecursiveConfigValues(String area, String configName, String envType, String envContext)
+            throws ConfigException;
+
+    /**
+     * Accesses a configuration values for current a given config area as Map.
+     * @param area the target area key, not null.
+     * @param configName the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return the key/values found, not transitive.
+     * @throws org.apache.tamaya.ConfigException If the configuration is not yet loaded.
+     */
+    public Map<String, String> getConfigValues(String area, String configName, String envType, String envContext)
+            throws ConfigException;
+
+    /**
+     * Updates a configuration current a given type.
+     *
+     * @param configName        the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @param values            the values to be changed.
+     * @param aggregationPolicy the aggregation Policy to be used.
+     * @return the configuration after the changesd have been applied.
+     * @throws org.apache.tamaya.ConfigException If the configuration is not yet loaded, or not
+     *                                           mutable.
+     */
+    public Map<String, String> updateConfiguration(String configName, String envType, String envContext, Map<String, String> values, AggregationPolicy aggregationPolicy)
+            throws ConfigException;
+
+    /**
+     * Access a JSON formatted info on a configuration loaded in the form as
+     * <pre>
+     *     tbd
+     * </pre>
+     * @param configName        the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return the JSON formatted info, never null.
+     * @throws org.apache.tamaya.ConfigException If the configuration is not yet loaded
+     */
+    public String getConfigurationInfo(String configName, String envType, String envContext);
+
+    /**
+     * Access the defined areas for a given configuration.
+     * @param configName        the configuration name, not null.
+     * @param envContext        the environment context, not null.
+     * @return the areas defined (only returning the areas that contain properties).
+     * @throws org.apache.tamaya.ConfigException If the configuration is not yet loaded
+     */
+    public Set<String> getAreas(String configName, String envType, String envContext);
+
+    /**
+     * Access the transitive areas for a given configuration.
+     * @param configName        the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return the transitive areas defined.
+     * @throws org.apache.tamaya.ConfigException If the configuration is not yet loaded
+     */
+    public Set<String> getTransitiveAreas(String configName, String envType, String envContext);
+
+    /**
+     * Allows to determine if an area is existing.
+     * @param area the target area key, not null.
+     * @param configName        the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return true, if such an area exists (the area may be empty).
+     */
+    public boolean isAreaExisting(String area, String configName, String envType, String envContext);
+
+    /**
+     * Allows to determine if an area is empty.
+     * @param area the target area key, not null.
+     * @param configName        the configuration name, not null.
+     * @param envType        the environment context, not null.
+     * @param envContext        the environment context, not null.
+     * @return true, if such an area exists and is not empty.
+     */
+    public boolean isAreaEmpty(String area, String configName, String envType, String envContext);
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironment.java
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironment.java b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironment.java
new file mode 100644
index 0000000..e85b1c1
--- /dev/null
+++ b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironment.java
@@ -0,0 +1,69 @@
+/*
+ * 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.se;
+
+import org.apache.tamaya.Environment;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * MBean implementation for accessing environment data.
+ * Created by Anatole on 24.11.2014.
+ */
+public class ManagedEnvironment implements ManagedEnvironmentMBean{
+
+    @Override
+    public List<String> getEnvironmentHierarchy() {
+        return Environment.getEnvironmentHierarchy();
+    }
+
+    @Override
+    public String getEnvironmentInfo(String environmentContext) {
+        try {
+            // TODO
+            return "EnvironmentInfo {}";
+        }
+        catch(Exception e){
+            // TODO logging
+            return "EnvironmentInfo{}";
+        }
+    }
+
+    @Override
+    public Map<String, String> getEnvironment(String environmentType, String context) {
+        try {
+            Optional<Environment> env = Environment.getInstance(environmentType, context);
+            if (env.isPresent()) {
+                return env.get().toMap();
+            }
+        } catch (Exception e) {
+            // TODO logging
+        }
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public String getEnvironmentInfo() {
+        // TODO
+        return "EnvironmentInfo {}";
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironmentMBean.java
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironmentMBean.java b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironmentMBean.java
new file mode 100644
index 0000000..ef3b861
--- /dev/null
+++ b/dormant/modules/integration/managed/src/main/java/org/apache/tamaya/management/ManagedEnvironmentMBean.java
@@ -0,0 +1,88 @@
+/*
+ * 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.se;
+
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Managed bean interface for accessing environment data.
+ */
+public interface ManagedEnvironmentMBean {
+
+    /**
+     * Returns the current environment hierarchy defined.
+     * @see org.apache.tamaya.Environment#getEnvironmentType()
+     * @see org.apache.tamaya.Environment#getEnvironmentHierarchy()
+     * @return the current environment type hierarchy defined, never null.
+     */
+    public List<String> getEnvironmentHierarchy();
+
+    /**
+     * Get the common environment information in JSON format, which has the following form:
+     * <pre>
+     * Environment {
+     *     id: "system:VM,domain:test",
+     *     metaInfo {
+     *         a: "aValue",
+     *         b: "bValue"
+     *     }
+     *     entries{
+     *         val1: "value1",
+     *         val2: "value2",
+     *     }
+     * }
+     * </pre>
+     * @see org.apache.tamaya.Environment
+     * @param environmentContext the identifier to access the environment instance
+     * @return the environment JSON info, or null, if no such environment is accessible.
+     */
+    public String getEnvironmentInfo(String environmentContext);
+
+    /**
+     * Access the given environment as Map. the {@code environmentContext} is added to the
+     * map using the key {@code __environmentId}.
+     * @param environmentContext the identifier to access the environment instance
+     * @param context the context, not null.
+     * @return a map with the currently defined environment keys and values.
+     */
+    public Map<String,String> getEnvironment(String environmentContext, String context);
+
+    /**
+     * Get a general JSON info on the currently available environments current the form:
+     * <pre>
+     *     EnvironmentInfo{
+     *         host: "hostName",
+     *         ipAddress: "111.112.123.123",
+     *         typeHierarchy: {"system", "domain", "ear", "war", "saas-scope", "tenant"}
+     *         environments {
+     *             Environment {
+     *                 id: "system:VM,domain:test",
+     *                 ...
+     *             },
+     *             ...
+     *         }
+     *     }
+     * </pre>
+     * @return
+     */
+    public String getEnvironmentInfo();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/managed/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/managed/src/main/resources/META-INF/beans.xml b/dormant/modules/integration/managed/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..adee378
--- /dev/null
+++ b/dormant/modules/integration/managed/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">
+
+</beans>
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/managed/src/test/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/managed/src/test/resources/META-INF/beans.xml b/dormant/modules/integration/managed/src/test/resources/META-INF/beans.xml
new file mode 100644
index 0000000..adee378
--- /dev/null
+++ b/dormant/modules/integration/managed/src/test/resources/META-INF/beans.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">
+
+</beans>
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/pom.xml
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/pom.xml b/dormant/modules/integration/pom.xml
new file mode 100644
index 0000000..33deee1
--- /dev/null
+++ b/dormant/modules/integration/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>tamaya-ext-all</artifactId>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <version>0.1-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+    <packaging>pom</packaging>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.tamaya.integration</groupId>
+    <artifactId>tamaya-integration-all</artifactId>
+
+    <modules>
+        <module>managed</module>
+        <module>cdi</module>
+        <module>se</module>
+    </modules>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/se/pom.xml
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/se/pom.xml b/dormant/modules/integration/se/pom.xml
new file mode 100644
index 0000000..9958368
--- /dev/null
+++ b/dormant/modules/integration/se/pom.xml
@@ -0,0 +1,71 @@
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.integration</groupId>
+        <artifactId>tamaya-integration-all</artifactId>
+        <version>0.1-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+    <artifactId>tamaya-integration-se</artifactId>
+    <name>Apache Tamaya Modules Integration - Java SE</name>
+    <packaging>jar</packaging>
+
+    <properties>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>prepare-agent</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/integration/se/src/main/java/org/apache/tamaya/integration/se/ConfiguredSystemProperties.java
----------------------------------------------------------------------
diff --git a/dormant/modules/integration/se/src/main/java/org/apache/tamaya/integration/se/ConfiguredSystemProperties.java b/dormant/modules/integration/se/src/main/java/org/apache/tamaya/integration/se/ConfiguredSystemProperties.java
new file mode 100644
index 0000000..cdef5be
--- /dev/null
+++ b/dormant/modules/integration/se/src/main/java/org/apache/tamaya/integration/se/ConfiguredSystemProperties.java
@@ -0,0 +1,353 @@
+/*
+ * 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.integration.se;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.logging.Logger;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.Environment;
+
+/**
+ * Properties implementation class that can be applied as current System properties by calling
+ * {@link ConfiguredSystemProperties#install()}. The system properties will
+ * then behave contextually depending on the current runtime configuration active.
+ */
+public class ConfiguredSystemProperties extends Properties {
+
+	private static final long serialVersionUID = 2152870929299226804L;
+
+	private static final Logger LOG = Logger.getLogger(ConfiguredSystemProperties.class.getName());
+    private Properties initialProperties;
+    private static volatile Map<String, Properties> contextualProperties = new ConcurrentHashMap<>();
+    private static volatile Supplier<String> contextProvider = () ->
+            Environment.current().get("context.id").orElse("<system>");
+
+
+    private final Object LOCK = new Object();
+
+
+    private ConfiguredSystemProperties(Properties initialProperties) {
+        super(initialProperties);
+        this.initialProperties = initialProperties;
+    }
+
+    public static void install() {
+        Properties props = System.getProperties();
+        if (props instanceof ConfiguredSystemProperties) {
+            return;
+        }
+        ConfiguredSystemProperties systemProps = new ConfiguredSystemProperties(props);
+        LOG.finest("Installing enhanced system properties...");
+        System.setProperties(systemProps);
+        LOG.info("Installed enhanced system properties successfully.");
+    }
+
+    public static void uninstall() {
+        Properties props = System.getProperties();
+        if (props instanceof ConfiguredSystemProperties) {
+            Properties initialProperties = ((ConfiguredSystemProperties) props).initialProperties;
+            LOG.finest("Uninstalling enhanced system properties...");
+            System.setProperties(initialProperties);
+            LOG.info("Uninstalled enhanced system properties successfully.");
+        }
+    }
+
+    @Override
+    public String getProperty(String key) {
+        return getContextualProperties().getProperty(key);
+    }
+
+    @Override
+    public String getProperty(String key, String defaultValue) {
+        return getContextualProperties().getProperty(key, defaultValue);
+    }
+
+    @Override
+    public Enumeration<?> propertyNames() {
+        return getContextualProperties().propertyNames();
+    }
+
+    @Override
+    public Set<String> stringPropertyNames() {
+        return getContextualProperties().stringPropertyNames();
+    }
+
+    @Override
+    public synchronized int size() {
+        return getContextualProperties().size();
+    }
+
+    @Override
+    public synchronized Enumeration<Object> keys() {
+        return getContextualProperties().keys();
+    }
+
+    @Override
+    public synchronized Enumeration<Object> elements() {
+        return getContextualProperties().elements();
+    }
+
+    @Override
+    public synchronized boolean contains(Object value) {
+        return getContextualProperties().contains(value);
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+        return getContextualProperties().containsValue(value);
+    }
+
+    @Override
+    public synchronized boolean containsKey(Object key) {
+        return getContextualProperties().containsKey(key);
+    }
+
+    @Override
+    public synchronized Object get(Object key) {
+        return getContextualProperties().get(key);
+    }
+
+    @Override
+    public synchronized Object clone() {
+        return getContextualProperties().clone();
+    }
+
+    @Override
+    public Set<Object> keySet() {
+        return getContextualProperties().keySet();
+    }
+
+    @Override
+    public Set<Map.Entry<Object, Object>> entrySet() {
+        return getContextualProperties().entrySet();
+    }
+
+    @Override
+    public Collection<Object> values() {
+        return getContextualProperties().values();
+    }
+
+
+    @Override
+    public Object getOrDefault(Object key, Object defaultValue) {
+        return getContextualProperties().getOrDefault(key, defaultValue);
+    }
+
+    @Override
+    public void forEach(BiConsumer<? super Object, ? super Object> action) {
+        getContextualProperties().forEach(action);
+    }
+
+
+    @Override
+    public Object computeIfAbsent(Object key, Function<? super Object, ?> mappingFunction) {
+        return getContextualProperties().computeIfAbsent(key, mappingFunction);
+    }
+
+    @Override
+    public synchronized Object computeIfPresent(Object key, BiFunction<? super Object, ? super Object, ?> remappingFunction) {
+        return getContextualProperties().computeIfPresent(key, remappingFunction);
+    }
+
+    @Override
+    public synchronized Object compute(Object key, BiFunction<? super Object, ? super Object, ?> remappingFunction) {
+        return getContextualProperties().compute(key, remappingFunction);
+    }
+
+    @Override
+    public String toString() {
+        return getContextualProperties().toString();
+    }
+
+    @Override
+    public synchronized Object setProperty(String key, String value) {
+        return getContextualProperties().setProperty(key, value);
+    }
+
+    @Override
+    public synchronized void load(Reader reader) throws IOException {
+        getContextualProperties().load(reader);
+    }
+
+    @Override
+    public synchronized void load(InputStream inStream) throws IOException {
+        getContextualProperties().load(inStream);
+    }
+
+    @SuppressWarnings("deprecation")
+	@Override
+    public void save(OutputStream out, String comments) {
+        super.save(out, comments);
+    }
+
+    @Override
+    public void store(Writer writer, String comments) throws IOException {
+        getContextualProperties().store(writer, comments);
+    }
+
+    @Override
+    public void store(OutputStream out, String comments) throws IOException {
+        getContextualProperties().store(out, comments);
+    }
+
+    @Override
+    public void loadFromXML(InputStream in) throws IOException {
+        getContextualProperties().loadFromXML(in);
+    }
+
+    @Override
+    public void storeToXML(OutputStream os, String comment) throws IOException {
+        getContextualProperties().storeToXML(os, comment);
+    }
+
+    @Override
+    public void storeToXML(OutputStream os, String comment, String encoding) throws IOException {
+        getContextualProperties().storeToXML(os, comment, encoding);
+    }
+
+    @Override
+    public void list(PrintStream out) {
+        getContextualProperties().list(out);
+    }
+
+    @Override
+    public void list(PrintWriter out) {
+        getContextualProperties().list(out);
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return getContextualProperties().isEmpty();
+    }
+
+    @Override
+    public Object put(Object key, Object value) {
+        return getContextualProperties().put(key, value);
+    }
+
+    @Override
+    public Object remove(Object key) {
+        return getContextualProperties().remove(key);
+    }
+
+    @Override
+    public void putAll(Map<?, ?> t) {
+        getContextualProperties().putAll(t);
+    }
+
+    @Override
+    public void clear() {
+        getContextualProperties().clear();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        return getContextualProperties().equals(o);
+    }
+
+    @Override
+    public int hashCode() {
+        return getContextualProperties().hashCode();
+    }
+
+    @Override
+    public void replaceAll(BiFunction<? super Object, ? super Object, ?> function) {
+        getContextualProperties().replaceAll(function);
+    }
+
+    @Override
+    public Object putIfAbsent(Object key, Object value) {
+        return getContextualProperties().putIfAbsent(key, value);
+    }
+
+    @Override
+    public boolean remove(Object key, Object value) {
+        return getContextualProperties().remove(key, value);
+    }
+
+    @Override
+    public boolean replace(Object key, Object oldValue, Object newValue) {
+        return getContextualProperties().replace(key, oldValue, newValue);
+    }
+
+    @Override
+    public Object replace(Object key, Object value) {
+        return getContextualProperties().replace(key, value);
+    }
+
+    @Override
+    public Object merge(Object key, Object value, BiFunction<? super Object, ? super Object, ?> remappingFunction) {
+        return getContextualProperties().merge(key, value, remappingFunction);
+    }
+
+    public Properties getInitialProperties() {
+        return initialProperties;
+    }
+
+    /**
+     * Uninstalls the contextual system properties for the current context, as determined by the current
+     * context provider active.
+     */
+    public static void resetProperties() {
+        String contextId = contextProvider == null ? "" : contextProvider.get();
+        contextualProperties.remove(contextId);
+    }
+
+    protected Properties getContextualProperties() {
+        String contextId = contextProvider == null ? "" : contextProvider.get();
+        Properties props = ConfiguredSystemProperties.contextualProperties.get(contextId);
+        if (props == null) {
+            synchronized (LOCK) {
+                props = ConfiguredSystemProperties.contextualProperties.get(contextId);
+                if (props == null) {
+                    props = createNewProperties();
+                    contextualProperties.put(contextId, props);
+                }
+            }
+        }
+        return props;
+    }
+
+    protected Properties createNewProperties() {
+        Properties props = new Properties(initialProperties);
+        Configuration config = Configuration.current();
+        Map<String, String> configMap = config.getProperties();
+        for (Map.Entry<String, String> en : configMap.entrySet()) {
+            props.put(en.getKey(), en.getValue());
+        }
+        return props;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/pom.xml
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/pom.xml b/dormant/modules/metamodels/environment/pom.xml
new file mode 100644
index 0000000..cf8fd91
--- /dev/null
+++ b/dormant/modules/metamodels/environment/pom.xml
@@ -0,0 +1,73 @@
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.metamodels</groupId>
+        <artifactId>tamaya-metamodels-all</artifactId>
+        <version>0.1-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+    <artifactId>tamaya-metamodel-environment</artifactId>
+    <name>Apache Tamaya Modules Metamodels - environment</name>
+    <description>Environment Tamaya Metamodel</description>
+    <packaging>jar</packaging>
+
+    <properties>
+        <jdkVersion>1.8</jdkVersion>
+        <maven.compile.targetLevel>${jdkVersion}</maven.compile.targetLevel>
+        <maven.compile.sourceLevel>${jdkVersion}</maven.compile.sourceLevel>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>prepare-agent</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${maven.compile.sourceLevel}</source>
+                    <target>${maven.compile.targetLevel}</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/BuildableEnvironment.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/BuildableEnvironment.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/BuildableEnvironment.java
new file mode 100644
index 0000000..3633c97
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/BuildableEnvironment.java
@@ -0,0 +1,109 @@
+/*
+ * 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.metamodel.environment;
+
+import java.util.*;
+
+/**
+ * Environment class that is used by the {@link org.apache.tamaya.metamodel.environment.EnvironmentBuilder}.
+ */
+class BuildableEnvironment implements Environment {
+
+    /** The environment data. */
+    private Map<String,String> context = new TreeMap<>();
+
+    /**
+     * Constructor.
+     * @param builder the builder, not null.
+     */
+    BuildableEnvironment(EnvironmentBuilder builder){
+        Objects.requireNonNull(builder);
+        context.putAll(builder.contextData);
+    }
+
+    @Override
+    public Map<String, String> toMap() {
+        return context;
+    }
+
+    @Override
+    public Optional<String> get(String key){
+        return Optional.ofNullable(context.get(key));
+    }
+
+    @Override
+    public boolean containsKey(String key){
+        return context.containsKey(key);
+    }
+
+    @Override
+    public Set<String> keySet() {
+        return context.keySet();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        BuildableEnvironment that = (BuildableEnvironment) o;
+        return context.equals(that.context);
+    }
+
+    @Override
+    public int hashCode() {
+        return context.hashCode();
+    }
+
+    /*
+         * (non-Javadoc)
+         *
+         * @see java.lang.Object#toString()
+         */
+    @Override
+    public String toString(){
+        return "Environment: " + getData();
+    }
+
+    /**
+     * Get the delta.
+     * @return
+     */
+    private String getData() {
+        StringBuilder b = new StringBuilder();
+        for(Map.Entry<String,String> en: this.context.entrySet()){
+            b.append("    ").append(en.getKey()).append('=').append(escape(en.getValue())).append('\n');
+        }
+        if(b.length()>0)
+            b.setLength(b.length()-1);
+        return b.toString();
+    }
+
+    /**
+     * Escapes several characters.
+     * @param value
+     * @return
+     */
+    private String escape(String value){
+        if(value==null)
+            return null;
+        return value.replaceAll("\n", "\\\\n").replaceAll("\r", "\\\\r").replaceAll("\t", "\\\\t")
+                .replaceAll("=", "\\\\=");
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/Environment.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/Environment.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/Environment.java
new file mode 100644
index 0000000..8a8b157
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/Environment.java
@@ -0,0 +1,86 @@
+/*
+ * 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.metamodel.environment;
+
+import org.apache.tamaya.metamodel.environment.spi.EnvironmentSpi;
+import org.apache.tamaya.spi.ServiceContext;
+
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ * Models a runtime environment. Instances current this class are used to
+ * evaluate the correct configuration artifacts.<br/>
+ * <h3>Implementation Requirements</h3>
+ * <p>
+ * Implementations current this interface must be
+ * <ul>
+ * <li>Thread safe.
+ * <li>Immutable
+ * <li>serializable
+ * </ul>
+ */
+public interface Environment{
+
+    /**
+     * Access a property.
+     * @param key the property's key, not null.
+     * @return the property's keys.
+     */
+    Optional<String> get(String key);
+
+    /**
+     * Checks if a property is defined.
+     * @param key the property's key, not null.
+     * @return true, if the property is existing.
+     */
+    boolean containsKey(String key);
+
+    /**
+     * Access the set current property keys, defined by this provider.
+     * @return the key set, never null.
+     */
+    Set<String> keySet();
+
+    /**
+     * Access the environment as Map.
+     * @return the Map instance containing the environments properties, never null.
+     */
+    Map<String,String> toMap();
+
+    /**
+     * Get the current {@link org.apache.tamaya.metamodel.environment.Environment}. The environment is used to determine the current runtime state, which
+     * is important for returning the correct configuration.
+     * @return the current Environment, never null.
+     */
+    public static Environment current(){
+        return ServiceContext.getInstance().getSingleton(EnvironmentSpi.class).getCurrentEnvironment();
+    }
+
+    /**
+     * Get the current {@link Environment}. The environment is used to determine the current runtime state, which
+     * is important for returning the correct configuration.
+     * @return the current Environment, never null.
+     */
+    public static Environment root(){
+        return ServiceContext.getInstance().getSingleton(EnvironmentSpi.class).getRootEnvironment();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/EnvironmentBuilder.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/EnvironmentBuilder.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/EnvironmentBuilder.java
new file mode 100644
index 0000000..17ec34b
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/EnvironmentBuilder.java
@@ -0,0 +1,97 @@
+/*
+ * 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.metamodel.environment;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+* Builder to create new {@link Environment instances.}
+*/
+public final class EnvironmentBuilder{
+
+    /** The property name for the stage property. */
+    public static final String STAGE_PROP = "stage";
+
+    /** THe environment data. */
+    Map<String,String> contextData = new HashMap<>();
+
+    /**
+     * Constructor.
+     */
+    private EnvironmentBuilder() {
+    }
+
+    /**
+     * Creates a new buildr instance.
+     * @return the new builder instance.
+     */
+    public static final EnvironmentBuilder of() {
+        return new EnvironmentBuilder();
+    }
+
+    /**
+     * Sets a new environment property.
+     * @param key the key, not null.
+     * @param value the keys, not null.
+     * @return the builder for chaining
+     */
+    public EnvironmentBuilder set(String key, String value){
+        this.contextData.put(key, value);
+        return this;
+    }
+
+    /**
+     * Sets new environment properties.
+     * @param values the key/values, not null.
+     * @return the builder for chaining
+     */
+    public EnvironmentBuilder setAll(Map<String,String> values){
+        this.contextData.putAll(values);
+        return this;
+    }
+
+    /**
+     * Sets the stage using the default stage key.
+     * @param stage The stage, not null.
+     * @return the builder for chaining.
+     */
+    public EnvironmentBuilder setStage(String stage){
+        this.contextData.put(STAGE_PROP, Objects.requireNonNull(stage));
+        return this;
+    }
+
+    /**
+     * Access a property
+     * @param key the key, not null.
+     * @return the builder for chaining.
+     */
+    public String getProperty(String key) {
+        return this.contextData.get(key);
+    }
+
+    /**
+     * Builds a new Environment.
+     * @return a new Environment, never null.
+     */
+    public Environment build() {
+        return new BuildableEnvironment(this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java
new file mode 100644
index 0000000..db4a7c7
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java
@@ -0,0 +1,101 @@
+/*
+ * 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.metamodel.environment.internal;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.tamaya.core.config.ConfigurationFormats;
+import org.apache.tamaya.core.resource.Resource;
+import org.apache.tamaya.core.resource.ResourceLoader;
+import org.apache.tamaya.core.properties.ConfigurationFormat;
+import org.apache.tamaya.metamodel.environment.spi.EnvironmentProvider;
+import org.apache.tamaya.spi.ServiceContext;
+
+/**
+ * Application environment provider that is dependent on the current context classloader and tries to
+ * evaluate {@code META-INF/env/application.properties, META-INF/env/application.xml and META-INF/env/application.ini}.
+ * Only if a property named {@code org.apache.tamaya.env.applicationId} is found, it will
+ * be used as the {@code environmentId} and a corresponding {@link org.apache.tamaya.metamodel.environment.Environment} instance
+ * is created and attached.
+ */
+public class ClassLoaderDependentApplicationEnvironmentProvider implements EnvironmentProvider {
+
+    private static  final Logger LOG = Logger.getLogger(ClassLoaderDependentApplicationEnvironmentProvider.class.getName());
+
+    private Map<ClassLoader, Map<String,String>> environments = new ConcurrentHashMap<>();
+    private Map<ClassLoader, Boolean> environmentAvailable = new ConcurrentHashMap<>();
+
+    @Override
+    public boolean isActive() {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if(cl==null){
+            return false;
+        }
+        Boolean available = this.environmentAvailable.get(cl);
+        if(available!=null && !available){
+            return false;
+        }
+        List<Resource> propertyUris = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
+                "classpath:META-INF/env/application.properties", "classpath:META-INF/env/application.xml", "classpath:META-INF/env/application.ini");
+        available = !propertyUris.isEmpty();
+        this.environmentAvailable.put(cl, available);
+        return available;
+    }
+
+    @Override
+    public Map<String,String> getEnvironmentData() {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if(cl==null){
+            return null;
+        }
+        Map<String,String> data = this.environments.get(cl);
+        if(data!=null){
+            return data;
+        }
+        List<Resource> propertyUris = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
+                "classpath:META-INF/env/application.properties", "classpath:META-INF/env/application.xml", "classpath:META-INF/env/application.ini");
+        data = new HashMap<>();
+
+        for(Resource resource:propertyUris){
+            try{
+                ConfigurationFormat format = ConfigurationFormats.getFormat(resource);
+                data.putAll(format.readConfiguration(resource));
+            }
+            catch(Exception e){
+                LOG.log(Level.SEVERE, e, () -> "Error reading application environment data fromMap " + resource);
+            }
+        }
+        data.put("classloader.type", cl.getClass().getName());
+        data.put("classloader.info", cl.toString());
+        Set<Resource> uris = new HashSet<>();
+        uris.addAll(propertyUris);
+        data.put("environment.sources", uris.toString());
+        data = Collections.unmodifiableMap(data);
+        this.environments.put(cl, data);
+        return data;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
new file mode 100644
index 0000000..2ef88ec
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
@@ -0,0 +1,108 @@
+/*
+ * 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.metamodel.environment.internal;
+
+import org.apache.tamaya.core.config.ConfigurationFormats;
+import org.apache.tamaya.core.resource.Resource;
+import org.apache.tamaya.metamodel.environment.EnvironmentBuilder;
+import org.apache.tamaya.metamodel.environment.spi.EnvironmentProvider;
+import org.apache.tamaya.spi.ServiceContext;
+import org.apache.tamaya.core.properties.ConfigurationFormat;
+import org.apache.tamaya.core.resource.ResourceLoader;
+
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * This class implements a {@link EnvironmentProvider} that tries
+ * to read configuration for an ear deployment located under {@code META-INF/env/ear.properties,
+ * META-INF/env/ear.xml or META-INF/env/ear.ini}. The environment id hereby is defined by a
+ * configuration entry named {@code org.apache.tamaya.core.env.earId}.
+ *
+ * Only if such a configuration with such an {@code earId} is found an {@link org.apache.tamaya.metamodel.environment.Environment}
+ * is created and attached to the corresponding ear classloader.
+ */
+public class ClassLoaderDependentEarEnvironmentProvider implements EnvironmentProvider {
+
+    private static  final Logger LOG = Logger.getLogger(ClassLoaderDependentEarEnvironmentProvider.class.getName());
+
+//    private static final String EARID_PROP = "environment.earId";
+
+    private Map<ClassLoader, Map<String,String>> environments = new ConcurrentHashMap<>();
+    private Map<ClassLoader, Boolean> environmentAvailable = new ConcurrentHashMap<>();
+
+    @Override
+    public boolean isActive() {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if(cl==null){
+            return false;
+        }
+        Boolean available = this.environmentAvailable.get(cl);
+        if(available!=null && !available){
+            return false;
+        }
+        List<Resource> propertyUris = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
+                "classpath:META-INF/env/ear.properties", "classpath:META-INF/env/ear.xml", "classpath:META-INF/env/ear.ini");
+        available = !propertyUris.isEmpty();
+        this.environmentAvailable.put(cl, available);
+        return available;
+    }
+
+    @Override
+    public Map<String,String> getEnvironmentData() {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        if(cl==null){
+            return null;
+        }
+        Map<String,String> data = this.environments.get(cl);
+        if(data!=null){
+            return data;
+        }
+        List<Resource> resources = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
+                "classpath:META-INF/env/ear.properties", "classpath:META-INF/env/ear.xml", "classpath:META-INF/env/ear.ini");
+        data = new HashMap<>();
+        for(Resource resource:resources){
+            try{
+                ConfigurationFormat format = ConfigurationFormats.getFormat(resource);
+                Map<String,String> read = format.readConfiguration(resource);
+                data.putAll(read);
+            }
+            catch(Exception e){
+                LOG.log(Level.SEVERE, e, () -> "Error reading ear environment data fromMap " + resource);
+            }
+        }
+//        String earId = data.getOrDefault(EARID_PROP, cl.toString());
+        String stageValue =  data.get(EnvironmentBuilder.STAGE_PROP);
+        if (stageValue != null) {
+            data.put(EnvironmentBuilder.STAGE_PROP,stageValue);
+        }
+        data.put("classloader.type", cl.getClass().getName());
+        data.put("classloader.info", cl.toString());
+        Set<Resource> resourceSet = new HashSet<>();
+        resourceSet.addAll(resources);
+        data.put("environment.sources", resourceSet.toString());
+        data = Collections.unmodifiableMap(data);
+        this.environments.put(cl, data);
+        return data;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/InitialEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/InitialEnvironmentProvider.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/InitialEnvironmentProvider.java
new file mode 100644
index 0000000..9321539
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/InitialEnvironmentProvider.java
@@ -0,0 +1,74 @@
+/*
+ * 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.metamodel.environment.internal;
+
+import java.net.InetAddress;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.TimeZone;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.tamaya.core.env.ConfiguredSystemProperties;
+import org.apache.tamaya.metamodel.environment.EnvironmentBuilder;
+import org.apache.tamaya.metamodel.environment.spi.EnvironmentProvider;
+
+/**
+ * Default {@link org.apache.tamaya.metamodel.environment.Environment}.
+ */
+public final class InitialEnvironmentProvider implements EnvironmentProvider{
+
+	private Map<String,String> environmentData = new HashMap<>();
+
+	public InitialEnvironmentProvider() {
+        Properties props = System.getProperties();
+        if(props instanceof ConfiguredSystemProperties){
+            props = ((ConfiguredSystemProperties)props).getInitialProperties();
+        }
+        String stageValue =  props.getProperty(EnvironmentBuilder.STAGE_PROP);
+        environmentData.put(EnvironmentBuilder.STAGE_PROP, stageValue);
+        environmentData.put("timezone", TimeZone.getDefault().getID());
+        environmentData.put("locale", Locale.getDefault().toString());
+        try {
+            environmentData.put("host", InetAddress.getLocalHost().toString());
+        } catch (Exception e) {
+            Logger.getLogger(getClass().getName()).log(Level.WARNING, e, () -> "Failed to evaluate hostname.");
+        }
+        // Copy env properties....
+        for (Entry<String, String> en : System.getenv().entrySet()) {
+            environmentData.put(en.getKey(), en.getValue());
+        }
+        environmentData = Collections.unmodifiableMap(environmentData);
+	}
+
+    @Override
+    public boolean isActive(){
+        return true;
+    }
+
+    @Override
+	public Map<String,String> getEnvironmentData() {
+        return environmentData;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SingleEnvironmentManager.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SingleEnvironmentManager.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SingleEnvironmentManager.java
new file mode 100644
index 0000000..cbf177d
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SingleEnvironmentManager.java
@@ -0,0 +1,70 @@
+/*
+ * 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.metamodel.environment.internal;
+
+
+import org.apache.tamaya.metamodel.environment.Environment;
+import org.apache.tamaya.metamodel.environment.EnvironmentBuilder;
+import org.apache.tamaya.metamodel.environment.spi.EnvironmentProvider;
+import org.apache.tamaya.metamodel.environment.spi.EnvironmentSpi;
+import org.apache.tamaya.spi.ServiceContext;
+
+import java.util.*;
+
+/**
+ * Service for accessing {@link org.apache.tamaya.metamodel.environment.Environment}. Environments are used to
+ * access/determine configurations.<br/>
+ * <h3>Implementation PropertyMapSpec</h3> This class is
+ * <ul>
+ * <li>thread safe,
+ * <li>and behaves contextual.
+ * </ul>
+ */
+public class SingleEnvironmentManager implements EnvironmentSpi {
+
+    private final List<EnvironmentProvider> environmentProviders = loadEnvironmentProviders();
+    private Environment rootEnvironment = getCurrentEnvironment();
+
+    private List<EnvironmentProvider> loadEnvironmentProviders() {
+        List<EnvironmentProvider> providerList = new ArrayList<>();
+        for(EnvironmentProvider prov: ServiceContext.getInstance().getServices(EnvironmentProvider.class)){
+            providerList.add(prov);
+        }
+        return providerList;
+    }
+
+    @Override
+    public Environment getCurrentEnvironment(){
+        EnvironmentBuilder b = EnvironmentBuilder.of();
+        for(EnvironmentProvider prov: environmentProviders){
+            if(prov.isActive()){
+                if(prov.isActive()){
+                    b.setAll(prov.getEnvironmentData());
+                }
+            }
+        }
+        return b.build();
+    }
+
+    @Override
+    public Environment getRootEnvironment(){
+        return rootEnvironment;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SystemClassLoaderEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SystemClassLoaderEnvironmentProvider.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SystemClassLoaderEnvironmentProvider.java
new file mode 100644
index 0000000..e943971
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/internal/SystemClassLoaderEnvironmentProvider.java
@@ -0,0 +1,74 @@
+/*
+ * 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.metamodel.environment.internal;
+
+import org.apache.tamaya.core.config.ConfigurationFormats;
+import org.apache.tamaya.core.resource.Resource;
+import org.apache.tamaya.metamodel.environment.spi.EnvironmentProvider;
+import org.apache.tamaya.spi.ServiceContext;
+import org.apache.tamaya.core.properties.ConfigurationFormat;
+import org.apache.tamaya.core.resource.ResourceLoader;
+
+
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * System environment provider (loaded only once using the system class loader) that loads additional environment properties fromMap the classpath evaluating
+ * {@code META-INF/env/system.properties, META-INF/env/system.xml and META-INF/env/system.ini}.
+ */
+public class SystemClassLoaderEnvironmentProvider implements EnvironmentProvider {
+
+    private static  final Logger LOG = Logger.getLogger(SystemClassLoaderEnvironmentProvider.class.getName());
+
+    private Map<String,String> data = new HashMap<>();
+
+
+    public SystemClassLoaderEnvironmentProvider(){
+        List<Resource> propertyResources = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(ClassLoader.getSystemClassLoader(),
+                "classpath:META-INF/env/system.properties", "classpath:META-INF/env/system.xml", "classpath:META-INF/env/system.ini");
+        for(Resource resource:propertyResources){
+            try{
+                ConfigurationFormat format = ConfigurationFormats.getFormat(resource);
+                Map<String,String> data = format.readConfiguration(resource);
+                data.putAll(data);
+            }
+            catch(Exception e){
+                LOG.log(Level.INFO, e, () -> "Could not read environment data from " + resource);
+            }
+        }
+        data.put("classloader.type", ClassLoader.getSystemClassLoader().getClass().getName());
+        data.put("classloader.info", ClassLoader.getSystemClassLoader().toString());
+        Set<Resource> resourceSet = new HashSet<>();
+        resourceSet.addAll(propertyResources);
+        data.put("environment.system.sources", resourceSet.toString());
+        this.data = Collections.unmodifiableMap(data);
+    }
+    @Override
+    public boolean isActive() {
+        return true;
+    }
+
+    @Override
+    public Map<String,String> getEnvironmentData() {
+        return data;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentProvider.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentProvider.java
new file mode 100644
index 0000000..ef4ff43
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentProvider.java
@@ -0,0 +1,44 @@
+/*
+ * 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.metamodel.environment.spi;
+
+import java.util.Map;
+
+/**
+ * SPI for components that define a concrete type current {@link org.apache.tamaya.metamodel.environment.Environment}.
+ * The chain current environment config determine the current {@link org.apache.tamaya.metamodel.environment.Environment} active
+ * and its parent instances.
+ * Created by Anatole on 14.10.2014.
+ */
+public interface EnvironmentProvider {
+
+    /**
+     * Evaluates if an environment is currently active.
+     * @return
+     */
+    boolean isActive();
+
+    /**
+     * Returns the properties to be added to the environment.
+     * @return the properties, or an empty map if no properties are to be added (or the provider is not active for the
+     * current runtime state).
+     */
+    Map<String,String> getEnvironmentData();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentSpi.java
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentSpi.java b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentSpi.java
new file mode 100644
index 0000000..dbf8f65
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/java/org/apache/tamaya/metamodel/environment/spi/EnvironmentSpi.java
@@ -0,0 +1,49 @@
+/*
+ * 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.metamodel.environment.spi;
+
+
+import org.apache.tamaya.metamodel.environment.Environment;
+
+/**
+ * Service for accessing {@link org.apache.tamaya.metamodel.environment.Environment}. Environments are used to
+ * access/determine configurations.<br/>
+ * <h3>Implementation PropertyMapSpec</h3> This class is
+ * <ul>
+ * <li>thread safe,
+ * <li>and behaves contextual.
+ * </ul>
+ */
+public interface EnvironmentSpi {
+
+    /**
+     * Get the current environment current the given environment type.
+     * @return the corresponding environment, never null.
+     * @throws IllegalArgumentException if not such type is present or active.
+     */
+    Environment getCurrentEnvironment();
+
+    /**
+     * Get the current environment current the given environment type.
+     * @return the corresponding environment, never null.
+     * @throws IllegalArgumentException if not such type is present or active.
+     */
+    Environment getRootEnvironment();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.core.spi.EnvironmentProvider
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.core.spi.EnvironmentProvider b/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.core.spi.EnvironmentProvider
new file mode 100644
index 0000000..3592434
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.core.spi.EnvironmentProvider
@@ -0,0 +1,22 @@
+#
+# 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.
+#
+org.apache.tamaya.core.internal.env.InitialEnvironmentProvider
+org.apache.tamaya.core.internal.env.SystemClassLoaderEnvironmentProvider
+org.apache.tamaya.core.internal.env.ClassLoaderDependentEarEnvironmentProvider
+org.apache.tamaya.core.internal.env.ClassLoaderDependentApplicationEnvironmentProvider

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/d9964c64/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.EnvironmentSpi
----------------------------------------------------------------------
diff --git a/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.EnvironmentSpi b/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.EnvironmentSpi
new file mode 100644
index 0000000..4a5b828
--- /dev/null
+++ b/dormant/modules/metamodels/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.EnvironmentSpi
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+org.apache.tamaya.metamodel.environment.TestEnvironmentManagerSingleton