You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by pl...@apache.org on 2016/09/26 22:18:55 UTC
[14/50] [abbrv] incubator-tamaya-extensions git commit: TAMAYA-120:
Add Observer for triggering events on certain configuration key ranges
TAMAYA-120: Add Observer for triggering events on certain configuration key ranges
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/19a5dae4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/19a5dae4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/19a5dae4
Branch: refs/heads/master
Commit: 19a5dae4b37df1be45f38cfdda4a23180e2088a8
Parents: fb52d6c
Author: anatole <an...@apache.org>
Authored: Tue Oct 13 03:09:08 2015 +0200
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Tue Sep 27 00:18:31 2016 +0200
----------------------------------------------------------------------
.../apache/tamaya/events/ConfigListener.java | 11 ++--
.../tamaya/events/ConfigurationObserver.java | 54 +++++++++++++-------
.../internal/DefaultConfigObserverSpi.java | 47 ++++++-----------
.../events/internal/LoggingConfigListener.java | 10 +---
.../tamaya/events/spi/ConfigObserverSpi.java | 23 ++++-----
5 files changed, 65 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/19a5dae4/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
index 1381c38..3608921 100644
--- a/src/main/java/org/apache/tamaya/events/ConfigListener.java
+++ b/src/main/java/org/apache/tamaya/events/ConfigListener.java
@@ -18,19 +18,14 @@
*/
package org.apache.tamaya.events;
-import org.apache.tamaya.Configuration;
+import org.apache.tamaya.events.delta.ConfigurationChange;
/**
* 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.
*/
+// @FunctionalInterface
public interface ConfigListener
- extends ConfigEventListener<ChangeNotification<Configuration>> {
-
- /**
- * Get a regular expression to define, which keys this listener is interested in.
- * @return
- */
- String getKeyExpression();
+ extends ConfigEventListener<ConfigurationChange> {
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/19a5dae4/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
index ffde3a3..1eafc0c 100644
--- a/src/main/java/org/apache/tamaya/events/ConfigurationObserver.java
+++ b/src/main/java/org/apache/tamaya/events/ConfigurationObserver.java
@@ -24,9 +24,10 @@ import org.apache.tamaya.spi.ServiceContextManager;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Set;
/**
- * Created by Anatole on 04.10.2015.
+ * Singleton accessor for managing {@link ConfigListener} instances and mappings.
*/
public class ConfigurationObserver {
@@ -44,48 +45,63 @@ public class ConfigurationObserver {
/**
- * 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.
+ * Add key expressions for generating ConfigurationChange events.
*
- * @param l the listener not null.
+ * @param keys the keys to be observed for changes.
*/
- public static <T> void addListener(ConfigListener l) {
+ public static <T> void addObservedKeys(Collection<String> keys) {
if (SPI == null) {
throw new ConfigException("No SPI registered for " +
ConfigurationObserver.class.getName());
}
- SPI.addListener(l);
+ SPI.addObservedKeys(keys);
}
/**
- * 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.
+ * Add key expressions for generating ConfigurationChange events.
*
- * @param l the listener not null.
+ * @param keys the keys to be observed for changes.
*/
- public static <T> void removeListener(ConfigListener l) {
+ public static <T> void addObservedKeys(String... keys) {
if (SPI == null) {
throw new ConfigException("No SPI registered for " +
ConfigurationObserver.class.getName());
}
- SPI.removeListener(l);
+ SPI.addObservedKeys(Arrays.asList(keys));
}
/**
- * Access all registered ConfigEventListeners listening to the given event key(s).
+ * Removes key expressions for generating ConfigurationChange events.
*
- * @return a list with the listeners found, never null.
+ * @param keys the keys to be observed for changes.
*/
- public static Collection<ConfigListener> getListeners(Collection<String> keys) {
- return SPI.getListeners(keys);
+ public static <T> void removeObservedKeys(Collection<String> keys) {
+ if (SPI == null) {
+ throw new ConfigException("No SPI registered for " +
+ ConfigurationObserver.class.getName());
+ }
+ SPI.removeObservedKeys(keys);
+ }
+
+ /**
+ * Removes key expressions for generating ConfigurationChange events.
+ *
+ * @param keys the keys to be observed for changes.
+ */
+ public static <T> void removeObservedKeys(String... keys) {
+ if (SPI == null) {
+ throw new ConfigException("No SPI registered for " +
+ ConfigurationObserver.class.getName());
+ }
+ SPI.removeObservedKeys(Arrays.asList(keys));
}
/**
- * Access all registered ConfigEventListeners listening to the given event key(s).
+ * Get all registered key expressions for generating ConfigurationChange events.
*
- * @return a list with the listeners found, never null.
+ * @return set with the keys found, never null.
*/
- public static Collection<ConfigListener> getListeners(String... keys) {
- return SPI.getListeners(Arrays.asList(keys));
+ public static Set<String> getObservedKeys() {
+ return SPI.getObservedKeys();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/19a5dae4/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
index 1340f2c..a753040 100644
--- a/src/main/java/org/apache/tamaya/events/internal/DefaultConfigObserverSpi.java
+++ b/src/main/java/org/apache/tamaya/events/internal/DefaultConfigObserverSpi.java
@@ -19,6 +19,7 @@
package org.apache.tamaya.events.internal;
import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.events.ConfigEventManager;
import org.apache.tamaya.events.ConfigListener;
import org.apache.tamaya.events.FrozenConfiguration;
import org.apache.tamaya.events.delta.ConfigurationChange;
@@ -29,6 +30,7 @@ import org.apache.tamaya.spi.ServiceContextManager;
import java.beans.PropertyChangeEvent;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -52,7 +54,7 @@ public class DefaultConfigObserverSpi implements ConfigObserverSpi {
private static final Logger LOG = Logger.getLogger(DefaultConfigObserverSpi.class.getName());
- private Map<String, List<ConfigListener>> listenerMap = new ConcurrentHashMap<>();
+ private Set<String> keys = new HashSet<>();
private Timer timer = new Timer("ConfigurationObserver", true);
@@ -69,8 +71,9 @@ public class DefaultConfigObserverSpi implements ConfigObserverSpi {
*/
public DefaultConfigObserverSpi() {
try {
+ // Load and register ConfigListener from the current ServiceContext
for (ConfigListener l : ServiceContextManager.getServiceContext().getServices(ConfigListener.class)) {
- addListener(l);
+ ConfigEventManager.addListener(l);
}
} catch (Exception e) {
LOG.log(Level.WARNING, "Failed to load configured listeners.", e);
@@ -98,49 +101,29 @@ public class DefaultConfigObserverSpi implements ConfigObserverSpi {
}
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 (String key : keys) {
+ if (evt.getPropertyName().matches(key)) {
+ ConfigEventManager.fireEvent(changes);
+ return;
}
}
}
- 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);
+ public synchronized <T> void addObservedKeys(Collection<String> keys) {
+ this.keys.addAll(keys);
}
@Override
- public synchronized <T> void removeListener(ConfigListener l) {
- List<ConfigListener> items = listenerMap.get(l.getKeyExpression());
- if (items != null) {
- items.remove(l);
- }
+ public synchronized <T> void removeObservedKeys(Collection<String> keys) {
+ this.keys.removeAll(keys);
}
@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;
+ public synchronized Set<String> getObservedKeys() {
+ return Collections.unmodifiableSet(this.keys);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/19a5dae4/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
index 059d1b5..43b2700 100644
--- a/src/main/java/org/apache/tamaya/events/internal/LoggingConfigListener.java
+++ b/src/main/java/org/apache/tamaya/events/internal/LoggingConfigListener.java
@@ -18,9 +18,8 @@
*/
package org.apache.tamaya.events.internal;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.events.ChangeNotification;
import org.apache.tamaya.events.ConfigListener;
+import org.apache.tamaya.events.delta.ConfigurationChange;
import java.util.logging.Logger;
@@ -32,12 +31,7 @@ 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) {
+ public void onConfigEvent(ConfigurationChange event) {
LOG.info("Configuration changed: " + event);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/19a5dae4/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
index 17f5ccb..95eb6e7 100644
--- a/src/main/java/org/apache/tamaya/events/spi/ConfigObserverSpi.java
+++ b/src/main/java/org/apache/tamaya/events/spi/ConfigObserverSpi.java
@@ -18,9 +18,8 @@
*/
package org.apache.tamaya.events.spi;
-import org.apache.tamaya.events.ConfigListener;
-
import java.util.Collection;
+import java.util.Set;
/**
* SPI interface to implement the {@link org.apache.tamaya.events.ConfigurationObserver} singleton.
@@ -30,27 +29,25 @@ import java.util.Collection;
*/
public interface ConfigObserverSpi {
/**
- * Add a listener for observing events. References of this
- * component to the listeners must be managed as weak references.
+ * Add key expressions for generating ConfigurationChange events.
*
- * @param l the listener not null.
+ * @param keys the keys to be observed for changes.
*/
- <T> void addListener(ConfigListener l);
-
+ <T> void addObservedKeys(Collection<String> keys);
/**
- * Removes a listener for observing events.
+ * Remove key expressions for generating ConfigurationChange events.
*
- * @param l the listener not null.
+ * @param keys the keys to be observed for changes.
*/
- <T> void removeListener(ConfigListener l);
+ <T> void removeObservedKeys(Collection<String> keys);
/**
- * Access all registered ConfigEventListeners listening to the given event type.
+ * Get all registered key expressions for generating ConfigurationChange events.
*
- * @return a list with the listeners found, never null.
+ * @return a set with the keys found, never null.
*/
- Collection<ConfigListener> getListeners(Collection<String> keys);
+ Set<String> getObservedKeys();
/**
* Get the current check period to check for configuration changes.