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

albumenj pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0-multi-instances by this 
push:
     new 13190c8  Cleanup ApplicationModel.defaultModel usage
13190c8 is described below

commit 13190c8378860c670b0a1e23b45928396761668d
Author: Albumen Kevin <[email protected]>
AuthorDate: Mon Aug 30 17:12:44 2021 +0800

    Cleanup ApplicationModel.defaultModel usage
---
 .../DefaultGovernanceRuleRepositoryImpl.java       |  12 ++-
 .../loadbalance/ShortestResponseLoadBalance.java   |  10 +-
 .../cluster/support/wrapper/AbstractCluster.java   |   2 +-
 .../ShortestResponseLoadBalanceTest.java           |   4 +
 .../dubbo/common/config/ConfigurationUtils.java    | 102 ++++++++++++++++-----
 .../common/infra/support/EnvironmentAdapter.java   |  19 +++-
 .../manager/DefaultExecutorRepository.java         |  14 ++-
 .../org/apache/dubbo/common/utils/NetUtils.java    |   5 +-
 .../apache/dubbo/rpc/model/ApplicationModel.java   |  30 ++++++
 .../org/apache/dubbo/rpc/model/FrameworkModel.java |   7 ++
 .../org/apache/dubbo/rpc/model/ModuleModel.java    |   6 ++
 .../org/apache/dubbo/rpc/model/ScopeModelUtil.java |   9 +-
 .../common/config/ConfigurationUtilsTest.java      |   6 +-
 .../org/apache/dubbo/config/DubboShutdownHook.java |   4 +-
 .../dubbo/config/bootstrap/DubboBootstrap.java     |   2 +-
 .../dubbo/config/utils/ConfigValidationUtils.java  |   4 +-
 .../dubbo/config/utils/ReferenceConfigCache.java   |   6 +-
 .../dubbo/metadata/WritableMetadataService.java    |  10 --
 .../apache/dubbo/monitor/dubbo/MetricsFilter.java  |  12 ++-
 .../client/SelfHostMetaServiceDiscovery.java       |   3 +-
 .../StandardMetadataServiceURLBuilder.java         |  14 ++-
 .../store/InMemoryWritableMetadataService.java     |  12 ++-
 .../DefaultMigrationAddressComparator.java         |   2 +-
 .../client/migration/MigrationInvoker.java         |   5 +-
 .../client/migration/MigrationRuleListener.java    |   2 +-
 .../client/migration/model/MigrationRule.java      |   2 +-
 .../registry/integration/RegistryProtocol.java     |   2 +-
 .../support/CacheableFailbackRegistry.java         |  33 +++----
 .../ZookeeperServiceDiscoveryChangeWatcher.java    |   7 +-
 .../dubbo/remoting/api/NettyEventLoopFactory.java  |   7 +-
 .../org/apache/dubbo/remoting/api/SslContexts.java |  10 +-
 .../remoting/exchange/codec/ExchangeCodec.java     |   2 +-
 .../dubbo/remoting/transport/CodecSupport.java     |   1 +
 .../transport/netty4/NettyEventLoopFactory.java    |   8 +-
 .../org/apache/dubbo/rpc/filter/GenericFilter.java |  12 ++-
 .../rpc/protocol/dubbo/CallbackServiceCodec.java   |   6 +-
 .../protocol/dubbo/DecodeableRpcInvocation.java    |   4 +-
 .../rpc/protocol/dubbo/DecodeableRpcResult.java    |   2 +-
 .../dubbo/rpc/protocol/dubbo/DubboInvoker.java     |   2 +-
 .../dubbo/rpc/protocol/dubbo/DubboProtocol.java    |   4 +-
 .../rpc/protocol/dubbo/filter/FutureFilter.java    |   8 +-
 .../dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java  |   6 +-
 .../dubbo/rpc/protocol/grpc/GrpcProtocol.java      |   3 +-
 .../dubbo/rpc/protocol/rest/RestProtocol.java      |   3 +-
 .../rpc/protocol/tri/AbstractServerStream.java     |   1 +
 .../hessian2/dubbo/Hessian2FactoryInitializer.java |   3 +-
 .../dubbo/WhitelistHessian2FactoryInitializer.java |   7 +-
 47 files changed, 293 insertions(+), 142 deletions(-)

diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
index c0633cd..61f8aeb 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
@@ -19,8 +19,11 @@ package org.apache.dubbo.rpc.cluster.governance;
 import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
 import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 
-public class DefaultGovernanceRuleRepositoryImpl implements 
GovernanceRuleRepository {
+public class DefaultGovernanceRuleRepositoryImpl implements 
GovernanceRuleRepository, ScopeModelAware {
+
+    private ApplicationModel applicationModel;
 
     @Override
     public void addListener(String key, String group, ConfigurationListener 
listener) {
@@ -47,8 +50,13 @@ public class DefaultGovernanceRuleRepositoryImpl implements 
GovernanceRuleReposi
         return null;
     }
 
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        this.applicationModel = applicationModel;
+    }
+
     private DynamicConfiguration getDynamicConfiguration() {
-        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getDynamicConfiguration().orElse(null);
+        return 
ApplicationModel.ofNullable(applicationModel).getApplicationEnvironment().getDynamicConfiguration().orElse(null);
     }
 
 }
diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalance.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalance.java
index c0ecf61..7f0625a 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalance.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalance.java
@@ -23,6 +23,7 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcStatus;
 import org.apache.dubbo.rpc.cluster.Constants;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
@@ -41,11 +42,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
  * if there are multiple invokers and the weights are not the same, then 
random according to the total weight;
  * if there are multiple invokers and the same weight, then randomly called.
  */
