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

crazyhzm pushed a commit to branch 3.1
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.1 by this push:
     new 1470c7ca1e Cache jvm system parameters to prevent each call from being 
executed, affecting performance (#10839)
1470c7ca1e is described below

commit 1470c7ca1eeba0ad4bcb309678e5c432bbfc002f
Author: huazhongming <[email protected]>
AuthorDate: Mon Dec 5 15:37:33 2022 +0800

    Cache jvm system parameters to prevent each call from being executed, 
affecting performance (#10839)
    
    * Cache jvm system parameters to prevent each call from being executed, 
affecting performance
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * fix npe
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * optimization performance
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * remove unused import
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * add default config value
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * change getProperty method
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * change convert method
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * change getInternalProperty by default value
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * add overwrite cache api
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * add clear cache api
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * fix ut
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * fix ut
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * fix ut
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * reset DubboBootstrap
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * change serialization.security.check config to app scopemodel
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * fix url without scopemodel
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * fix url without scopemodel
    
    Signed-off-by: crazyhzm <[email protected]>
    
    Signed-off-by: crazyhzm <[email protected]>
---
 .../common/config/CompositeConfiguration.java      |  16 ++
 .../apache/dubbo/common/config/Configuration.java  |  32 ++--
 .../common/config/EnvironmentConfiguration.java    |  13 ++
 .../dubbo/common/config/InmemoryConfiguration.java |  10 ++
 .../config/OrderedPropertiesConfiguration.java     |  10 ++
 .../dubbo/common/config/PrefixedConfiguration.java |  13 ++
 .../common/config/PropertiesConfiguration.java     |  10 ++
 .../dubbo/common/config/SystemConfiguration.java   |  48 +++++-
 .../configcenter/AbstractDynamicConfiguration.java |   5 +
 .../configcenter/nop/NopDynamicConfiguration.java  |   5 +
 .../wrapper/CompositeDynamicConfiguration.java     |   5 +
 .../config/context/ConfigConfigurationAdapter.java |  10 ++
 .../common/config/SystemConfigurationTest.java     |  18 +-
 .../common/utils/SerializeClassCheckerTest.java    |  32 ++--
 .../dubbo/config/bootstrap/MultiInstanceTest.java  |  37 ++--
 .../support/apollo/ApolloDynamicConfiguration.java |  10 ++
 .../support/nacos/NacosDynamicConfiguration.java   |  11 ++
 .../zookeeper/ZookeeperDynamicConfiguration.java   |  10 ++
 .../java/org/apache/dubbo/rpc/AsyncRpcResult.java  |  12 +-
 .../apache/dubbo/rpc/filter/AccessLogFilter.java   |   4 +-
 .../apache/dubbo/rpc/protocol/AbstractInvoker.java |  12 +-
 .../protocol/dubbo/DecodeableRpcInvocation.java    |  14 +-
 .../dubbo/decode/DubboTelnetDecodeTest.java        | 189 +++++++++++----------
 .../dubbo/DefaultHessian2FactoryInitializer.java   |   2 +-
 .../hessian2/dubbo/Hessian2FactoryInitializer.java |   2 +
 25 files changed, 371 insertions(+), 159 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
index 1653e96134..6212108a2b 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
@@ -89,4 +89,20 @@ public class CompositeConfiguration implements Configuration 
{
         return null;
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        for (Configuration config : configList) {
+            try {
+                Object value = config.getProperty(key, defaultValue);
+                if (!ConfigurationUtils.isEmptyValue(value)) {
+                    return value;
+                }
+            } catch (Exception e) {
+                logger.error("Error when trying to get value for key " + key + 
" from " + config + ", " +
+                    "will continue to try the next one.");
+            }
+        }
+        return defaultValue;
+    }
+
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
index 5c3988ab02..6a4f3ba7ae 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
@@ -127,18 +127,19 @@ public interface Configuration {
      * Gets a property from the configuration. The default value will return 
if the configuration doesn't contain
      * the mapping for the specified key.
      *
-     * @param key property to retrieve
+     * @param key          property to retrieve
      * @param defaultValue default value
      * @return the value to which this configuration maps the specified key, 
or default value if the configuration
      * contains no mapping for this key.
      */
     default Object getProperty(String key, Object defaultValue) {
-        Object value = getInternalProperty(key);
-        return value != null ? value : defaultValue;
+        return getInternalProperty(key, defaultValue);
     }
 
     Object getInternalProperty(String key);
 
+    Object getInternalProperty(String key, Object defaultValue);
+
     /**
      * Check if the configuration contains the specified key.
      *
@@ -153,9 +154,12 @@ public interface Configuration {
 
     default <T> T convert(Class<T> cls, String key, T defaultValue) {
         // we only process String properties for now
-        String value = (String) getProperty(key);
+        Object value = getProperty(key, defaultValue);
 
-        if (value == null) {
+        if (!String.class.isInstance(value)) {
+            if (cls.isInstance(value)) {
+                return cls.cast(value);
+            }
             return defaultValue;
         }
 
@@ -164,24 +168,26 @@ public interface Configuration {
             return cls.cast(value);
         }
 
+        String str = (String) value;
+
         if (Boolean.class.equals(cls) || Boolean.TYPE.equals(cls)) {
-            obj = Boolean.valueOf(value);
+            obj = Boolean.valueOf(str);
         } else if (Number.class.isAssignableFrom(cls) || cls.isPrimitive()) {
             if (Integer.class.equals(cls) || Integer.TYPE.equals(cls)) {
-                obj = Integer.valueOf(value);
+                obj = Integer.valueOf(str);
             } else if (Long.class.equals(cls) || Long.TYPE.equals(cls)) {
-                obj = Long.valueOf(value);
+                obj = Long.valueOf(str);
             } else if (Byte.class.equals(cls) || Byte.TYPE.equals(cls)) {
-                obj = Byte.valueOf(value);
+                obj = Byte.valueOf(str);
             } else if (Short.class.equals(cls) || Short.TYPE.equals(cls)) {
-                obj = Short.valueOf(value);
+                obj = Short.valueOf(str);
             } else if (Float.class.equals(cls) || Float.TYPE.equals(cls)) {
-                obj = Float.valueOf(value);
+                obj = Float.valueOf(str);
             } else if (Double.class.equals(cls) || Double.TYPE.equals(cls)) {
-                obj = Double.valueOf(value);
+                obj = Double.valueOf(str);
             }
         } else if (cls.isEnum()) {
-            obj = Enum.valueOf(cls.asSubclass(Enum.class), value);
+            obj = Enum.valueOf(cls.asSubclass(Enum.class), str);
         }
 
         return cls.cast(obj);
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java
index 227b180897..c95e92864e 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java
@@ -34,6 +34,19 @@ public class EnvironmentConfiguration implements 
Configuration {
         return value;
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        String value = System.getenv(key);
+        if (StringUtils.isEmpty(value)) {
+            value = System.getenv(StringUtils.toOSStyleKey(key));
+        }
+
+        if (StringUtils.isEmpty(value)) {
+            return defaultValue;
+        }
+        return value;
+    }
+
     public Map<String, String> getProperties() {
         return System.getenv();
     }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
index 92d808de9f..6fc1d01c80 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
@@ -45,6 +45,16 @@ public class InmemoryConfiguration implements Configuration {
         return store.get(key);
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        Object v = store.get(key);
+        if (v != null) {
+            return v;
+        } else {
+            return defaultValue;
+        }
+    }
+
     /**
      * Add one property into the store, the previous value will be replaced if 
the key exists
      */
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
index 191320ed7f..dbf0719429 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
@@ -68,6 +68,16 @@ public class OrderedPropertiesConfiguration implements 
Configuration {
         return properties.getProperty(key);
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        Object v = properties.getProperty(key);
+        if (v != null){
+            return v;
+        }else {
+            return defaultValue;
+        }
+    }
+
     public void setProperty(String key, String value) {
         properties.setProperty(key, value);
     }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java
index e23e6601ec..0220a1ecf1 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java
@@ -42,4 +42,17 @@ public class PrefixedConfiguration implements Configuration {
         return null;
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        if (StringUtils.isBlank(prefix)) {
+            return origin.getInternalProperty(key, defaultValue);
+        }
+
+        Object value = origin.getInternalProperty(prefix + "." + key, 
defaultValue);
+        if (!ConfigurationUtils.isEmptyValue(value)) {
+            return value;
+        }
+        return null;
+    }
+
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java
index e215dfb799..9d4ed79234 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java
@@ -49,6 +49,16 @@ public class PropertiesConfiguration implements 
Configuration {
         return properties.getProperty(key);
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        Object v = properties.getProperty(key);
+        if (v != null){
+            return v;
+        }else {
+            return defaultValue;
+        }
+    }
+
     public void setProperty(String key, String value) {
         properties.setProperty(key, value);
     }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
index 8341fd4e15..9ea3c207b6 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
@@ -18,17 +18,61 @@ package org.apache.dubbo.common.config;
 
 
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Configuration from system properties
+ * FIXME: is this really necessary? PropertiesConfiguration should have 
already covered this:
+ *
+ * @See ConfigUtils#getProperty(String)
+ * @see PropertiesConfiguration
  */
 public class SystemConfiguration implements Configuration {
 
+    private final Map<String, Object> cache = new ConcurrentHashMap<>();
+
     @Override
     public Object getInternalProperty(String key) {
-        return System.getProperty(key);
+        if (cache.containsKey(key)) {
+            return cache.get(key);
+        } else {
+            Object val = System.getProperty(key);
+            if (val != null) {
+                cache.putIfAbsent(key, val);
+            }
+            return val;
+        }
+    }
+
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        if (cache.containsKey(key)) {
+            return cache.get(key);
+        } else {
+            Object val = System.getProperty(key);
+            if (val != null) {
+                cache.putIfAbsent(key, val);
+            } else {
+                val = defaultValue;
+                if (defaultValue != null) {
+                    cache.putIfAbsent(key, defaultValue);
+                }
+            }
+            return val;
+        }
     }
 
+    public void overwriteCache(String key, Object value) {
+        if (value != null) {
+            cache.put(key, value);
+        }
+    }
+
+    public void clearCache() {
+        cache.clear();
+    }
+
+
+
     public Map<String, String> getProperties() {
         return (Map) System.getProperties();
     }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java
index afd1cac989..71a959dab7 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java
@@ -120,6 +120,11 @@ public abstract class AbstractDynamicConfiguration 
implements DynamicConfigurati
         return null;
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        return null;
+    }
+
     @Override
     public final void close() throws Exception {
         try {
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java
index 0f08705189..f834ed7ff7 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java
@@ -36,6 +36,11 @@ public class NopDynamicConfiguration implements 
DynamicConfiguration {
         return null;
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        return null;
+    }
+
     @Override
     public void addListener(String key, String group, ConfigurationListener 
listener) {
         // no-op
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java
index d9f6e3d30d..c1ee02d05e 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java
@@ -75,6 +75,11 @@ public class CompositeDynamicConfiguration implements 
DynamicConfiguration {
         return iterateConfigOperation(configuration -> 
configuration.getInternalProperty(key));
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        return iterateConfigOperation(configuration -> 
configuration.getInternalProperty(key, defaultValue));
+    }
+
     @Override
     public boolean publishConfig(String key, String group, String content) 
throws UnsupportedOperationException {
         boolean publishedAll = true;
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java
index 2b141e8a8b..15599e4cfb 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java
@@ -42,6 +42,16 @@ public class ConfigConfigurationAdapter implements 
Configuration {
         return metaData.get(key);
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        Object v = metaData.get(key);
+        if (v != null) {
+            return v;
+        } else {
+            return defaultValue;
+        }
+    }
+
     public Map<String, String> getProperties() {
         return metaData;
     }
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java
index d25f46101c..ddb1dfde58 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java
@@ -70,23 +70,23 @@ class SystemConfigurationTest {
     void testConvert() {
         Assertions.assertEquals(
             MOCK_STRING_VALUE, sysConfig.convert(String.class, NOT_EXIST_KEY, 
MOCK_STRING_VALUE));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_BOOL_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_BOOL_VALUE));
         Assertions.assertEquals(MOCK_BOOL_VALUE, 
sysConfig.convert(Boolean.class, MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_STRING_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_STRING_VALUE));
         Assertions.assertEquals(MOCK_STRING_VALUE, 
sysConfig.convert(String.class, MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_INT_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_INT_VALUE));
         Assertions.assertEquals(MOCK_INT_VALUE, 
sysConfig.convert(Integer.class, MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_LONG_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_LONG_VALUE));
         Assertions.assertEquals(MOCK_LONG_VALUE, sysConfig.convert(Long.class, 
MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_SHORT_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_SHORT_VALUE));
         Assertions.assertEquals(MOCK_SHORT_VALUE, 
sysConfig.convert(Short.class, MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_FLOAT_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_FLOAT_VALUE));
         Assertions.assertEquals(MOCK_FLOAT_VALUE, 
sysConfig.convert(Float.class, MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_DOUBLE_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_DOUBLE_VALUE));
         Assertions.assertEquals(MOCK_DOUBLE_VALUE, 
sysConfig.convert(Double.class, MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(MOCK_BYTE_VALUE));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_BYTE_VALUE));
         Assertions.assertEquals(MOCK_BYTE_VALUE, sysConfig.convert(Byte.class, 
MOCK_KEY, null));
-        System.setProperty(MOCK_KEY, String.valueOf(ConfigMock.MockOne));
+        sysConfig.overwriteCache(MOCK_KEY, String.valueOf(ConfigMock.MockOne));
         Assertions.assertEquals(ConfigMock.MockOne, 
sysConfig.convert(ConfigMock.class, MOCK_KEY, null));
     }
 
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java
index 0ffd6546c3..62a923f5ee 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java
@@ -16,9 +16,11 @@
  */
 package org.apache.dubbo.common.utils;
 
+import org.apache.dubbo.common.config.SystemConfiguration;
 import org.apache.dubbo.common.constants.CommonConstants;
 
 import javassist.compiler.Javac;
+import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -57,14 +59,16 @@ class SerializeClassCheckerTest {
             
serializeClassChecker.validateClass(int.class.getName().toUpperCase(Locale.ROOT));
         }
 
-        Assertions.assertThrows(IllegalArgumentException.class, ()-> {
+        Assertions.assertThrows(IllegalArgumentException.class, () -> {
             serializeClassChecker.validateClass(Socket.class.getName());
         });
     }
 
     @Test
     void testAddAllow() {
-        System.setProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, 
Socket.class.getName() + "," + Javac.class.getName());
+        SystemConfiguration systemConfiguration = 
ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration();
+
+        
systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST,
 Socket.class.getName() + "," + Javac.class.getName());
 
         SerializeClassChecker serializeClassChecker = 
SerializeClassChecker.getInstance();
         for (int i = 0; i < 10; i++) {
@@ -72,40 +76,44 @@ class SerializeClassCheckerTest {
             serializeClassChecker.validateClass(Javac.class.getName());
         }
 
-        System.clearProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST);
+        systemConfiguration.clearCache();
+
     }
 
     @Test
     void testAddBlock() {
-        System.setProperty(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST, 
LinkedList.class.getName() + "," + Integer.class.getName());
+        SystemConfiguration systemConfiguration = 
ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration();
+        
systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST,
 LinkedList.class.getName() + "," + Integer.class.getName());
 
         SerializeClassChecker serializeClassChecker = 
SerializeClassChecker.getInstance();
         for (int i = 0; i < 10; i++) {
-            Assertions.assertThrows(IllegalArgumentException.class, ()-> {
+            Assertions.assertThrows(IllegalArgumentException.class, () -> {
                 
serializeClassChecker.validateClass(LinkedList.class.getName());
             });
-            Assertions.assertThrows(IllegalArgumentException.class, ()-> {
+            Assertions.assertThrows(IllegalArgumentException.class, () -> {
                 serializeClassChecker.validateClass(Integer.class.getName());
             });
         }
 
-        System.clearProperty(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST);
+        systemConfiguration.clearCache();
+
     }
 
     @Test
     void testBlockAll() {
-        System.setProperty(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL, 
"true");
-        System.setProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, 
LinkedList.class.getName());
+        SystemConfiguration systemConfiguration = 
ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration();
+
+        
systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL, 
"true");
+        
systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST,
 LinkedList.class.getName());
 
         SerializeClassChecker serializeClassChecker = 
SerializeClassChecker.getInstance();
         for (int i = 0; i < 10; i++) {
             serializeClassChecker.validateClass(LinkedList.class.getName());
-            Assertions.assertThrows(IllegalArgumentException.class, ()-> {
+            Assertions.assertThrows(IllegalArgumentException.class, () -> {
                 serializeClassChecker.validateClass(Integer.class.getName());
             });
         }
 
-        System.clearProperty(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL);
-        System.clearProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST);
+        systemConfiguration.clearCache();
     }
 }
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
index 994fbe5c99..4ddcb4450f 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
@@ -122,7 +122,6 @@ class MultiInstanceTest {
     @AfterEach
     public void afterEach() {
         SysProps.clear();
-        DubboBootstrap.reset();
     }
 
     @Test
@@ -154,12 +153,12 @@ class MultiInstanceTest {
 
     @Test
     void testDefaultProviderApplication() {
+        DubboBootstrap.reset();
         DubboBootstrap dubboBootstrap = DubboBootstrap.getInstance();
         try {
             configProviderApp(dubboBootstrap).start();
         } finally {
             dubboBootstrap.destroy();
-            DubboBootstrap.reset();
         }
     }
 
@@ -174,13 +173,12 @@ class MultiInstanceTest {
             Assertions.assertTrue(e.toString().contains("No provider 
available"), StringUtils.toString(e));
         } finally {
             dubboBootstrap.destroy();
-            DubboBootstrap.reset();
-            SysProps.clear();
         }
     }
 
     @Test
     void testDefaultMixedApplication() {
+        DubboBootstrap.reset();
         DubboBootstrap dubboBootstrap = DubboBootstrap.getInstance();
         try {
             dubboBootstrap.application("mixed-app");
@@ -191,7 +189,6 @@ class MultiInstanceTest {
             testConsumer(dubboBootstrap);
         } finally {
             dubboBootstrap.destroy();
-            DubboBootstrap.reset();
         }
     }
 
@@ -221,6 +218,8 @@ class MultiInstanceTest {
     void testMultiModuleApplication() throws InterruptedException {
 
         //SysProps.setProperty(METADATA_PUBLISH_DELAY_KEY, "100");
+
+        FrameworkModel frameworkModel = new FrameworkModel();
         String version1 = "1.0";
         String version2 = "2.0";
         String version3 = "3.0";
@@ -230,7 +229,7 @@ class MultiInstanceTest {
 
         try {
             // provider app
-            providerBootstrap = DubboBootstrap.newInstance();
+            providerBootstrap = DubboBootstrap.newInstance(frameworkModel);
 
             ServiceConfig serviceConfig1 = new ServiceConfig();
             serviceConfig1.setInterface(DemoService.class);
@@ -274,7 +273,7 @@ class MultiInstanceTest {
             //Thread.sleep(200);
 
             // consumer app
-            consumerBootstrap = DubboBootstrap.newInstance();
+            consumerBootstrap = DubboBootstrap.newInstance(frameworkModel);
             consumerBootstrap.application("consumer-app")
                 .registry(registryConfig)
                 .reference(builder -> builder
@@ -308,10 +307,12 @@ class MultiInstanceTest {
 
     @Test
     void testMultiProviderApplicationsStopOneByOne() {
+        DubboBootstrap.reset();
 
         String version1 = "1.0";
         String version2 = "2.0";
 
+        FrameworkModel frameworkModel = new FrameworkModel();
         DubboBootstrap providerBootstrap1 = null;
         DubboBootstrap providerBootstrap2 = null;
 
@@ -328,7 +329,7 @@ class MultiInstanceTest {
 
             ProtocolConfig protocolConfig1 = new ProtocolConfig("dubbo", 
NetUtils.getAvailablePort());
 
-            providerBootstrap1 = DubboBootstrap.getInstance();
+            providerBootstrap1 = DubboBootstrap.newInstance(frameworkModel);
             providerBootstrap1.application("provider1")
                 .registry(registryConfig)
                 .service(serviceConfig1)
@@ -351,7 +352,7 @@ class MultiInstanceTest {
 
             ProtocolConfig protocolConfig2 = new ProtocolConfig("dubbo", 
NetUtils.getAvailablePort());
 
-            providerBootstrap2 = DubboBootstrap.newInstance();
+            providerBootstrap2 = DubboBootstrap.newInstance(frameworkModel);
             providerBootstrap2.application("provider2")
                 .registry(registryConfig2)
                 .service(serviceConfig2)
@@ -430,6 +431,7 @@ class MultiInstanceTest {
         String version2 = "2.0";
         String version3 = "3.0";
 
+        FrameworkModel frameworkModel = new FrameworkModel();
         String serviceKey1 = DemoService.class.getName() + ":" + version1;
         String serviceKey2 = DemoService.class.getName() + ":" + version2;
         String serviceKey3 = DemoService.class.getName() + ":" + version3;
@@ -439,7 +441,7 @@ class MultiInstanceTest {
 
         try {
             // provider app
-            providerBootstrap = DubboBootstrap.newInstance();
+            providerBootstrap = DubboBootstrap.newInstance(frameworkModel);
 
             ServiceConfig serviceConfig1 = new ServiceConfig();
             serviceConfig1.setInterface(DemoService.class);
@@ -477,7 +479,7 @@ class MultiInstanceTest {
             
Assertions.assertNull(frameworkServiceRepository.lookupExportedServiceWithoutGroup(serviceKey3));
 
             // consumer module 1
-            consumerBootstrap = DubboBootstrap.newInstance();
+            consumerBootstrap = DubboBootstrap.newInstance(frameworkModel);
             consumerBootstrap.application("consumer-app")
                 .registry(registryConfig)
                 .reference(builder -> builder
@@ -572,6 +574,7 @@ class MultiInstanceTest {
         String version2 = "2.0";
         String version3 = "3.0";
 
+        FrameworkModel frameworkModel = new FrameworkModel();
         String serviceKey1 = DemoService.class.getName() + ":" + version1;
         String serviceKey2 = DemoService.class.getName() + ":" + version2;
         String serviceKey3 = DemoService.class.getName() + ":" + version3;
@@ -579,7 +582,7 @@ class MultiInstanceTest {
         // provider app
         DubboBootstrap providerBootstrap = null;
         try {
-            providerBootstrap = DubboBootstrap.newInstance();
+            providerBootstrap = DubboBootstrap.newInstance(frameworkModel);
 
             ServiceConfig serviceConfig1 = new ServiceConfig();
             serviceConfig1.setInterface(DemoService.class);
@@ -652,6 +655,7 @@ class MultiInstanceTest {
         String version2 = "2.0";
         String version3 = "3.0";
 
+        FrameworkModel frameworkModel = new FrameworkModel();
         String serviceKey1 = DemoService.class.getName() + ":" + version1;
         String serviceKey2 = DemoService.class.getName() + ":" + version2;
         String serviceKey3 = DemoService.class.getName() + ":" + version3;
@@ -659,7 +663,7 @@ class MultiInstanceTest {
         // provider app
         DubboBootstrap providerBootstrap = null;
         try {
-            providerBootstrap = DubboBootstrap.newInstance();
+            providerBootstrap = DubboBootstrap.newInstance(frameworkModel);
 
             ServiceConfig serviceConfig1 = new ServiceConfig();
             serviceConfig1.setInterface(DemoService.class);
@@ -706,6 +710,7 @@ class MultiInstanceTest {
     @Test
     void testOldApiDeploy() throws Exception {
 
+        DubboBootstrap.reset();
         try {
             // provider app
             ApplicationModel providerApplicationModel = 
ApplicationModel.defaultModel();
@@ -781,8 +786,10 @@ class MultiInstanceTest {
 
     @Test
     void testAsyncExportAndReferServices() throws ExecutionException, 
InterruptedException {
-        DubboBootstrap providerBootstrap = DubboBootstrap.newInstance();
-        DubboBootstrap consumerBootstrap = DubboBootstrap.newInstance();
+        FrameworkModel frameworkModel = new FrameworkModel();
+
+        DubboBootstrap providerBootstrap = 
DubboBootstrap.newInstance(frameworkModel);
+        DubboBootstrap consumerBootstrap = 
DubboBootstrap.newInstance(frameworkModel);
         try {
 
             ServiceConfig serviceConfig = new ServiceConfig();
diff --git 
a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
 
b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
index 5d78b94671..a6e503debe 100644
--- 
a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
+++ 
b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
@@ -215,6 +215,16 @@ public class ApolloDynamicConfiguration implements 
DynamicConfiguration {
         return dubboConfig.getProperty(key, null);
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        Object v = dubboConfig.getProperty(key, null);
+        if (v != null) {
+            return v;
+        } else {
+            return defaultValue;
+        }
+    }
+
     /**
      * Ignores the group parameter.
      *
diff --git 
a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
 
b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
index 2f43c85f27..bc95620220 100644
--- 
a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
+++ 
b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
@@ -220,6 +220,17 @@ public class NacosDynamicConfiguration implements 
DynamicConfiguration {
         return null;
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        Object v = defaultValue;
+        try {
+            v = configService.getConfig(key, DEFAULT_GROUP, 
getDefaultTimeout());
+        } catch (NacosException e) {
+            logger.error(e.getMessage());
+        }
+        return v;
+    }
+
     @Override
     public boolean publishConfig(String key, String group, String content) {
         boolean published = false;
diff --git 
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
 
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
index 4836ed1b2f..4836012aa1 100644
--- 
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
+++ 
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
@@ -85,6 +85,16 @@ public class ZookeeperDynamicConfiguration extends 
TreePathDynamicConfiguration
         return zkClient.getContent(buildPathKey("", key));
     }
 
+    @Override
+    public Object getInternalProperty(String key, Object defaultValue) {
+        Object v = zkClient.getContent(buildPathKey("", key));
+        if (v != null) {
+            return v;
+        } else {
+            return defaultValue;
+        }
+    }
+
     @Override
     protected void doClose() throws Exception {
         // remove data listener
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java
index 4814ce0acc..2e7dfd9d17 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.threadpool.ThreadlessExecutor;
+import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ConsumerMethodModel;
 import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;
 
@@ -66,11 +67,6 @@ public class AsyncRpcResult implements Result {
 
     private CompletableFuture<AppResponse> responseFuture;
 
-    /**
-     * Whether set future to Thread Local when invocation mode is sync
-     */
-    private static final boolean setFutureWhenSync = 
Boolean.parseBoolean(System.getProperty(CommonConstants.SET_FUTURE_IN_SYNC_MODE,
 "true"));
-
     public AsyncRpcResult(CompletableFuture<AppResponse> future, Invocation 
invocation) {
         this.responseFuture = future;
         this.invocation = invocation;
@@ -216,7 +212,11 @@ public class AsyncRpcResult implements Result {
             fn.accept(v, t);
         });
 
-        if (setFutureWhenSync || ((RpcInvocation) invocation).getInvokeMode() 
!= InvokeMode.SYNC) {
+        // Whether set future to Thread Local when invocation mode is sync
+        String setFutureWhenSync = 
ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration()
+            .getString(CommonConstants.SET_FUTURE_IN_SYNC_MODE, "true");
+
+        if (Boolean.parseBoolean(setFutureWhenSync) || ((RpcInvocation) 
invocation).getInvokeMode() != InvokeMode.SYNC) {
             // Necessary! update future in context, see 
https://github.com/apache/dubbo/issues/9461
             RpcContext.getServiceContext().setFuture(new 
FutureAdapter<>(this.responseFuture));
         }
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
index 3433fb4dc6..f9243c76df 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java
@@ -81,7 +81,7 @@ public class AccessLogFilter implements Filter {
 
     private AtomicBoolean scheduled = new AtomicBoolean();
 
-    private static final String LINE_SEPARATOR = "line.separator";
+    private final String LINE_SEPARATOR =  
System.getProperty("line.separator");
 
     /**
      * Default constructor initialize demon thread for writing into access log 
file with names with access log key
@@ -173,7 +173,7 @@ public class AccessLogFilter implements Filter {
         try {
             while (!logQueue.isEmpty()) {
                 writer.write(logQueue.poll().getLogMessage());
-                writer.write(System.getProperty(LINE_SEPARATOR));
+                writer.write(LINE_SEPARATOR);
             }
         } finally {
             writer.flush();
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java
index ee04a1ded8..e8e5d28056 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java
@@ -39,6 +39,7 @@ import org.apache.dubbo.rpc.Result;
 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.protocol.dubbo.FutureAdapter;
 import org.apache.dubbo.rpc.support.RpcUtils;
 
@@ -87,11 +88,6 @@ public abstract class AbstractInvoker<T> implements 
Invoker<T> {
      */
     private boolean destroyed = false;
 
-    /**
-     * Whether set future to Thread Local when invocation mode is sync
-     */
-    private static final boolean setFutureWhenSync = 
Boolean.parseBoolean(System.getProperty(CommonConstants.SET_FUTURE_IN_SYNC_MODE,
 "true"));
-
     // -- Constructor
 
     public AbstractInvoker(Class<T> type, URL url) {
@@ -242,7 +238,11 @@ public abstract class AbstractInvoker<T> implements 
Invoker<T> {
             asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, 
invocation);
         }
 
-        if (setFutureWhenSync || invocation.getInvokeMode() != 
InvokeMode.SYNC) {
+        // Whether set future to Thread Local when invocation mode is sync
+        String setFutureWhenSync = 
ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration()
+            .getString(CommonConstants.SET_FUTURE_IN_SYNC_MODE, "true");
+
+        if (Boolean.parseBoolean(setFutureWhenSync) || 
invocation.getInvokeMode() != InvokeMode.SYNC) {
             // set server context
             RpcContext.getServiceContext().setFuture(new 
FutureAdapter<>(asyncResult.getResponseFuture()));
         }
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 c24bd27817..af997afe7d 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,6 +17,7 @@
 package org.apache.dubbo.rpc.protocol.dubbo;
 
 
+import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.serialize.Cleanable;
@@ -37,6 +38,7 @@ import org.apache.dubbo.rpc.model.FrameworkServiceRepository;
 import org.apache.dubbo.rpc.model.MethodDescriptor;
 import org.apache.dubbo.rpc.model.ModuleModel;
 import org.apache.dubbo.rpc.model.ProviderModel;
+import org.apache.dubbo.rpc.model.ScopeModel;
 import org.apache.dubbo.rpc.model.ServiceDescriptor;
 import org.apache.dubbo.rpc.support.RpcUtils;
 
@@ -134,7 +136,17 @@ public class DecodeableRpcInvocation extends RpcInvocation 
implements Codec, Dec
 
         ClassLoader originClassLoader = 
Thread.currentThread().getContextClassLoader();
         try {
-            if 
(Boolean.parseBoolean(System.getProperty(SERIALIZATION_SECURITY_CHECK_KEY, 
"true"))) {
+            ScopeModel scopeModel = channel.getUrl().getScopeModel();
+            if (scopeModel instanceof ModuleModel) {
+                scopeModel = scopeModel.getParent();
+            } else {
+                scopeModel = ApplicationModel.defaultModel();
+            }
+            String serializationSecurityCheck = 
ConfigurationUtils.getSystemConfiguration(
+                scopeModel).getString(SERIALIZATION_SECURITY_CHECK_KEY, 
"true");
+
+
+            if (Boolean.parseBoolean(serializationSecurityCheck)) {
                 
CodecSupport.checkSerialization(frameworkModel.getServiceRepository(), path, 
version, serializationType);
             }
             Object[] args = DubboCodec.EMPTY_OBJECT_ARRAY;
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java
index f6f08ab3ec..254b99c4ee 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java
@@ -16,6 +16,9 @@
  */
 package org.apache.dubbo.rpc.protocol.dubbo.decode;
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.embedded.EmbeddedChannel;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.url.component.ServiceConfigURL;
@@ -38,10 +41,6 @@ import org.apache.dubbo.rpc.model.ModuleServiceRepository;
 import org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation;
 import org.apache.dubbo.rpc.protocol.dubbo.DubboCodec;
 import org.apache.dubbo.rpc.protocol.dubbo.support.DemoService;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
-import io.netty.channel.embedded.EmbeddedChannel;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
@@ -78,13 +77,13 @@ class DubboTelnetDecodeTest {
 
         // disable 
org.apache.dubbo.remoting.transport.CodecSupport.checkSerialization to avoid 
error:
         // java.io.IOException: Service 
org.apache.dubbo.rpc.protocol.dubbo.support.DemoService with version 0.0.0 not 
found, invocation rejected.
-        System.setProperty(SERIALIZATION_SECURITY_CHECK_KEY, "false");
+        
ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration().overwriteCache(SERIALIZATION_SECURITY_CHECK_KEY,
 "false");
     }
 
     @AfterAll
     public static void teardown() {
         FrameworkModel.defaultModel().destroy();
-        System.clearProperty(SERIALIZATION_SECURITY_CHECK_KEY);
+        
ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration().clearCache();
 
     }
 
@@ -101,25 +100,26 @@ class DubboTelnetDecodeTest {
         try {
             Codec2 codec = 
ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
             URL url = new ServiceConfigURL("dubbo", "localhost", 22226);
+            url = 
url.setScopeModel(ApplicationModel.defaultModel().newModule());
             NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new 
MockChannelHandler());
 
             MockHandler mockHandler = new MockHandler(null,
-                    new MultiMessageHandler(
-                            new DecodeHandler(
-                                    new HeaderExchangeHandler(new 
ExchangeHandlerAdapter() {
-                                        @Override
-                                        public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
-                                            if (checkDubboDecoded(msg)) {
-                                                dubbo.incrementAndGet();
-                                            }
-                                            return getDefaultFuture();
-                                        }
-                                    }))));
+                new MultiMessageHandler(
+                    new DecodeHandler(
+                        new HeaderExchangeHandler(new ExchangeHandlerAdapter() 
{
+                            @Override
+                            public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
+                                if (checkDubboDecoded(msg)) {
+                                    dubbo.incrementAndGet();
+                                }
+                                return getDefaultFuture();
+                            }
+                        }))));
 
             ch = new LocalEmbeddedChannel();
             ch.pipeline()
-                    .addLast("decoder", adapter.getDecoder())
-                    .addLast("handler", mockHandler);
+                .addLast("decoder", adapter.getDecoder())
+                .addLast("handler", mockHandler);
 
             ch.writeInbound(dubboByteBuf);
         } catch (Exception e) {
@@ -148,6 +148,7 @@ class DubboTelnetDecodeTest {
         try {
             Codec2 codec = 
ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
             URL url = new ServiceConfigURL("dubbo", "localhost", 22226);
+            url = 
url.setScopeModel(ApplicationModel.defaultModel().newModule());
             NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new 
MockChannelHandler());
 
             MockHandler mockHandler = new MockHandler((msg) -> {
@@ -155,19 +156,19 @@ class DubboTelnetDecodeTest {
                     telnet.incrementAndGet();
                 }
             },
-                    new MultiMessageHandler(
-                            new DecodeHandler(
-                                    new HeaderExchangeHandler(new 
ExchangeHandlerAdapter() {
-                                        @Override
-                                        public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
-                                            return getDefaultFuture();
-                                        }
-                                    }))));
+                new MultiMessageHandler(
+                    new DecodeHandler(
+                        new HeaderExchangeHandler(new ExchangeHandlerAdapter() 
{
+                            @Override
+                            public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
+                                return getDefaultFuture();
+                            }
+                        }))));
 
             ch = new LocalEmbeddedChannel();
             ch.pipeline()
-                    .addLast("decoder", adapter.getDecoder())
-                    .addLast("handler", mockHandler);
+                .addLast("decoder", adapter.getDecoder())
+                .addLast("handler", mockHandler);
 
             ch.writeInbound(telnetByteBuf);
         } catch (Exception e) {
@@ -192,13 +193,13 @@ class DubboTelnetDecodeTest {
      * |               telnet(incomplete)                 |
      * +--------------------------------------------------+
      * <p>
-     *
+     * <p>
      * Second ByteBuf:
      * +--------------------------++----------------------+
      * |  telnet(the remaining)   ||   dubbo(complete)    |
      * +--------------------------++----------------------+
-     *                            ||
-     *                        Magic Code
+     * ||
+     * Magic Code
      *
      * @throws InterruptedException
      */
@@ -211,6 +212,7 @@ class DubboTelnetDecodeTest {
         try {
             Codec2 codec = 
ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
             URL url = new ServiceConfigURL("dubbo", "localhost", 22226);
+            url = 
url.setScopeModel(ApplicationModel.defaultModel().newModule());
             NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new 
MockChannelHandler());
 
             MockHandler mockHandler = new MockHandler((msg) -> {
@@ -218,23 +220,23 @@ class DubboTelnetDecodeTest {
                     telnetDubbo.incrementAndGet();
                 }
             },
-                    new MultiMessageHandler(
-                            new DecodeHandler(
-                                    new HeaderExchangeHandler(new 
ExchangeHandlerAdapter() {
-                                        @Override
-                                        public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
-                                            if (checkDubboDecoded(msg)) {
-                                                telnetDubbo.incrementAndGet();
-                                            }
-
-                                            return getDefaultFuture();
-                                        }
-                                    }))));
+                new MultiMessageHandler(
+                    new DecodeHandler(
+                        new HeaderExchangeHandler(new ExchangeHandlerAdapter() 
{
+                            @Override
+                            public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
+                                if (checkDubboDecoded(msg)) {
+                                    telnetDubbo.incrementAndGet();
+                                }
+
+                                return getDefaultFuture();
+                            }
+                        }))));
 
             ch = new LocalEmbeddedChannel();
             ch.pipeline()
-                    .addLast("decoder", adapter.getDecoder())
-                    .addLast("handler", mockHandler);
+                .addLast("decoder", adapter.getDecoder())
+                .addLast("handler", mockHandler);
 
             ch.writeInbound(telnetByteBuf);
             
ch.writeInbound(Unpooled.wrappedBuffer(Unpooled.wrappedBuffer("\n".getBytes()), 
dubboByteBuf));
@@ -265,7 +267,7 @@ class DubboTelnetDecodeTest {
      * |               telnet(incomplete)                 |
      * +--------------------------------------------------+
      * <p>
-     *
+     * <p>
      * Second ByteBuf (secondByteBuf):
      * +--------------------------------------------------+
      * |  telnet(the remaining)   |   telnet(complete)    |
@@ -283,6 +285,7 @@ class DubboTelnetDecodeTest {
         try {
             Codec2 codec = 
ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
             URL url = new ServiceConfigURL("dubbo", "localhost", 22226);
+            url = 
url.setScopeModel(ApplicationModel.defaultModel().newModule());
             NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new 
MockChannelHandler());
 
             MockHandler mockHandler = new MockHandler((msg) -> {
@@ -290,19 +293,19 @@ class DubboTelnetDecodeTest {
                     telnetTelnet.incrementAndGet();
                 }
             },
-                    new MultiMessageHandler(
-                            new DecodeHandler(
-                                    new HeaderExchangeHandler(new 
ExchangeHandlerAdapter() {
-                                        @Override
-                                        public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
-                                            return getDefaultFuture();
-                                        }
-                                    }))));
+                new MultiMessageHandler(
+                    new DecodeHandler(
+                        new HeaderExchangeHandler(new ExchangeHandlerAdapter() 
{
+                            @Override
+                            public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
+                                return getDefaultFuture();
+                            }
+                        }))));
 
             ch = new LocalEmbeddedChannel();
             ch.pipeline()
-                    .addLast("decoder", adapter.getDecoder())
-                    .addLast("handler", mockHandler);
+                .addLast("decoder", adapter.getDecoder())
+                .addLast("handler", mockHandler);
 
             ch.writeInbound(firstByteBuf);
             ch.writeInbound(secondByteBuf);
@@ -336,8 +339,8 @@ class DubboTelnetDecodeTest {
      * +-------------------------++-----------------------+
      * |  dubbo(the remaining)   ||    dubbo(complete)    |
      * +-------------------------++-----------------------+
-     *                           ||
-     *                       Magic Code
+     * ||
+     * Magic Code
      *
      * @throws InterruptedException
      */
@@ -354,25 +357,26 @@ class DubboTelnetDecodeTest {
         try {
             Codec2 codec = 
ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
             URL url = new ServiceConfigURL("dubbo", "localhost", 22226);
+            url = 
url.setScopeModel(ApplicationModel.defaultModel().newModule());
             NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new 
MockChannelHandler());
 
             MockHandler mockHandler = new MockHandler(null,
-                    new MultiMessageHandler(
-                            new DecodeHandler(
-                                    new HeaderExchangeHandler(new 
ExchangeHandlerAdapter() {
-                                        @Override
-                                        public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
-                                            if (checkDubboDecoded(msg)) {
-                                                dubboDubbo.incrementAndGet();
-                                            }
-                                            return getDefaultFuture();
-                                        }
-                                    }))));
+                new MultiMessageHandler(
+                    new DecodeHandler(
+                        new HeaderExchangeHandler(new ExchangeHandlerAdapter() 
{
+                            @Override
+                            public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
+                                if (checkDubboDecoded(msg)) {
+                                    dubboDubbo.incrementAndGet();
+                                }
+                                return getDefaultFuture();
+                            }
+                        }))));
 
             ch = new LocalEmbeddedChannel();
             ch.pipeline()
-                    .addLast("decoder", adapter.getDecoder())
-                    .addLast("handler", mockHandler);
+                .addLast("decoder", adapter.getDecoder())
+                .addLast("handler", mockHandler);
 
             ch.writeInbound(firstDubboByteBuf);
             ch.writeInbound(secondDubboByteBuf);
@@ -421,6 +425,7 @@ class DubboTelnetDecodeTest {
         try {
             Codec2 codec = 
ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
             URL url = new ServiceConfigURL("dubbo", "localhost", 22226);
+            url = 
url.setScopeModel(ApplicationModel.defaultModel().newModule());
             NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new 
MockChannelHandler());
 
             MockHandler mockHandler = new MockHandler((msg) -> {
@@ -428,22 +433,22 @@ class DubboTelnetDecodeTest {
                     dubboTelnet.incrementAndGet();
                 }
             },
-                    new MultiMessageHandler(
-                            new DecodeHandler(
-                                    new HeaderExchangeHandler(new 
ExchangeHandlerAdapter() {
-                                        @Override
-                                        public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
-                                            if (checkDubboDecoded(msg)) {
-                                                dubboTelnet.incrementAndGet();
-                                            }
-                                            return getDefaultFuture();
-                                        }
-                                    }))));
+                new MultiMessageHandler(
+                    new DecodeHandler(
+                        new HeaderExchangeHandler(new ExchangeHandlerAdapter() 
{
+                            @Override
+                            public CompletableFuture<Object> 
reply(ExchangeChannel channel, Object msg) {
+                                if (checkDubboDecoded(msg)) {
+                                    dubboTelnet.incrementAndGet();
+                                }
+                                return getDefaultFuture();
+                            }
+                        }))));
 
             ch = new LocalEmbeddedChannel();
             ch.pipeline()
-                    .addLast("decoder", adapter.getDecoder())
-                    .addLast("handler", mockHandler);
+                .addLast("decoder", adapter.getDecoder())
+                .addLast("handler", mockHandler);
 
             ch.writeInbound(firstDubboByteBuf);
             ch.writeInbound(secondByteBuf);
@@ -496,13 +501,13 @@ class DubboTelnetDecodeTest {
         if (msg instanceof DecodeableRpcInvocation) {
             DecodeableRpcInvocation invocation = (DecodeableRpcInvocation) msg;
             if ("sayHello".equals(invocation.getMethodName())
-                    && invocation.getParameterTypes().length == 1
-                    && String.class.equals(invocation.getParameterTypes()[0])
-                    && invocation.getArguments().length == 1
-                    && "dubbo".equals(invocation.getArguments()[0])
-                    && 
DemoService.class.getName().equals(invocation.getAttachment("path"))
-                    && 
DemoService.class.getName().equals(invocation.getAttachment("interface"))
-                    && "0.0.0".equals(invocation.getAttachment("version"))) {
+                && invocation.getParameterTypes().length == 1
+                && String.class.equals(invocation.getParameterTypes()[0])
+                && invocation.getArguments().length == 1
+                && "dubbo".equals(invocation.getArguments()[0])
+                && 
DemoService.class.getName().equals(invocation.getAttachment("path"))
+                && 
DemoService.class.getName().equals(invocation.getAttachment("interface"))
+                && "0.0.0".equals(invocation.getAttachment("version"))) {
                 return true;
             }
         }
diff --git 
a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java
 
b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java
index cca8697030..ce0baccd02 100644
--- 
a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java
+++ 
b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java
@@ -24,7 +24,7 @@ public class DefaultHessian2FactoryInitializer extends 
AbstractHessian2FactoryIn
     @Override
     protected SerializerFactory createSerializerFactory() {
         Hessian2SerializerFactory hessian2SerializerFactory = new 
Hessian2SerializerFactory();
-        
hessian2SerializerFactory.setAllowNonSerializable(Boolean.parseBoolean(System.getProperty("dubbo.hessian.allowNonSerializable",
 "false")));
+        
hessian2SerializerFactory.setAllowNonSerializable(Boolean.parseBoolean(ALLOW_NON_SERIALIZABLE));
         
hessian2SerializerFactory.getClassFactory().allow("org.apache.dubbo.*");
         return hessian2SerializerFactory;
     }
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 842888cf1b..2095587b4e 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
@@ -27,7 +27,9 @@ import com.alibaba.com.caucho.hessian.io.SerializerFactory;
 @SPI(value = "default", scope = ExtensionScope.FRAMEWORK)
 public interface Hessian2FactoryInitializer {
     String ALLOW = System.getProperty("dubbo.application.hessian2.allow");
+
     String DENY = System.getProperty("dubbo.application.hessian2.deny");
+
     String WHITELIST = 
System.getProperty("dubbo.application.hessian2.whitelist");
 
     String ALLOW_NON_SERIALIZABLE = 
System.getProperty("dubbo.hessian.allowNonSerializable", "false");

Reply via email to