This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git

commit 5f0d8c8b370404e179852b8b7c49880b2fc3ed51
Author: ken.lj <ken.lj...@gmail.com>
AuthorDate: Thu Nov 15 14:54:07 2018 +0800

    change how DynamicConfiguration instance is fetched.
---
 .../apache/dubbo/rpc/cluster/router/tag/TagRouter.java  |  8 ++++++--
 dubbo-config/dubbo-config-api/pom.xml                   |  5 +++++
 .../org/apache/dubbo/config/ConfigCenterConfig.java     |  7 ++++---
 .../org/apache/dubbo/config/context/Environment.java    | 17 +++++++----------
 .../dubbo/registry/integration/RegistryProtocol.java    |  9 +++++++--
 5 files changed, 29 insertions(+), 17 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
index 7f2ad73..462b8d9 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
@@ -27,7 +27,6 @@ import org.apache.dubbo.governance.ConfigChangeEvent;
 import org.apache.dubbo.governance.ConfigChangeType;
 import org.apache.dubbo.governance.ConfigurationListener;
 import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcException;
@@ -59,8 +58,13 @@ public class TagRouter extends AbstractRouter implements 
Comparable<Router>, Con
 
     private AtomicBoolean isInited = new AtomicBoolean(false);
 
+    /**
+     * compatible constructor, it should never be called to create TagRouter.
+     *
+     * @param url
+     */
     public TagRouter(URL url) {
-        
this(ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getAdaptiveExtension().getDynamicConfiguration(url),
 url);
+        
this(ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension(),
 url);
     }
 
     public TagRouter(DynamicConfiguration configuration, URL url) {
diff --git a/dubbo-config/dubbo-config-api/pom.xml 
b/dubbo-config/dubbo-config-api/pom.xml
index 285ab54..15868b0 100644
--- a/dubbo-config/dubbo-config-api/pom.xml
+++ b/dubbo-config/dubbo-config-api/pom.xml
@@ -31,6 +31,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-registry-api</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-metadata-report-api</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
index 6904413..fdca12c 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
@@ -24,7 +24,6 @@ import org.apache.dubbo.common.utils.UrlUtils;
 import org.apache.dubbo.config.context.Environment;
 import org.apache.dubbo.config.support.Parameter;
 import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
 
 import java.io.IOException;
 import java.io.StringReader;
@@ -94,8 +93,10 @@ public class ConfigCenterConfig extends AbstractConfig {
 //        checkConfigCenter();
 
         URL url = toConfigUrl();
-        DynamicConfiguration dynamicConfiguration = 
ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getAdaptiveExtension().getDynamicConfiguration(url);
-        
Environment.getInstance().setDynamicConfiguration(dynamicConfiguration);
+        DynamicConfiguration dynamicConfiguration = 
ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtension(url.getProtocol());
+        // TODO, maybe we need a factory to do this?
+        dynamicConfiguration.setUrl(url);
+        dynamicConfiguration.init();
         return dynamicConfiguration;
     }
 
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
index c3e07cc..d98b33f 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
@@ -24,13 +24,14 @@ import org.apache.dubbo.common.config.InmemoryConfiguration;
 import org.apache.dubbo.common.config.PropertiesConfiguration;
 import org.apache.dubbo.common.config.SystemConfiguration;
 import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.ConfigCenterConfig;
 import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -146,8 +147,6 @@ public class Environment {
         return compositeConfiguration;
     }
 
-
-
     /**
      * If user opens DynamicConfig, the extension instance must has been 
created during the initialization of ConfigCenterConfig with the right 
extension type user specified.
      * If no DynamicConfig presents, NopDynamicConfiguration will be used.
@@ -155,14 +154,12 @@ public class Environment {
      * @return
      */
     public DynamicConfiguration getDynamicConfiguration() {
-        if (dynamicConfiguration != null) {
-            return dynamicConfiguration;
+        Set<Object> configurations = 
ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
+        if (CollectionUtils.isEmpty(configurations)) {
+            return 
ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
+        } else {
+            return (DynamicConfiguration) configurations.iterator().next();
         }
-        return 
ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getDefaultExtension().getDynamicConfiguration(null);
-    }
-
-    public void setDynamicConfiguration(DynamicConfiguration 
dynamicConfiguration) {
-        this.dynamicConfiguration = dynamicConfiguration;
     }
 
     private static String toKey(String keypart1, String keypart2) {
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 20c1987..91d3ffd 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -26,7 +26,6 @@ import org.apache.dubbo.common.utils.ConfigUtils;
 import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.common.utils.UrlUtils;
-import org.apache.dubbo.config.context.Environment;
 import org.apache.dubbo.governance.ConfigChangeEvent;
 import org.apache.dubbo.governance.ConfigChangeType;
 import org.apache.dubbo.governance.ConfigurationListener;
@@ -51,6 +50,7 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -86,7 +86,12 @@ public class RegistryProtocol implements Protocol {
 
     public RegistryProtocol() {
         INSTANCE = this;
-        dynamicConfiguration = 
Environment.getInstance().getDynamicConfiguration();
+        Set<Object> configurations = 
ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
+        if (CollectionUtils.isEmpty(configurations)) {
+            dynamicConfiguration = 
ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
+        } else {
+            dynamicConfiguration = (DynamicConfiguration) 
configurations.iterator().next();
+        }
     }
 
     public static RegistryProtocol getRegistryProtocol() {

Reply via email to