You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by st...@apache.org on 2018/02/25 08:57:50 UTC

svn commit: r1825295 - in /geronimo/components/config/trunk: impl/debug-suite.xml impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java pom.xml

Author: struberg
Date: Sun Feb 25 08:57:50 2018
New Revision: 1825295

URL: http://svn.apache.org/viewvc?rev=1825295&view=rev
Log:
start with implementing the next revision (1.3) of mp-config

this is work in progress to play with the APIs

Modified:
    geronimo/components/config/trunk/impl/debug-suite.xml
    geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java
    geronimo/components/config/trunk/pom.xml

Modified: geronimo/components/config/trunk/impl/debug-suite.xml
URL: http://svn.apache.org/viewvc/geronimo/components/config/trunk/impl/debug-suite.xml?rev=1825295&r1=1825294&r2=1825295&view=diff
==============================================================================
--- geronimo/components/config/trunk/impl/debug-suite.xml (original)
+++ geronimo/components/config/trunk/impl/debug-suite.xml Sun Feb 25 08:57:50 2018
@@ -24,7 +24,7 @@
     <classes>
         <!-- Issues in the spec -->
         <!-- CDI-437 -->
-        <class name="org.eclipse.microprofile.config.tck.AutoDiscoveredConfigSourceTest">
+        <class name="org.eclipse.microprofile.config.tck.DynamicConfigSourceTest">
             <methods>
                 <include name=".*"/>
             </methods>

Modified: geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java?rev=1825295&r1=1825294&r2=1825295&view=diff
==============================================================================
--- geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java (original)
+++ geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java Sun Feb 25 08:57:50 2018
@@ -23,15 +23,22 @@ import org.eclipse.microprofile.config.s
 
 import javax.enterprise.inject.Typed;
 import javax.enterprise.inject.Vetoed;
+
+import java.lang.ref.WeakReference;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.function.Consumer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.regex.Pattern;
@@ -53,6 +60,9 @@ public class ConfigImpl implements Confi
     private static final String ARRAY_SEPARATOR_REGEX = "(?<!\\\\)" + Pattern.quote(",");
     private final ImplicitArrayConverter implicitArrayConverter = new ImplicitArrayConverter(this);
 
+    private List<WeakReference<Consumer<Set<String>>>> configChangedListeners = new ArrayList<>();
+    private ReadWriteLock configListenerLock = new ReentrantReadWriteLock();
+
     @Override
     public <T> Optional<T> getOptionalValue(String propertyName, Class<T> asType) {
         String value = getValue(propertyName);
@@ -168,4 +178,29 @@ public class ConfigImpl implements Confi
     public void addConverter(Type type, MicroProfileTypedConverter<?> converter) {
         converters.put(type, converter);
     }
+
+    @Override
+    public void registerConfigChangedListener(Consumer<Set<String>> configChangedListener) {
+        configListenerLock.writeLock().lock();
+        try {
+            Iterator<WeakReference<Consumer<Set<String>>>> it = configChangedListeners.iterator();
+            while (it.hasNext()) {
+                WeakReference<Consumer<Set<String>>> changeListenerRef = it.next();
+                Consumer<Set<String>> changeListener = changeListenerRef.get();
+                if (changeListener == null) {
+                    it.remove();
+                }
+                else {
+                    if (changeListener == configChangedListener) {
+                        // changeListener already got registered
+                        return;
+                    }
+                }
+            }
+            configChangedListeners.add(new WeakReference<>(configChangedListener));
+        }
+        finally {
+            configListenerLock.writeLock().unlock();;
+        }
+    }
 }
\ No newline at end of file

Modified: geronimo/components/config/trunk/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/components/config/trunk/pom.xml?rev=1825295&r1=1825294&r2=1825295&view=diff
==============================================================================
--- geronimo/components/config/trunk/pom.xml (original)
+++ geronimo/components/config/trunk/pom.xml Sun Feb 25 08:57:50 2018
@@ -50,13 +50,13 @@
     <properties>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
-        <microprofile-config.version>1.2.1</microprofile-config.version>
+        <microprofile-config.version>1.3-SNAPSHOT</microprofile-config.version>
         <arquillian.version>1.1.14.Final</arquillian.version>
         <arquillian-weld-embedded.version>2.0.0.Final</arquillian-weld-embedded.version>
 
         <!-- OWB -->
         <owb.version>1.7.4</owb.version>
-        <owb2.version>2.0.2</owb2.version>
+        <owb2.version>2.0.4</owb2.version>
 
         <!-- Weld -->
         <cdi2-api.version>2.0</cdi2-api.version>