-public class ShortestResponseLoadBalance extends AbstractLoadBalance {
+public class ShortestResponseLoadBalance extends AbstractLoadBalance 
implements ScopeModelAware {
 
     public static final String NAME = "shortestresponse";
 
-    private static final int SLIDE_PERIOD = 
ApplicationModel.defaultModel().getApplicationEnvironment().getConfiguration().getInt(Constants.SHORTEST_RESPONSE_SLIDE_PERIOD,
 30_000);
+    private int SLIDE_PERIOD = 30_000;
 
     private ConcurrentMap<RpcStatus, SlideWindowData> methodMap = new 
ConcurrentHashMap<>();
 
@@ -53,6 +54,11 @@ public class ShortestResponseLoadBalance extends 
AbstractLoadBalance {
 
     private volatile long lastUpdateTime = System.currentTimeMillis();
 
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        SLIDE_PERIOD = 
applicationModel.getApplicationEnvironment().getConfiguration().getInt(Constants.SHORTEST_RESPONSE_SLIDE_PERIOD,
 30_000);
+    }
+
     protected static class SlideWindowData {
         private final static ExecutorService EXECUTOR_SERVICE = 
Executors.newSingleThreadExecutor((new 
NamedThreadFactory("Dubbo-slidePeriod-reset")));
 
diff --git 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/wrapper/AbstractCluster.java
 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/wrapper/AbstractCluster.java
index 684f372..fced5da 100644
--- 
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/wrapper/AbstractCluster.java
+++ 
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/wrapper/AbstractCluster.java
@@ -48,7 +48,7 @@ public abstract class AbstractCluster implements Cluster {
 //        AbstractClusterInvoker<T> last = clusterInvoker;
         AbstractClusterInvoker<T> last = buildInterceptorInvoker(new 
ClusterFilterInvoker<>(clusterInvoker));
 
-        if 
(Boolean.parseBoolean(ConfigurationUtils.getProperty(CLUSTER_INTERCEPTOR_COMPATIBLE_KEY,
 "false"))) {
+        if 
(Boolean.parseBoolean(ConfigurationUtils.getProperty(clusterInvoker.getDirectory().getConsumerUrl().getScopeModel(),
 CLUSTER_INTERCEPTOR_COMPATIBLE_KEY, "false"))) {
             return build27xCompatibleClusterInterceptors(clusterInvoker, last);
         }
         return last;
diff --git 
a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalanceTest.java
 
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalanceTest.java
index cfc317f..5130ad2 100644
--- 
a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalanceTest.java
+++ 
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/ShortestResponseLoadBalanceTest.java
@@ -19,6 +19,8 @@ package org.apache.dubbo.rpc.cluster.loadbalance;
 import org.apache.dubbo.common.utils.ReflectUtils;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcStatus;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.MethodOrderer;
 import org.junit.jupiter.api.Order;
@@ -42,6 +44,7 @@ public class ShortestResponseLoadBalanceTest extends 
LoadBalanceBaseTest {
         int loop = 10000;
 
         ShortestResponseLoadBalance lb = new ShortestResponseLoadBalance();
+        lb.setApplicationModel(ApplicationModel.defaultModel());
         for (int i = 0; i < loop; i++) {
             Invoker selected = lb.select(weightInvokersSR, null, 
weightTestInvocation);
 
@@ -74,6 +77,7 @@ public class ShortestResponseLoadBalanceTest extends 
LoadBalanceBaseTest {
         //active -> 0
         RpcStatus.endCount(weightInvoker5.getUrl(), 
weightTestInvocation.getMethodName(), 5000L, true);
         ShortestResponseLoadBalance lb = new ShortestResponseLoadBalance();
+        lb.setApplicationModel(ApplicationModel.defaultModel());
 
         //reset slideWindow
         Field lastUpdateTimeField = 
ReflectUtils.forName(ShortestResponseLoadBalance.class.getName()).getDeclaredField("lastUpdateTime");
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
index 0cd82a5..c206f2b 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
@@ -23,6 +23,8 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModel;
+import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
 import java.io.IOException;
 import java.io.StringReader;
@@ -51,8 +53,8 @@ public class ConfigurationUtils {
      *
      * @return
      */
-    public static Configuration getSystemConfiguration() {
-        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getSystemConfiguration();
+    public static Configuration getSystemConfiguration(ScopeModel scopeModel) {
+        return 
ScopeModelUtil.getApplicationModel(scopeModel).getApplicationEnvironment().getSystemConfiguration();
     }
 
     /**
@@ -60,8 +62,9 @@ public class ConfigurationUtils {
      *
      * @return
      */
-    public static Configuration getEnvConfiguration() {
-        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getEnvironmentConfiguration();
+
+    public static Configuration getEnvConfiguration(ScopeModel scopeModel) {
+        return 
ScopeModelUtil.getApplicationModel(scopeModel).getApplicationEnvironment().getEnvironmentConfiguration();
     }
 
     /**
@@ -71,19 +74,20 @@ public class ConfigurationUtils {
      *
      * @return
      */
-    public static Configuration getGlobalConfiguration() {
-        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getConfiguration();
+
+    public static Configuration getGlobalConfiguration(ScopeModel scopeModel) {
+        return 
ScopeModelUtil.getApplicationModel(scopeModel).getApplicationEnvironment().getConfiguration();
     }
 
-    public static Configuration getDynamicGlobalConfiguration() {
-        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getDynamicGlobalConfiguration();
+    public static Configuration getDynamicGlobalConfiguration(ScopeModel 
scopeModel) {
+        return 
ScopeModelUtil.getApplicationModel(scopeModel).getApplicationEnvironment().getDynamicGlobalConfiguration();
     }
 
     // FIXME
     @SuppressWarnings("deprecation")
-    public static int getServerShutdownTimeout() {
+    public static int getServerShutdownTimeout(ScopeModel scopeModel) {
         int timeout = DEFAULT_SERVER_SHUTDOWN_TIMEOUT;
-        Configuration configuration = getGlobalConfiguration();
+        Configuration configuration = getGlobalConfiguration(scopeModel);
         String value = 
StringUtils.trim(configuration.getString(SHUTDOWN_WAIT_KEY));
 
         if (value != null && value.length() > 0) {
@@ -105,29 +109,29 @@ public class ConfigurationUtils {
         return timeout;
     }
 
-    public static String getCachedDynamicProperty(String key, String 
defaultValue) {
-        String value = CACHED_DYNAMIC_PROPERTIES.computeIfAbsent(key, _k -> 
ConfigurationUtils.getDynamicProperty(key, ""));
+    public static String getCachedDynamicProperty(ScopeModel scopeModel, 
String key, String defaultValue) {
+        String value = CACHED_DYNAMIC_PROPERTIES.computeIfAbsent(key, _k -> 
ConfigurationUtils.getDynamicProperty(scopeModel, key, ""));
         return StringUtils.isEmpty(value) ? defaultValue : value;
     }
 
-    public static String getDynamicProperty(String property) {
-        return getDynamicProperty(property, null);
+    public static String getDynamicProperty(ScopeModel scopeModel, String 
property) {
+        return getDynamicProperty(scopeModel, property, null);
     }
 
-    public static String getDynamicProperty(String property, String 
defaultValue) {
-        return 
StringUtils.trim(getDynamicGlobalConfiguration().getString(property, 
defaultValue));
+    public static String getDynamicProperty(ScopeModel scopeModel, String 
property, String defaultValue) {
+        return 
StringUtils.trim(getDynamicGlobalConfiguration(scopeModel).getString(property, 
defaultValue));
     }
 
-    public static String getProperty(String property) {
-        return getProperty(property, null);
+    public static String getProperty(ScopeModel scopeModel, String property) {
+        return getProperty(scopeModel, property, null);
     }
 
-    public static String getProperty(String property, String defaultValue) {
-        return StringUtils.trim(getGlobalConfiguration().getString(property, 
defaultValue));
+    public static String getProperty(ScopeModel scopeModel, String property, 
String defaultValue) {
+        return 
StringUtils.trim(getGlobalConfiguration(scopeModel).getString(property, 
defaultValue));
     }
 
-    public static int get(String property, int defaultValue) {
-        return getGlobalConfiguration().getInt(property, defaultValue);
+    public static int get(ScopeModel scopeModel, String property, int 
defaultValue) {
+        return getGlobalConfiguration(scopeModel).getInt(property, 
defaultValue);
     }
 
     public static Map<String, String> parseProperties(String content) throws 
IOException {
@@ -290,4 +294,58 @@ public class ConfigurationUtils {
         ExtensionLoader<DynamicConfigurationFactory> loader = 
extensionAccessor.getExtensionLoader(DynamicConfigurationFactory.class);
         return loader.getOrDefaultExtension(name);
     }
+
+    /**
+     * For compact single instance
+     */
+    @Deprecated
+    public static Configuration getSystemConfiguration() {
+        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getSystemConfiguration();
+    }
+
+    @Deprecated
+    public static Configuration getEnvConfiguration() {
+        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getEnvironmentConfiguration();
+    }
+
+    @Deprecated
+    public static Configuration getGlobalConfiguration() {
+        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getConfiguration();
+    }
+
+    @Deprecated
+    public static Configuration getDynamicGlobalConfiguration() {
+        return 
ApplicationModel.defaultModel().getApplicationEnvironment().getDynamicGlobalConfiguration();
+    }
+
+    @Deprecated
+    public static String getCachedDynamicProperty(String key, String 
defaultValue) {
+        return getCachedDynamicProperty(ApplicationModel.defaultModel(), key, 
defaultValue);
+    }
+
+    @Deprecated
+    public static String getDynamicProperty(String property) {
+        return getDynamicProperty(ApplicationModel.defaultModel(), property);
+    }
+
+    @Deprecated
+    public static String getDynamicProperty(String property, String 
defaultValue) {
+        return getDynamicProperty(ApplicationModel.defaultModel(), property, 
defaultValue);
+    }
+
+    @Deprecated
+    public static String getProperty(String property) {
+        return getProperty(ApplicationModel.defaultModel(), property);
+    }
+
+    @Deprecated
+    public static String getProperty(String property, String defaultValue) {
+        return getProperty(ApplicationModel.defaultModel(), property, 
defaultValue);
+    }
+
+    @Deprecated
+    public static int get(String property, int defaultValue) {
+        return get(ApplicationModel.defaultModel(), property, defaultValue);
+    }
+
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/infra/support/EnvironmentAdapter.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/infra/support/EnvironmentAdapter.java
index 4a38446..e7b509c 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/infra/support/EnvironmentAdapter.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/infra/support/EnvironmentAdapter.java
@@ -20,6 +20,8 @@ import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.extension.Activate;
 import org.apache.dubbo.common.infra.InfraAdapter;
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -31,7 +33,14 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.EQUAL_SPLIT_PATT
 import static 
org.apache.dubbo.common.constants.CommonConstants.SEMICOLON_SPLIT_PATTERN;
 
 @Activate
-public class EnvironmentAdapter implements InfraAdapter {
+public class EnvironmentAdapter implements InfraAdapter, ScopeModelAware {
+
+    private ApplicationModel applicationModel;
+
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        this.applicationModel = applicationModel;
+    }
 
     /**
      * 1. OS Environment: DUBBO_LABELS=tag=pre;key=value
@@ -41,7 +50,7 @@ public class EnvironmentAdapter implements InfraAdapter {
     public Map<String, String> getExtraAttributes(Map<String, String> params) {
         Map<String, String> parameters = new HashMap<>();
 
-        String rawLabels = ConfigurationUtils.getProperty(DUBBO_LABELS);
+        String rawLabels = ConfigurationUtils.getProperty(applicationModel, 
DUBBO_LABELS);
         if (StringUtils.isNotEmpty(rawLabels)) {
             String[] labelPairs = SEMICOLON_SPLIT_PATTERN.split(rawLabels);
             for (String pair : labelPairs) {
@@ -52,11 +61,11 @@ public class EnvironmentAdapter implements InfraAdapter {
             }
         }
 
-        String rawKeys = ConfigurationUtils.getProperty(DUBBO_ENV_KEYS);
+        String rawKeys = ConfigurationUtils.getProperty(applicationModel, 
DUBBO_ENV_KEYS);
         if (StringUtils.isNotEmpty(rawKeys)) {
             String[] keys = COMMA_SPLIT_PATTERN.split(rawKeys);
             for (String key : keys) {
-                String value = ConfigurationUtils.getProperty(key);
+                String value = 
ConfigurationUtils.getProperty(applicationModel, key);
                 if (value != null) {
                     parameters.put(key, value);
                 }
@@ -67,6 +76,6 @@ public class EnvironmentAdapter implements InfraAdapter {
 
     @Override
     public String getAttribute(String key) {
-        return ConfigurationUtils.getProperty(key);
+        return ConfigurationUtils.getProperty(applicationModel, key);
     }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java
index 0769276..5c93b23 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java
@@ -29,6 +29,7 @@ import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.config.ConsumerConfig;
 import org.apache.dubbo.config.ProviderConfig;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 
 import java.util.List;
 import java.util.Map;
@@ -52,7 +53,7 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;
 /**
  * Consider implementing {@code Licycle} to enable executors shutdown when the 
process stops.
  */
-public class DefaultExecutorRepository implements ExecutorRepository, 
ExtensionAccessorAware {
+public class DefaultExecutorRepository implements ExecutorRepository, 
ExtensionAccessorAware, ScopeModelAware {
     private static final Logger logger = 
LoggerFactory.getLogger(DefaultExecutorRepository.class);
 
     private int DEFAULT_SCHEDULER_SIZE = 
Runtime.getRuntime().availableProcessors();
@@ -82,6 +83,8 @@ public class DefaultExecutorRepository implements 
ExecutorRepository, ExtensionA
     private static final Object LOCK = new Object();
     private ExtensionAccessor extensionAccessor;
 
+    private ApplicationModel applicationModel;
+
     public DefaultExecutorRepository() {
         for (int i = 0; i < DEFAULT_SCHEDULER_SIZE; i++) {
             ScheduledExecutorService scheduler = 
Executors.newSingleThreadScheduledExecutor(
@@ -230,7 +233,7 @@ public class DefaultExecutorRepository implements 
ExecutorRepository, ExtensionA
     }
 
     private Integer getExportThreadNum() {
-        List<Integer> threadNum = 
ApplicationModel.defaultModel().getApplicationConfigManager().getProviders()
+        List<Integer> threadNum = 
ApplicationModel.ofNullable(applicationModel).getApplicationConfigManager().getProviders()
             .stream()
             .map(ProviderConfig::getExportThreadNum)
             .filter(k -> k != null && k > 0)
@@ -277,7 +280,7 @@ public class DefaultExecutorRepository implements 
ExecutorRepository, ExtensionA
     }
 
     private Integer getReferThreadNum() {
-        List<Integer> threadNum = 
ApplicationModel.defaultModel().getApplicationConfigManager().getConsumers()
+        List<Integer> threadNum = 
ApplicationModel.ofNullable(applicationModel).getApplicationConfigManager().getConsumers()
             .stream()
             .map(ConsumerConfig::getReferThreadNum)
             .filter(k -> k != null && k > 0)
@@ -369,4 +372,9 @@ public class DefaultExecutorRepository implements 
ExecutorRepository, ExtensionA
     public void setExtensionAccessor(ExtensionAccessor extensionAccessor) {
         this.extensionAccessor = extensionAccessor;
     }
+
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        this.applicationModel = applicationModel;
+    }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
index ec32eb9..6633841 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
@@ -22,6 +22,7 @@ import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.logger.support.FailsafeLogger;
+import org.apache.dubbo.rpc.model.ScopeModel;
 
 import java.io.IOException;
 import java.net.Inet4Address;
@@ -236,8 +237,8 @@ public class NetUtils {
         return host;
     }
 
-    public static String getIpByConfig() {
-        String configIp = ConfigurationUtils.getProperty(DUBBO_IP_TO_BIND);
+    public static String getIpByConfig(ScopeModel scopeModel) {
+        String configIp = ConfigurationUtils.getProperty(scopeModel, 
DUBBO_IP_TO_BIND);
         if (configIp != null) {
             return configIp;
         }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index 8f8c89c..3af7956 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -68,6 +68,14 @@ public class ApplicationModel extends ScopeModel {
         postProcessAfterCreated();
     }
 
+    public static ApplicationModel ofNullable(ApplicationModel 
applicationModel) {
+        if (applicationModel != null) {
+            return applicationModel;
+        } else {
+            return defaultModel();
+        }
+    }
+
     public static ApplicationModel defaultModel() {
         if (defaultInstance == null) {
             synchronized (ApplicationModel.class) {
@@ -102,11 +110,22 @@ public class ApplicationModel extends ScopeModel {
         return 
defaultModel().getApplicationServiceRepository().getReferredServices();
     }
 
+    public Collection<ConsumerModel> allApplicationConsumerModels() {
+        // TODO: aggregate from sub modules
+        return 
defaultModel().getApplicationServiceRepository().getReferredServices();
+    }
+
+
     @Deprecated
     public static Collection<ProviderModel> allProviderModels() {
         return 
defaultModel().getApplicationServiceRepository().getExportedServices();
     }
 
+    public Collection<ProviderModel> allApplicationProviderModels() {
+        // TODO: aggregate from sub modules
+        return 
defaultModel().getApplicationServiceRepository().getExportedServices();
+    }
+
     @Deprecated
     public static ProviderModel getProviderModel(String serviceKey) {
         return 
defaultModel().getApplicationServiceRepository().lookupExportedService(serviceKey);
@@ -225,4 +244,15 @@ public class ApplicationModel extends ScopeModel {
         }
     }
 
+    @Override
+    public String toString() {
+        return "ApplicationModel{" +
+            "moduleModels=" + moduleModels +
+            ", initFlag=" + initFlag +
+            ", environment=" + environment +
+            ", configManager=" + configManager +
+            ", serviceRepository=" + serviceRepository +
+            ", frameworkModel=" + frameworkModel +
+            '}';
+    }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
index 438c465..8dee53d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
@@ -65,4 +65,11 @@ public class FrameworkModel extends ScopeModel {
     public List<ApplicationModel> getApplicationModels() {
         return applicationModels;
     }
+
+    @Override
+    public String toString() {
+        return "FrameworkModel{" +
+            "applicationModels=" + applicationModels +
+            '}';
+    }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
index 0ddb8b9..284d31a 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
@@ -37,4 +37,10 @@ public class ModuleModel extends ScopeModel {
         return applicationModel;
     }
 
+    @Override
+    public String toString() {
+        return "ModuleModel{" +
+            "applicationModel=" + applicationModel +
+            '}';
+    }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModelUtil.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModelUtil.java
index 7db702e..a23a84d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModelUtil.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModelUtil.java
@@ -27,8 +27,9 @@ public class ScopeModelUtil {
         }
         if (scopeModel instanceof ModuleModel) {
             return (ModuleModel) scopeModel;
+        } else {
+            throw new IllegalArgumentException("Unable to get ModuleModel 
from" + scopeModel);
         }
-        return null;
     }
 
     public static ApplicationModel getApplicationModel(ScopeModel scopeModel) {
@@ -40,8 +41,9 @@ public class ScopeModelUtil {
         } else if (scopeModel instanceof ModuleModel) {
             ModuleModel moduleModel = (ModuleModel) scopeModel;
             return moduleModel.getApplicationModel();
+        } else {
+            throw new IllegalArgumentException("Unable to get ApplicationModel 
from" + scopeModel);
         }
-        return null;
     }
 
     public static FrameworkModel getFrameworkModel(ScopeModel scopeModel) {
@@ -55,8 +57,9 @@ public class ScopeModelUtil {
             return moduleModel.getApplicationModel().getFrameworkModel();
         } else if (scopeModel instanceof FrameworkModel) {
             return (FrameworkModel) scopeModel;
+        } else {
+            throw new IllegalArgumentException("Unable to get FrameworkModel 
from" + scopeModel);
         }
-        return null;
     }
 
     public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type, 
ScopeModel scopeModel) {
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
index 1c8a549..d10ad6a 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.dubbo.common.config;
 
+import org.apache.dubbo.rpc.model.ApplicationModel;
+
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -31,14 +33,14 @@ public class ConfigurationUtilsTest {
     @Test
     public void testGetServerShutdownTimeout () {
         System.setProperty(SHUTDOWN_WAIT_KEY, " 10000");
-        Assertions.assertEquals(10000, 
ConfigurationUtils.getServerShutdownTimeout());
+        Assertions.assertEquals(10000, 
ConfigurationUtils.getServerShutdownTimeout(ApplicationModel.defaultModel()));
         System.clearProperty(SHUTDOWN_WAIT_KEY);
     }
 
     @Test
     public void testGetProperty () {
         System.setProperty(SHUTDOWN_WAIT_KEY, " 10000");
-        Assertions.assertEquals("10000", 
ConfigurationUtils.getProperty(SHUTDOWN_WAIT_KEY));
+        Assertions.assertEquals("10000", 
ConfigurationUtils.getProperty(ApplicationModel.defaultModel(), 
SHUTDOWN_WAIT_KEY));
         System.clearProperty(SHUTDOWN_WAIT_KEY);
     }
 
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
index 55ca3b5..9e03a23 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
@@ -19,7 +19,6 @@ package org.apache.dubbo.config;
 import org.apache.dubbo.common.lang.ShutdownHookCallbacks;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.rpc.model.ApplicationModel;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -57,8 +56,7 @@ public class DubboShutdownHook extends Thread {
 
     @Override
     public void run() {
-        String disableShutdownHookValue = (String) 
ApplicationModel.defaultModel().getApplicationEnvironment().getConfiguration()
-            .getProperty(ConfigKeys.DUBBO_LIFECYCLE_DISABLE_SHUTDOWN_HOOK, 
"false");
+        String disableShutdownHookValue = 
System.getProperty(ConfigKeys.DUBBO_LIFECYCLE_DISABLE_SHUTDOWN_HOOK, "false");
         if (Boolean.parseBoolean(disableShutdownHookValue)) {
             if (logger.isWarnEnabled()) {
                 logger.warn("Shutdown hook is disabled, please shutdown dubbo 
services by qos manually");
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
index c8ce1de..584544f 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
@@ -1562,7 +1562,7 @@ public class DubboBootstrap {
                 } finally {
                     localMetadataService.releaseBlock();
                 }
-            }, 0, ConfigurationUtils.get(METADATA_PUBLISH_DELAY_KEY, 
DEFAULT_METADATA_PUBLISH_DELAY), TimeUnit.MILLISECONDS);
+            }, 0, ConfigurationUtils.get(applicationModel, 
METADATA_PUBLISH_DELAY_KEY, DEFAULT_METADATA_PUBLISH_DELAY), 
TimeUnit.MILLISECONDS);
         }
     }
 
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
index 7306dd5..3fc65af 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
@@ -233,7 +233,7 @@ public class ConfigValidationUtils {
                 // for registries enabled service discovery, automatically 
register interface compatible addresses.
                 String registerMode;
                 if 
(SERVICE_REGISTRY_PROTOCOL.equals(registryURL.getProtocol())) {
-                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getCachedDynamicProperty(DUBBO_REGISTER_MODE_DEFAULT_KEY, 
DEFAULT_REGISTER_MODE_INSTANCE));
+                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getCachedDynamicProperty(applicationModel, 
DUBBO_REGISTER_MODE_DEFAULT_KEY, DEFAULT_REGISTER_MODE_INSTANCE));
                     if (!isValidRegisterMode(registerMode)) {
                         registerMode = DEFAULT_REGISTER_MODE_INSTANCE;
                     }
@@ -247,7 +247,7 @@ public class ConfigValidationUtils {
                         result.add(interfaceCompatibleRegistryURL);
                     }
                 } else {
-                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getCachedDynamicProperty(DUBBO_REGISTER_MODE_DEFAULT_KEY, 
DEFAULT_REGISTER_MODE_ALL));
+                    registerMode = registryURL.getParameter(REGISTER_MODE_KEY, 
ConfigurationUtils.getCachedDynamicProperty(applicationModel, 
DUBBO_REGISTER_MODE_DEFAULT_KEY, DEFAULT_REGISTER_MODE_ALL));
                     if (!isValidRegisterMode(registerMode)) {
                         registerMode = DEFAULT_REGISTER_MODE_INTERFACE;
                     }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java
index 33e4b7d..f95e00f 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ReferenceConfigCache.java
@@ -19,7 +19,7 @@ package org.apache.dubbo.config.utils;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.ReferenceConfigBase;
-import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelUtil;
 import org.apache.dubbo.rpc.service.Destroyable;
 
 import java.util.ArrayList;
@@ -180,7 +180,7 @@ public class ReferenceConfigCache {
             return;
         }
 
-        
ApplicationModel.defaultModel().getApplicationConfigManager().removeConfig(rc);
+        
ScopeModelUtil.getApplicationModel(rc.getScopeModel()).getApplicationConfigManager().removeConfig(rc);
         rc.destroy();
 
         Map<String, Object> proxiesOftype = proxies.get(type);
@@ -222,7 +222,7 @@ public class ReferenceConfigCache {
 
         referredReferences.forEach((_k, referenceConfig) -> {
             referenceConfig.destroy();
-            
ApplicationModel.defaultModel().getApplicationConfigManager().removeConfig(referenceConfig);
+            
ScopeModelUtil.getApplicationModel(referenceConfig.getScopeModel()).getApplicationConfigManager().removeConfig(referenceConfig);
         });
 
         proxies.forEach((_type, proxiesOfType) -> {
diff --git 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java
 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java
index 3e248c2..bd77ec5 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/WritableMetadataService.java
@@ -20,7 +20,6 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
-import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ScopeModel;
 import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
@@ -35,15 +34,6 @@ import java.util.Set;
  */
 @SPI(value = "default", scope = ExtensionScope.APPLICATION)
 public interface WritableMetadataService extends MetadataService {
-    /**
-     * Gets the current Dubbo Service name
-     *
-     * @return non-null
-     */
-    @Override
-    default String serviceName() {
-        return ApplicationModel.defaultModel().getApplicationName();
-    }
 
     /**
      * Exports a {@link URL}
diff --git 
a/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/MetricsFilter.java
 
b/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/MetricsFilter.java
index d46462e..c2cce61 100644
--- 
a/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/MetricsFilter.java
+++ 
b/dubbo-monitor/dubbo-monitor-default/src/main/java/org/apache/dubbo/monitor/dubbo/MetricsFilter.java
@@ -31,6 +31,8 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcException;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 import org.apache.dubbo.rpc.support.RpcUtils;
 
 import com.alibaba.fastjson.JSON;
@@ -68,13 +70,19 @@ import static 
org.apache.dubbo.monitor.Constants.DUBBO_PROVIDER_METHOD;
 import static org.apache.dubbo.monitor.Constants.METHOD;
 import static org.apache.dubbo.monitor.Constants.SERVICE;
 
-public class MetricsFilter implements Filter, ExtensionAccessorAware {
+public class MetricsFilter implements Filter, ExtensionAccessorAware, 
ScopeModelAware {
 
     private static final Logger logger = 
LoggerFactory.getLogger(MetricsFilter.class);
     protected static volatile AtomicBoolean exported = new 
AtomicBoolean(false);
     private Integer port;
     private String protocolName;
     private ExtensionAccessor extensionAccessor;
+    private ApplicationModel applicationModel;
+
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        this.applicationModel = applicationModel;
+    }
 
     @Override
     public Result invoke(Invoker<?> invoker, Invocation invocation) throws 
RpcException {
@@ -243,7 +251,7 @@ public class MetricsFilter implements Filter, 
ExtensionAccessorAware {
 
             @Override
             public URL getUrl() {
-                return URL.valueOf(protocolName + "://" + 
NetUtils.getIpByConfig() + ":" + port + "/" + MetricsService.class.getName());
+                return URL.valueOf(protocolName + "://" + 
NetUtils.getIpByConfig(applicationModel) + ":" + port + "/" + 
MetricsService.class.getName());
             }
 
             @Override
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/SelfHostMetaServiceDiscovery.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/SelfHostMetaServiceDiscovery.java
index c732240..30fc1d8 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/SelfHostMetaServiceDiscovery.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/SelfHostMetaServiceDiscovery.java
@@ -34,6 +34,7 @@ import 
org.apache.dubbo.registry.client.metadata.MetadataUtils;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ScopeModelAware;
+import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
 import com.alibaba.fastjson.JSONObject;
 
@@ -232,7 +233,7 @@ public abstract class SelfHostMetaServiceDiscovery 
implements ServiceDiscovery,
             // refer from MetadataUtils, this proxy is different from the one 
used to refer exportedURL
             MetadataService metadataService = 
MetadataUtils.getMetadataServiceProxy(serviceInstance);
 
-            String consumerId = 
ApplicationModel.defaultModel().getApplicationName() + NetUtils.getLocalHost();
+            String consumerId = 
ScopeModelUtil.getApplicationModel(registryURL.getScopeModel()).getApplicationName()
 + NetUtils.getLocalHost();
             String metadata = metadataService.getAndListenInstanceMetadata(
                     consumerId, metadataString -> {
                         if(logger.isDebugEnabled()) {
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
index 9de62fa..e407124 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
@@ -25,6 +25,7 @@ import org.apache.dubbo.metadata.MetadataService;
 import org.apache.dubbo.registry.client.ServiceInstance;
 import org.apache.dubbo.remoting.Constants;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -48,12 +49,19 @@ import static 
org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataU
  * @see MetadataService
  * @since 2.7.5
  */
-public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuilder {
+public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuilder, ScopeModelAware {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     public static final String NAME = "standard";
 
+    private ApplicationModel applicationModel;
+
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        this.applicationModel = applicationModel;
+    }
+
     /**
      * Build the {@link URL urls} from {@link ServiceInstance#getMetadata() 
the metadata} of {@link ServiceInstance}
      *
@@ -88,7 +96,7 @@ public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuil
                 .setPort(port)
                 .setProtocol(protocol)
                 .setPath(MetadataService.class.getName())
-                .addParameter(TIMEOUT_KEY, 
ConfigurationUtils.get(METADATA_PROXY_TIMEOUT_KEY, 
DEFAULT_METADATA_TIMEOUT_VALUE))
+                .addParameter(TIMEOUT_KEY, 
ConfigurationUtils.get(applicationModel, METADATA_PROXY_TIMEOUT_KEY, 
DEFAULT_METADATA_TIMEOUT_VALUE))
                 .addParameter(SIDE_KEY, CONSUMER);
 
         // add parameters
@@ -120,7 +128,7 @@ public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuil
                 .setPort(port)
                 .setProtocol(DUBBO_PROTOCOL)
                 .setPath(MetadataService.class.getName())
-                .addParameter(TIMEOUT_KEY, 
ConfigurationUtils.get(METADATA_PROXY_TIMEOUT_KEY, 
DEFAULT_METADATA_TIMEOUT_VALUE))
+                .addParameter(TIMEOUT_KEY, 
ConfigurationUtils.get(applicationModel, METADATA_PROXY_TIMEOUT_KEY, 
DEFAULT_METADATA_TIMEOUT_VALUE))
                 .addParameter(Constants.RECONNECT_KEY, false)
                 .addParameter(SIDE_KEY, CONSUMER)
                 .addParameter(GROUP_KEY, serviceName)
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
index d118b77..4026103 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
@@ -120,6 +120,16 @@ public class InMemoryWritableMetadataService implements 
WritableMetadataService,
         this.metadataInfos = new ConcurrentHashMap<>();
     }
 
+    /**
+     * Gets the current Dubbo Service name
+     *
+     * @return non-null
+     */
+    @Override
+    public String serviceName() {
+        return 
ApplicationModel.ofNullable(applicationModel).getApplicationName();
+    }
+
     @Override
     public void setApplicationModel(ApplicationModel applicationModel) {
         this.applicationModel = applicationModel;
@@ -305,7 +315,7 @@ public class InMemoryWritableMetadataService implements 
WritableMetadataService,
 
     public void blockUntilUpdated() {
         try {
-            
metadataSemaphore.tryAcquire(ConfigurationUtils.get(METADATA_PUBLISH_DELAY_KEY, 
DEFAULT_METADATA_PUBLISH_DELAY) * 100L, TimeUnit.MILLISECONDS);
+            
metadataSemaphore.tryAcquire(ConfigurationUtils.get(applicationModel, 
METADATA_PUBLISH_DELAY_KEY, DEFAULT_METADATA_PUBLISH_DELAY) * 100L, 
TimeUnit.MILLISECONDS);
             metadataSemaphore.drainPermits();
             updateLock.writeLock().lock();
         } catch (InterruptedException e) {
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
index 299602e..d37aa50 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
@@ -68,7 +68,7 @@ public class DefaultMigrationAddressComparator implements 
MigrationAddressCompar
         if (configedThreshold != null && configedThreshold >= 0) {
             rawThreshold = String.valueOf(configedThreshold);
         }
-        rawThreshold = StringUtils.isNotEmpty(rawThreshold) ? rawThreshold : 
ConfigurationUtils.getCachedDynamicProperty(MIGRATION_THRESHOLD, 
DEFAULT_THRESHOLD_STRING);
+        rawThreshold = StringUtils.isNotEmpty(rawThreshold) ? rawThreshold : 
ConfigurationUtils.getCachedDynamicProperty(newInvoker.getUrl().getScopeModel(),
 MIGRATION_THRESHOLD, DEFAULT_THRESHOLD_STRING);
         float threshold;
         try {
             threshold = Float.parseFloat(rawThreshold);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
index cf81b68..52402e2 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
@@ -33,7 +33,6 @@ import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.cluster.Cluster;
 import org.apache.dubbo.rpc.cluster.ClusterInvoker;
 import org.apache.dubbo.rpc.cluster.Directory;
-import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ConsumerModel;
 
 import java.util.Map;
@@ -56,6 +55,7 @@ public class MigrationInvoker<T> implements 
MigrationClusterInvoker<T> {
     private Class<T> type;
     private RegistryProtocol registryProtocol;
     private MigrationRuleListener migrationRuleListener;
+    private ConsumerModel consumerModel;
 
     private volatile ClusterInvoker<T> invoker;
     private volatile ClusterInvoker<T> serviceDiscoveryInvoker;
@@ -89,8 +89,8 @@ public class MigrationInvoker<T> implements 
MigrationClusterInvoker<T> {
         this.type = type;
         this.url = url;
         this.consumerUrl = consumerUrl;
+        this.consumerModel = (ConsumerModel) consumerUrl.getServiceModel();
 
-        ConsumerModel consumerModel = 
ApplicationModel.defaultModel().getConsumerModel(consumerUrl.getServiceKey());
         if (consumerModel != null) {
             Object object = 
consumerModel.getServiceMetadata().getAttribute("currentClusterInvoker");
             Map<Registry, MigrationInvoker<?>> invokerMap;
@@ -313,7 +313,6 @@ public class MigrationInvoker<T> implements 
MigrationClusterInvoker<T> {
         if (serviceDiscoveryInvoker != null) {
             serviceDiscoveryInvoker.destroy();
         }
-        ConsumerModel consumerModel = 
ApplicationModel.defaultModel().getConsumerModel(consumerUrl.getServiceKey());
         if (consumerModel != null) {
             Object object = 
consumerModel.getServiceMetadata().getAttribute("currentClusterInvoker");
             Map<Registry, MigrationInvoker<?>> invokerMap;
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
index b903b77..0299761 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
@@ -108,7 +108,7 @@ public class MigrationRuleListener implements 
RegistryProtocolListener, Configur
 
     private int getDelay() {
         int delay = 60000;
-        String delayStr = ConfigurationUtils.getProperty(MIGRATION_DELAY_KEY);
+        String delayStr = ConfigurationUtils.getProperty(applicationModel, 
MIGRATION_DELAY_KEY);
         if (StringUtils.isEmpty(delayStr)) {
             return delay;
         }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
index 39463fb..0ae30fa 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
@@ -168,7 +168,7 @@ public class MigrationRule {
             step = MigrationStep.APPLICATION_FIRST;
             step = Enum.valueOf(MigrationStep.class,
                 consumerURL.getParameter(MIGRATION_STEP_KEY,
-                    
ConfigurationUtils.getCachedDynamicProperty(DUBBO_SERVICEDISCOVERY_MIGRATION, 
step.name())));
+                    
ConfigurationUtils.getCachedDynamicProperty(consumerURL.getScopeModel(), 
DUBBO_SERVICEDISCOVERY_MIGRATION, step.name())));
         }
 
         return step;
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 fc2902b..6667cdb 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
@@ -861,7 +861,7 @@ public class RegistryProtocol implements Protocol, 
ScopeModelAware {
 
             executor.submit(() -> {
                 try {
-                    int timeout = 
ConfigurationUtils.getServerShutdownTimeout();
+                    int timeout = 
ConfigurationUtils.getServerShutdownTimeout(subscribeUrl.getScopeModel());
                     if (timeout > 0) {
                         logger.info("Waiting " + timeout + "ms for registry to 
notify all consumers before unexport. " +
                             "Usually, this is called when you use dubbo API");
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
index 561b794..2ef4e5c 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java
@@ -20,7 +20,6 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.URLBuilder;
 import org.apache.dubbo.common.URLStrParser;
 import org.apache.dubbo.common.config.ConfigurationUtils;
-import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
@@ -32,6 +31,7 @@ import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.common.utils.UrlUtils;
 import org.apache.dubbo.registry.NotifyListener;
+import org.apache.dubbo.rpc.model.ScopeModel;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -66,32 +66,29 @@ public abstract class CacheableFailbackRegistry extends 
FailbackRegistry {
     private static final Logger logger = 
LoggerFactory.getLogger(CacheableFailbackRegistry.class);
     private static String[] VARIABLE_KEYS = new 
String[]{ENCODED_TIMESTAMP_KEY, ENCODED_PID_KEY};
 
-    protected final static Map<String, URLAddress> stringAddress = new 
ConcurrentHashMap<>();
-    protected final static Map<String, URLParam> stringParam = new 
ConcurrentHashMap<>();
-    private static final ScheduledExecutorService cacheRemovalScheduler;
-    private static final int cacheRemovalTaskIntervalInMillis;
-    private static final int cacheClearWaitingThresholdInMillis;
-    private final static Map<ServiceAddressURL, Long> waitForRemove = new 
ConcurrentHashMap<>();
-    private static final Semaphore semaphore = new Semaphore(1);
+    protected Map<String, URLAddress> stringAddress = new 
ConcurrentHashMap<>();
+    protected Map<String, URLParam> stringParam = new ConcurrentHashMap<>();
+    private ScheduledExecutorService cacheRemovalScheduler;
+    private int cacheRemovalTaskIntervalInMillis;
+    private int cacheClearWaitingThresholdInMillis;
+    private Map<ServiceAddressURL, Long> waitForRemove = new 
ConcurrentHashMap<>();
+    private Semaphore semaphore = new Semaphore(1);
 
     private final Map<String, String> extraParameters;
     protected final Map<URL, Map<String, ServiceAddressURL>> stringUrls = new 
HashMap<>();
 
-    static {
-        ExecutorRepository executorRepository = 
ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension();
-        cacheRemovalScheduler = executorRepository.nextScheduledExecutor();
-        cacheRemovalTaskIntervalInMillis = 
getIntConfig(CACHE_CLEAR_TASK_INTERVAL, 2 * 60 * 1000);
-        cacheClearWaitingThresholdInMillis = 
getIntConfig(CACHE_CLEAR_WAITING_THRESHOLD, 5 * 60 * 1000);
-    }
-
     public CacheableFailbackRegistry(URL url) {
         super(url);
         extraParameters = new HashMap<>(8);
         extraParameters.put(CHECK_KEY, String.valueOf(false));
+
+        cacheRemovalScheduler = 
url.getScopeModel().getExtensionLoader(ExecutorRepository.class).getDefaultExtension().nextScheduledExecutor();
+        cacheRemovalTaskIntervalInMillis = getIntConfig(url.getScopeModel(), 
CACHE_CLEAR_TASK_INTERVAL, 2 * 60 * 1000);
+        cacheClearWaitingThresholdInMillis = getIntConfig(url.getScopeModel(), 
CACHE_CLEAR_WAITING_THRESHOLD, 5 * 60 * 1000);
     }
 
-    protected static int getIntConfig(String key, int def) {
-        String str = ConfigurationUtils.getProperty(key);
+    protected static int getIntConfig(ScopeModel scopeModel, String key, int 
def) {
+        String str = ConfigurationUtils.getProperty(scopeModel, key);
         int result = def;
         if (StringUtils.isNotEmpty(str)) {
             try {
@@ -305,7 +302,7 @@ public abstract class CacheableFailbackRegistry extends 
FailbackRegistry {
     protected abstract boolean isMatch(URL subscribeUrl, URL providerUrl);
 
 
-    private static class RemovalTask implements Runnable {
+    private class RemovalTask implements Runnable {
         @Override
         public void run() {
             logger.info("Clearing cached URLs, waiting to clear size " + 
waitForRemove.size());
diff --git 
a/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryChangeWatcher.java
 
b/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryChangeWatcher.java
index 66426d2..83d2333 100644
--- 
a/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryChangeWatcher.java
+++ 
b/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryChangeWatcher.java
@@ -22,7 +22,7 @@ import org.apache.dubbo.registry.client.ServiceDiscovery;
 import org.apache.dubbo.registry.client.ServiceInstance;
 import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;
 import 
org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;
-import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
 import org.apache.curator.framework.api.CuratorWatcher;
 import org.apache.zookeeper.WatchedEvent;
@@ -65,10 +65,11 @@ public class ZookeeperServiceDiscoveryChangeWatcher 
implements CuratorWatcher {
         this.serviceName = serviceName;
         this.path = path;
         this.latch = latch;
-        this.notifier = new 
RegistryNotifier(zookeeperServiceDiscovery.getDelay(), 
ApplicationModel.defaultModel().getApplicationExecutorRepository().getServiceDiscoveryAddressNotificationExecutor())
 {
+        this.notifier = new 
RegistryNotifier(zookeeperServiceDiscovery.getDelay(),
+            
ScopeModelUtil.getApplicationModel(zookeeperServiceDiscovery.getUrl().getScopeModel()).getApplicationExecutorRepository().getServiceDiscoveryAddressNotificationExecutor())
 {
             @Override
             protected void doNotify(Object rawAddresses) {
-                listeners.forEach(listener -> 
listener.onEvent((ServiceInstancesChangedEvent)rawAddresses));
+                listeners.forEach(listener -> 
listener.onEvent((ServiceInstancesChangedEvent) rawAddresses));
             }
         };
     }
diff --git 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/NettyEventLoopFactory.java
 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/NettyEventLoopFactory.java
index ec54e96..5fb5015 100644
--- 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/NettyEventLoopFactory.java
+++ 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/NettyEventLoopFactory.java
@@ -16,9 +16,7 @@
  */
 package org.apache.dubbo.remoting.api;
 
-import org.apache.dubbo.common.config.Configuration;
 import org.apache.dubbo.remoting.Constants;
-import org.apache.dubbo.rpc.model.ApplicationModel;
 
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.epoll.Epoll;
@@ -55,9 +53,8 @@ public class NettyEventLoopFactory {
     }
 
     private static boolean shouldEpoll() {
-        Configuration configuration = 
ApplicationModel.defaultModel().getApplicationEnvironment().getConfiguration();
-        if (configuration.getBoolean("netty.epoll.enable", false)) {
-            String osName = configuration.getString("os.name");
+        if (Boolean.parseBoolean(System.getProperty("netty.epoll.enable", 
"false"))) {
+            String osName = System.getProperty("os.name");
             return osName.toLowerCase().contains("linux") && 
Epoll.isAvailable();
         }
 
diff --git 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/SslContexts.java
 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/SslContexts.java
index e40d5fc..71d8d87 100644
--- 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/SslContexts.java
+++ 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/SslContexts.java
@@ -21,7 +21,7 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.config.SslConfig;
 import org.apache.dubbo.config.context.ConfigManager;
-import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
 import io.netty.handler.ssl.ClientAuth;
 import io.netty.handler.ssl.OpenSsl;
@@ -39,7 +39,7 @@ public class SslContexts {
     private static final Logger logger = 
LoggerFactory.getLogger(SslContexts.class);
 
     public static SslContext buildServerSslContext(URL url) {
-        ConfigManager globalConfigManager = 
ApplicationModel.defaultModel().getApplicationConfigManager();
+        ConfigManager globalConfigManager = 
ScopeModelUtil.getApplicationModel(url.getScopeModel()).getApplicationConfigManager();
         SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> 
new IllegalStateException("Ssl enabled, but no ssl cert information 
provided!"));
 
         SslContextBuilder sslClientContextBuilder;
@@ -68,7 +68,7 @@ public class SslContexts {
     }
 
     public static SslContext buildClientSslContext(URL url) {
-        ConfigManager globalConfigManager = 
ApplicationModel.defaultModel().getApplicationConfigManager();
+        ConfigManager globalConfigManager = 
ScopeModelUtil.getApplicationModel(url.getScopeModel()).getApplicationConfigManager();
         SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> 
new IllegalStateException("Ssl enabled, but no ssl cert information 
provided!"));
 
         SslContextBuilder builder = SslContextBuilder.forClient();
@@ -97,10 +97,6 @@ public class SslContexts {
         }
     }
 
-    private static SslConfig getSslConfig() {
-        return 
ApplicationModel.defaultModel().getApplicationConfigManager().getSsl().orElseThrow(()
 -> new IllegalStateException("Ssl enabled, but no ssl cert information 
provided!"));
-    }
-
     /**
      * Returns OpenSSL if available, otherwise returns the JDK provider.
      */
diff --git 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
index 552c61b..0063576 100644
--- 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
+++ 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java
@@ -429,7 +429,7 @@ public class ExchangeCodec extends TelnetCodec {
         try {
             if (eventBytes != null) {
                 int dataLen = eventBytes.length;
-                int threshold = 
ConfigurationUtils.getSystemConfiguration().getInt("deserialization.event.size",
 50);
+                int threshold = 
ConfigurationUtils.getSystemConfiguration(channel.getUrl().getScopeModel()).getInt("deserialization.event.size",
 50);
                 if (dataLen > threshold) {
                     throw new IllegalArgumentException("Event data too long, 
actual size " + threshold + ", threshold " + threshold + " rejected for 
security consideration.");
                 }
diff --git 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/CodecSupport.java
 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/CodecSupport.java
index 03e2ac6..0995a1c 100644
--- 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/CodecSupport.java
+++ 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/CodecSupport.java
@@ -158,6 +158,7 @@ public class CodecSupport {
     }
 
     public static void checkSerialization(String path, String version, Byte 
id) throws IOException {
+        // TODO: fetch from FrameworkModel
         ServiceRepository repository = 
ApplicationModel.defaultModel().getApplicationServiceRepository();
         Set<URL> urls = 
repository.lookupRegisteredProviderUrlsWithoutGroup(keyWithoutGroup(path, 
version));
         if (CollectionUtils.isEmpty(urls)) {
diff --git 
a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyEventLoopFactory.java
 
b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyEventLoopFactory.java
index ade8754..eb97078 100644
--- 
a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyEventLoopFactory.java
+++ 
b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyEventLoopFactory.java
@@ -16,9 +16,6 @@
  */
 package org.apache.dubbo.remoting.transport.netty4;
 
-import org.apache.dubbo.common.config.Configuration;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.epoll.Epoll;
 import io.netty.channel.epoll.EpollEventLoopGroup;
@@ -49,9 +46,8 @@ public class NettyEventLoopFactory {
     }
 
     private static boolean shouldEpoll() {
-        Configuration configuration = 
ApplicationModel.defaultModel().getApplicationEnvironment().getConfiguration();
-        if (configuration.getBoolean("netty.epoll.enable", false)) {
-            String osName = configuration.getString("os.name");
+        if (Boolean.parseBoolean(System.getProperty("netty.epoll.enable", 
"false"))) {
+            String osName = System.getProperty("os.name");
             return osName.toLowerCase().contains("linux") && 
Epoll.isAvailable();
         }
 
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java
index d00da0f..73f5297 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericFilter.java
@@ -39,6 +39,7 @@ import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.RpcInvocation;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelAware;
 import org.apache.dubbo.rpc.service.GenericException;
 import org.apache.dubbo.rpc.service.GenericService;
 import org.apache.dubbo.rpc.support.ProtocolUtils;
@@ -64,9 +65,16 @@ import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;
  * GenericInvokerFilter.
  */
 @Activate(group = CommonConstants.PROVIDER, order = -20000)
-public class GenericFilter implements Filter, Filter.Listener {
+public class GenericFilter implements Filter, Filter.Listener, ScopeModelAware 
{
     private final Logger logger = LoggerFactory.getLogger(GenericFilter.class);
 
+    private ApplicationModel applicationModel;
+
+    @Override
+    public void setApplicationModel(ApplicationModel applicationModel) {
+        this.applicationModel = applicationModel;
+    }
+
     @Override
     public Result invoke(Invoker<?> invoker, Invocation inv) throws 
RpcException {
         if ((inv.getMethodName().equals($INVOKE) || 
inv.getMethodName().equals($INVOKE_ASYNC))
@@ -108,7 +116,7 @@ public class GenericFilter implements Filter, 
Filter.Listener {
                 } else if (ProtocolUtils.isGsonGenericSerialization(generic)) {
                     args = getGsonGenericArgs(args, 
method.getGenericParameterTypes());
                 } else if (ProtocolUtils.isJavaGenericSerialization(generic)) {
-                    Configuration configuration = 
ApplicationModel.defaultModel().getApplicationEnvironment().getConfiguration();
+                    Configuration configuration = 
ApplicationModel.ofNullable(applicationModel).getApplicationEnvironment().getConfiguration();
                     if 
(!configuration.getBoolean(CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE,
 false)) {
                         String notice = "Trigger the safety barrier! " +
                                 "Native Java Serializer is not allowed by 
default." +
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
index d49e24a..deaeec9 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
@@ -33,7 +33,7 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
 import org.apache.dubbo.rpc.RpcInvocation;
-import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -129,7 +129,7 @@ class CallbackServiceCodec {
             // one channel can have multiple callback instances, no need to 
re-export for different instance.
             if (!channel.hasAttribute(cacheKey)) {
                 if (!isInstancesOverLimit(channel, url, clazz.getName(), 
instid, false)) {
-                    
ApplicationModel.defaultModel().getApplicationServiceRepository().registerService(clazz);
+                    
ScopeModelUtil.getApplicationModel(url.getScopeModel()).getApplicationServiceRepository().registerService(clazz);
                     Invoker<?> invoker = PROXY_FACTORY.getInvoker(inst, clazz, 
exportUrl);
                     // should destroy resource?
                     Exporter<?> exporter = PROTOCOL.export(invoker);
@@ -167,7 +167,7 @@ class CallbackServiceCodec {
                 URL referurl = URL.valueOf("callback://" + url.getAddress() + 
"/" + clazz.getName() + "?" + INTERFACE_KEY + "=" + clazz.getName());
                 referurl = 
referurl.addParametersIfAbsent(url.getParameters()).removeParameter(METHODS_KEY);
                 if (!isInstancesOverLimit(channel, referurl, clazz.getName(), 
instid, true)) {
-                    
ApplicationModel.defaultModel().getApplicationServiceRepository().registerService(clazz);
+                    
ScopeModelUtil.getApplicationModel(url.getScopeModel()).getApplicationServiceRepository().registerService(clazz);
                     @SuppressWarnings("rawtypes")
                     Invoker<?> invoker = new ChannelWrappedInvoker(clazz, 
channel, referurl, String.valueOf(instid));
                     proxy = PROXY_FACTORY.getProxy(invoker);
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java
index add0437..a5003ef 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java
@@ -17,7 +17,6 @@
 package org.apache.dubbo.rpc.protocol.dubbo;
 
 
-import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.serialize.Cleanable;
@@ -123,7 +122,7 @@ public class DecodeableRpcInvocation extends RpcInvocation 
implements Codec, Dec
         setParameterTypesDesc(desc);
 
         try {
-            if 
(ConfigurationUtils.getSystemConfiguration().getBoolean(SERIALIZATION_SECURITY_CHECK_KEY,
 true)) {
+            if 
(Boolean.parseBoolean(System.getProperty(SERIALIZATION_SECURITY_CHECK_KEY, 
"true"))) {
                 CodecSupport.checkSerialization(path, version, 
serializationType);
             }
             Object[] args = DubboCodec.EMPTY_OBJECT_ARRAY;
@@ -132,6 +131,7 @@ public class DecodeableRpcInvocation extends RpcInvocation 
implements Codec, Dec
 //                if (RpcUtils.isGenericCall(path, getMethodName()) || 
RpcUtils.isEcho(path, getMethodName())) {
 //                    pts = ReflectUtils.desc2classArray(desc);
 //                } else {
+                // TODO: fetch from FrameworkModel
                 ServiceRepository repository = 
ApplicationModel.defaultModel().getApplicationServiceRepository();
                 ServiceDescriptor serviceDescriptor = 
repository.lookupService(path);
                 if (serviceDescriptor != null) {
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java
index cb7a41a..1c6a00b 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java
@@ -118,7 +118,7 @@ public class DecodeableRpcResult extends AppResponse 
implements Codec, Decodeabl
     public void decode() throws Exception {
         if (!hasDecoded && channel != null && inputStream != null) {
             try {
-                if 
(ConfigurationUtils.getSystemConfiguration().getBoolean(SERIALIZATION_SECURITY_CHECK_KEY,
 true)) {
+                if 
(ConfigurationUtils.getSystemConfiguration(channel.getUrl().getScopeModel()).getBoolean(SERIALIZATION_SECURITY_CHECK_KEY,
 true)) {
                     Object serializationType_obj = 
invocation.get(SERIALIZATION_ID_KEY);
                     if (serializationType_obj != null) {
                         if ((byte) serializationType_obj != serializationType) 
{
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvoker.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvoker.java
index 85244e9..aa3c1fb 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvoker.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvoker.java
@@ -151,7 +151,7 @@ public class DubboInvoker<T> extends AbstractInvoker<T> {
                 }
                 for (ExchangeClient client : clients) {
                     try {
-                        
client.close(ConfigurationUtils.getServerShutdownTimeout());
+                        
client.close(ConfigurationUtils.getServerShutdownTimeout(getUrl().getScopeModel()));
                     } catch (Throwable t) {
                         logger.warn(t.getMessage(), t);
                     }
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java
index 680b0b4..c95f5c7 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DubboProtocol.java
@@ -646,7 +646,7 @@ public class DubboProtocol extends AbstractProtocol {
                     logger.info("Close dubbo server: " + 
server.getLocalAddress());
                 }
 
-                server.close(ConfigurationUtils.getServerShutdownTimeout());
+                
server.close(ConfigurationUtils.getServerShutdownTimeout(server.getUrl().getScopeModel()));
 
             } catch (Throwable t) {
                 logger.warn(t.getMessage(), t);
@@ -686,7 +686,7 @@ public class DubboProtocol extends AbstractProtocol {
                 logger.info("Close dubbo connect: " + client.getLocalAddress() 
+ "-->" + client.getRemoteAddress());
             }
 
-            client.close(ConfigurationUtils.getServerShutdownTimeout());
+            
client.close(ConfigurationUtils.getServerShutdownTimeout(client.getUrl().getScopeModel()));
 
             // TODO
             /*
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
index 65b74a0..9d9e205 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
@@ -25,9 +25,9 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.cluster.filter.ClusterFilter;
-import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.AsyncMethodInfo;
 import org.apache.dubbo.rpc.model.ConsumerModel;
+import org.apache.dubbo.rpc.model.ServiceModel;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -192,8 +192,8 @@ public class FutureFilter implements ClusterFilter, 
ClusterFilter.Listener {
             return asyncMethodInfo;
         }
 
-        ConsumerModel consumerModel = 
ApplicationModel.defaultModel().getConsumerModel(invoker.getUrl().getServiceKey());
-        if (consumerModel == null) {
+        ServiceModel serviceModel = invocation.getServiceModel();
+        if (!(serviceModel instanceof ConsumerModel)) {
             return null;
         }
 
@@ -202,7 +202,7 @@ public class FutureFilter implements ClusterFilter, 
ClusterFilter.Listener {
             methodName = (String) invocation.getArguments()[0];
         }
 
-        return consumerModel.getAsyncInfo(methodName);
+        return ((ConsumerModel) serviceModel).getAsyncInfo(methodName);
     }
 
 }
diff --git 
a/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java
 
b/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java
index 3693f4a..ac2c4e7 100644
--- 
a/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java
+++ 
b/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java
@@ -22,7 +22,7 @@ import org.apache.dubbo.common.threadpool.ThreadPool;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.config.SslConfig;
 import org.apache.dubbo.config.context.ConfigManager;
-import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ScopeModelUtil;
 import org.apache.dubbo.rpc.protocol.grpc.interceptors.ClientInterceptor;
 import org.apache.dubbo.rpc.protocol.grpc.interceptors.GrpcConfigurator;
 import org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerInterceptor;
@@ -153,7 +153,7 @@ public class GrpcOptionsUtils {
     }
 
     private static SslContext buildServerSslContext(URL url) {
-        ConfigManager globalConfigManager = 
ApplicationModel.defaultModel().getApplicationConfigManager();
+        ConfigManager globalConfigManager = 
ScopeModelUtil.getApplicationModel(url.getScopeModel()).getApplicationConfigManager();
         SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> 
new IllegalStateException("Ssl enabled, but no ssl cert information 
provided!"));
 
         SslContextBuilder sslClientContextBuilder = null;
@@ -183,7 +183,7 @@ public class GrpcOptionsUtils {
     }
 
     private static SslContext buildClientSslContext(URL url) {
-        ConfigManager globalConfigManager = 
ApplicationModel.defaultModel().getApplicationConfigManager();
+        ConfigManager globalConfigManager = 
ScopeModelUtil.getApplicationModel(url.getScopeModel()).getApplicationConfigManager();
         SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> 
new IllegalStateException("Ssl enabled, but no ssl cert information 
provided!"));
 
 
diff --git 
a/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java
 
b/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java
index d5d781c..39b15a0 100644
--- 
a/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java
+++ 
b/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java
@@ -72,6 +72,7 @@ public class GrpcProtocol extends AbstractProxyProtocol {
 
         GrpcRemotingServer grpcServer = (GrpcRemotingServer) 
protocolServer.getRemotingServer();
 
+        // TODO: fetch from FrameworkModel
         ServiceRepository serviceRepository = 
ApplicationModel.defaultModel().getApplicationServiceRepository();
         ProviderModel providerModel = 
serviceRepository.lookupExportedService(url.getServiceKey());
         if (providerModel == null) {
@@ -123,7 +124,7 @@ public class GrpcProtocol extends AbstractProxyProtocol {
                     channel,
                     GrpcOptionsUtils.buildCallOptions(url),
                     url,
-                    
ApplicationModel.defaultModel().getConsumerModel(url.getServiceKey()).getReferenceConfig()
+                    url.getServiceModel().getReferenceConfig()
             );
             final Invoker<T> target = proxyFactory.getInvoker(stub, type, url);
             GrpcInvoker<T> grpcInvoker = new GrpcInvoker<>(type, url, target, 
channel);
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
index 8db22f5..1e658b6 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
@@ -23,7 +23,6 @@ import 
org.apache.dubbo.remoting.http.servlet.BootstrapListener;
 import org.apache.dubbo.remoting.http.servlet.ServletManager;
 import org.apache.dubbo.rpc.ProtocolServer;
 import org.apache.dubbo.rpc.RpcException;
-import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.protocol.AbstractProxyProtocol;
 
 import org.apache.http.HeaderElement;
@@ -94,7 +93,7 @@ public class RestProtocol extends AbstractProxyProtocol {
     @Override
     protected <T> Runnable doExport(T impl, Class<T> type, URL url) throws 
RpcException {
         String addr = getAddr(url);
-        Class implClass = 
ApplicationModel.defaultModel().getProviderModel(url.getServiceKey()).getServiceInstance().getClass();
+        Class implClass = url.getServiceModel().getProxyObject().getClass();
         RestProtocolServer server = (RestProtocolServer) 
serverMap.computeIfAbsent(addr, restServer -> {
             RestProtocolServer s = 
serverFactory.createServer(url.getParameter(SERVER_KEY, DEFAULT_SERVER));
             s.setAddress(url.getAddress());
diff --git 
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java
 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java
index b742248..eb10de5 100644
--- 
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java
+++ 
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java
@@ -86,6 +86,7 @@ public abstract class AbstractServerStream extends 
AbstractStream implements Str
     }
 
     private static ProviderModel lookupProviderModel(URL url) {
+        // TODO: fetch from FrameworkModel
         ServiceRepository repo = 
ApplicationModel.defaultModel().getApplicationServiceRepository();
         final ProviderModel model = 
repo.lookupExportedService(url.getServiceKey());
         if (model != null) {
diff --git 
a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java
 
b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java
index 2faaf61..1222612 100644
--- 
a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java
+++ 
b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.dubbo.common.serialize.hessian2.dubbo;
 
-import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
@@ -34,7 +33,7 @@ public interface Hessian2FactoryInitializer {
     SerializerFactory getSerializerFactory();
 
     static Hessian2FactoryInitializer getInstance() {
-        String whitelist = ConfigurationUtils.getProperty(WHITELIST);
+        String whitelist = System.getProperty(WHITELIST);
         if (StringUtils.isNotEmpty(whitelist)) {
             return loader.getExtension("whitelist");
         }
diff --git 
a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/WhitelistHessian2FactoryInitializer.java
 
b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/WhitelistHessian2FactoryInitializer.java
index 9614319..d17f135 100644
--- 
a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/WhitelistHessian2FactoryInitializer.java
+++ 
b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/WhitelistHessian2FactoryInitializer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.dubbo.common.serialize.hessian2.dubbo;
 
-import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.serialize.hessian2.Hessian2SerializerFactory;
 import org.apache.dubbo.common.utils.StringUtils;
 
@@ -30,10 +29,10 @@ public class WhitelistHessian2FactoryInitializer extends 
AbstractHessian2Factory
     @Override
     public SerializerFactory createSerializerFactory() {
         SerializerFactory serializerFactory = new Hessian2SerializerFactory();
-        String whiteList = ConfigurationUtils.getProperty(WHITELIST);
+        String whiteList = System.getProperty(WHITELIST);
         if ("true".equals(whiteList)) {
             serializerFactory.getClassFactory().setWhitelist(true);
-            String allowPattern = ConfigurationUtils.getProperty(ALLOW);
+            String allowPattern = System.getProperty(ALLOW);
             if (StringUtils.isNotEmpty(allowPattern)) {
                 for (String pattern : allowPattern.split(";")) {
                     serializerFactory.getClassFactory().allow(pattern);
@@ -41,7 +40,7 @@ public class WhitelistHessian2FactoryInitializer extends 
AbstractHessian2Factory
             }
         } else {
             serializerFactory.getClassFactory().setWhitelist(false);
-            String denyPattern = ConfigurationUtils.getProperty(DENY);
+            String denyPattern = System.getProperty(DENY);
             if (StringUtils.isNotEmpty(denyPattern)) {
                 for (String pattern : denyPattern.split(";")) {
                     serializerFactory.getClassFactory().deny(pattern);

Reply via email to