You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by po...@apache.org on 2016/10/17 18:55:24 UTC
[12/50] [abbrv] incubator-tamaya-extensions git commit: TAMAYA-115:
Implemented multi classpath environment PropertySourceProvider,
with relocation capability.
TAMAYA-115: Implemented multi classpath environment PropertySourceProvider, with relocation capability.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/fb52d6cb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/fb52d6cb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/fb52d6cb
Branch: refs/heads/master
Commit: fb52d6cb24417d22c96f02f376e915a001f9d2e7
Parents: b9e708a
Author: anatole <an...@apache.org>
Authored: Tue Oct 6 09:48:40 2015 +0200
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Tue Sep 27 00:18:31 2016 +0200
----------------------------------------------------------------------
.../tamaya/events/ChangeNotification.java | 66 +++++++
.../org/apache/tamaya/events/ConfigEvent.java | 93 ----------
.../tamaya/events/ConfigEventListener.java | 2 +-
.../tamaya/events/ConfigEventManager.java | 107 +++++++++++
.../apache/tamaya/events/ConfigListener.java | 36 ++++
.../tamaya/events/ConfigurationObserver.java | 91 ++++++++++
.../events/delta/ConfigurationChange.java | 9 +-
.../delta/ConfigurationContextChange.java | 10 +-
.../events/delta/PropertySourceChange.java | 9 +-
.../ObservingPropertySourceProvider.java | 4 +-
.../internal/DefaultConfigEventManagerSpi.java | 110 ++++++++++++
.../events/internal/DefaultConfigEventSpi.java | 100 -----------
.../internal/DefaultConfigObserverSpi.java | 179 +++++++++++++++++++
.../events/internal/LoggingConfigListener.java | 43 +++++
.../org/apache/tamaya/events/package-info.java | 2 +-
.../events/spi/ConfigEventManagerSpi.java | 63 +++++++
.../tamaya/events/spi/ConfigEventSpi.java | 54 ------
.../tamaya/events/spi/ConfigObserverSpi.java | 74 ++++++++
.../apache/tamaya/events/spi/package-info.java | 2 +-
.../org.apache.tamaya.events.ConfigListener | 18 ++
...ache.tamaya.events.spi.ConfigEventManagerSpi | 19 ++
...g.apache.tamaya.events.spi.ConfigObserverSpi | 19 ++
.../tamaya/events/ConfigEventManagerTest.java | 63 +++++++
.../apache/tamaya/events/ConfigEventTest.java | 63 -------
.../events/delta/ConfigurationChangeTest.java | 14 +-
.../events/delta/PropertySourceChangeTest.java | 6 +-
.../DefaultConfigEventManagerSpiTest.java | 65 +++++++
.../internal/DefaultConfigEventSpiTest.java | 65 -------
28 files changed, 983 insertions(+), 403 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/ChangeNotification.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ChangeNotification.java b/src/main/java/org/apache/tamaya/events/ChangeNotification.java
new file mode 100644
index 0000000..73a4fa9
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/ChangeNotification.java
@@ -0,0 +1,66 @@
+/*
+ * 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.events;
+
+import java.beans.PropertyChangeEvent;
+import java.util.Collection;
+
+
+/**
+ * Event that contains a set current changes that were applied or could be applied.
+ * @param <T> the event type
+ */
+public interface ChangeNotification<T>{
+
+ /**
+ * Get the underlying property provider/configuration.
+ * @return the underlying property provider/configuration, never null.
+ */
+ T getResource();
+
+ /**
+ * Get the version relative to the observed resource. The version is required to be unique for
+ * each change emmitted for a resource. There is no further requirement how this uniqueness is
+ * modelled, so returning a UUID is cometely valid.
+ * @return the base version.
+ */
+ String getVersion();
+
+ /**
+ * Get the timestamp in millis from the current epoch. it is expected that the timestamp and the version are unique to
+ * identify a changeset.
+ * @return the timestamp, when this changeset was created.
+ */
+ long getTimestamp();
+
+ /**
+ * Get the changes recorded.
+ * @return the recorded changes, never null.
+ */
+ Collection<PropertyChangeEvent> getChanges();
+
+ /**
+ * Checks if the given key is added, or updated OR removed.
+ * @param key the target key (can also be a regular expression), that matches the requested keys,
+ * not null.
+ * @return true, if the given key was added, or updated BUT NOT removed.
+ */
+ boolean isKeyAffected(String key);
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/ConfigEvent.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigEvent.java b/src/main/java/org/apache/tamaya/events/ConfigEvent.java
deleted file mode 100644
index 3ed2ba2..0000000
--- a/src/main/java/org/apache/tamaya/events/ConfigEvent.java
+++ /dev/null
@@ -1,93 +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.events;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.events.spi.ConfigEventSpi;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-/**
- * Singleton accessor for accessing the event support component that distributes change events of
- * {@link org.apache.tamaya.spi.PropertySource} and {@link org.apache.tamaya.Configuration}.
- */
-public final class ConfigEvent {
- /**
- * The backing SPI.
- */
- private static final ConfigEventSpi SPI = ServiceContextManager.getServiceContext()
- .getService(ConfigEventSpi.class);
-
- /**
- * Private singleton constructor.
- */
- private ConfigEvent() {
- }
-
- /**
- * Add a listener for observing change events on {@link org.apache.tamaya.Configuration}. References of this
- * component to the listeners must be managed as weak references.
- *
- * @param l the listener not null.
- */
- public static <T> void addListener(ConfigEventListener<T> l) {
- if (SPI == null) {
- throw new ConfigException("No SPI registered for " +
- ConfigEvent.class.getName());
- }
- SPI.addListener(l);
- }
-
- /**
- * Add a listener for observing change events on {@link org.apache.tamaya.spi.PropertySource}. References of this
- * component to the listeners must be managed as weak references.
- *
- * @param l the listener not null.
- */
- public static <T> void removeListener(ConfigEventListener<T> l) {
- if (SPI == null) {
- throw new ConfigException("No SPI registered for " +
- ConfigEvent.class.getName());
- }
- SPI.removeListener(l);
- }
-
- /**
- * Publishes sn event to all interested listeners.
- *
- * @param event the event, not null.
- */
- public static void fireEvent(Object event) {
- fireEvent(event, (Class)event.getClass());
- }
-
- /**
- * Publishes a {@link org.apache.tamaya.events.delta.ConfigurationChange} to all interested listeners.
- *
- * @param event the event, not null.
- * @param eventType the event type, the vent may be a subclass.
- */
- public static <T> void fireEvent(T event, Class<T> eventType) {
- if (SPI == null) {
- throw new ConfigException("No SPI registered for " +
- ConfigEvent.class.getName());
- }
- SPI.fireEvent(event, eventType);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/ConfigEventListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigEventListener.java b/src/main/java/org/apache/tamaya/events/ConfigEventListener.java
index e2c848c..dde5175 100644
--- a/src/main/java/org/apache/tamaya/events/ConfigEventListener.java
+++ b/src/main/java/org/apache/tamaya/events/ConfigEventListener.java
@@ -22,7 +22,7 @@ package org.apache.tamaya.events;
* Interface to be implemented for listening on changes on {@link org.apache.tamaya.Configuration} instances.
* @param <T> the type listened to.
*/
-@FunctionalInterface
+//@FunctionalInterface
public interface ConfigEventListener<T> {
/**
* Called if an event occurred.
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/ConfigEventManager.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigEventManager.java b/src/main/java/org/apache/tamaya/events/ConfigEventManager.java
new file mode 100644
index 0000000..1095d48
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/ConfigEventManager.java
@@ -0,0 +1,107 @@
+/*
+ * 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.events;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.events.spi.ConfigEventManagerSpi;
+import org.apache.tamaya.spi.ServiceContextManager;
+
+import java.util.Collection;
+
+/**
+ * Singleton accessor for accessing the event support component that distributes change events of
+ * {@link org.apache.tamaya.spi.PropertySource} and {@link org.apache.tamaya.Configuration}.
+ */
+public final class ConfigEventManager {
+ /**
+ * The backing SPI.
+ */
+ private static final ConfigEventManagerSpi SPI = ServiceContextManager.getServiceContext()
+ .getService(ConfigEventManagerSpi.class);
+
+ /**
+ * Private singleton constructor.
+ */
+ private ConfigEventManager() {
+ }
+
+ /**
+ * Add a listener for observing change events on {@link org.apache.tamaya.Configuration}. References of this
+ * component to the listeners must be managed as weak references.
+ *
+ * @param l the listener not null.
+ */
+ public static <T> void addListener(ConfigEventListener<T> l) {
+ if (SPI == null) {
+ throw new ConfigException("No SPI registered for " +
+ ConfigEventManager.class.getName());
+ }
+ SPI.addListener(l);
+ }
+
+ /**
+ * Add a listener for observing change events on {@link org.apache.tamaya.spi.PropertySource}. References of this
+ * component to the listeners must be managed as weak references.
+ *
+ * @param l the listener not null.
+ */
+ public static <T> void removeListener(ConfigEventListener<T> l) {
+ if (SPI == null) {
+ throw new ConfigException("No SPI registered for " +
+ ConfigEventManager.class.getName());
+ }
+ SPI.removeListener(l);
+ }
+
+ /**
+ * Access all registered ConfigEventListeners listening to the given event type.
+ * @param type the event type
+ * @param <T> type param
+ * @return a list with the listeners found, never null.
+ */
+ public static <T>
+ Collection<? extends ConfigEventListener<T>> getListeneters(Class<T> type) {
+ return SPI.getListeners(type);
+ }
+
+
+ /**
+ * Publishes sn event to all interested listeners.
+ *
+ * @param event the event, not null.
+ */
+ public static void fireEvent(Object event) {
+ fireEvent(event, (Class)event.getClass());
+ }
+
+ /**
+ * Publishes a {@link org.apache.tamaya.events.delta.ConfigurationChange} to all interested listeners.
+ *
+ * @param event the event, not null.
+ * @param eventType the event type, the vent may be a subclass.
+ */
+ public static <T> void fireEvent(T event, Class<T> eventType) {
+ if (SPI == null) {
+ throw new ConfigException("No SPI registered for " +
+ ConfigEventManager.class.getName());
+ }
+ SPI.fireEvent(event, eventType);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/ConfigListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigListener.java b/src/main/java/org/apache/tamaya/events/ConfigListener.java
new file mode 100644
index 0000000..1381c38
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/ConfigListener.java
@@ -0,0 +1,36 @@
+/*
+ * 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.events;
+
+import org.apache.tamaya.Configuration;
+
+/**
+ * Simple observer interface that can be registered using the current {@code ServiceContext}.
+ * This class will be called on each configuration change detected in the current environment.
+ */
+public interface ConfigListener
+ extends ConfigEventListener<ChangeNotification<Configuration>> {
+
+ /**
+ * Get a regular expression to define, which keys this listener is interested in.
+ * @return
+ */
+ String getKeyExpression();
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/ConfigurationObserver.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/ConfigurationObserver.java b/src/main/java/org/apache/tamaya/events/ConfigurationObserver.java
new file mode 100644
index 0000000..ffde3a3
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/ConfigurationObserver.java
@@ -0,0 +1,91 @@
+/*
+ * 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.events;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.events.spi.ConfigObserverSpi;
+import org.apache.tamaya.spi.ServiceContextManager;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * Created by Anatole on 04.10.2015.
+ */
+public class ConfigurationObserver {
+
+ /**
+ * Private singleton constructor.
+ */
+ private ConfigurationObserver() {
+ }
+
+ /**
+ * The backing SPI.
+ */
+ private static final ConfigObserverSpi SPI = ServiceContextManager.getServiceContext()
+ .getService(ConfigObserverSpi.class);
+
+
+ /**
+ * Add a listener for observing change events on {@link org.apache.tamaya.Configuration}. References of this
+ * component to the listeners must be managed as weak references.
+ *
+ * @param l the listener not null.
+ */
+ public static <T> void addListener(ConfigListener l) {
+ if (SPI == null) {
+ throw new ConfigException("No SPI registered for " +
+ ConfigurationObserver.class.getName());
+ }
+ SPI.addListener(l);
+ }
+
+ /**
+ * Add a listener for observing change events on {@link org.apache.tamaya.spi.PropertySource}. References of this
+ * component to the listeners must be managed as weak references.
+ *
+ * @param l the listener not null.
+ */
+ public static <T> void removeListener(ConfigListener l) {
+ if (SPI == null) {
+ throw new ConfigException("No SPI registered for " +
+ ConfigurationObserver.class.getName());
+ }
+ SPI.removeListener(l);
+ }
+
+ /**
+ * Access all registered ConfigEventListeners listening to the given event key(s).
+ *
+ * @return a list with the listeners found, never null.
+ */
+ public static Collection<ConfigListener> getListeners(Collection<String> keys) {
+ return SPI.getListeners(keys);
+ }
+
+ /**
+ * Access all registered ConfigEventListeners listening to the given event key(s).
+ *
+ * @return a list with the listeners found, never null.
+ */
+ public static Collection<ConfigListener> getListeners(String... keys) {
+ return SPI.getListeners(Arrays.asList(keys));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/delta/ConfigurationChange.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/delta/ConfigurationChange.java b/src/main/java/org/apache/tamaya/events/delta/ConfigurationChange.java
index 5f26eaa..41c6ba1 100644
--- a/src/main/java/org/apache/tamaya/events/delta/ConfigurationChange.java
+++ b/src/main/java/org/apache/tamaya/events/delta/ConfigurationChange.java
@@ -19,6 +19,7 @@
package org.apache.tamaya.events.delta;
import org.apache.tamaya.Configuration;
+import org.apache.tamaya.events.ChangeNotification;
import org.apache.tamaya.events.FrozenConfiguration;
import java.beans.PropertyChangeEvent;
@@ -36,7 +37,7 @@ import java.util.UUID;
*
* Created by Anatole on 22.10.2014.
*/
-public final class ConfigurationChange implements Serializable{
+public final class ConfigurationChange implements ChangeNotification<Configuration>, Serializable{
private static final long serialVersionUID = 1L;
/** The base property provider/configuration. */
@@ -78,7 +79,7 @@ public final class ConfigurationChange implements Serializable{
* Get the underlying property provider/configuration.
* @return the underlying property provider/configuration, never null.
*/
- public Configuration getConfiguration(){
+ public Configuration getResource(){
return this.configuration;
}
@@ -103,7 +104,7 @@ public final class ConfigurationChange implements Serializable{
* Get the changes recorded.
* @return the recorded changes, never null.
*/
- public Collection<PropertyChangeEvent> getEvents(){
+ public Collection<PropertyChangeEvent> getChanges(){
return Collections.unmodifiableCollection(this.changes.values());
}
@@ -190,7 +191,7 @@ public final class ConfigurationChange implements Serializable{
* @param key the target key, not null.
* @return true, if the given key was added, or updated BUT NOT removed.
*/
- public boolean containsKey(String key) {
+ public boolean isKeyAffected(String key) {
PropertyChangeEvent change = this.changes.get(key);
return change != null && change.getNewValue() != null;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/delta/ConfigurationContextChange.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/delta/ConfigurationContextChange.java b/src/main/java/org/apache/tamaya/events/delta/ConfigurationContextChange.java
index 2378418..0aef2fd 100644
--- a/src/main/java/org/apache/tamaya/events/delta/ConfigurationContextChange.java
+++ b/src/main/java/org/apache/tamaya/events/delta/ConfigurationContextChange.java
@@ -115,7 +115,7 @@ public final class ConfigurationContextChange implements Serializable{
List<PropertySource> result = new ArrayList<>();
for (PropertySourceChange pc : this.changedPropertySources) {
if (pc.getChangeType() == ChangeType.DELETED) {
- result.add(pc.getPropertySource());
+ result.add(pc.getResource());
}
}
return result;
@@ -131,7 +131,7 @@ public final class ConfigurationContextChange implements Serializable{
List<PropertySource> result = new ArrayList<>();
for (PropertySourceChange pc : this.changedPropertySources) {
if (pc.getChangeType() == ChangeType.NEW) {
- result.add(pc.getPropertySource());
+ result.add(pc.getResource());
}
}
return result;
@@ -147,7 +147,7 @@ public final class ConfigurationContextChange implements Serializable{
List<PropertySource> result = new ArrayList<>();
for (PropertySourceChange pc : this.changedPropertySources) {
if (pc.getChangeType() == ChangeType.UPDATED) {
- result.add(pc.getPropertySource());
+ result.add(pc.getResource());
}
}
return result;
@@ -162,8 +162,8 @@ public final class ConfigurationContextChange implements Serializable{
*/
public boolean isAffected(PropertySource propertySource) {
for (PropertySourceChange ps : this.changedPropertySources) {
- if (ps.getPropertySource() == propertySource ||
- ps.getPropertySource().getName().equals(propertySource.getName())) {
+ if (ps.getResource() == propertySource ||
+ ps.getResource().getName().equals(propertySource.getName())) {
return true;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/delta/PropertySourceChange.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/delta/PropertySourceChange.java b/src/main/java/org/apache/tamaya/events/delta/PropertySourceChange.java
index 4e9acda..330f3b0 100644
--- a/src/main/java/org/apache/tamaya/events/delta/PropertySourceChange.java
+++ b/src/main/java/org/apache/tamaya/events/delta/PropertySourceChange.java
@@ -18,6 +18,7 @@
*/
package org.apache.tamaya.events.delta;
+import org.apache.tamaya.events.ChangeNotification;
import org.apache.tamaya.events.FrozenPropertySource;
import org.apache.tamaya.spi.PropertySource;
@@ -36,7 +37,7 @@ import java.util.UUID;
*
* Created by Anatole on 22.10.2014.
*/
-public final class PropertySourceChange implements Serializable{
+public final class PropertySourceChange implements ChangeNotification<PropertySource>, Serializable{
private static final long serialVersionUID = 1L;
/** The base property provider/configuration. */
@@ -80,7 +81,7 @@ public final class PropertySourceChange implements Serializable{
* Get the underlying property provider/configuration.
* @return the underlying property provider/configuration, or null, if the change instance was deserialized.
*/
- public PropertySource getPropertySource(){
+ public PropertySource getResource(){
return this.propertySource;
}
@@ -105,7 +106,7 @@ public final class PropertySourceChange implements Serializable{
* Get the changes recorded.
* @return the recorded changes, never null.
*/
- public Collection<PropertyChangeEvent> getEvents(){
+ public Collection<PropertyChangeEvent> getChanges(){
return Collections.unmodifiableCollection(this.changes.values());
}
@@ -191,7 +192,7 @@ public final class PropertySourceChange implements Serializable{
* @param key the target key, not null.
* @return true, if the given key was added, or updated BUT NOT removed.
*/
- public boolean containsKey(String key) {
+ public boolean isKeyAffected(String key) {
PropertyChangeEvent change = this.changes.get(key);
return change != null && change.getNewValue() != null;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java b/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java
index 86f68b9..f05c98c 100644
--- a/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java
+++ b/src/main/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java
@@ -19,7 +19,7 @@
package org.apache.tamaya.events.folderobserver;
import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.events.ConfigEvent;
+import org.apache.tamaya.events.ConfigEventManager;
import org.apache.tamaya.events.delta.ConfigurationContextChange;
import org.apache.tamaya.events.delta.ConfigurationContextChangeBuilder;
import org.apache.tamaya.format.ConfigurationData;
@@ -212,7 +212,7 @@ public class ObservingPropertySourceProvider implements PropertySourceProvider,
}
ConfigurationContextChange changeEvent = b.build();
LOG.fine("Trigger Config Context Change: " + changeEvent);
- ConfigEvent.fireEvent(changeEvent);
+ ConfigEventManager.fireEvent(changeEvent);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpi.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpi.java b/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpi.java
new file mode 100644
index 0000000..6773c7d
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpi.java
@@ -0,0 +1,110 @@
+/*
+ * 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.events.internal;
+
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.events.ConfigEventListener;
+import org.apache.tamaya.events.spi.ConfigEventManagerSpi;
+import org.apache.tamaya.spi.ServiceContextManager;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Default implementation of {@link DefaultConfigEventManagerSpi} just forwarding all
+ * events synchronously to the listeners.
+ */
+public class DefaultConfigEventManagerSpi implements ConfigEventManagerSpi {
+
+ private static final Logger LOG = Logger.getLogger(DefaultConfigEventManagerSpi.class.getName());
+
+ private Map<Type, List<ConfigEventListener<?>>> listenerMap = new ConcurrentHashMap<>();
+
+ /**
+ * Constructor. Also loads all registered listeners.
+ */
+ public DefaultConfigEventManagerSpi() {
+ try {
+ for (ConfigEventListener<?> l : ServiceContextManager.getServiceContext().getServices(ConfigEventListener.class)) {
+ try {
+ addListener(l);
+ } catch (Exception e) {
+ LOG.log(Level.WARNING, "Failed to load configured listener: " + l.getClass().getName(), e);
+ }
+ }
+ } catch (Exception e) {
+ LOG.log(Level.WARNING, "Failed to load configured listeners.", e);
+ }
+ }
+
+ @Override
+ public <T> void addListener(ConfigEventListener<T> l) {
+ Type type = TypeLiteral.getGenericInterfaceTypeParameters(l.getClass(), ConfigEventListener.class)[0];
+ List<ConfigEventListener<?>> listeners = listenerMap.get(type);
+ if (listeners == null) {
+ listeners = Collections.synchronizedList(new ArrayList<ConfigEventListener<?>>());
+ listenerMap.put(type, listeners);
+ }
+ synchronized (listeners) {
+ if (!listeners.contains(l)) {
+ listeners.add(l);
+ }
+ }
+ }
+
+ @Override
+ public <T> void removeListener(ConfigEventListener<T> l) {
+ Type type = TypeLiteral.getGenericInterfaceTypeParameters(l.getClass(), ConfigEventListener.class)[0];
+ List<ConfigEventListener<?>> listeners = listenerMap.get(type);
+ if (listeners != null) {
+ synchronized (listeners) {
+ listeners.remove(l);
+ }
+ }
+ }
+
+ @Override
+ public <T> void fireEvent(T event, Class<T> eventType) {
+ List<ConfigEventListener<?>> listeners = listenerMap.get(eventType);
+ if (listeners != null) {
+ synchronized (listeners) {
+ for (ConfigEventListener l : listeners) {
+ l.onConfigEvent(event);
+ }
+ }
+ }
+ }
+
+ @Override
+ public <T> Collection<ConfigEventListener<T>> getListeners(Class<T> eventType) {
+ List<ConfigEventListener<?>> listeners =
+ listenerMap.get(eventType);
+ if (listeners != null) {
+ return Collection.class.cast(listeners);
+ }
+ return Collections.emptyList();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventSpi.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventSpi.java b/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventSpi.java
deleted file mode 100644
index 0032c4d..0000000
--- a/src/main/java/org/apache/tamaya/events/internal/DefaultConfigEventSpi.java
+++ /dev/null
@@ -1,100 +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.events.internal;
-
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.events.ConfigEventListener;
-import org.apache.tamaya.events.spi.ConfigEventSpi;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Default implementation of {@link DefaultConfigEventSpi} just forwarding all
- * events synchronously to the listeners.
- */
-public class DefaultConfigEventSpi implements ConfigEventSpi {
-
- private static final Logger LOG = Logger.getLogger(DefaultConfigEventSpi.class.getName());
-
- private Map<Type, List<ConfigEventListener>> listenerMap = new ConcurrentHashMap<>();
-
-
- /**
- * Constructor. Also loads all registered listeners.
- */
- public DefaultConfigEventSpi() {
- try {
- for (ConfigEventListener<?> l : ServiceContextManager.getServiceContext().getServices(ConfigEventListener.class)) {
- try {
- addListener(l);
- } catch (Exception e) {
- LOG.log(Level.WARNING, "Failed to load configured listener: " + l.getClass().getName(), e);
- }
- }
- } catch (Exception e) {
- LOG.log(Level.WARNING, "Failed to load configured listeners.", e);
- }
- }
-
- @Override
- public <T> void addListener(ConfigEventListener<T> l) {
- Type type = TypeLiteral.getGenericInterfaceTypeParameters(l.getClass(), ConfigEventListener.class)[0];
- List<ConfigEventListener> listeners = listenerMap.get(type);
- if (listeners == null) {
- listeners = Collections.synchronizedList(new ArrayList<ConfigEventListener>());
- listenerMap.put(type, listeners);
- }
- synchronized (listeners) {
- if (!listeners.contains(l)) {
- listeners.add(l);
- }
- }
- }
-
- @Override
- public <T> void removeListener(ConfigEventListener<T> l) {
- Type type = TypeLiteral.getGenericInterfaceTypeParameters(l.getClass(), ConfigEventListener.class)[0];
- List<ConfigEventListener> listeners = listenerMap.get(type);
- if (listeners != null) {
- synchronized (listeners) {
- listeners.remove(l);
- }
- }
- }
-
- @Override
- public <T> void fireEvent(T event, Class<T> eventType) {
- List<ConfigEventListener> listeners = listenerMap.get(eventType);
- if (listeners != null) {
- synchronized (listeners) {
- for (ConfigEventListener l : listeners) {
- l.onConfigEvent(event);
- }
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/internal/DefaultConfigObserverSpi.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/internal/DefaultConfigObserverSpi.java b/src/main/java/org/apache/tamaya/events/internal/DefaultConfigObserverSpi.java
new file mode 100644
index 0000000..1340f2c
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/internal/DefaultConfigObserverSpi.java
@@ -0,0 +1,179 @@
+/*
+ * 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.events.internal;
+
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.events.ConfigListener;
+import org.apache.tamaya.events.FrozenConfiguration;
+import org.apache.tamaya.events.delta.ConfigurationChange;
+import org.apache.tamaya.events.delta.ConfigurationChangeBuilder;
+import org.apache.tamaya.events.spi.ConfigObserverSpi;
+import org.apache.tamaya.spi.ServiceContextManager;
+
+import java.beans.PropertyChangeEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Default implementation of {@link org.apache.tamaya.events.spi.ConfigObserverSpi} just forwarding all
+ * events synchronously to the listeners.
+ */
+public class DefaultConfigObserverSpi implements ConfigObserverSpi {
+
+ private static final long START_DELAY = 5000L;
+
+ private static final Logger LOG = Logger.getLogger(DefaultConfigObserverSpi.class.getName());
+
+ private Map<String, List<ConfigListener>> listenerMap = new ConcurrentHashMap<>();
+
+ private Timer timer = new Timer("ConfigurationObserver", true);
+
+ private long checkPeriod = 2000L;
+
+ private volatile FrozenConfiguration lastConfig;
+
+ private ExecutorService publisher = Executors.newCachedThreadPool();
+
+ private volatile boolean running;
+
+ /**
+ * Constructor. Also loads all registered listeners.
+ */
+ public DefaultConfigObserverSpi() {
+ try {
+ for (ConfigListener l : ServiceContextManager.getServiceContext().getServices(ConfigListener.class)) {
+ addListener(l);
+ }
+ } catch (Exception e) {
+ LOG.log(Level.WARNING, "Failed to load configured listeners.", e);
+ }
+ timer.scheduleAtFixedRate(new TimerTask() {
+ @Override
+ public void run() {
+ if(running) {
+ checkConfigurationUpdate();
+ }
+ }
+ }, START_DELAY, checkPeriod);
+ }
+
+ public void checkConfigurationUpdate() {
+ LOG.finest("Checking configuration for changes...");
+ FrozenConfiguration newConfig = FrozenConfiguration.of(ConfigurationProvider.getConfiguration());
+ ConfigurationChange changes = null;
+ if(lastConfig==null){
+ changes = ConfigurationChangeBuilder.of(newConfig).putAll(newConfig.getProperties())
+ .build();
+ }else{
+ changes = ConfigurationChangeBuilder.of(lastConfig).addChanges(newConfig)
+ .build();
+ }
+ Set<ConfigListener> affected = new HashSet<>();
+ for(PropertyChangeEvent evt: changes.getChanges()) {
+ for (Map.Entry<String, List<ConfigListener>> en : listenerMap.entrySet()) {
+ if (evt.getPropertyName().matches(en.getKey())) {
+ for(ConfigListener l:en.getValue()){
+ affected.add(l);
+ }
+ }
+ }
+ }
+ for(ConfigListener l:affected){
+ publisher.submit(new PublishConfigChangeTask(l, changes));
+ }
+ }
+
+ @Override
+ public synchronized <T> void addListener(final ConfigListener l) {
+ List<ConfigListener> items = listenerMap.get(l.getKeyExpression());
+ if (items == null) {
+ items = new ArrayList<>();
+ listenerMap.put(l.getKeyExpression(), items);
+ }
+ items.add(l);
+ }
+
+ @Override
+ public synchronized <T> void removeListener(ConfigListener l) {
+ List<ConfigListener> items = listenerMap.get(l.getKeyExpression());
+ if (items != null) {
+ items.remove(l);
+ }
+ }
+
+
+ @Override
+ public synchronized Collection<ConfigListener> getListeners(Collection<String> keys) {
+ List<ConfigListener> listeners = new ArrayList<>();
+ for (String key : keys) {
+ for (Map.Entry<String, List<ConfigListener>> en : listenerMap.entrySet()) {
+ if (key.matches(en.getKey())) {
+ listeners.addAll(en.getValue());
+ }
+ }
+ }
+ return listeners;
+ }
+
+ @Override
+ public long getCheckPeriod() {
+ return checkPeriod;
+ }
+
+ @Override
+ public boolean isRunning(){
+ return running;
+ }
+
+ @Override
+ public void enableObservation(boolean enable){
+ this.running = true;
+ }
+
+ /**
+ * Tasks to inform observers on detected configuration changes.
+ */
+ private static final class PublishConfigChangeTask implements Runnable{
+
+ private ConfigListener l;
+ private ConfigurationChange changes;
+
+ public PublishConfigChangeTask(ConfigListener l, ConfigurationChange changes) {
+ this.l = Objects.requireNonNull(l);
+ this.changes = Objects.requireNonNull(changes);
+ }
+
+ @Override
+ public void run() {
+ l.onConfigEvent(changes);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/internal/LoggingConfigListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/internal/LoggingConfigListener.java b/src/main/java/org/apache/tamaya/events/internal/LoggingConfigListener.java
new file mode 100644
index 0000000..059d1b5
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/internal/LoggingConfigListener.java
@@ -0,0 +1,43 @@
+/*
+ * 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.events.internal;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.events.ChangeNotification;
+import org.apache.tamaya.events.ConfigListener;
+
+import java.util.logging.Logger;
+
+/**
+ * Simple ConfigListener that simply logs any detected config changes to INFO level.
+ */
+public class LoggingConfigListener implements ConfigListener{
+
+ private static final Logger LOG = Logger.getLogger(LoggingConfigListener.class.getName());
+
+ @Override
+ public String getKeyExpression() {
+ return ".*";
+ }
+
+ @Override
+ public void onConfigEvent(ChangeNotification<Configuration> event) {
+ LOG.info("Configuration changed: " + event);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/package-info.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/package-info.java b/src/main/java/org/apache/tamaya/events/package-info.java
index 1cba8ce..33f5f25 100644
--- a/src/main/java/org/apache/tamaya/events/package-info.java
+++ b/src/main/java/org/apache/tamaya/events/package-info.java
@@ -18,6 +18,6 @@
*/
/**
* This package provides the main building blocks for handling configuration changes, such as
- * {@link org.apache.tamaya.events.ConfigEvent}, {@link org.apache.tamaya.events.ConfigEventListener}.
+ * {@link org.apache.tamaya.events.ConfigEventManager}, {@link org.apache.tamaya.events.ConfigEventListener}.
*/
package org.apache.tamaya.events;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/spi/ConfigEventManagerSpi.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/spi/ConfigEventManagerSpi.java b/src/main/java/org/apache/tamaya/events/spi/ConfigEventManagerSpi.java
new file mode 100644
index 0000000..7cb47a0
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/spi/ConfigEventManagerSpi.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.events.spi;
+
+import org.apache.tamaya.events.ConfigEventListener;
+
+import java.util.Collection;
+
+/**
+ * SPI interface to implement the {@link org.apache.tamaya.events.ConfigEventManager} singleton.
+ * Implementations of this interface must be registered with the current {@link org.apache.tamaya.spi.ServiceContext},
+ * by default this equals to registering it with {@link java.util.ServiceLoader}. Add {@link javax.annotation.Priority}
+ * annotations for overriding (higher values overriden lower values).
+ */
+public interface ConfigEventManagerSpi {
+ /**
+ * Add a listener for observing events. References of this
+ * component to the listeners must be managed as weak references.
+ *
+ * @param l the listener not null.
+ */
+ <T> void addListener(ConfigEventListener<T> l);
+
+
+ /**
+ * Removes a listener for observing events.
+ *
+ * @param l the listener not null.
+ */
+ <T> void removeListener(ConfigEventListener<T> l);
+
+ /**
+ * Publishes an event to all interested listeners.
+ *
+ * @param event the event, not null.
+ * @param eventType the event type.
+ */
+ <T> void fireEvent(T event, Class<T> eventType);
+
+ /**
+ * Access all known listeners for a given targe type.
+ * @param type the type.
+ * @param <T> the listener type.
+ * @return the items found, never null.
+ */
+ <T> Collection<? extends ConfigEventListener<T>> getListeners(Class<T> type);
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/spi/ConfigEventSpi.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/spi/ConfigEventSpi.java b/src/main/java/org/apache/tamaya/events/spi/ConfigEventSpi.java
deleted file mode 100644
index e963396..0000000
--- a/src/main/java/org/apache/tamaya/events/spi/ConfigEventSpi.java
+++ /dev/null
@@ -1,54 +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.events.spi;
-
-import org.apache.tamaya.events.ConfigEventListener;
-
-/**
- * SPI interface to implement the {@link org.apache.tamaya.events.ConfigEvent} singleton.
- * Implementations of this interface must be registered with the current {@link org.apache.tamaya.spi.ServiceContext},
- * by default this equals to registering it with {@link java.util.ServiceLoader}. Add {@link javax.annotation.Priority}
- * annotations for overriding (higher values overriden lower values).
- */
-public interface ConfigEventSpi {
- /**
- * Add a listener for observing events. References of this
- * component to the listeners must be managed as weak references.
- *
- * @param l the listener not null.
- */
- <T> void addListener(ConfigEventListener<T> l);
-
-
- /**
- * Removes a listener for observing events.
- *
- * @param l the listener not null.
- */
- <T> void removeListener(ConfigEventListener<T> l);
-
- /**
- * Publishes an event to all interested listeners.
- *
- * @param event the event, not null.
- * @param eventType the event type.
- */
- <T> void fireEvent(T event, Class<T> eventType);
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/spi/ConfigObserverSpi.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/spi/ConfigObserverSpi.java b/src/main/java/org/apache/tamaya/events/spi/ConfigObserverSpi.java
new file mode 100644
index 0000000..17f5ccb
--- /dev/null
+++ b/src/main/java/org/apache/tamaya/events/spi/ConfigObserverSpi.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.events.spi;
+
+import org.apache.tamaya.events.ConfigListener;
+
+import java.util.Collection;
+
+/**
+ * SPI interface to implement the {@link org.apache.tamaya.events.ConfigurationObserver} singleton.
+ * Implementations of this interface must be registered with the current {@link org.apache.tamaya.spi.ServiceContext},
+ * by default this equals to registering it with {@link java.util.ServiceLoader}. Add {@link javax.annotation.Priority}
+ * annotations for overriding (higher values overriden lower values).
+ */
+public interface ConfigObserverSpi {
+ /**
+ * Add a listener for observing events. References of this
+ * component to the listeners must be managed as weak references.
+ *
+ * @param l the listener not null.
+ */
+ <T> void addListener(ConfigListener l);
+
+
+ /**
+ * Removes a listener for observing events.
+ *
+ * @param l the listener not null.
+ */
+ <T> void removeListener(ConfigListener l);
+
+ /**
+ * Access all registered ConfigEventListeners listening to the given event type.
+ *
+ * @return a list with the listeners found, never null.
+ */
+ Collection<ConfigListener> getListeners(Collection<String> keys);
+
+ /**
+ * Get the current check period to check for configuration changes.
+ *
+ * @return the check period in ms.
+ */
+ long getCheckPeriod();
+
+ /**
+ * Check if the observer is running currently.
+ *
+ * @return true, if the observer is running.
+ */
+ boolean isRunning();
+
+ /**
+ * Start/Stop the observer container.
+ */
+ void enableObservation(boolean enable);
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/java/org/apache/tamaya/events/spi/package-info.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/tamaya/events/spi/package-info.java b/src/main/java/org/apache/tamaya/events/spi/package-info.java
index 7c4fd8f..63d2b3b 100644
--- a/src/main/java/org/apache/tamaya/events/spi/package-info.java
+++ b/src/main/java/org/apache/tamaya/events/spi/package-info.java
@@ -18,6 +18,6 @@
*/
/**
* This package contains the SPI to implement the
- * {@link org.apache.tamaya.events.ConfigEvent} singleton.
+ * {@link org.apache.tamaya.events.ConfigEventManager} singleton.
*/
package org.apache.tamaya.events.spi;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigListener
----------------------------------------------------------------------
diff --git a/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigListener b/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigListener
new file mode 100644
index 0000000..f3199f2
--- /dev/null
+++ b/src/main/resources/META-INF/services/org.apache.tamaya.events.ConfigListener
@@ -0,0 +1,18 @@
+#
+# 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.
+#
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigEventManagerSpi
----------------------------------------------------------------------
diff --git a/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigEventManagerSpi b/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigEventManagerSpi
new file mode 100644
index 0000000..d45dc43
--- /dev/null
+++ b/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigEventManagerSpi
@@ -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.events.internal.DefaultConfigEventManagerSpi
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigObserverSpi
----------------------------------------------------------------------
diff --git a/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigObserverSpi b/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigObserverSpi
new file mode 100644
index 0000000..de5ee6f
--- /dev/null
+++ b/src/main/resources/META-INF/services/org.apache.tamaya.events.spi.ConfigObserverSpi
@@ -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.events.internal.DefaultConfigObserverSpi
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/test/java/org/apache/tamaya/events/ConfigEventManagerTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/tamaya/events/ConfigEventManagerTest.java b/src/test/java/org/apache/tamaya/events/ConfigEventManagerTest.java
new file mode 100644
index 0000000..45c15d2
--- /dev/null
+++ b/src/test/java/org/apache/tamaya/events/ConfigEventManagerTest.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.events;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests for {@link ConfigEventManager}.
+ */
+public class ConfigEventManagerTest {
+
+ private String testAddListenerValue;
+
+ @Test
+ public void testAddRemoveListener() throws Exception {
+ ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
+ @Override
+ public void onConfigEvent(String event) {
+ testAddListenerValue = event;
+ }
+ };
+ ConfigEventManager.addListener(testListener);
+ ConfigEventManager.fireEvent("Event1", String.class);
+ assertEquals(testAddListenerValue, "Event1");
+ ConfigEventManager.removeListener(testListener);
+ ConfigEventManager.fireEvent("Event2", String.class);
+ assertEquals(testAddListenerValue, "Event1");
+ }
+
+ @Test
+ public void testFireEvent() throws Exception {
+ ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
+ @Override
+ public void onConfigEvent(String event) {
+ testAddListenerValue = event;
+ }
+ };
+ ConfigEventManager.addListener(testListener);
+ ConfigEventManager.fireEvent("Event1");
+ assertEquals(testAddListenerValue, "Event1");
+ ConfigEventManager.removeListener(testListener);
+ ConfigEventManager.fireEvent("Event2");
+ assertEquals(testAddListenerValue, "Event1");
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/test/java/org/apache/tamaya/events/ConfigEventTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/tamaya/events/ConfigEventTest.java b/src/test/java/org/apache/tamaya/events/ConfigEventTest.java
deleted file mode 100644
index 3398d3f..0000000
--- a/src/test/java/org/apache/tamaya/events/ConfigEventTest.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.events;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests for {@link ConfigEvent}.
- */
-public class ConfigEventTest {
-
- private String testAddListenerValue;
-
- @Test
- public void testAddRemoveListener() throws Exception {
- ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
- @Override
- public void onConfigEvent(String event) {
- testAddListenerValue = event;
- }
- };
- ConfigEvent.addListener(testListener);
- ConfigEvent.fireEvent("Event1", String.class);
- assertEquals(testAddListenerValue, "Event1");
- ConfigEvent.removeListener(testListener);
- ConfigEvent.fireEvent("Event2", String.class);
- assertEquals(testAddListenerValue, "Event1");
- }
-
- @Test
- public void testFireEvent() throws Exception {
- ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
- @Override
- public void onConfigEvent(String event) {
- testAddListenerValue = event;
- }
- };
- ConfigEvent.addListener(testListener);
- ConfigEvent.fireEvent("Event1");
- assertEquals(testAddListenerValue, "Event1");
- ConfigEvent.removeListener(testListener);
- ConfigEvent.fireEvent("Event2");
- assertEquals(testAddListenerValue, "Event1");
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java b/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
index 7d44b92..0a639ab 100644
--- a/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
+++ b/src/test/java/org/apache/tamaya/events/delta/ConfigurationChangeTest.java
@@ -46,7 +46,7 @@ public class ConfigurationChangeTest {
assertTrue(change.isEmpty());
for (Map.Entry<String, String> en : config.getProperties().entrySet()) {
if (!"[meta]frozenAt".equals(en.getKey())) {
- assertEquals("Error for " + en.getKey(), en.getValue(), change.getConfiguration().get(en.getKey()));
+ assertEquals("Error for " + en.getKey(), en.getValue(), change.getResource().get(en.getKey()));
}
}
}
@@ -74,9 +74,9 @@ public class ConfigurationChangeTest {
public void testGetEvents() throws Exception {
Configuration config = ConfigurationProvider.getConfiguration();
ConfigurationChange change = ConfigurationChangeBuilder.of(config).removeKey("key1", "key2").build();
- assertTrue(change.getEvents().size() == 2);
+ assertTrue(change.getChanges().size() == 2);
change = ConfigurationChangeBuilder.of(config).addChange("key1Added", "value1Added").build();
- assertTrue(change.getEvents().size() == 1);
+ assertTrue(change.getChanges().size() == 1);
}
@Test
@@ -127,11 +127,11 @@ public class ConfigurationChangeTest {
public void testContainsKey() throws Exception {
Configuration config = ConfigurationProvider.getConfiguration();
ConfigurationChange change = ConfigurationChangeBuilder.of(config).addChange("key1", "key2").build();
- assertTrue(change.containsKey("key1"));
- assertFalse(change.containsKey("key2"));
+ assertTrue(change.isKeyAffected("key1"));
+ assertFalse(change.isKeyAffected("key2"));
change = ConfigurationChangeBuilder.of(config).removeKey("java.version").build();
- assertFalse(change.containsKey("java.version"));
- assertFalse(change.containsKey("key2"));
+ assertFalse(change.isKeyAffected("java.version"));
+ assertFalse(change.isKeyAffected("key2"));
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java b/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java
index 2b44543..b3be028 100644
--- a/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java
+++ b/src/test/java/org/apache/tamaya/events/delta/PropertySourceChangeTest.java
@@ -47,7 +47,7 @@ public class PropertySourceChangeTest {
@Test
public void testGetPropertySource() throws Exception {
PropertySourceChange change = PropertySourceChangeBuilder.of(myPS, ChangeType.DELETED).build();
- assertEquals(change.getPropertySource().getName(), myPS.getName());
+ assertEquals(change.getResource().getName(), myPS.getName());
}
@Test
@@ -70,7 +70,7 @@ public class PropertySourceChangeTest {
.addChanges(
new EnvironmentPropertySource()
).build();
- assertTrue(change.getEvents().size()>0);
+ assertTrue(change.getChanges().size()>0);
}
@Test
@@ -163,7 +163,7 @@ public class PropertySourceChangeTest {
.addChanges(
myPS
).build();
- assertTrue(change.containsKey("java.version"));
+ assertTrue(change.isKeyAffected("java.version"));
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java b/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java
new file mode 100644
index 0000000..7bac25a
--- /dev/null
+++ b/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventManagerSpiTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.events.internal;
+
+import org.apache.tamaya.events.ConfigEventListener;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for {@link DefaultConfigEventManagerSpi}.
+ */
+public class DefaultConfigEventManagerSpiTest {
+
+ private DefaultConfigEventManagerSpi spi = new DefaultConfigEventManagerSpi();
+ private String testAddListenerValue;
+
+ @Test
+ public void testAddListener() throws Exception {
+ ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
+
+ @Override
+ public void onConfigEvent(String event) {
+ testAddListenerValue = event;
+ }
+ };
+ spi.addListener(testListener);
+ spi.fireEvent("Event1", String.class);
+ assertEquals(testAddListenerValue, "Event1");
+ spi.removeListener(testListener);
+ spi.fireEvent("Event2", String.class);
+ assertEquals(testAddListenerValue, "Event1");
+
+ }
+
+ @Test
+ public void testRemoveListener() throws Exception {
+ ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
+
+ @Override
+ public void onConfigEvent(String event) {
+ testAddListenerValue = event;
+ }
+ };
+ spi.removeListener(testListener);
+ spi.removeListener(testListener);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/fb52d6cb/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventSpiTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventSpiTest.java b/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventSpiTest.java
deleted file mode 100644
index 0908d20..0000000
--- a/src/test/java/org/apache/tamaya/events/internal/DefaultConfigEventSpiTest.java
+++ /dev/null
@@ -1,65 +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.events.internal;
-
-import org.apache.tamaya.events.ConfigEventListener;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Tests for {@link DefaultConfigEventSpi}.
- */
-public class DefaultConfigEventSpiTest {
-
- private DefaultConfigEventSpi spi = new DefaultConfigEventSpi();
- private String testAddListenerValue;
-
- @Test
- public void testAddListener() throws Exception {
- ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
-
- @Override
- public void onConfigEvent(String event) {
- testAddListenerValue = event;
- }
- };
- spi.addListener(testListener);
- spi.fireEvent("Event1", String.class);
- assertEquals(testAddListenerValue, "Event1");
- spi.removeListener(testListener);
- spi.fireEvent("Event2", String.class);
- assertEquals(testAddListenerValue, "Event1");
-
- }
-
- @Test
- public void testRemoveListener() throws Exception {
- ConfigEventListener<String> testListener = new ConfigEventListener<String>() {
-
- @Override
- public void onConfigEvent(String event) {
- testAddListenerValue = event;
- }
- };
- spi.removeListener(testListener);
- spi.removeListener(testListener);
- }
-
-}
\ No newline at end of file