You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2018/01/03 08:37:35 UTC
[1/2] incubator-tamaya-sandbox git commit: Rewrite/adaptation based
on JSR API.
Repository: incubator-tamaya-sandbox
Updated Branches:
refs/heads/configjsr [created] f7037fbdc
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirConfigSourceProvider.java
----------------------------------------------------------------------
diff --git a/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirConfigSourceProvider.java b/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirConfigSourceProvider.java
new file mode 100644
index 0000000..8da14ca
--- /dev/null
+++ b/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirConfigSourceProvider.java
@@ -0,0 +1,82 @@
+/*
+ * 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.propertysources;
+
+
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.format.MappedConfigurationDataConfigSource;
+import org.apache.tamaya.resource.AbstractPathConfigSourceProvider;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A property provider implementation that tries to read all files in a directory as
+ * configuration.
+ */
+public class ConfigDirConfigSourceProvider extends AbstractPathConfigSourceProvider {
+
+ public ConfigDirConfigSourceProvider() {
+ super(getConfigLocation());
+ }
+
+ private static String getConfigLocation() {
+ String location = System.getProperty("configdir");
+ if (location == null) {
+ location = "./config";
+ }
+ if (!location.endsWith("/")) {
+ location += "/";
+ }
+ if (!location.startsWith("file:")) {
+ location = "file:" + location;
+ }
+ return location + "**/*.*";
+ }
+
+ @Override
+ protected Collection<PropertySource> getPropertySources(URL url) {
+ try {
+ ConfigurationData config = ConfigurationFormats.readConfigurationData(url);
+ if (config == null) {
+ Logger.getLogger(getClass().getName()).log(Level.INFO,
+ "Failed to read configuration from " + url);
+ return Collections.emptySet();
+ }
+ return asCollection(new MappedConfigurationDataConfigSource(config));
+ } catch (Exception e) {
+ Logger.getLogger(getClass().getName()).log(Level.SEVERE,
+ "Failed to read configuration from " + url, e);
+ return Collections.emptySet();
+ }
+ }
+
+ private Collection<PropertySource> asCollection(PropertySource propertySource) {
+ List<PropertySource> result = new ArrayList<>(1);
+ result.add(propertySource);
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirPropertySourceProvider.java b/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirPropertySourceProvider.java
deleted file mode 100644
index 19a7dfb..0000000
--- a/propertysources/src/main/java/org/apache/tamaya/propertysources/ConfigDirPropertySourceProvider.java
+++ /dev/null
@@ -1,82 +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.propertysources;
-
-
-import org.apache.tamaya.format.ConfigurationData;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.format.MappedConfigurationDataPropertySource;
-import org.apache.tamaya.resource.AbstractPathPropertySourceProvider;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A property provider implementation that tries to read all files in a directory as
- * configuration.
- */
-public class ConfigDirPropertySourceProvider extends AbstractPathPropertySourceProvider {
-
- public ConfigDirPropertySourceProvider() {
- super(getConfigLocation());
- }
-
- private static String getConfigLocation() {
- String location = System.getProperty("configdir");
- if (location == null) {
- location = "./config";
- }
- if (!location.endsWith("/")) {
- location += "/";
- }
- if (!location.startsWith("file:")) {
- location = "file:" + location;
- }
- return location + "**/*.*";
- }
-
- @Override
- protected Collection<PropertySource> getPropertySources(URL url) {
- try {
- ConfigurationData config = ConfigurationFormats.readConfigurationData(url);
- if (config == null) {
- Logger.getLogger(getClass().getName()).log(Level.INFO,
- "Failed to read configuration from " + url);
- return Collections.emptySet();
- }
- return asCollection(new MappedConfigurationDataPropertySource(config));
- } catch (Exception e) {
- Logger.getLogger(getClass().getName()).log(Level.SEVERE,
- "Failed to read configuration from " + url, e);
- return Collections.emptySet();
- }
- }
-
- private Collection<PropertySource> asCollection(PropertySource propertySource) {
- List<PropertySource> result = new ArrayList<>(1);
- result.add(propertySource);
- return result;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigConfigSourceProvider.java
----------------------------------------------------------------------
diff --git a/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigConfigSourceProvider.java b/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigConfigSourceProvider.java
new file mode 100644
index 0000000..48fd563
--- /dev/null
+++ b/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigConfigSourceProvider.java
@@ -0,0 +1,63 @@
+/*
+ * 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.propertysources;
+
+
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.format.MappedConfigurationDataConfigSource;
+import org.apache.tamaya.resource.AbstractPathConfigSourceProvider;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Property source provider that reads all resources from {@code META-INF/config/**}
+ * into configuration sources..
+ */
+public class MetainfConfigConfigSourceProvider extends AbstractPathConfigSourceProvider {
+
+ public MetainfConfigConfigSourceProvider() {
+ super("classpath:META-INF/config/**/*.*");
+ }
+
+ @Override
+ protected Collection<PropertySource> getPropertySources(URL url) {
+ try {
+ ConfigurationData config = ConfigurationFormats.readConfigurationData(url);
+ return asCollection(new MappedConfigurationDataConfigSource(config));
+ } catch (Exception e) {
+ Logger.getLogger(getClass().getName()).log(Level.SEVERE,
+ "Failed to read configuration from " + url, e);
+ return Collections.emptySet();
+ }
+ }
+
+ private Collection<PropertySource> asCollection(PropertySource propertySource) {
+ List<PropertySource> result = new ArrayList<>(1);
+ result.add(propertySource);
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProvider.java b/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProvider.java
deleted file mode 100644
index fe5759f..0000000
--- a/propertysources/src/main/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProvider.java
+++ /dev/null
@@ -1,63 +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.propertysources;
-
-
-import org.apache.tamaya.format.ConfigurationData;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.format.MappedConfigurationDataPropertySource;
-import org.apache.tamaya.resource.AbstractPathPropertySourceProvider;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Property source provider that reads all resources from {@code META-INF/config/**}
- * into configuration sources..
- */
-public class MetainfConfigPropertySourceProvider extends AbstractPathPropertySourceProvider {
-
- public MetainfConfigPropertySourceProvider() {
- super("classpath:META-INF/config/**/*.*");
- }
-
- @Override
- protected Collection<PropertySource> getPropertySources(URL url) {
- try {
- ConfigurationData config = ConfigurationFormats.readConfigurationData(url);
- return asCollection(new MappedConfigurationDataPropertySource(config));
- } catch (Exception e) {
- Logger.getLogger(getClass().getName()).log(Level.SEVERE,
- "Failed to read configuration from " + url, e);
- return Collections.emptySet();
- }
- }
-
- private Collection<PropertySource> asCollection(PropertySource propertySource) {
- List<PropertySource> result = new ArrayList<>(1);
- result.add(propertySource);
- return result;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java
----------------------------------------------------------------------
diff --git a/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java b/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java
index 0250ff6..541b404 100644
--- a/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java
+++ b/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java
@@ -29,7 +29,7 @@ public class MetainfConfigPropertySourceProviderTest {
@Test
public void getPropertySources_Default() throws Exception {
- MetainfConfigPropertySourceProvider provider = new MetainfConfigPropertySourceProvider();
+ MetainfConfigConfigSourceProvider provider = new MetainfConfigConfigSourceProvider();
assertNotNull(provider.getPropertySources());
// TODO add test for containing property sources.
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/remote/pom.xml
----------------------------------------------------------------------
diff --git a/remote/pom.xml b/remote/pom.xml
index 37f2bf5..4f82181 100644
--- a/remote/pom.xml
+++ b/remote/pom.xml
@@ -33,11 +33,6 @@ under the License.
<dependencies>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/uom/pom.xml
----------------------------------------------------------------------
diff --git a/uom/pom.xml b/uom/pom.xml
index 8b29c85..2103499 100644
--- a/uom/pom.xml
+++ b/uom/pom.xml
@@ -31,12 +31,6 @@
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>${project.parent.version}</version>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/usagetracker/pom.xml
----------------------------------------------------------------------
diff --git a/usagetracker/pom.xml b/usagetracker/pom.xml
index 06cb59a..c1b00ff 100644
--- a/usagetracker/pom.xml
+++ b/usagetracker/pom.xml
@@ -36,11 +36,6 @@ under the License.
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>${project.parent.version}</version>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/validation/pom.xml
----------------------------------------------------------------------
diff --git a/validation/pom.xml b/validation/pom.xml
index 870bcaa..58859c5 100644
--- a/validation/pom.xml
+++ b/validation/pom.xml
@@ -35,11 +35,6 @@
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>${project.parent.version}</version>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/vertx/pom.xml
----------------------------------------------------------------------
diff --git a/vertx/pom.xml b/vertx/pom.xml
index ede9c64..0348fd5 100644
--- a/vertx/pom.xml
+++ b/vertx/pom.xml
@@ -40,11 +40,6 @@
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>${project.parent.version}</version>
<scope>test</scope>
[2/2] incubator-tamaya-sandbox git commit: Rewrite/adaptation based
on JSR API.
Posted by an...@apache.org.
Rewrite/adaptation based on JSR API.
Signed-off-by: Anatole Tresch <an...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/f7037fbd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/f7037fbd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/f7037fbd
Branch: refs/heads/configjsr
Commit: f7037fbdc68878401b9f85b48c0b31bd7a1ebb24
Parents: 31bdbd2
Author: Anatole Tresch <an...@apache.org>
Authored: Wed Jan 3 09:37:16 2018 +0100
Committer: Anatole Tresch <an...@apache.org>
Committed: Wed Jan 3 09:37:16 2018 +0100
----------------------------------------------------------------------
apache-commons/pom.xml | 5 -
camel/pom.xml | 5 -
collections/pom.xml | 5 -
configured-sysprops/pom.xml | 5 -
consul/pom.xml | 5 -
.../tamaya/consul/ConsulConfigSource.java | 241 ++++++++++++++++
.../tamaya/consul/ConsulPropertySource.java | 247 ----------------
.../org.apache.tamaya.spi.PropertySource | 2 +-
.../tamaya/consul/ConsulPropertySourceTest.java | 16 +-
.../apache/tamaya/consul/ConsulWriteTest.java | 13 +-
etcd/pom.xml | 5 -
.../apache/tamaya/etcd/EtcdConfigSource.java | 245 ++++++++++++++++
.../apache/tamaya/etcd/EtcdPropertySource.java | 281 -------------------
.../services/javax.config.spi.ConfigSource | 19 ++
.../org.apache.tamaya.spi.PropertySource | 19 --
.../tamaya/etcd/EtcdPropertySourceTest.java | 15 +-
hazelcast/pom.xml | 5 -
.../tamaya/hazelcast/HazelcastConfigSource.java | 233 +++++++++++++++
.../hazelcast/HazelcastPropertySource.java | 238 ----------------
jodatime/pom.xml | 6 -
management/pom.xml | 5 -
metamodel/pom.xml | 5 -
.../ResourcePropertySourceProviderFactory.java | 4 +-
.../factories/URLPropertySourceFactory.java | 4 +-
propertysources/pom.xml | 5 -
.../ConfigDirConfigSourceProvider.java | 82 ++++++
.../ConfigDirPropertySourceProvider.java | 82 ------
.../MetainfConfigConfigSourceProvider.java | 63 +++++
.../MetainfConfigPropertySourceProvider.java | 63 -----
...MetainfConfigPropertySourceProviderTest.java | 2 +-
remote/pom.xml | 5 -
uom/pom.xml | 6 -
usagetracker/pom.xml | 5 -
validation/pom.xml | 5 -
vertx/pom.xml | 5 -
35 files changed, 905 insertions(+), 1046 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/apache-commons/pom.xml
----------------------------------------------------------------------
diff --git a/apache-commons/pom.xml b/apache-commons/pom.xml
index 0ed033d..3870562 100644
--- a/apache-commons/pom.xml
+++ b/apache-commons/pom.xml
@@ -32,11 +32,6 @@ under the License.
<dependencies>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-formats</artifactId>
<version>${project.parent.version}</version>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/camel/pom.xml
----------------------------------------------------------------------
diff --git a/camel/pom.xml b/camel/pom.xml
index f4324bb..fac9414 100644
--- a/camel/pom.xml
+++ b/camel/pom.xml
@@ -69,11 +69,6 @@ under the License.
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-functions</artifactId>
<version>${project.parent.version}</version>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/collections/pom.xml
----------------------------------------------------------------------
diff --git a/collections/pom.xml b/collections/pom.xml
index cb9fa83..f729e6b 100644
--- a/collections/pom.xml
+++ b/collections/pom.xml
@@ -37,11 +37,6 @@ under the License.
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/configured-sysprops/pom.xml
----------------------------------------------------------------------
diff --git a/configured-sysprops/pom.xml b/configured-sysprops/pom.xml
index 28ce175..044a9f4 100644
--- a/configured-sysprops/pom.xml
+++ b/configured-sysprops/pom.xml
@@ -33,11 +33,6 @@ under the License.
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>${project.parent.version}</version>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/consul/pom.xml
----------------------------------------------------------------------
diff --git a/consul/pom.xml b/consul/pom.xml
index c48c7ae..f628e60 100644
--- a/consul/pom.xml
+++ b/consul/pom.xml
@@ -47,11 +47,6 @@ under the License.
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-functions</artifactId>
<version>${project.parent.version}</version>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/consul/src/main/java/org/apache/tamaya/consul/ConsulConfigSource.java
----------------------------------------------------------------------
diff --git a/consul/src/main/java/org/apache/tamaya/consul/ConsulConfigSource.java b/consul/src/main/java/org/apache/tamaya/consul/ConsulConfigSource.java
new file mode 100644
index 0000000..3555f7a
--- /dev/null
+++ b/consul/src/main/java/org/apache/tamaya/consul/ConsulConfigSource.java
@@ -0,0 +1,241 @@
+/*
+ * 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.consul;
+
+import com.google.common.base.Optional;
+import com.google.common.net.HostAndPort;
+import com.orbitz.consul.Consul;
+import com.orbitz.consul.KeyValueClient;
+import com.orbitz.consul.model.kv.Value;
+import org.apache.tamaya.base.configsource.BaseConfigSource;
+import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
+import org.apache.tamaya.mutableconfig.spi.MutableConfigSource;
+
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Propertysource that is reading configuration from a configured consul endpoint. Setting
+ * {@code consul.prefix} as system property maps the consul based configuration
+ * to this prefix namespace. Consul servers are configured as {@code consul.urls} system or environment property.
+ */
+public class ConsulConfigSource extends BaseConfigSource
+implements MutableConfigSource {
+ private static final Logger LOG = Logger.getLogger(ConsulConfigSource.class.getName());
+
+ private String prefix = "";
+
+ private List<HostAndPort> consulBackends;
+
+
+ public ConsulConfigSource(String prefix, Collection<String> backends){
+ this.prefix = prefix==null?"":prefix;
+ consulBackends = new ArrayList<>();
+ for(String s:backends){
+ consulBackends.add(HostAndPort.fromString(s));
+ }
+ }
+
+ public ConsulConfigSource(Collection<String> backends){
+ consulBackends = new ArrayList<>();
+ for(String s:backends){
+ consulBackends.add(HostAndPort.fromString(s));
+ }
+ }
+
+ public ConsulConfigSource(){
+ prefix = System.getProperty("tamaya.consul.prefix", "");
+ }
+
+ public ConsulConfigSource(String... backends){
+ consulBackends = new ArrayList<>();
+ for (String s : backends) {
+ consulBackends.add(HostAndPort.fromString(s));
+ }
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public ConsulConfigSource setPrefix(String prefix) {
+ this.prefix = prefix;
+ return this;
+ }
+
+ public int getOrdinal() {
+ String configuredOrdinal = getValue(CONFIG_ORDINAL);
+ if(configuredOrdinal!=null){
+ try{
+ return Integer.parseInt(configuredOrdinal);
+ } catch(Exception e){
+ Logger.getLogger(getClass().getName()).log(Level.WARNING,
+ "Configured Ordinal is not an int number: " + configuredOrdinal, e);
+ }
+ }
+ return getDefaultOrdinal();
+ }
+
+ /**
+ * Returns the default ordinal used, when no ordinal is set, or the ordinal was not parseable to an int value.
+ * @return the default ordinal used, by default 1000.
+ */
+ public int getDefaultOrdinal(){
+ return 1000;
+ }
+
+ @Override
+ public String getName() {
+ return "consul";
+ }
+
+ @Override
+ public String getValue(String key) {
+ // check prefix, if key does not start with it, it is not part of our name space
+ // if so, the prefix part must be removedProperties, so etcd can resolve without it
+ if(!key.startsWith(prefix)){
+ return null;
+ } else{
+ key = key.substring(prefix.length());
+ }
+ String reqKey = key;
+ if(key.startsWith("_")){
+ reqKey = key.substring(1);
+ if(reqKey.endsWith(".createdIndex")){
+ reqKey = reqKey.substring(0,reqKey.length()-".createdIndex".length());
+ } else if(reqKey.endsWith(".modifiedIndex")){
+ reqKey = reqKey.substring(0,reqKey.length()-".modifiedIndex".length());
+ } else if(reqKey.endsWith(".ttl")){
+ reqKey = reqKey.substring(0,reqKey.length()-".ttl".length());
+ } else if(reqKey.endsWith(".expiration")){
+ reqKey = reqKey.substring(0,reqKey.length()-".expiration".length());
+ } else if(reqKey.endsWith(".source")){
+ reqKey = reqKey.substring(0,reqKey.length()-".source".length());
+ }
+ }
+ for(HostAndPort hostAndPort: getConsulBackends()){
+ try{
+ Consul consul = Consul.builder().withHostAndPort(hostAndPort).build();
+ KeyValueClient kvClient = consul.keyValueClient();
+ Optional<Value> valueOpt = kvClient.getValue(reqKey);
+ if(!valueOpt.isPresent()) {
+ LOG.log(Level.FINE, "key not found in consul: " + reqKey);
+ }else{
+ // No prefix mapping necessary here, since we only access/return the value...
+ Value value = valueOpt.get();
+ Map<String,String> props = new HashMap<>();
+ props.put(reqKey+".createIndex", String.valueOf(value.getCreateIndex()));
+ props.put(reqKey+".modifyIndex", String.valueOf(value.getModifyIndex()));
+ props.put(reqKey+".lockIndex", String.valueOf(value.getLockIndex()));
+ props.put(reqKey+".flags", String.valueOf(value.getFlags()));
+ return value.getValue().get();
+ }
+ } catch(Exception e){
+ LOG.log(Level.FINE, "etcd access failed on " + hostAndPort + ", trying next...", e);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+// for(HostAndPort hostAndPort: getConsulBackends()){
+// try{
+// Consul consul = Consul.builder().withHostAndPort(hostAndPort).build();
+// KeyValueClient kvClient = consul.keyValueClient();
+// Optional<Value> valueOpt = kvClient.getProperty(reqKey);
+// try{
+// Map<String, String> props = kvClient.getProperties("");
+// if(!props.containsKey("_ERROR")) {
+// return mapPrefix(props);
+// } else{
+// LOG.log(Level.FINE, "consul error on " + hostAndPort + ": " + props.get("_ERROR"));
+// }
+// } catch(Exception e){
+// LOG.log(Level.FINE, "consul access failed on " + hostAndPort + ", trying next...", e);
+// }
+// } catch(Exception e){
+// LOG.log(Level.FINE, "consul access failed on " + hostAndPort + ", trying next...", e);
+// }
+// }
+ return Collections.emptyMap();
+ }
+
+ private Map<String, String> mapPrefix(Map<String, String> props) {
+ if(prefix.isEmpty()){
+ return props;
+ }
+ Map<String,String> map = new HashMap<>();
+ for(Map.Entry<String,String> entry:props.entrySet()){
+ if(entry.getKey().startsWith("_")){
+ map.put("_" + prefix + entry.getKey().substring(1), entry.getValue());
+ } else{
+ map.put(prefix+ entry.getKey(), entry.getValue());
+ }
+ }
+ return map;
+ }
+
+ @Override
+ public void applyChange(ConfigChangeRequest configChange) {
+ for(HostAndPort hostAndPort: ConsulBackendConfig.getConsulBackends()){
+ try{
+ Consul consul = Consul.builder().withHostAndPort(hostAndPort).build();
+ KeyValueClient kvClient = consul.keyValueClient();
+
+ for(String k: configChange.getRemovedProperties()){
+ try{
+ kvClient.deleteKey(k);
+ } catch(Exception e){
+ LOG.info("Failed to remove key from consul: " + k);
+ }
+ }
+ for(Map.Entry<String,String> en:configChange.getAddedProperties().entrySet()){
+ String key = en.getKey();
+ try{
+ kvClient.putValue(key,en.getValue());
+ }catch(Exception e) {
+ LOG.info("Failed to add key to consul: " + en.getKey() + "=" + en.getValue());
+ }
+ }
+ // success: stop here
+ break;
+ } catch(Exception e){
+ LOG.log(Level.FINE, "consul access failed on " + hostAndPort + ", trying next...", e);
+ }
+ }
+ }
+
+ private List<HostAndPort> getConsulBackends(){
+ if(consulBackends==null){
+ consulBackends = ConsulBackendConfig.getConsulBackends();
+ LOG.info("Using consul backends: " + consulBackends);
+ }
+ return consulBackends;
+ }
+
+ @Override
+ protected String toStringValues() {
+ return super.toStringValues() +
+ " prefix=" + prefix + '\n' +
+ " backends=" + this.consulBackends + '\n';
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
----------------------------------------------------------------------
diff --git a/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java b/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
deleted file mode 100644
index 647cc5c..0000000
--- a/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
+++ /dev/null
@@ -1,247 +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.consul;
-
-import com.google.common.base.Optional;
-import com.google.common.net.HostAndPort;
-import com.orbitz.consul.Consul;
-import com.orbitz.consul.KeyValueClient;
-import com.orbitz.consul.model.kv.Value;
-import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
-import org.apache.tamaya.mutableconfig.spi.MutablePropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.apache.tamaya.spisupport.propertysource.BasePropertySource;
-
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Propertysource that is reading configuration from a configured consul endpoint. Setting
- * {@code consul.prefix} as system property maps the consul based configuration
- * to this prefix namespace. Consul servers are configured as {@code consul.urls} system or environment property.
- */
-public class ConsulPropertySource extends BasePropertySource
-implements MutablePropertySource{
- private static final Logger LOG = Logger.getLogger(ConsulPropertySource.class.getName());
-
- private String prefix = "";
-
- private List<HostAndPort> consulBackends;
-
-
- public ConsulPropertySource(String prefix, Collection<String> backends){
- this.prefix = prefix==null?"":prefix;
- consulBackends = new ArrayList<>();
- for(String s:backends){
- consulBackends.add(HostAndPort.fromString(s));
- }
- }
-
- public ConsulPropertySource(Collection<String> backends){
- consulBackends = new ArrayList<>();
- for(String s:backends){
- consulBackends.add(HostAndPort.fromString(s));
- }
- }
-
- public ConsulPropertySource(){
- prefix = System.getProperty("tamaya.consul.prefix", "");
- }
-
- public ConsulPropertySource(String... backends){
- consulBackends = new ArrayList<>();
- for (String s : backends) {
- consulBackends.add(HostAndPort.fromString(s));
- }
- }
-
- public String getPrefix() {
- return prefix;
- }
-
- public ConsulPropertySource setPrefix(String prefix) {
- this.prefix = prefix;
- return this;
- }
-
- public int getOrdinal() {
- PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
- if(configuredOrdinal!=null){
- try{
- return Integer.parseInt(configuredOrdinal.getValue());
- } catch(Exception e){
- Logger.getLogger(getClass().getName()).log(Level.WARNING,
- "Configured Ordinal is not an int number: " + configuredOrdinal, e);
- }
- }
- return getDefaultOrdinal();
- }
-
- /**
- * Returns the default ordinal used, when no ordinal is set, or the ordinal was not parseable to an int value.
- * @return the default ordinal used, by default 1000.
- */
- public int getDefaultOrdinal(){
- return 1000;
- }
-
- @Override
- public String getName() {
- return "consul";
- }
-
- @Override
- public PropertyValue get(String key) {
- // check prefix, if key does not start with it, it is not part of our name space
- // if so, the prefix part must be removedProperties, so etcd can resolve without it
- if(!key.startsWith(prefix)){
- return null;
- } else{
- key = key.substring(prefix.length());
- }
- String reqKey = key;
- if(key.startsWith("_")){
- reqKey = key.substring(1);
- if(reqKey.endsWith(".createdIndex")){
- reqKey = reqKey.substring(0,reqKey.length()-".createdIndex".length());
- } else if(reqKey.endsWith(".modifiedIndex")){
- reqKey = reqKey.substring(0,reqKey.length()-".modifiedIndex".length());
- } else if(reqKey.endsWith(".ttl")){
- reqKey = reqKey.substring(0,reqKey.length()-".ttl".length());
- } else if(reqKey.endsWith(".expiration")){
- reqKey = reqKey.substring(0,reqKey.length()-".expiration".length());
- } else if(reqKey.endsWith(".source")){
- reqKey = reqKey.substring(0,reqKey.length()-".source".length());
- }
- }
- for(HostAndPort hostAndPort: getConsulBackends()){
- try{
- Consul consul = Consul.builder().withHostAndPort(hostAndPort).build();
- KeyValueClient kvClient = consul.keyValueClient();
- Optional<Value> valueOpt = kvClient.getValue(reqKey);
- if(!valueOpt.isPresent()) {
- LOG.log(Level.FINE, "key not found in consul: " + reqKey);
- }else{
- // No prefix mapping necessary here, since we only access/return the value...
- Value value = valueOpt.get();
- Map<String,String> props = new HashMap<>();
- props.put(reqKey+".createIndex", String.valueOf(value.getCreateIndex()));
- props.put(reqKey+".modifyIndex", String.valueOf(value.getModifyIndex()));
- props.put(reqKey+".lockIndex", String.valueOf(value.getLockIndex()));
- props.put(reqKey+".flags", String.valueOf(value.getFlags()));
- return PropertyValue.builder(key, value.getValue().get(), getName()).setMetaEntries(props).build();
- }
- } catch(Exception e){
- LOG.log(Level.FINE, "etcd access failed on " + hostAndPort + ", trying next...", e);
- }
- }
- return null;
- }
-
- @Override
- public Map<String, PropertyValue> getProperties() {
-// for(HostAndPort hostAndPort: getConsulBackends()){
-// try{
-// Consul consul = Consul.builder().withHostAndPort(hostAndPort).build();
-// KeyValueClient kvClient = consul.keyValueClient();
-// Optional<Value> valueOpt = kvClient.getProperty(reqKey);
-// try{
-// Map<String, String> props = kvClient.getProperties("");
-// if(!props.containsKey("_ERROR")) {
-// return mapPrefix(props);
-// } else{
-// LOG.log(Level.FINE, "consul error on " + hostAndPort + ": " + props.get("_ERROR"));
-// }
-// } catch(Exception e){
-// LOG.log(Level.FINE, "consul access failed on " + hostAndPort + ", trying next...", e);
-// }
-// } catch(Exception e){
-// LOG.log(Level.FINE, "consul access failed on " + hostAndPort + ", trying next...", e);
-// }
-// }
- return Collections.emptyMap();
- }
-
- private Map<String, String> mapPrefix(Map<String, String> props) {
- if(prefix.isEmpty()){
- return props;
- }
- Map<String,String> map = new HashMap<>();
- for(Map.Entry<String,String> entry:props.entrySet()){
- if(entry.getKey().startsWith("_")){
- map.put("_" + prefix + entry.getKey().substring(1), entry.getValue());
- } else{
- map.put(prefix+ entry.getKey(), entry.getValue());
- }
- }
- return map;
- }
-
- @Override
- public boolean isScannable() {
- return false;
- }
-
- @Override
- public void applyChange(ConfigChangeRequest configChange) {
- for(HostAndPort hostAndPort: ConsulBackendConfig.getConsulBackends()){
- try{
- Consul consul = Consul.builder().withHostAndPort(hostAndPort).build();
- KeyValueClient kvClient = consul.keyValueClient();
-
- for(String k: configChange.getRemovedProperties()){
- try{
- kvClient.deleteKey(k);
- } catch(Exception e){
- LOG.info("Failed to remove key from consul: " + k);
- }
- }
- for(Map.Entry<String,String> en:configChange.getAddedProperties().entrySet()){
- String key = en.getKey();
- try{
- kvClient.putValue(key,en.getValue());
- }catch(Exception e) {
- LOG.info("Failed to add key to consul: " + en.getKey() + "=" + en.getValue());
- }
- }
- // success: stop here
- break;
- } catch(Exception e){
- LOG.log(Level.FINE, "consul access failed on " + hostAndPort + ", trying next...", e);
- }
- }
- }
-
- private List<HostAndPort> getConsulBackends(){
- if(consulBackends==null){
- consulBackends = ConsulBackendConfig.getConsulBackends();
- LOG.info("Using consul backends: " + consulBackends);
- }
- return consulBackends;
- }
-
- @Override
- protected String toStringValues() {
- return super.toStringValues() +
- " prefix=" + prefix + '\n' +
- " backends=" + this.consulBackends + '\n';
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/consul/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
----------------------------------------------------------------------
diff --git a/consul/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/consul/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
index 4996059..361ac84 100644
--- a/consul/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
+++ b/consul/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
@@ -16,4 +16,4 @@
# specific language governing permissions and limitations
# under the License.
#
-org.apache.tamaya.consul.ConsulPropertySource
\ No newline at end of file
+org.apache.tamaya.consul.ConsulConfigSource
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java b/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
index 0366b2b..c9ff19f 100644
--- a/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
+++ b/consul/src/test/java/org/apache/tamaya/consul/ConsulPropertySourceTest.java
@@ -18,8 +18,6 @@
*/
package org.apache.tamaya.consul;
-import org.apache.tamaya.consul.ConsulPropertySource;
-import org.apache.tamaya.spi.PropertyValue;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -33,7 +31,7 @@ import static org.junit.Assert.assertEquals;
*/
public class ConsulPropertySourceTest {
- private final ConsulPropertySource propertySource = new ConsulPropertySource();
+ private final ConsulConfigSource propertySource = new ConsulConfigSource();
@BeforeClass
public static void setup(){
@@ -57,20 +55,16 @@ public class ConsulPropertySourceTest {
@Test
public void testGet() throws Exception {
- Map<String,PropertyValue> props = propertySource.getProperties();
- for(Map.Entry<String,PropertyValue> en:props.entrySet()){
- assertNotNull("Key not found: " + en.getKey(), propertySource.get(en.getKey()));
+ Map<String,String> props = propertySource.getProperties();
+ for(Map.Entry<String,String> en:props.entrySet()){
+ assertNotNull("Key not found: " + en.getKey(), propertySource.getValue(en.getKey()));
}
}
@Test
public void testGetProperties() throws Exception {
- Map<String,PropertyValue> props = propertySource.getProperties();
+ Map<String,String> props = propertySource.getProperties();
assertNotNull(props);
}
- @Test
- public void testIsScannable() throws Exception {
- assertFalse(propertySource.isScannable());
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
----------------------------------------------------------------------
diff --git a/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java b/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
index 1746030..cf8a33b 100644
--- a/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
+++ b/consul/src/test/java/org/apache/tamaya/consul/ConsulWriteTest.java
@@ -29,7 +29,6 @@ import java.util.Map;
import java.util.UUID;
import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
-import org.apache.tamaya.spi.PropertyValue;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -42,12 +41,12 @@ public class ConsulWriteTest {
* Needs to be enabled manually in case you want to do integration tests.
*/
static boolean execute = false;
- private static ConsulPropertySource propertySource;
+ private static ConsulConfigSource propertySource;
@BeforeClass
public static void setup() throws MalformedURLException, URISyntaxException {
System.setProperty("consul.urls", "http://127.0.0.1:8300");
- propertySource = new ConsulPropertySource();
+ propertySource = new ConsulConfigSource();
System.out.println("At the moment no write-tests can be executed to verify the Consul integration. You can manually edit this test class.");
}
@@ -69,18 +68,18 @@ public class ConsulWriteTest {
ConfigChangeRequest request = new ConfigChangeRequest("testDelete");
request.put(taID, "testDelete");
propertySource.applyChange(request);
- assertEquals(taID.toString(), propertySource.get("testDelete").getValue());
- assertNotNull(propertySource.get("_testDelete.createdIndex"));
+ assertEquals(taID.toString(), propertySource.getValue("testDelete"));
+ assertNotNull(propertySource.getValue("_testDelete.createdIndex"));
request = new ConfigChangeRequest("testDelete2");
request.remove("testDelete");
propertySource.applyChange(request);
- assertNull(propertySource.get("testDelete"));
+ assertNull(propertySource.getValue("testDelete"));
}
@Test
public void testGetProperties() throws Exception {
if(!execute)return;
- Map<String,PropertyValue> result = propertySource.getProperties();
+ Map<String,String> result = propertySource.getProperties();
assertTrue(result.isEmpty());
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/etcd/pom.xml
----------------------------------------------------------------------
diff --git a/etcd/pom.xml b/etcd/pom.xml
index ef818a1..1713737 100644
--- a/etcd/pom.xml
+++ b/etcd/pom.xml
@@ -46,11 +46,6 @@ under the License.
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-functions</artifactId>
<version>${project.parent.version}</version>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/etcd/src/main/java/org/apache/tamaya/etcd/EtcdConfigSource.java
----------------------------------------------------------------------
diff --git a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdConfigSource.java b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdConfigSource.java
new file mode 100644
index 0000000..05c3a53
--- /dev/null
+++ b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdConfigSource.java
@@ -0,0 +1,245 @@
+/*
+ * 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.etcd;
+
+import org.apache.tamaya.base.configsource.BaseConfigSource;
+import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
+import org.apache.tamaya.mutableconfig.spi.MutableConfigSource;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Propertysource that is reading configuration from a configured etcd endpoint. Setting
+ * {@code etcd.prefix} as system property maps the etcd based configuration
+ * to this prefix namespace. Etcd servers are configured as {@code etcd.server.urls} system or environment property.
+ * Etcd can be disabled by setting {@code tamaya.etcdprops.disable} either as environment or system property.
+ */
+public class EtcdConfigSource extends BaseConfigSource
+ implements MutableConfigSource {
+ private static final Logger LOG = Logger.getLogger(EtcdConfigSource.class.getName());
+
+ private String prefix = System.getProperty("tamaya.etcd.prefix", "");
+
+ private List<EtcdAccessor> etcdBackends;
+
+ private Map<String,String> metaData = new HashMap<>();
+
+ public EtcdConfigSource(String prefix, Collection<String> backends){
+ this(backends);
+ String metadataPrefix = "[meta]datasource."+getName()+".";
+ if(prefix!=null && !prefix.isEmpty()){
+ this.prefix = prefix;
+ metaData.put(metadataPrefix+"prefix", prefix);
+ }
+ }
+
+ public EtcdConfigSource(Collection<String> backends){
+ etcdBackends = new ArrayList<>();
+ for(String s:backends){
+ etcdBackends.add(new EtcdAccessor(s));
+ }
+ setDefaultOrdinal(1000);
+ setName("etcd");
+ String metadataPrefix = "[meta]datasource."+getName()+".";
+ metaData.put(metadataPrefix+"backend", "etcd");
+ metaData.put(metadataPrefix+"backends", getBackendConfigString());
+ }
+
+ public EtcdConfigSource(){
+ prefix = System.getProperty("tamaya.etcd.prefix", "");
+ setDefaultOrdinal(1000);
+ setName("etcd");
+ String metadataPrefix = "[meta]datasource."+getName()+".";
+ if(prefix!=null && !prefix.isEmpty()){
+ metaData.put(metadataPrefix+"prefix", prefix);
+ }
+ metaData.put(metadataPrefix+"backend", "etcd");
+ metaData.put(metadataPrefix+"backends", getBackendConfigString());
+ }
+
+ public EtcdConfigSource(String... backends){
+ etcdBackends = new ArrayList<>();
+ for (String s : backends) {
+ etcdBackends.add(new EtcdAccessor(s));
+ }
+ setDefaultOrdinal(1000);
+ setName("etcd");
+ String metadataPrefix = "[meta]datasource."+getName()+".";
+ if(prefix!=null && !prefix.isEmpty()){
+ metaData.put(metadataPrefix+"prefix", prefix);
+ }
+ metaData.put(metadataPrefix+"backend", "etcd");
+ metaData.put(metadataPrefix+"backends", getBackendConfigString());
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public EtcdConfigSource setPrefix(String prefix) {
+ this.prefix = prefix==null?"":prefix;
+ String metadataPrefix = "[meta]datasource."+getName()+".";
+ if(!prefix.isEmpty()){
+ metaData.put(metadataPrefix+"prefix", prefix);
+ }else{
+ metaData.remove(metadataPrefix+"prefix");
+ }
+ return this;
+ }
+
+ @Override
+ public int getOrdinal() {
+ String configuredOrdinal = getValue(CONFIG_ORDINAL);
+ if(configuredOrdinal!=null){
+ try{
+ return Integer.parseInt(configuredOrdinal);
+ } catch(Exception e){
+ Logger.getLogger(getClass().getName()).log(Level.WARNING,
+ "Configured ordinal is not an int number: " + configuredOrdinal, e);
+ }
+ }
+ return getDefaultOrdinal();
+ }
+
+ @Override
+ public String getValue(String key) {
+ // check prefix, if key does not start with it, it is not part of our name space
+ // if so, the prefix part must be removedProperties, so etcd can resolve without it
+ if(!key.startsWith(prefix)){
+ return null;
+ } else{
+ key = key.substring(prefix.length());
+ }
+ Map<String,String> props;
+ for(EtcdAccessor accessor: EtcdBackendConfig.getEtcdBackends()){
+ try{
+ props = accessor.get(key);
+ if(!props.containsKey("_ERROR")) {
+ return props.get(key);
+ } else{
+ LOG.log(Level.FINE, "etcd error on " + accessor.getUrl() + ": " + props.get("_ERROR"));
+ }
+ } catch(Exception e){
+ LOG.log(Level.FINE, "etcd access failed on " + accessor.getUrl() + ", trying next...", e);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+ for(EtcdAccessor accessor: getEtcdBackends()){
+ try{
+ Map<String, String> props = accessor.getProperties("");
+ if(!props.containsKey("_ERROR")) {
+ return mapMetadata(props);
+ } else{
+ LOG.log(Level.FINE, "etcd error on " + accessor.getUrl() + ": " + props.get("_ERROR"));
+ }
+ } catch(Exception e){
+ LOG.log(Level.FINE, "etcd access failed on " + accessor.getUrl() + ", trying next...", e);
+ }
+ }
+ return Collections.emptyMap();
+ }
+
+ private Map<String, String> mapMetadata(Map<String, String> props) {
+ Map<String, String> values = new HashMap<>();
+ values.putAll(metaData);
+ // Evaluate keys
+ for(Map.Entry<String,String> entry:props.entrySet()) {
+ if (!entry.getKey().startsWith("_")) {
+ values.put(prefix + "etcd:" + entry.getKey(), entry.getValue());
+ }
+ }
+ return values;
+ }
+
+ @Override
+ public void applyChange(ConfigChangeRequest configChange) {
+ for(EtcdAccessor accessor: EtcdBackendConfig.getEtcdBackends()){
+ try{
+ for(String k: configChange.getRemovedProperties()){
+ Map<String,String> res = accessor.delete(k);
+ if(res.get("_ERROR")!=null){
+ LOG.info("Failed to remove key from etcd: " + k);
+ }
+ }
+ for(Map.Entry<String,String> en:configChange.getAddedProperties().entrySet()){
+ String key = en.getKey();
+ Integer ttl = null;
+ int index = en.getKey().indexOf('?');
+ if(index>0){
+ key = en.getKey().substring(0, index);
+ String rawQuery = en.getKey().substring(index+1);
+ String[] queries = rawQuery.split("&");
+ for(String query:queries){
+ if(query.contains("ttl")){
+ int qIdx = query.indexOf('=');
+ ttl = qIdx>0?Integer.parseInt(query.substring(qIdx+1).trim()):null;
+ }
+ }
+ }
+ Map<String,String> res = accessor.set(key, en.getValue(), ttl);
+ if(res.get("_ERROR")!=null){
+ LOG.info("Failed to add key to etcd: " + en.getKey() + "=" + en.getValue());
+ }
+ }
+ // success, stop here
+ break;
+ } catch(Exception e){
+ LOG.log(Level.FINE, "etcd access failed on " + accessor.getUrl() + ", trying next...", e);
+ }
+ }
+ }
+
+ private List<EtcdAccessor> getEtcdBackends(){
+ if(etcdBackends==null){
+ etcdBackends = EtcdBackendConfig.getEtcdBackends();
+ LOG.info("Using etcd backends: " + etcdBackends);
+ }
+ return etcdBackends;
+ }
+
+ @Override
+ protected String toStringValues() {
+ return super.toStringValues() +
+ " prefix=" + prefix + '\n' +
+ " backends=" + this.etcdBackends + '\n';
+ }
+
+ private String getBackendConfigString() {
+ String backendProp = "";
+ for(EtcdAccessor acc:getEtcdBackends()){
+ if(backendProp.isEmpty()){
+ backendProp += acc.getUrl();
+ }else{
+ backendProp += ", " + acc.getUrl();
+ }
+ }
+ return backendProp;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
----------------------------------------------------------------------
diff --git a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
deleted file mode 100644
index 1e7f17c..0000000
--- a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
+++ /dev/null
@@ -1,281 +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.etcd;
-
-import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
-import org.apache.tamaya.mutableconfig.spi.MutablePropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.apache.tamaya.spi.PropertyValueBuilder;
-import org.apache.tamaya.spisupport.propertysource.BasePropertySource;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Propertysource that is reading configuration from a configured etcd endpoint. Setting
- * {@code etcd.prefix} as system property maps the etcd based configuration
- * to this prefix namespace. Etcd servers are configured as {@code etcd.server.urls} system or environment property.
- * Etcd can be disabled by setting {@code tamaya.etcdprops.disable} either as environment or system property.
- */
-public class EtcdPropertySource extends BasePropertySource
- implements MutablePropertySource{
- private static final Logger LOG = Logger.getLogger(EtcdPropertySource.class.getName());
-
- private String prefix = System.getProperty("tamaya.etcd.prefix", "");
-
- private List<EtcdAccessor> etcdBackends;
-
- private Map<String,String> metaData = new HashMap<>();
-
- public EtcdPropertySource(String prefix, Collection<String> backends){
- this.prefix = prefix==null?"":prefix;
- etcdBackends = new ArrayList<>();
- for(String s:backends){
- etcdBackends.add(new EtcdAccessor(s));
- }
- setDefaultOrdinal(1000);
- setName("etcd");
- if(!prefix.isEmpty()){
- metaData.put("prefix", prefix);
- }
- metaData.put("backend", "etcd");
- metaData.put("backends", backends.toString());
- }
-
- public EtcdPropertySource(Collection<String> backends){
- etcdBackends = new ArrayList<>();
- for(String s:backends){
- etcdBackends.add(new EtcdAccessor(s));
- }
- setDefaultOrdinal(1000);
- setName("etcd");
- metaData.put("backend", "etcd");
- metaData.put("backends", backends.toString());
- }
-
- public EtcdPropertySource(){
- prefix = System.getProperty("tamaya.etcd.prefix", "");
- setDefaultOrdinal(1000);
- setName("etcd");
- if(!prefix.isEmpty()){
- metaData.put("prefix", prefix);
- }
- metaData.put("backend", "etcd");
- String backendProp = "";
- for(EtcdAccessor acc:getEtcdBackends()){
- if(backendProp.isEmpty()){
- backendProp += acc.getUrl();
- }else{
- backendProp += ", " + acc.getUrl();
- }
- }
- metaData.put("backends", backendProp);
- }
-
- public EtcdPropertySource(String... backends){
- etcdBackends = new ArrayList<>();
- for (String s : backends) {
- etcdBackends.add(new EtcdAccessor(s));
- }
- setDefaultOrdinal(1000);
- setName("etcd");
- if(!prefix.isEmpty()){
- metaData.put("prefix", prefix);
- }
- metaData.put("backend", "etcd");
- metaData.put("backends", backends.toString());
- }
-
- public String getPrefix() {
- return prefix;
- }
-
- public EtcdPropertySource setPrefix(String prefix) {
- this.prefix = prefix==null?"":prefix;
- if(!prefix.isEmpty()){
- metaData.put("prefix", prefix);
- }else{
- metaData.remove("prefix");
- }
- return this;
- }
-
- @Override
- public int getOrdinal() {
- PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
- if(configuredOrdinal!=null){
- try{
- return Integer.parseInt(configuredOrdinal.getValue());
- } catch(Exception e){
- Logger.getLogger(getClass().getName()).log(Level.WARNING,
- "Configured ordinal is not an int number: " + configuredOrdinal, e);
- }
- }
- return getDefaultOrdinal();
- }
-
- @Override
- public PropertyValue get(String key) {
- // check prefix, if key does not start with it, it is not part of our name space
- // if so, the prefix part must be removedProperties, so etcd can resolve without it
- if(!key.startsWith(prefix)){
- return null;
- } else{
- key = key.substring(prefix.length());
- }
- Map<String,String> props;
- for(EtcdAccessor accessor: EtcdBackendConfig.getEtcdBackends()){
- try{
- props = accessor.get(key);
- if(!props.containsKey("_ERROR")) {
- // No prefix mapping necessary here, since we only access/return the value...
- return PropertyValue.builder(key, props.get(key), getName()).setMetaEntries(metaData)
- .addMetaEntries(props).removeMetaEntry(key).build();
- } else{
- LOG.log(Level.FINE, "etcd error on " + accessor.getUrl() + ": " + props.get("_ERROR"));
- }
- } catch(Exception e){
- LOG.log(Level.FINE, "etcd access failed on " + accessor.getUrl() + ", trying next...", e);
- }
- }
- return null;
- }
-
- @Override
- public Map<String, PropertyValue> getProperties() {
- for(EtcdAccessor accessor: getEtcdBackends()){
- try{
- Map<String, String> props = accessor.getProperties("");
- if(!props.containsKey("_ERROR")) {
- return mapPrefix(props);
- } else{
- LOG.log(Level.FINE, "etcd error on " + accessor.getUrl() + ": " + props.get("_ERROR"));
- }
- } catch(Exception e){
- LOG.log(Level.FINE, "etcd access failed on " + accessor.getUrl() + ", trying next...", e);
- }
- }
- return Collections.emptyMap();
- }
-
- private Map<String, PropertyValue> mapPrefix(Map<String, String> props) {
-
- Map<String, PropertyValueBuilder> builders = new HashMap<>();
- // Evaluate keys
- for(Map.Entry<String,String> entry:props.entrySet()) {
- if (!entry.getKey().startsWith("_")) {
- PropertyValueBuilder builder = builders.get(entry.getKey());
- if (builder == null) {
- builder = PropertyValue.builder(entry.getKey(), "", getName()).setMetaEntries(metaData);
- builders.put(entry.getKey(), builder);
- }
- }
- }
- // add meta entries
- for(Map.Entry<String,String> entry:props.entrySet()) {
- if (entry.getKey().startsWith("_")) {
- String key = entry.getKey().substring(1);
- for(String field:new String[]{".createdIndex", ".modifiedIndex", ".ttl",
- ".expiration", ".source"}) {
- if (key.endsWith(field)) {
- key = key.substring(0, key.length() - field.length());
- PropertyValueBuilder builder = builders.get(key);
- if (builder != null) {
- builder.addMetaEntry(field, entry.getValue());
- }
- }
- }
- }
- }
- // Map to value map.
- Map<String, PropertyValue> values = new HashMap<>();
- for(Map.Entry<String,PropertyValueBuilder> en:builders.entrySet()) {
- if(prefix.isEmpty()){
- values.put(en.getKey(), en.getValue().build());
- }else{
- values.put(prefix + en.getKey(), en.getValue().setKey(prefix + en.getKey()).build());
- }
- }
- return values;
- }
-
- @Override
- public boolean isScannable() {
- return true;
- }
-
- @Override
- public void applyChange(ConfigChangeRequest configChange) {
- for(EtcdAccessor accessor: EtcdBackendConfig.getEtcdBackends()){
- try{
- for(String k: configChange.getRemovedProperties()){
- Map<String,String> res = accessor.delete(k);
- if(res.get("_ERROR")!=null){
- LOG.info("Failed to remove key from etcd: " + k);
- }
- }
- for(Map.Entry<String,String> en:configChange.getAddedProperties().entrySet()){
- String key = en.getKey();
- Integer ttl = null;
- int index = en.getKey().indexOf('?');
- if(index>0){
- key = en.getKey().substring(0, index);
- String rawQuery = en.getKey().substring(index+1);
- String[] queries = rawQuery.split("&");
- for(String query:queries){
- if(query.contains("ttl")){
- int qIdx = query.indexOf('=');
- ttl = qIdx>0?Integer.parseInt(query.substring(qIdx+1).trim()):null;
- }
- }
- }
- Map<String,String> res = accessor.set(key, en.getValue(), ttl);
- if(res.get("_ERROR")!=null){
- LOG.info("Failed to add key to etcd: " + en.getKey() + "=" + en.getValue());
- }
- }
- // success, stop here
- break;
- } catch(Exception e){
- LOG.log(Level.FINE, "etcd access failed on " + accessor.getUrl() + ", trying next...", e);
- }
- }
- }
-
- private List<EtcdAccessor> getEtcdBackends(){
- if(etcdBackends==null){
- etcdBackends = EtcdBackendConfig.getEtcdBackends();
- LOG.info("Using etcd backends: " + etcdBackends);
- }
- return etcdBackends;
- }
-
- @Override
- protected String toStringValues() {
- return super.toStringValues() +
- " prefix=" + prefix + '\n' +
- " backends=" + this.etcdBackends + '\n';
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/etcd/src/main/resources/META-INF/services/javax.config.spi.ConfigSource
----------------------------------------------------------------------
diff --git a/etcd/src/main/resources/META-INF/services/javax.config.spi.ConfigSource b/etcd/src/main/resources/META-INF/services/javax.config.spi.ConfigSource
new file mode 100644
index 0000000..813e825
--- /dev/null
+++ b/etcd/src/main/resources/META-INF/services/javax.config.spi.ConfigSource
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy current the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+org.apache.tamaya.etcd.EtcdConfigSource
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/etcd/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
----------------------------------------------------------------------
diff --git a/etcd/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource b/etcd/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
deleted file mode 100644
index eb7958e..0000000
--- a/etcd/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySource
+++ /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.etcd.EtcdPropertySource
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java b/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
index 8b6569f..c7caf77 100644
--- a/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
+++ b/etcd/src/test/java/org/apache/tamaya/etcd/EtcdPropertySourceTest.java
@@ -18,7 +18,6 @@
*/
package org.apache.tamaya.etcd;
-import org.apache.tamaya.spi.PropertyValue;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -32,7 +31,7 @@ import static org.junit.Assert.assertEquals;
*/
public class EtcdPropertySourceTest {
- private final EtcdPropertySource propertySource = new EtcdPropertySource();
+ private final EtcdConfigSource propertySource = new EtcdConfigSource();
@BeforeClass
public static void setup(){
@@ -56,20 +55,16 @@ public class EtcdPropertySourceTest {
@Test
public void testGet() throws Exception {
- Map<String,PropertyValue> props = propertySource.getProperties();
- for(Map.Entry<String,PropertyValue> en:props.entrySet()){
- assertNotNull("Key not found: " + en.getKey(), propertySource.get(en.getKey()));
+ Map<String,String> props = propertySource.getProperties();
+ for(Map.Entry<String,String> en:props.entrySet()){
+ assertNotNull("Key not found: " + en.getKey(), propertySource.getValue(en.getKey()));
}
}
@Test
public void testGetProperties() throws Exception {
- Map<String,PropertyValue> props = propertySource.getProperties();
+ Map<String,String> props = propertySource.getProperties();
assertNotNull(props);
}
- @Test
- public void testIsScannable() throws Exception {
- assertTrue(propertySource.isScannable());
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/hazelcast/pom.xml
----------------------------------------------------------------------
diff --git a/hazelcast/pom.xml b/hazelcast/pom.xml
index 834a808..db03c09 100644
--- a/hazelcast/pom.xml
+++ b/hazelcast/pom.xml
@@ -46,11 +46,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-functions</artifactId>
<version>${project.parent.version}</version>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastConfigSource.java
----------------------------------------------------------------------
diff --git a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastConfigSource.java b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastConfigSource.java
new file mode 100644
index 0000000..5808ac9
--- /dev/null
+++ b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastConfigSource.java
@@ -0,0 +1,233 @@
+/*
+ * 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.hazelcast;
+
+import com.hazelcast.config.Config;
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.core.IList;
+import com.hazelcast.core.IMap;
+import org.apache.tamaya.base.configsource.BaseConfigSource;
+import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
+import org.apache.tamaya.mutableconfig.spi.MutableConfigSource;
+import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.propertysource.BasePropertySource;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Distributed Propertysource using a in-memory hazelcast cluster.
+ * Created by atsticks on 03.11.16.
+ *
+ * Basically all kind of property entris can be stored. Additionally this property source allows
+ * to pass additional meta-entries to control the TTL of the data in milliseconds. For illustration
+ * the following map will store {@code my.entry} with a TLL of 20000 milliseconds (20 seconds) and
+ * store {@code my.otherEntry} with infinite lifetime (as long as the cluster is alive):
+ *
+ * {@code
+ * my.entry=myvalue
+ * _my.entry.ttl=20000
+ * my.otherEntry=1234
+ * }
+ *
+ * By default a new hazelcast instance is created, but it is also possible to reuse an existing
+ * instance of pass a Hazelcast configuration instance.
+ */
+public class HazelcastConfigSource extends BaseConfigSource
+implements MutableConfigSource {
+ /** The logger. */
+ private static final Logger LOG = Logger.getLogger(HazelcastConfigSource.class.getName());
+ /** The Hazelcast config map used. */
+ private Map<String, String> configMap = new HashMap<>();
+ /** The hazelcast API instance. */
+ private HazelcastInstance hazelcastInstance;
+ /** The hazelcast map reference ID used, by default {@code tamaya.configuration}. */
+ private String mapReference = "tamaya.configuration";
+ /** Flag if this property source is read-only. */
+ private boolean readOnly = false;
+
+ /**
+ * Creates a new instance, hereby using {@code "Hazelcast"} as property source name and
+ * a default hazelcast backend created by calling {@link Hazelcast#newHazelcastInstance()}.
+ */
+ public HazelcastConfigSource(){
+ super("Hazelcast");
+ this.hazelcastInstance = Hazelcast.newHazelcastInstance();
+ }
+
+ /**
+ * Creates a new instance, hereby using {@code "Hazelcast"} as property source name and the
+ * given hazelcast instance.
+ * @param hazelcastInstance the hazelcast instance, not null.
+ */
+ public HazelcastConfigSource(HazelcastInstance hazelcastInstance){
+ this("Hazelcast", hazelcastInstance);
+ }
+
+ /**
+ * Creates a new instance, hereby using the given property source name and
+ * a default hazelcast backend created by calling {@link Hazelcast#newHazelcastInstance()}.
+ * @param name the property source name, not null.
+ */
+ public HazelcastConfigSource(String name){
+ super(name);
+ this.hazelcastInstance = Hazelcast.newHazelcastInstance();
+ }
+
+ /**
+ * Creates a new instance, hereby using the given property source name and
+ * a creating a new hazelcast backend using the given Hazelcast {@link Config}.
+ * @param config the hazelcast config, not null.
+ * @param name the property source name, not null.
+ */
+ public HazelcastConfigSource(String name, Config config){
+ super(name);
+ this.hazelcastInstance = Hazelcast.newHazelcastInstance(config);
+ }
+
+ /**
+ * Creates a new instance, hereby using the given property source name and the
+ * hazelcast instance.
+ * @param name
+ * @param hazelcastInstance
+ */
+ public HazelcastConfigSource(String name, HazelcastInstance hazelcastInstance){
+ super(name);
+ this.hazelcastInstance = Objects.requireNonNull(hazelcastInstance);
+ }
+
+ /**
+ * Setting the read-only flag for this instance.
+ * @param readOnly if true, the property source will not write back any changes to the
+ * hazelcast backend.
+ */
+ public void setReadOnly(boolean readOnly){
+ this.readOnly = readOnly;
+ }
+
+ /**
+ * Flag to check if the property source is read-only.
+ * @return true, if the instance is read-only.
+ */
+ public boolean isReadOnly(){
+ return readOnly;
+ }
+
+ /**
+ * Set the Hazelcast reference name for the Tamaya configuration Map.
+ * @param mapReference the map reference to be used, not null.
+ */
+ public void setMapReference(String mapReference){
+ this.mapReference = Objects.requireNonNull(mapReference);
+ }
+
+ /**
+ * Get the Hazelcast reference name for the Tamaya configuration Map.
+ * @return the Hazelcast reference name for the Tamaya configuration Map, never null.
+ */
+ public String getMapReference(){
+ return mapReference;
+ }
+
+ /**
+ * Get access to the hazelcast instance used.
+ * @return the hazelcast instance, not null.
+ */
+ public HazelcastInstance getHazelcastInstance() {
+ return hazelcastInstance;
+ }
+
+ @Override
+ public String getValue(String key) {
+ Config hcConfig = hazelcastInstance.getConfig();
+ String value = hcConfig.getProperty(key);
+ if(value==null){
+ return null;
+ }
+ return value;
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+ Map<String,String> meta = new HashMap<>();
+ String prefix = "[meta]datasource."+getName()+".";
+ meta.put(prefix+"backend", "Hazelcast");
+ meta.put(prefix+"instance", hazelcastInstance.getConfig().getInstanceName());
+ meta.put(prefix+"_mapReference", mapReference);
+ this.configMap.putAll(meta);
+ return Collections.unmodifiableMap(this.configMap);
+ }
+
+ /**
+ * Reloads the configuration map from Hazelcast completely.
+ */
+ public void refresh() {
+ IMap<String,String> config = hazelcastInstance.getMap(mapReference);
+ Map<String, String> configMap = new HashMap<>(config);
+ this.configMap = configMap;
+ }
+
+ @Override
+ public void applyChange(ConfigChangeRequest configChange) {
+ if(readOnly){
+ return;
+ }
+ IMap<String,String> config = hazelcastInstance.getMap(mapReference);
+ for(Map.Entry<String, String> en: configChange.getAddedProperties().entrySet()){
+ String metaVal = configChange.getAddedProperties().get("_" + en.getKey()+".ttl");
+ if(metaVal!=null){
+ try {
+ long ms = Long.parseLong(metaVal);
+ config.put(en.getKey(), en.getValue(), ms, TimeUnit.MILLISECONDS);
+ }catch(Exception e){
+ LOG.log(Level.WARNING, "Failed to parse TTL in millis: " + metaVal +
+ " for '"+ en.getKey()+"'", e);
+ config.put(en.getKey(), en.getValue());
+ }
+ }else {
+ config.put(en.getKey(), en.getValue());
+ }
+ }
+ for(String key: configChange.getRemovedProperties()){
+ config.remove(key);
+ }
+ IList<String> taList = hazelcastInstance.getList("_tamaya.transactions");
+ taList.add(configChange.getTransactionID());
+ config.put("_tamaya.transaction.lastId", configChange.getTransactionID(), 1, TimeUnit.DAYS);
+ config.put("_tamaya.transaction.startedAt", String.valueOf(configChange.getStartedAt()), 1, TimeUnit.DAYS);
+ config.flush();
+ refresh();
+ }
+
+ @Override
+ protected String toStringValues() {
+ return super.toStringValues() +
+ "\n hazelcastInstance=" + hazelcastInstance +
+ "\n name='" + getName() + '\'' +
+ "\n mapReference='" + mapReference + '\'' +
+ "\n readOnly=" + readOnly + '\'';
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
----------------------------------------------------------------------
diff --git a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
deleted file mode 100644
index 9f63a0e..0000000
--- a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java
+++ /dev/null
@@ -1,238 +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.hazelcast;
-
-import com.hazelcast.config.Config;
-import com.hazelcast.core.Hazelcast;
-import com.hazelcast.core.HazelcastInstance;
-import com.hazelcast.core.IList;
-import com.hazelcast.core.IMap;
-import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
-import org.apache.tamaya.mutableconfig.spi.MutablePropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.apache.tamaya.spisupport.propertysource.BasePropertySource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Distributed Propertysource using a in-memory hazelcast cluster.
- * Created by atsticks on 03.11.16.
- *
- * Basically all kind of property entris can be stored. Additionally this property source allows
- * to pass additional meta-entries to control the TTL of the data in milliseconds. For illustration
- * the following map will store {@code my.entry} with a TLL of 20000 milliseconds (20 seconds) and
- * store {@code my.otherEntry} with infinite lifetime (as long as the cluster is alive):
- *
- * {@code
- * my.entry=myvalue
- * _my.entry.ttl=20000
- * my.otherEntry=1234
- * }
- *
- * By default a new hazelcast instance is created, but it is also possible to reuse an existing
- * instance of pass a Hazelcast configuration instance.
- */
-public class HazelcastPropertySource extends BasePropertySource
-implements MutablePropertySource{
- /** The logger. */
- private static final Logger LOG = Logger.getLogger(HazelcastPropertySource.class.getName());
- /** The Hazelcast config map used. */
- private Map<String, String> configMap = new HashMap<>();
- /** The hazelcast API instance. */
- private HazelcastInstance hazelcastInstance;
- /** The hazelcast map reference ID used, by default {@code tamaya.configuration}. */
- private String mapReference = "tamaya.configuration";
- /** Flag if this property source is read-only. */
- private boolean readOnly = false;
-
- /**
- * Creates a new instance, hereby using {@code "Hazelcast"} as property source name and
- * a default hazelcast backend created by calling {@link Hazelcast#newHazelcastInstance()}.
- */
- public HazelcastPropertySource(){
- super("Hazelcast");
- this.hazelcastInstance = Hazelcast.newHazelcastInstance();
- }
-
- /**
- * Creates a new instance, hereby using {@code "Hazelcast"} as property source name and the
- * given hazelcast instance.
- * @param hazelcastInstance the hazelcast instance, not null.
- */
- public HazelcastPropertySource(HazelcastInstance hazelcastInstance){
- this("Hazelcast", hazelcastInstance);
- }
-
- /**
- * Creates a new instance, hereby using the given property source name and
- * a default hazelcast backend created by calling {@link Hazelcast#newHazelcastInstance()}.
- * @param name the property source name, not null.
- */
- public HazelcastPropertySource(String name){
- super(name);
- this.hazelcastInstance = Hazelcast.newHazelcastInstance();
- }
-
- /**
- * Creates a new instance, hereby using the given property source name and
- * a creating a new hazelcast backend using the given Hazelcast {@link Config}.
- * @param config the hazelcast config, not null.
- * @param name the property source name, not null.
- */
- public HazelcastPropertySource(String name, Config config){
- super(name);
- this.hazelcastInstance = Hazelcast.newHazelcastInstance(config);
- }
-
- /**
- * Creates a new instance, hereby using the given property source name and the
- * hazelcast instance.
- * @param name
- * @param hazelcastInstance
- */
- public HazelcastPropertySource(String name, HazelcastInstance hazelcastInstance){
- super(name);
- this.hazelcastInstance = Objects.requireNonNull(hazelcastInstance);
- }
-
- /**
- * Setting the read-only flag for this instance.
- * @param readOnly if true, the property source will not write back any changes to the
- * hazelcast backend.
- */
- public void setReadOnly(boolean readOnly){
- this.readOnly = readOnly;
- }
-
- /**
- * Flag to check if the property source is read-only.
- * @return true, if the instance is read-only.
- */
- public boolean isReadOnly(){
- return readOnly;
- }
-
- /**
- * Set the Hazelcast reference name for the Tamaya configuration Map.
- * @param mapReference the map reference to be used, not null.
- */
- public void setMapReference(String mapReference){
- this.mapReference = Objects.requireNonNull(mapReference);
- }
-
- /**
- * Get the Hazelcast reference name for the Tamaya configuration Map.
- * @return the Hazelcast reference name for the Tamaya configuration Map, never null.
- */
- public String getMapReference(){
- return mapReference;
- }
-
- /**
- * Get access to the hazelcast instance used.
- * @return the hazelcast instance, not null.
- */
- public HazelcastInstance getHazelcastInstance() {
- return hazelcastInstance;
- }
-
- @Override
- public PropertyValue get(String key) {
- Config hcConfig = hazelcastInstance.getConfig();
- String value = hcConfig.getProperty(key);
- if(value==null){
- return null;
- }
- return PropertyValue.builder(key, value, getName())
- .addMetaEntry("backend", "Hazelcast")
- .addMetaEntry("instance", hcConfig.getInstanceName())
- .addMetaEntry("mapReference", mapReference)
- .build();
- }
-
- @Override
- public Map<String, PropertyValue> getProperties() {
- Map<String,String> meta = new HashMap<>();
- meta.put("backend", "Hazelcast");
- meta.put("instance", hazelcastInstance.getConfig().getInstanceName());
- meta.put("mapReference", mapReference);
- return PropertyValue.map(this.configMap, getName(), meta);
- }
-
- @Override
- public boolean isScannable() {
- return true;
- }
-
- /**
- * Reloads the configuration map from Hazelcast completely.
- */
- public void refresh() {
- IMap<String,String> config = hazelcastInstance.getMap(mapReference);
- Map<String, String> configMap = new HashMap<>(config);
- this.configMap = configMap;
- }
-
- @Override
- public void applyChange(ConfigChangeRequest configChange) {
- if(readOnly){
- return;
- }
- IMap<String,String> config = hazelcastInstance.getMap(mapReference);
- for(Map.Entry<String, String> en: configChange.getAddedProperties().entrySet()){
- String metaVal = configChange.getAddedProperties().get("_" + en.getKey()+".ttl");
- if(metaVal!=null){
- try {
- long ms = Long.parseLong(metaVal);
- config.put(en.getKey(), en.getValue(), ms, TimeUnit.MILLISECONDS);
- }catch(Exception e){
- LOG.log(Level.WARNING, "Failed to parse TTL in millis: " + metaVal +
- " for '"+ en.getKey()+"'", e);
- config.put(en.getKey(), en.getValue());
- }
- }else {
- config.put(en.getKey(), en.getValue());
- }
- }
- for(String key: configChange.getRemovedProperties()){
- config.remove(key);
- }
- IList<String> taList = hazelcastInstance.getList("_tamaya.transactions");
- taList.add(configChange.getTransactionID());
- config.put("_tamaya.transaction.lastId", configChange.getTransactionID(), 1, TimeUnit.DAYS);
- config.put("_tamaya.transaction.startedAt", String.valueOf(configChange.getStartedAt()), 1, TimeUnit.DAYS);
- config.flush();
- refresh();
- }
-
- @Override
- protected String toStringValues() {
- return super.toStringValues() +
- "\n hazelcastInstance=" + hazelcastInstance +
- "\n name='" + getName() + '\'' +
- "\n mapReference='" + mapReference + '\'' +
- "\n readOnly=" + readOnly + '\'';
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/jodatime/pom.xml
----------------------------------------------------------------------
diff --git a/jodatime/pom.xml b/jodatime/pom.xml
index 7ffbf23..c88f11c 100644
--- a/jodatime/pom.xml
+++ b/jodatime/pom.xml
@@ -47,12 +47,6 @@ under the License.
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>${project.parent.version}</version>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/management/pom.xml
----------------------------------------------------------------------
diff --git a/management/pom.xml b/management/pom.xml
index 81f64c9..e32b3c5 100644
--- a/management/pom.xml
+++ b/management/pom.xml
@@ -32,11 +32,6 @@ under the License.
<dependencies>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-functions</artifactId>
<version>${project.parent.version}</version>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/metamodel/pom.xml
----------------------------------------------------------------------
diff --git a/metamodel/pom.xml b/metamodel/pom.xml
index 860b383..9d75493 100644
--- a/metamodel/pom.xml
+++ b/metamodel/pom.xml
@@ -36,11 +36,6 @@
<dependencies>
<dependency>
<groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>${project.parent.version}</version>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactory.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactory.java
index 7b34ea4..6dc97ac 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactory.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactory.java
@@ -21,7 +21,7 @@ package org.apache.tamaya.metamodel.internal.factories;
import org.apache.tamaya.format.ConfigurationData;
import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.format.MappedConfigurationDataPropertySource;
+import org.apache.tamaya.format.MappedConfigurationDataConfigSource;
import org.apache.tamaya.metamodel.spi.ItemFactory;
import org.apache.tamaya.resource.ConfigResources;
import org.apache.tamaya.spi.PropertySource;
@@ -66,7 +66,7 @@ public class ResourcePropertySourceProviderFactory implements ItemFactory<Proper
data = ConfigurationFormats.readConfigurationData(resource,
ConfigurationFormats.getFormats(formats));
}
- propertySources.add(new MappedConfigurationDataPropertySource(data));
+ propertySources.add(new MappedConfigurationDataConfigSource(data));
} catch (Exception e) {
LOG.log(Level.SEVERE, "Failed to read property source from resource: " + location, e);
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactory.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactory.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactory.java
index 227b6ef..d09ae88 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactory.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactory.java
@@ -21,7 +21,7 @@ package org.apache.tamaya.metamodel.internal.factories;
import org.apache.tamaya.format.ConfigurationData;
import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.format.MappedConfigurationDataPropertySource;
+import org.apache.tamaya.format.MappedConfigurationDataConfigSource;
import org.apache.tamaya.functions.Supplier;
import org.apache.tamaya.metamodel.internal.ComponentConfigurator;
import org.apache.tamaya.metamodel.spi.ItemFactory;
@@ -127,7 +127,7 @@ public class URLPropertySourceFactory implements ItemFactory<PropertySource>{
}
}
- private static final class RefreshablePropertySource extends MappedConfigurationDataPropertySource
+ private static final class RefreshablePropertySource extends MappedConfigurationDataConfigSource
implements Refreshable{
public RefreshablePropertySource(String name, Supplier<ConfigurationData> dataSupplier) {
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f7037fbd/propertysources/pom.xml
----------------------------------------------------------------------
diff --git a/propertysources/pom.xml b/propertysources/pom.xml
index e9d64ac..ea23f00 100644
--- a/propertysources/pom.xml
+++ b/propertysources/pom.xml
@@ -39,11 +39,6 @@ under the License.
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>