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 2015/05/22 00:04:07 UTC
[1/2] incubator-tamaya git commit: Simplified and fixed bugs in
environment module.
Repository: incubator-tamaya
Updated Branches:
refs/heads/master 1b6cf9647 -> 4f8d167be
Simplified and fixed bugs in environment module.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/cf7980e3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/cf7980e3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/cf7980e3
Branch: refs/heads/master
Commit: cf7980e399d4aa7a6570b3acd6d209b2fc80f07e
Parents: 1b6cf96
Author: anatole <an...@apache.org>
Authored: Thu May 21 18:44:19 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Thu May 21 18:44:19 2015 +0200
----------------------------------------------------------------------
sandbox/environment/pom.xml | 20 ++++
.../environment/BuildableRuntimeContext.java | 16 ---
.../tamaya/environment/RuntimeContext.java | 14 ---
.../environment/RuntimeContextBuilder.java | 23 +---
.../environment/RuntimeContextProvider.java | 11 +-
...ctClassLoaderDependentRuntimeContextSpi.java | 115 +++++++++++++++++++
...ssLoaderDependentAppEnvironmentProvider.java | 40 +++++++
...DependentApplicationEnvironmentProvider.java | 103 -----------------
...ssLoaderDependentEarEnvironmentProvider.java | 83 ++-----------
.../internal/InitialEnvironmentProvider.java | 73 ------------
.../internal/InitialEnvironmentProviderSpi.java | 74 ++++++++++++
.../internal/SingleEnvironmentManager.java | 35 +++---
.../SystemClassLoaderEnvironmentProvider.java | 72 ------------
...SystemClassLoaderEnvironmentProviderSpi.java | 88 ++++++++++++++
.../environment/spi/ContextDataProvider.java | 42 -------
.../environment/spi/ContextProviderSpi.java | 45 ++++++++
.../tamaya/environment/spi/ContextSpi.java | 6 -
.../environment/EnvironmentManagerTest.java | 66 -----------
.../RuntimeContextProviderSpiTest.java | 57 +++++++++
.../TestEnvironmentManagerSingleton.java | 12 +-
.../environment/TestEnvironmentProvider.java | 17 ++-
...he.tamaya.environment.spi.ContextProviderSpi | 23 ++++
...org.apache.tamaya.environment.spi.ContextSpi | 2 +-
23 files changed, 506 insertions(+), 531 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/pom.xml
----------------------------------------------------------------------
diff --git a/sandbox/environment/pom.xml b/sandbox/environment/pom.xml
index 7773c43..666140d 100644
--- a/sandbox/environment/pom.xml
+++ b/sandbox/environment/pom.xml
@@ -34,9 +34,29 @@ under the License.
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
+ <artifactId>tamaya-core</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-api</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.tamaya.ext</groupId>
+ <artifactId>tamaya-formats</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tamaya.ext</groupId>
+ <artifactId>tamaya-resource</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java
index 94d0125..f7675bb 100644
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java
@@ -28,8 +28,6 @@ import java.util.TreeMap;
class BuildableRuntimeContext implements RuntimeContext {
/** The context id, never null or empty. */
private String contextId;
- /** The parent context. */
- private RuntimeContext parentContext;
/**
* The environment data.
@@ -44,7 +42,6 @@ class BuildableRuntimeContext implements RuntimeContext {
BuildableRuntimeContext(RuntimeContextBuilder builder) {
Objects.requireNonNull(builder);
this.contextId = builder.contextId;
- this.parentContext = builder.parentContext;
context.putAll(builder.contextData);
}
@@ -59,19 +56,6 @@ class BuildableRuntimeContext implements RuntimeContext {
}
@Override
- public String getQualifiedContextId() {
- if(parentContext!=null){
- return parentContext.getQualifiedContextId()+"/"+contextId;
- }
- return contextId;
- }
-
- @Override
- public RuntimeContext getParentContext() {
- return parentContext;
- }
-
- @Override
public String get(String key) {
return context.get(key);
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java
index b782667..ca98432 100644
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java
@@ -44,20 +44,6 @@ public interface RuntimeContext {
String getContextId();
/**
- * Returns a full (and unique) context id that identifies the current context. Depending on the environment isolation this
- * can be always the same key (e.g. in a SE use case) or a varying key depending on the current classloader
- * visible (OSGI, EE environment).
- * @return the context id, never null.
- */
- String getQualifiedContextId();
-
- /**
- * Access the parent context.
- * @return the parent context for this instance, or null, if this is a root context.
- */
- RuntimeContext getParentContext();
-
- /**
* Access a runtime context variable.
* @param key the key
* @return the corresponding value.
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java
index e5ceb29..4fb3f02 100644
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java
@@ -29,8 +29,6 @@ public final class RuntimeContextBuilder {
/** The context id, never null or empty. */
String contextId;
- /** The parent context. */
- RuntimeContext parentContext;
/** THe environment data. */
Map<String,String> contextData = new HashMap<>();
@@ -38,9 +36,8 @@ public final class RuntimeContextBuilder {
/**
* Constructor.
*/
- private RuntimeContextBuilder(String contextId, RuntimeContext parentContext) {
+ private RuntimeContextBuilder(String contextId) {
this.contextId = Objects.requireNonNull(contextId);
- this.parentContext = parentContext;
}
/**
@@ -48,24 +45,16 @@ public final class RuntimeContextBuilder {
* @return the new builder instance.
*/
public static RuntimeContextBuilder of(String contextId) {
- return new RuntimeContextBuilder(contextId, null);
+ return new RuntimeContextBuilder(contextId);
}
/**
- * Creates a new buildr instance.
- * @return the new builder instance.
- */
- public static RuntimeContextBuilder of(String contextId, RuntimeContext parentContext) {
- return new RuntimeContextBuilder(contextId, parentContext);
- }
-
- /**
- * Sets a new parent context.
- * @param parentContext the parent context (can be null).
+ * Sets the environment contextId.
+ * @param contextId the contextId, not null.
* @return the builder for chaining
*/
- public RuntimeContextBuilder withParentContext(RuntimeContext parentContext){
- this.parentContext = parentContext;
+ public RuntimeContextBuilder setContextId(String contextId){
+ this.contextId = Objects.requireNonNull(contextId);
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java
index 9b37467..565b255 100644
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java
@@ -29,7 +29,7 @@ public final class RuntimeContextProvider {
private static final ContextSpi contextSpi = loadSpi();
private static ContextSpi loadSpi(){
- return ServiceContext.getInstance().getService(ContextSpi.class);
+ return ServiceContext.getInstance().getService(ContextSpi.class).get();
}
/**
@@ -46,13 +46,4 @@ public final class RuntimeContextProvider {
return contextSpi.getCurrentContext();
}
- /**
- * Get the current {@link org.apache.tamaya.environment.RuntimeContextProvider}. 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 RuntimeContext root(){
- return contextSpi.getRootContext();
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java
new file mode 100644
index 0000000..de92e78
--- /dev/null
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java
@@ -0,0 +1,115 @@
+/*
+ * 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.environment.internal;
+
+import org.apache.tamaya.environment.RuntimeContext;
+import org.apache.tamaya.environment.RuntimeContextBuilder;
+import org.apache.tamaya.environment.spi.ContextProviderSpi;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.resource.ConfigResources;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * 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.environment.RuntimeContext} instance
+ * is created and attached.
+ */
+public abstract class AbstractClassLoaderDependentRuntimeContextSpi implements ContextProviderSpi {
+
+ private static final Logger LOG = Logger.getLogger(AbstractClassLoaderDependentRuntimeContextSpi.class.getName());
+
+ private String contextId;
+ private Map<ClassLoader, Map<String, String>> contexts = new ConcurrentHashMap<>();
+ private Map<ClassLoader, Boolean> contextsAvailable = new ConcurrentHashMap<>();
+
+ protected AbstractClassLoaderDependentRuntimeContextSpi(String contextId) {
+ this.contextId = Objects.requireNonNull(contextId);
+ }
+
+ private boolean isActive() {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl == null) {
+ return false;
+ }
+ Boolean available = this.contextsAvailable.get(cl);
+ if (available != null) {
+ return available;
+ }
+ return true;
+ }
+
+ protected Collection<URL> getConfigLocations() {
+ return ConfigResources.getResourceResolver().getResources(Thread.currentThread().getContextClassLoader(),
+ "classpath:META-INF/context/" + contextId + ".properties", "classpath:META-INF/context/\"+contextId+\".xml", "classpath:META-INF/context/\"+contextId+\".ini");
+ }
+
+ protected List<ConfigurationFormat> getConfigFormats(URL url) {
+ return ConfigurationFormats.getFormats(url);
+ }
+
+ @Override
+ public void setupContext(RuntimeContextBuilder contextBuilder) {
+ if (isActive()) {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl == null) {
+ return;
+ }
+ Map<String, String> data = this.contexts.get(cl);
+ if (data == null) {
+ Collection<URL> propertyUris = getConfigLocations();
+ data = new HashMap<>();
+ for (URL resource : propertyUris) {
+ for (ConfigurationFormat format : getConfigFormats(resource)) {
+ try (InputStream is = resource.openStream()) {
+ data.putAll(format.readConfiguration(resource.toExternalForm(), is).getDefaultSection());
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, e, () -> "Error reading application context data fromMap " + resource);
+ }
+ }
+ }
+ data.put("classloader.type", cl.getClass().getName());
+ data.put("classloader.info", cl.toString());
+ Set<URL> uris = new HashSet<>();
+ uris.addAll(propertyUris);
+ data.put("context.sources", uris.toString());
+ data = Collections.unmodifiableMap(data);
+ contextBuilder.setContextId(contextId);
+ this.contexts.put(cl, data);
+ }
+ contextBuilder.setAll(data);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java
new file mode 100644
index 0000000..7268f5e
--- /dev/null
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java
@@ -0,0 +1,40 @@
+/*
+ * 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.environment.internal;
+
+
+import javax.annotation.Priority;
+
+/**
+ * This class implements a {@link org.apache.tamaya.environment.RuntimeContextProvider} 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.environment.RuntimeContext}
+ * is created and attached to the corresponding ear classloader.
+ */
+@Priority(3000)
+public class ClassLoaderDependentAppEnvironmentProvider extends AbstractClassLoaderDependentRuntimeContextSpi{
+
+ public ClassLoaderDependentAppEnvironmentProvider(){
+ super("app");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java
deleted file mode 100644
index e130644..0000000
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentApplicationEnvironmentProvider.java
+++ /dev/null
@@ -1,103 +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.environment.internal;
-
-import java.net.URL;
-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.environment.spi.ContextDataProvider;
-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.RuntimeContext} instance
- * is created and attached.
- */
-public class ClassLoaderDependentApplicationEnvironmentProvider implements ContextDataProvider {
-
- private static final Logger LOG = Logger.getLogger(ClassLoaderDependentApplicationEnvironmentProvider.class.getName());
-
- private Map<ClassLoader, Map<String,String>> contexts = new ConcurrentHashMap<>();
- private Map<ClassLoader, Boolean> contextsAvailable = new ConcurrentHashMap<>();
-
- @Override
- public boolean isActive() {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- if(cl==null){
- return false;
- }
- Boolean available = this.contextsAvailable.get(cl);
- if(available!=null && !available){
- return false;
- }
- List<URL> propertyUris = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
- "classpath:META-INF/context/application.properties", "classpath:META-INF/context/application.xml", "classpath:META-INF/context/application.ini");
- available = !propertyUris.isEmpty();
- this.contextsAvailable.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.contexts.get(cl);
- if(data!=null){
- return data;
- }
- List<URL> propertyUris = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
- "classpath:META-INF/context/application.properties", "classpath:META-INF/context/application.xml", "classpath:META-INF/context/application.ini");
- data = new HashMap<>();
-
- for(URL resource:propertyUris){
- try{
- ConfigurationFormat format = ConfigurationFormats.getFormat(resource);
- data.putAll(format.readConfiguration(resource));
- }
- catch(Exception e){
- LOG.log(Level.SEVERE, e, () -> "Error reading application context data fromMap " + resource);
- }
- }
- data.put("classloader.type", cl.getClass().getName());
- data.put("classloader.info", cl.toString());
- Set<URL> uris = new HashSet<>();
- uris.addAll(propertyUris);
- data.put("context.sources", uris.toString());
- data = Collections.unmodifiableMap(data);
- this.contexts.put(cl, data);
- return data;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
index b4160e2..688fc8c 100644
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
@@ -18,92 +18,23 @@
*/
package org.apache.tamaya.environment.internal;
-import org.apache.tamaya.core.config.ConfigurationFormats;
-import org.apache.tamaya.core.resource.Resource;
-import org.apache.tamaya.metamodel.environment.RuntimeContextBuilder;
-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.net.URL;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import javax.annotation.Priority;
/**
- * This class implements a {@link EnvironmentProvider} that tries
+ * This class implements a {@link org.apache.tamaya.environment.RuntimeContextProvider} 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.RuntimeContext}
+ * Only if such a configuration with such an {@code earId} is found an {@link org.apache.tamaya.environment.RuntimeContext}
* 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>> contexts = new ConcurrentHashMap<>();
- private Map<ClassLoader, Boolean> contextsAvailable = new ConcurrentHashMap<>();
-
- @Override
- public boolean isActive() {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- if(cl==null){
- return false;
- }
- Boolean available = this.contextsAvailable.get(cl);
- if(available!=null && !available){
- return false;
- }
- List<URL> propertyUris = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
- "classpath:META-INF/context/ear.properties", "classpath:META-INF/context/ear.xml", "classpath:META-INF/context/ear.ini");
- available = !propertyUris.isEmpty();
- this.contextsAvailable.put(cl, available);
- return available;
- }
+@Priority(2000)
+public class ClassLoaderDependentEarEnvironmentProvider extends AbstractClassLoaderDependentRuntimeContextSpi{
- @Override
- public Map<String,String> getEnvironmentData() {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- if(cl==null){
- return null;
- }
- Map<String,String> data = this.contexts.get(cl);
- if(data!=null){
- return data;
- }
- List<URL> resources = ServiceContext.getInstance().getSingleton(ResourceLoader.class).getResources(cl,
- "classpath:META-INF/context/ear.properties", "classpath:META-INF/context/ear.xml", "classpath:META-INF/context/ear.ini");
- data = new HashMap<>();
- for(URL 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 context data fromMap " + resource);
- }
- }
-// String earId = data.getOrDefault(EARID_PROP, cl.toString());
- String stageValue = data.get(RuntimeContextBuilder.STAGE_PROP);
- if (stageValue != null) {
- data.put(RuntimeContextBuilder.STAGE_PROP,stageValue);
- }
- data.put("classloader.type", cl.getClass().getName());
- data.put("classloader.info", cl.toString());
- Set<URL> resourceSet = new HashSet<>();
- resourceSet.addAll(resources);
- data.put("context.sources", resourceSet.toString());
- data = Collections.unmodifiableMap(data);
- this.contexts.put(cl, data);
- return data;
+ public ClassLoaderDependentEarEnvironmentProvider(){
+ super("ear");
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProvider.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProvider.java
deleted file mode 100644
index 062becc..0000000
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProvider.java
+++ /dev/null
@@ -1,73 +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.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.environment.RuntimeContext;
-import org.apache.tamaya.environment.spi.ContextDataProvider;
-import org.apache.tamaya.environment.RuntimeContextBuilder;
-
-/**
- * Default {@link org.apache.tamaya.environment.RuntimeContext}.
- */
-public final class InitialEnvironmentProvider implements ContextDataProvider{
-
- private static final String STAGE_PROP = "env.STAGE";
- private Map<String,String> contextData = new HashMap<>();
-
- public InitialEnvironmentProvider() {
- try {
- contextData.put("host", InetAddress.getLocalHost().toString());
- } catch (Exception e) {
- Logger.getLogger(getClass().getName()).log(Level.WARNING, e, () -> "Failed to evaluate hostname.");
- }
- contextData.put("timezone", TimeZone.getDefault().getID());
- contextData.put("locale", Locale.getDefault().toString());
- // Copy all env properties....
- for (Entry<String, String> en : System.getenv().entrySet()) {
- contextData.put(en.getKey(), en.getValue());
- }
- String value = System.getProperty(STAGE_PROP);
- if(value==null) {
- value = System.getenv(STAGE_PROP);
- }
- if(value==null){
- value = "DEVELOPMENT";
- }
- contextData.put(STAGE_PROP, value);
- contextData = Collections.unmodifiableMap(contextData);
- }
-
-
- @Override
- public RuntimeContext getContext(RuntimeContext currentContext) {
- return RuntimeContextBuilder.of("root").withParentContext(currentContext)
- .setAll(contextData).build();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.java
new file mode 100644
index 0000000..c1b1001
--- /dev/null
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.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.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.TimeZone;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.tamaya.environment.RuntimeContext;
+import org.apache.tamaya.environment.spi.ContextProviderSpi;
+import org.apache.tamaya.environment.RuntimeContextBuilder;
+
+import javax.annotation.Priority;
+
+/**
+ * Default {@link org.apache.tamaya.environment.RuntimeContext}.
+ */
+@Priority(0)
+public final class InitialEnvironmentProviderSpi implements ContextProviderSpi {
+
+ private static final String STAGE_PROP = "env.STAGE";
+ private Map<String,String> contextData = new HashMap<>();
+
+ public InitialEnvironmentProviderSpi() {
+ try {
+ contextData.put("host", InetAddress.getLocalHost().toString());
+ } catch (Exception e) {
+ Logger.getLogger(getClass().getName()).log(Level.WARNING, e, () -> "Failed to evaluate hostname.");
+ }
+ contextData.put("timezone", TimeZone.getDefault().getID());
+ contextData.put("locale", Locale.getDefault().toString());
+ // Copy all env properties....
+ for (Entry<String, String> en : System.getenv().entrySet()) {
+ contextData.put(en.getKey(), en.getValue());
+ }
+ String value = System.getProperty(STAGE_PROP);
+ if(value==null) {
+ value = System.getenv(STAGE_PROP);
+ }
+ if(value==null){
+ value = "DEVELOPMENT";
+ }
+ contextData.put(STAGE_PROP, value);
+ contextData = Collections.unmodifiableMap(contextData);
+ }
+
+ @Override
+ public void setupContext(RuntimeContextBuilder contextBuilder) {
+ contextBuilder.setAll(contextData);
+ contextBuilder.setContextId("root");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java
index 7ed63b8..d81b8bb 100644
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java
@@ -19,11 +19,14 @@
package org.apache.tamaya.environment.internal;
+import org.apache.tamaya.ConfigException;
import org.apache.tamaya.environment.RuntimeContext;
import org.apache.tamaya.environment.RuntimeContextBuilder;
+import org.apache.tamaya.environment.spi.ContextProviderSpi;
import org.apache.tamaya.spi.ServiceContext;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
/**
* Service for accessing {@link org.apache.tamaya.environment.RuntimeContext}. Environments are used to
@@ -34,35 +37,25 @@ import java.util.*;
* <li>and behaves contextual.
* </ul>
*/
-public class SingleEnvironmentManager implements org.apache.tamaya.environment.spi.ContextSpi{
+public class SingleEnvironmentManager implements org.apache.tamaya.environment.spi.ContextSpi {
- private final List<EnvironmentProvider> environmentProviders = loadEnvironmentProviders();
- private RuntimeContext rootEnvironment = getCurrentEnvironment();
+ private final List<ContextProviderSpi> environmentProviders = loadEnvironmentProviders();
- private List<EnvironmentProvider> loadEnvironmentProviders() {
- List<EnvironmentProvider> providerList = new ArrayList<>();
- for(EnvironmentProvider prov: ServiceContext.getInstance().getServices(EnvironmentProvider.class)){
+ private List<ContextProviderSpi> loadEnvironmentProviders() {
+ List<ContextProviderSpi> providerList = new ArrayList<>();
+ for (ContextProviderSpi prov : ServiceContext.getInstance().getServices(ContextProviderSpi.class)) {
providerList.add(prov);
}
return providerList;
}
@Override
- public RuntimeContext getCurrentEnvironment(){
- RuntimeContextBuilder b = RuntimeContextBuilder.of();
- for(EnvironmentProvider prov: environmentProviders){
- if(prov.isActive()){
- if(prov.isActive()){
- b.setAll(prov.getEnvironmentData());
- }
- }
+ public RuntimeContext getCurrentContext() {
+ RuntimeContextBuilder builder = RuntimeContextBuilder.of("unknown");
+ for (ContextProviderSpi prov : environmentProviders) {
+ prov.setupContext(builder);
}
- return b.build();
- }
-
- @Override
- public RuntimeContext getRootEnvironment(){
- return rootEnvironment;
+ return builder.build();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProvider.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProvider.java
deleted file mode 100644
index f692b95..0000000
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProvider.java
+++ /dev/null
@@ -1,72 +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.metamodel.environment.internal;
-
-import org.apache.tamaya.core.config.ConfigurationFormats;
-import org.apache.tamaya.core.resource.Resource;
-import org.apache.tamaya.environment.spi.ContextDataProvider;
-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.net.URL;
-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 ContextDataProvider {
-
- private static final Logger LOG = Logger.getLogger(SystemClassLoaderEnvironmentProvider.class.getName());
-
- private Map<String,String> data = new HashMap<>();
-
-
- public SystemClassLoaderEnvironmentProvider(){
- List<URL> propertyResources = Resource.getResources(ClassLoader.getSystemClassLoader(),
- "classpath:META-INF/env/system.properties", "classpath:META-INF/env/system.xml", "classpath:META-INF/env/system.ini");
- for(URL 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<URL> resourceSet = new HashSet<>();
- resourceSet.addAll(propertyResources);
- data.put("environment.system.sources", resourceSet.toString());
- this.data = Collections.unmodifiableMap(data);
- }
-
- @Override
- public Map<String,String> getContextData() {
- return data;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.java
new file mode 100644
index 0000000..7eb9cd1
--- /dev/null
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.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.environment.internal;
+
+import org.apache.tamaya.environment.RuntimeContextBuilder;
+import org.apache.tamaya.environment.spi.ContextProviderSpi;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.resource.ConfigResources;
+
+import javax.annotation.Priority;
+import java.io.InputStream;
+import java.net.URL;
+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}.
+ */
+@Priority(1000)
+public class SystemClassLoaderEnvironmentProviderSpi implements ContextProviderSpi {
+
+ private static final Logger LOG = Logger.getLogger(SystemClassLoaderEnvironmentProviderSpi.class.getName());
+
+
+ private Map<String,String> data = new HashMap<>();
+
+ public SystemClassLoaderEnvironmentProviderSpi(){
+ if (data == null) {
+ Collection<URL> propertyUris = getConfigLocations();
+ data = new HashMap<>();
+ for (URL resource : propertyUris) {
+ for (ConfigurationFormat format : getConfigFormats(resource)) {
+ try (InputStream is = resource.openStream()) {
+ data.putAll(format.readConfiguration(resource.toExternalForm(), is).getDefaultSection());
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, e, () -> "Error reading application context data from " + resource);
+ }
+ }
+ }
+ data.put("classloader.type", ClassLoader.getSystemClassLoader().getClass().getName());
+ data.put("classloader.info", "System-Classloader");
+ Set<URL> uris = new HashSet<>();
+ uris.addAll(propertyUris);
+ data.put("context.sources", uris.toString());
+ data = Collections.unmodifiableMap(data);
+ this.data = Collections.unmodifiableMap(data);
+ }
+ }
+
+ protected List<ConfigurationFormat> getConfigFormats(URL url) {
+ return ConfigurationFormats.getFormats(url);
+ }
+
+ protected Collection<URL> getConfigLocations() {
+ return ConfigResources.getResourceResolver().getResources(ClassLoader.getSystemClassLoader(),
+ "classpath:META-INF/context/system.properties", "classpath:META-INF/context/system.xml",
+ "classpath:META-INF/context/system.ini");
+ }
+
+
+ @Override
+ public void setupContext(RuntimeContextBuilder contextBuilder) {
+ if (!data.isEmpty()) {
+ contextBuilder.setAll(data).build();
+ contextBuilder.setContextId("system");
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextDataProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextDataProvider.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextDataProvider.java
deleted file mode 100644
index 99e2c03..0000000
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextDataProvider.java
+++ /dev/null
@@ -1,42 +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.environment.spi;
-
-
-import org.apache.tamaya.environment.RuntimeContext;
-
-
-/**
- * SPI component for evaluating the current runtime context. All registered providers hereby are
- * organized by default depending on their (optional) {@code @Priority} annotation's value. (the
- * effective ordering depends on the current {@link org.apache.tamaya.spi.ServiceContext} implementation
- * active).
- */
-public interface ContextDataProvider {
-
- /**
- * If a data providers identifies a new runtime context level, it should build a new
- * {@link org.apache.tamaya.environment.RuntimeContext} with all the related data to be added to this
- * context, otherwise it should simply return null.
- *
- * @param currentContext the current context, or null for the root context.
- * @return the new current context for the current runtime state, or null.
- */
- public RuntimeContext getContext(RuntimeContext currentContext);
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java
new file mode 100644
index 0000000..d0a8b3e
--- /dev/null
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.environment.spi;
+
+
+import org.apache.tamaya.environment.RuntimeContext;
+import org.apache.tamaya.environment.RuntimeContextBuilder;
+
+
+/**
+ * SPI component for evaluating the current runtime context. All registered providers hereby are
+ * organized by default depending on their (optional) {@code @Priority} annotation's value. (the
+ * effective ordering depends on the current {@link org.apache.tamaya.spi.ServiceContext} implementation
+ * active).
+ */
+public interface ContextProviderSpi {
+
+ public static final String ENVIRONMENT_TYPE = "environment-type";
+
+ /**
+ * If a data providers identifies a new runtime context level, it should build a new
+ * {@link org.apache.tamaya.environment.RuntimeContext} with all the related data to be added to this
+ * context, otherwise it should simply return null.
+ *
+ * @param contextBuilder the current context builder.
+ * @return the new current context for the current runtime state, or null.
+ */
+ void setupContext(RuntimeContextBuilder contextBuilder);
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java b/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java
index 1651aaa..edc5c54 100644
--- a/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java
+++ b/sandbox/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java
@@ -38,10 +38,4 @@ public interface ContextSpi {
*/
RuntimeContext getCurrentContext();
- /**
- * Get the current root environment id.
- * @return the corresponding root environment id, never null.
- */
- RuntimeContext getRootContext();
-
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/EnvironmentManagerTest.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/EnvironmentManagerTest.java b/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/EnvironmentManagerTest.java
deleted file mode 100644
index 958ace6..0000000
--- a/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/EnvironmentManagerTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy 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.Environment;
-import org.junit.Test;
-
-
-import static org.junit.Assert.*;
-
-/**
- * Tests for basic {@link org.apache.tamaya.EnvironmentManager} functionality.
- * Created by Anatole on 17.10.2014.
- */
-public class EnvironmentManagerTest {
-
- @Test
- public void testGetEnvironment(){
- RuntimeContext env = RuntimeContext.current();
- assertNotNull(env);
- RuntimeContext env2 = RuntimeContext.current();
- assertNotNull(env2);
- assertFalse("Current Environments requested in same context are not the same!", env==env2);
- }
-
- @Test
- public void testGetRootEnvironment(){
- RuntimeContext env = RuntimeContext.root();
- assertNotNull(env);
- RuntimeContext env2 = RuntimeContext.root();
- assertNotNull(env2);
- assertTrue("Root Environments requested in same context are not the same!", env==env2);
- }
-
- @Test
- public void testRootIsNotCurrentEnvironment(){
- RuntimeContext env1 = RuntimeContext.root();
- RuntimeContext env2 = RuntimeContext.current();
- assertNotNull(env1);
- assertNotNull(env2);
- // within this testdata environment these are always the same
- assertEquals(env1, env2);
- }
-
- @Test
- public void testEnvironmentOverride(){
- assertEquals(RuntimeContext.root().get("user.country").get(),System.getProperty("user.country"));
- assertEquals(RuntimeContext.current().get("user.country").get(), System.getProperty("user.country"));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java b/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java
new file mode 100644
index 0000000..88b1692
--- /dev/null
+++ b/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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.environment.RuntimeContext;
+import org.apache.tamaya.environment.RuntimeContextProvider;
+import org.junit.Test;
+
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests for basic {@link RuntimeContextProvider} functionality.
+ * Created by Anatole on 17.10.2014.
+ */
+public class RuntimeContextProviderSpiTest {
+
+ @Test
+ public void testGetEnvironment(){
+ RuntimeContext env = RuntimeContextProvider.current();
+ assertNotNull(env);
+ RuntimeContext env2 = RuntimeContextProvider.current();
+ assertNotNull(env2);
+ assertFalse("Current Environments requested in same context are not the same!", env==env2);
+ }
+
+ @Test
+ public void testRootIsNotCurrentEnvironment(){
+ RuntimeContext env1 = RuntimeContextProvider.current();
+ assertNotNull(env1);
+ RuntimeContext env2 = RuntimeContextProvider.current();
+ assertNotNull(env2);
+ // within this testdata environment these are always the same
+ assertEquals(env1, env2);
+ }
+
+ @Test
+ public void testEnvironmentOverride(){
+ assertEquals(RuntimeContextProvider.current().get("env.STAGE"), "MyStage");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java b/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java
index 52227c9..393775f 100644
--- a/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java
+++ b/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java
@@ -18,17 +18,19 @@
*/
package org.apache.tamaya.metamodel.environment;
+import org.apache.tamaya.environment.RuntimeContext;
+import org.apache.tamaya.environment.spi.ContextSpi;
+
/**
* Created by Anatole on 12.09.2014.
*/
-public class TestEnvironmentManagerSingleton implements org.apache.tamaya.metamodel.environment.spi.ContextSpi {
- @Override
- public RuntimeContext getCurrentEnvironment(){
+public class TestEnvironmentManagerSingleton implements ContextSpi {
+
+ public RuntimeContext getCurrentContext(){
return null;
}
- @Override
- public RuntimeContext getRootEnvironment(){
+ public RuntimeContext getRootContext(){
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java b/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java
index 7524a80..11760b9 100644
--- a/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java
+++ b/sandbox/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java
@@ -18,8 +18,10 @@
*/
package org.apache.tamaya.metamodel.environment;
-import org.apache.tamaya.core.spi.EnvironmentProvider;
+import org.apache.tamaya.environment.RuntimeContextBuilder;
+import org.apache.tamaya.environment.spi.ContextProviderSpi;
+import javax.annotation.Priority;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -27,22 +29,19 @@ import java.util.Map;
/**
* Environment provider used by some tests.
*/
-public class TestEnvironmentProvider implements EnvironmentProvider {
+@Priority(2000)
+public class TestEnvironmentProvider implements ContextProviderSpi {
private Map<String, String> data = new HashMap<>();
public TestEnvironmentProvider(){
- data.put("user.country", System.getProperty("user.country"));
+ data.put("env.STAGE", "MyStage");
data.put("java.version", System.getProperty("java.version"));
data = Collections.unmodifiableMap(data);
}
- @Override
- public boolean isActive() {
- return true;
- }
@Override
- public Map<String, String> getEnvironmentData() {
- return data;
+ public void setupContext(RuntimeContextBuilder contextBuilder){
+ contextBuilder.setAll(data);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi b/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi
new file mode 100644
index 0000000..7f71c15
--- /dev/null
+++ b/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi
@@ -0,0 +1,23 @@
+#
+# 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.environment.internal.ClassLoaderDependentAppEnvironmentProvider
+org.apache.tamaya.environment.internal.ClassLoaderDependentEarEnvironmentProvider
+org.apache.tamaya.environment.internal.InitialEnvironmentProviderSpi
+org.apache.tamaya.environment.internal.SystemClassLoaderEnvironmentProviderSpi
+org.apache.tamaya.metamodel.environment.TestEnvironmentProvider
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf7980e3/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi
----------------------------------------------------------------------
diff --git a/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi b/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi
index 8915399..166dd67 100644
--- a/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi
+++ b/sandbox/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi
@@ -16,4 +16,4 @@
# specific language governing permissions and limitations
# under the License.
#
-org.apache.tamaya.environment.SingleEnvironmentManager
+org.apache.tamaya.environment.internal.SingleEnvironmentManager
[2/2] incubator-tamaya git commit: Added introduction section.
Posted by an...@apache.org.
Added introduction section.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/4f8d167b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/4f8d167b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/4f8d167b
Branch: refs/heads/master
Commit: 4f8d167be6e56497cb409982b32f7df3af4cc53d
Parents: cf7980e
Author: anatole <an...@apache.org>
Authored: Fri May 22 00:03:28 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Fri May 22 00:03:28 2015 +0200
----------------------------------------------------------------------
docs/index.adoc | 72 +++++++++++++++++++++++++++++++++++-----------------
1 file changed, 49 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/4f8d167b/docs/index.adoc
----------------------------------------------------------------------
diff --git a/docs/index.adoc b/docs/index.adoc
index c7ef8ec..5707fc5 100644
--- a/docs/index.adoc
+++ b/docs/index.adoc
@@ -68,24 +68,48 @@ under the License.
<<<
== Introduction
-This documentation describes the Tamaya Configuration System. It provides an overview of the different building blocks and
-links you to more detailed documentations.
+[[WhatIsTamaya]]
+=== What is Apache Tamaya?
+Tamaya is a very powerful yet flexible configuration solution. It's core is built based on a few simple concepts.
+Summarizing Tamaya provides you
+* a simple _key/value_ configuration model.
+* a uniform API for accessing _configuration_, regardless if you are running in a Java SE, Java EE or OSGI environment.
+ This API is capable of hiding all the complexities in configuration management, your developers only need to know,
+ where and in which format configuration can be added to the system.
+* A +ConfigurationBuilder+ allowing you to create a configuration completely manually and managing the configuration
+ lifecycle on your own.
+* a minimalistic implementation, which in the future might also be targeting Java ME environments.
+* a powerful SPI that allows you to extend/adapt Tamaya with all kind of additional mechanisms commonly used in
+ many use cases.
+* a bunch of modules that can be added to your classpath thus adding different functionality to your system as needed.
+
+=== What is Apache Tamaya NOT?
+
+Nevertheless there are a few things that are not part of Tamaya:
+
+* Tamaya comes as a modular framework, where you have to decide, which features make sense for you. So you have to do
+ a selection, which modules make sense.
+* Though Tamaya comes with a very minimalistic configuration scheme out-of-the-box, it does by default typically not
+ cover your enterprise requirements. Also here Tamaya offers hooks and examples showing how you can easily
+ replace your current configuration logic with Tamaya. So you must know how you want to organize configuration in
+ your enterprise context, such as supported file locations, formats, overriding and filter rules etc.
+
+
+[[WorkingGroup]]
=== Working Group
This work is being conducted as part of a community lead joint effort under the Apache Software Foundation. This
specification is the result of the collaborative work of the members of the Tamaya Users Group and the community at
large.
-
=== Goals
Configuration is a key feature in all kind of programming languages. Basically configuration is the parametrization of
well defined aspects of a software product without having to recompile/rebuild the code. Summarizing configuration
can affect basically every part of a system, which renders configuration to a real cross-cutting concern, usable in
many facets.
-
-==== Targets
+=== Targets
Tamaya targets to support all general configuration aspects in a system, e.g.
* application configuration
@@ -109,15 +133,6 @@ Since configuration is implemented and applied in various ways Tamaya will allow
* configuration filtering and property adapters
* configuration of collections
-
-=== Required Java version
-The full API is based on Java SE 8.0 language features, whereas a compatible implementation of API and Core
-is similarly available for Java SE 7 as well.
-
-
-== Overview
-=== How is Tamaya organized
-
The Tamaya project consists of the following parts:
* The link:API.html[API] is a complete SE based configuration API, that provides the minimum of functionality needed.
@@ -139,13 +154,26 @@ to go, but you may want to add additional extensions that provide more features
** Integration with other frameworks as configuration consumer or producer.
* Finally the *documentation* module provides comprehensive documentation on all features provided.
-== Further Information
-There is further documentation available describing in more detail
-* link:usecases.html[Possible Use Cases]
-* link:requirements.html[Requirements].
+=== Required Java version
+The full API is based on Java SE 8.0 language features, whereas a compatible implementation of API and Core
+is similarly available for Java SE 7 as well.
+
-== Detailed Documentation
+== Where should I continue
+
+=== Further Documentation
+
+* If you want to have a deeper look at the API/SPI, we recommend the link:API.html[API documentation].
+* If you want to have an overview about the available modules, continue link:modules.html[here].
+* If you want to look to the numerous examples, continue link:examples.html[here].
+* If you are interested in the software design in place, continue link:HighLevelDesign.html[here].
+
+Finally
+* If you are interested in the collected requirements, continue link:Requirements.html[here].
+* If you are interested in the collected use cases, continue link:usecases.html[here].
+
+=== API Documentation
Javadoc of the current API
@@ -159,11 +187,9 @@ Javadoc of the current Core Implementation
Javadoc of the current Extension Modules
-* link:modules.html[General Module Documentation]
-
-== Examples
+=== Examples
-* A comprehensive set of examples can be found link:../examples.html[here].
+A comprehensive set of examples can be found link:../examples.html[here].