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/01/26 00:34:43 UTC
[2/3] incubator-tamaya git commit: TAMAYA-63: Aligned API with Java
7. Fixed issues. TAMAYA 61: Implemented value combination interface logic.
TAMAYA-63: Aligned API with Java 7. Fixed issues.
TAMAYA 61: Implemented value combination interface logic.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/3520c835
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/3520c835
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/3520c835
Branch: refs/heads/master
Commit: 3520c835a54a8f4b6c5e21e1109e9bb3b9cbb22b
Parents: a95b0ba
Author: anatole <an...@apache.org>
Authored: Sun Jan 25 23:43:15 2015 +0100
Committer: anatole <an...@apache.org>
Committed: Mon Jan 26 00:33:42 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/tamaya/Configuration.java | 26 +++
.../apache/tamaya/spi/ConfigurationContext.java | 6 +
.../spi/PropertyValueCombinationPolicy.java | 2 +-
.../core/internal/DefaultConfiguration.java | 200 ++++++++++++++++++-
.../internal/DefaultConfigurationContext.java | 165 ++++++++++++++-
.../services/org.apache.tamaya.Configuration | 19 --
.../org.apache.tamaya.spi.ConfigurationContext | 19 --
7 files changed, 388 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/3520c835/java8/api/src/main/java/org/apache/tamaya/Configuration.java
----------------------------------------------------------------------
diff --git a/java8/api/src/main/java/org/apache/tamaya/Configuration.java b/java8/api/src/main/java/org/apache/tamaya/Configuration.java
index 4ee7f21..3b81775 100644
--- a/java8/api/src/main/java/org/apache/tamaya/Configuration.java
+++ b/java8/api/src/main/java/org/apache/tamaya/Configuration.java
@@ -19,6 +19,7 @@
package org.apache.tamaya;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalInt;
@@ -109,6 +110,31 @@ public interface Configuration {
}
/**
+ * Get the property keys as type {@code Class<T>}.
+ * <p>
+ * If {@code Class<T>} is not one current
+ * {@code Boolean, Short, Integer, Long, Float, Double, BigInteger,
+ * BigDecimal, String} , an according converter must be
+ * available to perform the conversion fromMap {@link String} to
+ * {@code Class<T>}.
+ *
+ * @param key the property's absolute, or relative path, e.g. @code
+ * a/b/c/d.myProperty}.
+ * @param converter the PropertyConverter to perform the conversion fromMap
+ * {@link String} to {@code Class<T>}, not {@code null}.
+ * @return the property's keys.
+ * @throws ConfigException if the keys could not be converted to the required target
+ * type, or no such property exists.
+ */
+ default <T> T get(String key, PropertyConverter<T> converter) {
+ String value = get(key);
+ if (value!=null) {
+ return Objects.requireNonNull(converter).convert(value);
+ }
+ return null;
+ }
+
+ /**
* Access all current known Configuration properties as a full {@code Map<String,String>}.
* Be aware that entries from non scannable parts of the registered {@link org.apache.tamaya.spi.PropertySource}
* instances may not be contained in the result, but nevertheless be accessible calling one of the
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/3520c835/java8/api/src/main/java/org/apache/tamaya/spi/ConfigurationContext.java
----------------------------------------------------------------------
diff --git a/java8/api/src/main/java/org/apache/tamaya/spi/ConfigurationContext.java b/java8/api/src/main/java/org/apache/tamaya/spi/ConfigurationContext.java
index 1848428..b7cd843 100644
--- a/java8/api/src/main/java/org/apache/tamaya/spi/ConfigurationContext.java
+++ b/java8/api/src/main/java/org/apache/tamaya/spi/ConfigurationContext.java
@@ -141,4 +141,10 @@ public interface ConfigurationContext {
*/
List<PropertyFilter> getPropertyFilters();
+ /**
+ * Access the {@link org.apache.tamaya.spi.PropertyValueCombinationPolicy} used to evaluate the final
+ * property values.
+ * @return the {@link org.apache.tamaya.spi.PropertyValueCombinationPolicy} used, never null.
+ */
+ PropertyValueCombinationPolicy getPropertyValueCombinationPolicy();
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/3520c835/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java b/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
index 660cc11..ffc2bd7 100644
--- a/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
+++ b/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
@@ -35,7 +35,7 @@ public interface PropertyValueCombinationPolicy {
* entry evaluated by {@code propertySource.get(key)}.
*/
public final PropertyValueCombinationPolicy DEFAULT_OVERRIDING_COLLECTOR = (current, key, propertySource) ->
- Optional.ofNullable(propertySource.get(key)).orElse(current);
+ Optional.ofNullable(propertySource.get(key)).filter(s -> !s.isEmpty()).orElse(current);
/**
* Method that is called for each value evaluated by a PropertySource for the given key. This method is called
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/3520c835/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java b/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
index be1ae81..ee827b7 100644
--- a/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
+++ b/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
@@ -18,30 +18,218 @@
*/
package org.apache.tamaya.core.internal;
-
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.TypeLiteral;
import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.PropertyConverter;
+import org.apache.tamaya.spi.PropertyFilter;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
/**
* Implementation of the Configuration API. This class uses the current {@link ConfigurationContext} to evaluate the
* chain of {@link org.apache.tamaya.spi.PropertySource} and {@link org.apache.tamaya.spi.PropertyFilter}
* instance to evaluate the current Configuration.
*/
-public class DefaultConfiguration extends BaseConfiguration {
+public class DefaultConfiguration implements Configuration {
+ /**
+ * The logger.
+ */
+ private static final Logger LOG = Logger.getLogger(DefaultConfiguration.class.getName());
+ /**
+ * The maximal number of filter cycles performed before aborting.
+ */
+ private static final int MAX_FILTER_LOOPS = 10;
/**
* The current {@link org.apache.tamaya.spi.ConfigurationContext} of the current instance.
*/
private final ConfigurationContext configurationContext;
- public DefaultConfiguration(ConfigurationContext context){
- this.configurationContext = Objects.requireNonNull(context);
+ /**
+ * Constructor.
+ * @param configurationContext The configuration Context to be used.
+ */
+ public DefaultConfiguration(ConfigurationContext configurationContext){
+ this.configurationContext = Objects.requireNonNull(configurationContext);
}
+ /**
+ * This method evaluates the given configuration key. Hereby if goes down the chain or PropertySource instances
+ * provided by the current {@link org.apache.tamaya.spi.ConfigurationContext}. The first non-null-value returned
+ * is taken as an intermediate value. Finally the value is filtered through the
+ * {@link org.apache.tamaya.spi.PropertyFilter} instances installed, before it is returned as the final result of
+ * this method.
+ *
+ * @param key the property's key, not null.
+ * @return the optional configuration value, never null.
+ */
+ @Override
+ public String get(String key) {
+ List<PropertySource> propertySources = configurationContext.getPropertySources();
+ String unfilteredValue = null;
+ PropertyValueCombinationPolicy combinationPolicy = this.configurationContext
+ .getPropertyValueCombinationPolicy();
+ for (PropertySource propertySource : propertySources) {
+ unfilteredValue = combinationPolicy.collect(unfilteredValue, key, propertySource);
+ }
+ return applyFilter(key, unfilteredValue);
+ }
+ /**
+ * Apply filters to a single property value.
+ *
+ * @param key the key, used for logging, not null.
+ * @param unfilteredValue the unfiltered property value.
+ * @return the filtered value, or null.
+ */
+ private String applyFilter(String key, String unfilteredValue) {
+ // Apply filters to values, prevent values filtered to null!
+ for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
+ boolean changed = false;
+ // Apply filters to values, prevent values filtered to null!
+ for (PropertyFilter filter : configurationContext.getPropertyFilters()) {
+ String newValue = filter.filterProperty(key, unfilteredValue);
+ if (newValue != null && !newValue.equals(unfilteredValue)) {
+ changed = true;
+ if (LOG.isLoggable(Level.FINEST)) {
+ LOG.finest("Filter - " + key + ": " + unfilteredValue + " -> " + newValue + " by " + filter);
+ }
+ } else if (unfilteredValue != null && !unfilteredValue.equals(newValue)) {
+ changed = true;
+ if (LOG.isLoggable(Level.FINEST)) {
+ LOG.finest("Filter - " + key + ": " + unfilteredValue + " -> " + newValue + " by " + filter);
+ }
+ }
+ unfilteredValue = newValue;
+ }
+ if (!changed) {
+ LOG.finest(() -> "Finishing filter loop, no changes detected.");
+ break;
+ } else {
+ if (i == (MAX_FILTER_LOOPS - 1)) {
+ if (LOG.isLoggable(Level.WARNING)) {
+ LOG.warning("Maximal filter loop count reached, aborting filter evaluation after cycles: " + i);
+ }
+ } else {
+ LOG.finest(() -> "Repeating filter loop, changes detected.");
+ }
+ }
+ }
+ return unfilteredValue;
+ }
+
+ /**
+ * Get the current properties, composed by the loaded {@link org.apache.tamaya.spi.PropertySource} and filtered
+ * by registered {@link org.apache.tamaya.spi.PropertyFilter}.
+ *
+ * @return the final properties.
+ */
@Override
- protected ConfigurationContext getConfigurationContext() {
- return configurationContext;
+ public Map<String, String> getProperties() {
+ List<PropertySource> propertySources = new ArrayList<>(configurationContext.getPropertySources());
+ Collections.reverse(propertySources);
+ Map<String, String> result = new HashMap<>();
+ for (PropertySource propertySource : propertySources) {
+ try {
+ int origSize = result.size();
+ Map<String, String> otherMap = propertySource.getProperties();
+ LOG.log(Level.FINEST, null, () -> "Overriding with properties from " + propertySource.getName());
+ result.putAll(otherMap);
+ LOG.log(Level.FINEST, null, () -> "Handled properties from " + propertySource.getName() + "(new: " +
+ (result.size() - origSize) + ", overrides: " + origSize + ", total: " + result.size());
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, "Error adding properties from PropertySource: " + propertySource + ", ignoring PropertySource.", e);
+ }
+ }
+ return applyFilters(result);
+ }
+
+ /**
+ * Filter a full configuration property map.
+ *
+ * @param inputMap the unfiltered map
+ * @return the filtered map.
+ */
+ private Map<String, String> applyFilters(Map<String, String> inputMap) {
+ // Apply filters to values, prevent values filtered to null!
+ for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
+ AtomicInteger changes = new AtomicInteger();
+ for (PropertyFilter filter : configurationContext.getPropertyFilters()) {
+ inputMap.replaceAll((k, v) -> {
+ String newValue = filter.filterProperty(k, v);
+ if (newValue != null && !newValue.equals(v)) {
+ changes.incrementAndGet();
+ LOG.finest(() -> "Filter - " + k + ": " + v + " -> " + newValue + " by " + filter);
+ } else if (v != null && !v.equals(newValue)) {
+ changes.incrementAndGet();
+ LOG.finest(() -> "Filter - " + k + ": " + v + " -> " + newValue + " by " + filter);
+ }
+ return newValue;
+ });
+ }
+ if (changes.get() == 0) {
+ LOG.finest(() -> "Finishing filter loop, no changes detected.");
+ break;
+ } else {
+ if (i == (MAX_FILTER_LOOPS - 1)) {
+ if (LOG.isLoggable(Level.WARNING)) {
+ LOG.warning("Maximal filter loop count reached, aborting filter evaluation after cycles: " + i);
+ }
+ } else {
+ LOG.finest(() -> "Repeating filter loop, changes detected: " + changes.get());
+ }
+ changes.set(0);
+ }
+ }
+ // Remove null values
+ return inputMap.entrySet().parallelStream().filter((e) -> e.getValue() != null).collect(
+ Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue()));
+ }
+
+ /**
+ * Accesses the current String value for the given key (see {@link #getOptional(String)}) and tries to convert it
+ * using the {@link org.apache.tamaya.PropertyConverter} instances provided by the current
+ * {@link org.apache.tamaya.spi.ConfigurationContext}.
+ *
+ * @param key the property's absolute, or relative path, e.g. @code
+ * a/b/c/d.myProperty}.
+ * @param type The target type required, not null.
+ * @param <T> the value type
+ * @return the converted value, never null.
+ */
+ @Override
+ public <T> T get(String key, TypeLiteral<T> type) {
+ Optional<String> value = getOptional(key);
+ if (value.isPresent()) {
+ List<PropertyConverter<T>> converters = configurationContext.getPropertyConverters(type);
+ for (PropertyConverter<T> converter : converters) {
+ try {
+ T t = converter.convert(value.get());
+ if (t != null) {
+ return t;
+ }
+ } catch (Exception e) {
+ LOG.log(Level.FINEST, e, () -> "PropertyConverter: " + converter +
+ " failed to convert value: " + value.get());
+ }
+ }
+ throw new ConfigException("Unparseable config value for type: " + type.getType() + ": " + key);
+ }
+
+ return null;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/3520c835/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
----------------------------------------------------------------------
diff --git a/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java b/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
index ffd3724..44376a4 100644
--- a/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
+++ b/java8/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
@@ -18,18 +18,61 @@
*/
package org.apache.tamaya.core.internal;
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.PropertyConverter;
import org.apache.tamaya.spi.PropertyFilter;
import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
import org.apache.tamaya.spi.ServiceContext;
+import javax.annotation.Priority;
+import javax.xml.ws.Service;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.StringJoiner;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.StampedLock;
+import java.util.function.Function;
+import java.util.logging.Logger;
/**
* Default Implementation of a simple ConfigurationContext.
*/
-public class DefaultConfigurationContext extends BaseConfigurationContext {
+public class DefaultConfigurationContext implements ConfigurationContext {
+ /** The logger used. */
+ private final static Logger LOG = Logger.getLogger(DefaultConfigurationContext.class.getName());
+ /**
+ * Cubcomponent handling {@link org.apache.tamaya.PropertyConverter} instances.
+ */
+ private PropertyConverterManager propertyConverterManager = new PropertyConverterManager();
+
+ /**
+ * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertySource} instances.
+ */
+ private List<PropertySource> immutablePropertySources;
+
+ /**
+ * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertyFilter} instances.
+ */
+ private List<PropertyFilter> immutablePropertyFilters;
+
+ /**
+ * The overriding policy used when combining PropertySources registered to evalute the final configuration
+ * values.
+ */
+ private PropertyValueCombinationPolicy propertyValueCombinationPolicy;
+
+ /**
+ * Lock for internal synchronization.
+ */
+ private StampedLock propertySourceLock = new StampedLock();
+
/**
* The first time the Configuration system gets invoked we do initialize
@@ -47,15 +90,129 @@ public class DefaultConfigurationContext extends BaseConfigurationContext {
// now sort them according to their ordinal values
Collections.sort(propertySources, this::comparePropertySources);
-
- setImmutablePropertySources(Collections.unmodifiableList(propertySources));
+ immutablePropertySources = Collections.unmodifiableList(propertySources);
+ LOG.info(() -> "Registered " + immutablePropertySources.size() + " property sources: " +
+ createStringList(immutablePropertySources,ps -> ps.getName() + '[' + ps.getClass().getName()+']'));
// as next step we pick up the PropertyFilters pretty much the same way
List<PropertyFilter> propertyFilters = new ArrayList<>();
propertyFilters.addAll(ServiceContext.getInstance().getServices(PropertyFilter.class));
Collections.sort(propertyFilters, this::comparePropertyFilters);
+ immutablePropertyFilters = Collections.unmodifiableList(propertyFilters);
+ LOG.info(() -> "Registered " + immutablePropertyFilters.size() + " property filters: " +
+ createStringList(immutablePropertyFilters,f -> f.getClass().getName()));
+
+ propertyValueCombinationPolicy = ServiceContext.getInstance().getService(PropertyValueCombinationPolicy.class)
+ .orElse(PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR);
+ LOG.info(() -> "Using PropertyValueCombinationPolicy: " + propertyValueCombinationPolicy);
+ }
+
+ /**
+ * Pick up all {@link org.apache.tamaya.spi.PropertySourceProvider}s and return all the
+ * {@link org.apache.tamaya.spi.PropertySource}s they like to register.
+ */
+ private Collection<? extends PropertySource> evaluatePropertySourcesFromProviders() {
+ List<PropertySource> propertySources = new ArrayList<>();
+ List<PropertySourceProvider> propertySourceProviders = ServiceContext.getInstance().getServices(PropertySourceProvider.class);
+ for (PropertySourceProvider propertySourceProvider : propertySourceProviders) {
+ Collection<PropertySource> sources = propertySourceProvider.getPropertySources();
+ LOG.finer(() -> "PropertySourceProvider " + propertySourceProvider.getClass().getName() +
+ " provided the following property sources: " +
+ createStringList(sources,ps -> ps.getName() + '[' + ps.getClass().getName()+']'));
+ propertySources.addAll(sources);
+ }
+ return propertySources;
+ }
+
+ @Override
+ public void addPropertySources(PropertySource... propertySourcesToAdd) {
+ Lock writeLock = propertySourceLock.asWriteLock();
+ try {
+ writeLock.lock();
+ List<PropertySource> newPropertySources = new ArrayList<>(this.immutablePropertySources);
+ newPropertySources.addAll(Arrays.asList(propertySourcesToAdd));
+ Collections.sort(newPropertySources, this::comparePropertySources);
+
+ this.immutablePropertySources = Collections.unmodifiableList(newPropertySources);
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ /**
+ * Order property source reversely, the most important come first.
+ *
+ * @param source1 the first PropertySource
+ * @param source2 the second PropertySource
+ * @return the comparison result.
+ */
+ private int comparePropertySources(PropertySource source1, PropertySource source2) {
+ if (source1.getOrdinal() < source2.getOrdinal()) {
+ return -1;
+ } else if (source1.getOrdinal() > source2.getOrdinal()) {
+ return 1;
+ } else {
+ return source1.getClass().getName().compareTo(source2.getClass().getName());
+ }
+ }
+
+ /**
+ * Compare 2 filters for ordering the filter chain.
+ *
+ * @param filter1 the first filter
+ * @param filter2 the second filter
+ * @return the comparison result
+ */
+ private int comparePropertyFilters(PropertyFilter filter1, PropertyFilter filter2) {
+ Priority prio1 = filter1.getClass().getAnnotation(Priority.class);
+ Priority prio2 = filter2.getClass().getAnnotation(Priority.class);
+ int ord1 = prio1 != null ? prio1.value() : 0;
+ int ord2 = prio2 != null ? prio2.value() : 0;
+
+ if (ord1 < ord2) {
+ return -1;
+ } else if (ord1 > ord2) {
+ return 1;
+ } else {
+ return filter1.getClass().getName().compareTo(filter2.getClass().getName());
+ }
+ }
+
+ @Override
+ public List<PropertySource> getPropertySources() {
+ return immutablePropertySources;
+ }
+
+ @Override
+ public <T> void addPropertyConverter(TypeLiteral<T> typeToConvert, PropertyConverter<T> propertyConverter) {
+ propertyConverterManager.register(typeToConvert, propertyConverter);
+ LOG.info(() -> "Added PropertyConverter: " + propertyConverter.getClass().getName());
+ }
+
+ @Override
+ public Map<TypeLiteral<?>, List<PropertyConverter<?>>> getPropertyConverters() {
+ return propertyConverterManager.getPropertyConverters();
+ }
+
+ @Override
+ public <T> List<PropertyConverter<T>> getPropertyConverters(TypeLiteral<T> targetType) {
+ return propertyConverterManager.getPropertyConverters(targetType);
+ }
+
+ @Override
+ public List<PropertyFilter> getPropertyFilters() {
+ return immutablePropertyFilters;
+ }
+
+ @Override
+ public PropertyValueCombinationPolicy getPropertyValueCombinationPolicy(){
+ return propertyValueCombinationPolicy;
+ }
- setImmutablePropertyFilters(Collections.unmodifiableList(propertyFilters));
+ private <T> String createStringList(Collection<T> propertySources, Function<T,String> mapper){
+ StringJoiner joiner = new StringJoiner(", ");
+ propertySources.forEach(t -> joiner.add(mapper.apply(t)));
+ return joiner.toString();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/3520c835/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.Configuration
----------------------------------------------------------------------
diff --git a/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.Configuration b/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.Configuration
deleted file mode 100644
index 0db8402..0000000
--- a/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.Configuration
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy current the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-org.apache.tamaya.core.internal.DefaultConfiguration
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/3520c835/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationContext
----------------------------------------------------------------------
diff --git a/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationContext b/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationContext
deleted file mode 100644
index 32b4302..0000000
--- a/java8/core/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationContext
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy current the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-org.apache.tamaya.core.internal.DefaultConfigurationContext
\ No newline at end of file