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() {