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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git

commit 97c4c7a99497cb0f655a0c1f57bd1539a8a27f01
Author: liubao <[email protected]>
AuthorDate: Thu Sep 21 17:05:24 2023 +0800

    [SCB-2008]change DynamicPropertyFactory to Environment: in edge
---
 .../servicecomb/core/executor/ExecutorManager.java | 12 ++--
 .../edge/core/CommonHttpEdgeDispatcher.java        | 16 ++++-
 .../edge/core/DefaultEdgeDispatcher.java           | 19 ++++--
 .../servicecomb/edge/core/EdgeBootListener.java    | 26 +++-----
 .../edge/core/URLMappedEdgeDispatcher.java         | 16 ++++-
 .../edge/core/TestEdgeBootListener.java            | 77 ----------------------
 .../edge/core/TestURLMappedEdgeDispatcher.java     | 11 +++-
 .../transport/rest/vertx/VertxHttpDispatcher.java  |  1 +
 8 files changed, 68 insertions(+), 110 deletions(-)

diff --git 
a/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java 
b/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java
index dd4eab35a..557ad73e1 100644
--- 
a/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java
+++ 
b/core/src/main/java/org/apache/servicecomb/core/executor/ExecutorManager.java
@@ -31,14 +31,18 @@ public class ExecutorManager {
 
   public static final String KEY_EXECUTORS_DEFAULT = 
"servicecomb.executors.default";
 
-  public static final String EXECUTOR_GROUP_THREADPOOL = 
"servicecomb.executor.groupThreadPool";
+  public static final String EXECUTOR_GROUP_THREAD_POOL = 
"servicecomb.executor.groupThreadPool";
 
   public static final String EXECUTOR_REACTIVE = 
"servicecomb.executor.reactive";
 
-  public static final String EXECUTOR_DEFAULT = EXECUTOR_GROUP_THREADPOOL;
-
   private final Map<String, Executor> executors = new ConcurrentHashMapEx<>();
 
+  static String EXECUTOR_DEFAULT = EXECUTOR_GROUP_THREAD_POOL;
+
+  public static void setExecutorDefault(String executorDefault) {
+    EXECUTOR_DEFAULT = executorDefault;
+  }
+
   private Environment environment;
 
   public ExecutorManager() {
@@ -108,7 +112,7 @@ public class ExecutorManager {
   }
 
   protected Executor findByKey(String configKey) {
-    String id = environment.getProperty(configKey, String.class);
+    String id = environment.getProperty(configKey);
     if (id == null) {
       return null;
     }
diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java
index 2f2d0c021..f131caf28 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/CommonHttpEdgeDispatcher.java
@@ -38,6 +38,8 @@ import 
org.apache.servicecomb.transport.rest.client.Http2TransportHttpClientOpti
 import 
org.apache.servicecomb.transport.rest.client.HttpTransportHttpClientOptionsSPI;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 
 import com.netflix.config.ConcurrentCompositeConfiguration;
 import com.netflix.config.DynamicPropertyFactory;
@@ -74,12 +76,20 @@ public class CommonHttpEdgeDispatcher extends 
AbstractEdgeDispatcher {
 
   private Map<String, URLMappedConfigurationItem> configurations = new 
HashMap<>();
 
+  private Environment environment;
+
   public CommonHttpEdgeDispatcher() {
     if (this.enabled()) {
       loadConfigurations();
     }
   }
 
+  // though this is an SPI, but add as beans.
+  @Autowired
+  public void setEnvironment(Environment environment) {
+    this.environment = environment;
+  }
+
   // Maybe future change to beans
   protected DiscoveryTree getDiscoveryTree() {
     return BeanUtils.getBean(DiscoveryTree.class);
@@ -97,17 +107,17 @@ public class CommonHttpEdgeDispatcher extends 
AbstractEdgeDispatcher {
 
   @Override
   public int getOrder() {
-    return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, 
40_000).get();
+    return environment.getProperty(KEY_ORDER, int.class, 40_000);
   }
 
   @Override
   public boolean enabled() {
-    return 
DynamicPropertyFactory.getInstance().getBooleanProperty(KEY_ENABLED, 
false).get();
+    return environment.getProperty(KEY_ENABLED, boolean.class, false);
   }
 
   @Override
   public void init(Router router) {
-    String pattern = 
DynamicPropertyFactory.getInstance().getStringProperty(KEY_PATTERN, 
PATTERN_ANY).get();
+    String pattern = environment.getProperty(KEY_PATTERN, PATTERN_ANY);
     
router.routeWithRegex(pattern).failureHandler(this::onFailure).handler(this::onRequest);
   }
 
diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java
index b82bd8e6b..9b1333ce9 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/DefaultEdgeDispatcher.java
@@ -23,9 +23,10 @@ import 
org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import 
org.apache.servicecomb.foundation.vertx.http.VertxServerRequestToHttpServletRequest;
 import 
org.apache.servicecomb.foundation.vertx.http.VertxServerResponseToHttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.netflix.config.DynamicPropertyFactory;
 
 import io.vertx.codegen.annotations.Nullable;
 import io.vertx.ext.web.Router;
@@ -48,20 +49,28 @@ public class DefaultEdgeDispatcher extends 
AbstractEdgeDispatcher {
 
   private int prefixSegmentCount;
 
+  private Environment environment;
+
+  // though this is an SPI, but add as beans.
+  @Autowired
+  public void setEnvironment(Environment environment) {
+    this.environment = environment;
+  }
+
   @Override
   public int getOrder() {
-    return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, 
20_000).get();
+    return environment.getProperty(KEY_ORDER, int.class, 20_000);
   }
 
   @Override
   public boolean enabled() {
-    return 
DynamicPropertyFactory.getInstance().getBooleanProperty(KEY_ENABLED, 
false).get();
+    return environment.getProperty(KEY_ENABLED, boolean.class, false);
   }
 
   @Override
   public void init(Router router) {
-    String prefix = 
DynamicPropertyFactory.getInstance().getStringProperty(KEY_PREFIX, "api").get();
-    prefixSegmentCount = 
DynamicPropertyFactory.getInstance().getIntProperty(KEY_PREFIX_SEGMENT_COUNT, 
1).get();
+    String prefix = environment.getProperty(KEY_PREFIX, "api");
+    prefixSegmentCount = environment.getProperty(KEY_PREFIX_SEGMENT_COUNT, 
int.class, 1);
     String regex = generateRouteRegex(prefix, false);
 
     // cookies handler are enabled by default start from 3.8.3
diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
index 0d832ec3f..538c83b8b 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
@@ -17,18 +17,24 @@
 
 package org.apache.servicecomb.edge.core;
 
-import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.core.BootListener;
 import org.apache.servicecomb.core.executor.ExecutorManager;
 import org.apache.servicecomb.transport.rest.vertx.TransportConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import com.netflix.config.DynamicPropertyFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 
 public class EdgeBootListener implements BootListener {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(EdgeBootListener.class);
 
+  private Environment environment;
+
+  @Autowired
+  public void setEnvironment(Environment environment) {
+    this.environment = environment;
+  }
+
   @Override
   public void onBootEvent(BootEvent event) {
     if (!EventType.BEFORE_PRODUCER_PROVIDER.equals(event.getEventType())) {
@@ -36,18 +42,6 @@ public class EdgeBootListener implements BootListener {
     }
 
     TransportConfig.setRestServerVerticle(EdgeRestServerVerticle.class);
-
-    String defaultExecutor = DynamicPropertyFactory.getInstance()
-        .getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, null)
-        .get();
-    if (defaultExecutor != null) {
-      LOGGER.info("Edge service default executor is {}.", defaultExecutor);
-      return;
-    }
-
-    // change default to reactive mode
-    Configuration configuration = (Configuration) 
DynamicPropertyFactory.getBackingConfigurationSource();
-    configuration.setProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, 
ExecutorManager.EXECUTOR_REACTIVE);
-    LOGGER.info("Set ReactiveExecutor to be edge service default executor.");
+    ExecutorManager.setExecutorDefault(ExecutorManager.EXECUTOR_REACTIVE);
   }
 }
diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java
index 9cd8ac67e..868e12e09 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java
@@ -29,6 +29,8 @@ import 
org.apache.servicecomb.foundation.vertx.http.VertxServerResponseToHttpSer
 import org.apache.servicecomb.transport.rest.vertx.RestBodyHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.netflix.config.ConcurrentCompositeConfiguration;
@@ -58,7 +60,15 @@ public class URLMappedEdgeDispatcher extends 
AbstractEdgeDispatcher {
 
   private Map<String, URLMappedConfigurationItem> configurations = new 
HashMap<>();
 
+  private Environment environment;
+
   public URLMappedEdgeDispatcher() {
+  }
+
+  // though this is an SPI, but add as beans.
+  @Autowired
+  public void setEnvironment(Environment environment) {
+    this.environment = environment;
     if (this.enabled()) {
       loadConfigurations();
     }
@@ -71,18 +81,18 @@ public class URLMappedEdgeDispatcher extends 
AbstractEdgeDispatcher {
 
   @Override
   public int getOrder() {
-    return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, 
30_000).get();
+    return environment.getProperty(KEY_ORDER, int.class, 30_000);
   }
 
   @Override
   public boolean enabled() {
-    return 
DynamicPropertyFactory.getInstance().getBooleanProperty(KEY_ENABLED, 
false).get();
+    return environment.getProperty(KEY_ENABLED, boolean.class, false);
   }
 
   @Override
   public void init(Router router) {
     // cookies handler are enabled by default start from 3.8.3
-    String pattern = 
DynamicPropertyFactory.getInstance().getStringProperty(KEY_PATTERN, 
PATTERN_ANY).get();
+    String pattern = environment.getProperty(KEY_PATTERN, PATTERN_ANY);
     router.routeWithRegex(pattern).failureHandler(this::onFailure)
         .handler((PlatformHandler) URLMappedEdgeDispatcher.this::preCheck)
         .handler(createBodyHandler())
diff --git 
a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestEdgeBootListener.java
 
b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestEdgeBootListener.java
deleted file mode 100644
index b9341c600..000000000
--- 
a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestEdgeBootListener.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.edge.core;
-
-import org.apache.servicecomb.core.BootListener.BootEvent;
-import org.apache.servicecomb.core.BootListener.EventType;
-import org.apache.servicecomb.core.executor.ExecutorManager;
-import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
-
-import com.netflix.config.DynamicPropertyFactory;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-public class TestEdgeBootListener {
-  EdgeBootListener listener = new EdgeBootListener();
-
-  BootEvent bootEvent = new BootEvent();
-
-  @BeforeEach
-  public void setup() {
-    ArchaiusUtils.resetConfig();
-  }
-
-  @AfterEach
-  public void teardown() {
-    ArchaiusUtils.resetConfig();
-    System.clearProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT);
-  }
-
-  @Test
-  public void onBootEvent_ignore() {
-    System.setProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, 
ExecutorManager.EXECUTOR_DEFAULT);
-
-    bootEvent.setEventType(EventType.AFTER_CONSUMER_PROVIDER);
-    listener.onBootEvent(bootEvent);
-
-    Assertions.assertEquals(ExecutorManager.EXECUTOR_DEFAULT,
-        
DynamicPropertyFactory.getInstance().getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT,
 null).get());
-  }
-
-  @Test
-  public void onBootEvent_accept_notChange() {
-    System.setProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT, 
ExecutorManager.EXECUTOR_DEFAULT);
-
-    bootEvent.setEventType(EventType.BEFORE_PRODUCER_PROVIDER);
-    listener.onBootEvent(bootEvent);
-
-    Assertions.assertEquals(ExecutorManager.EXECUTOR_DEFAULT,
-        
DynamicPropertyFactory.getInstance().getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT,
 null).get());
-  }
-
-  @Test
-  public void onBootEvent_change() {
-    bootEvent.setEventType(EventType.BEFORE_PRODUCER_PROVIDER);
-    listener.onBootEvent(bootEvent);
-
-    Assertions.assertEquals(ExecutorManager.EXECUTOR_REACTIVE,
-        
DynamicPropertyFactory.getInstance().getStringProperty(ExecutorManager.KEY_EXECUTORS_DEFAULT,
 null).get());
-  }
-}
diff --git 
a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java
 
b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java
index db0064c2a..805374bd9 100644
--- 
a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java
+++ 
b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java
@@ -26,12 +26,18 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
+import org.springframework.core.env.Environment;
+
+import com.netflix.config.DynamicPropertyFactory;
 
 import io.vertx.ext.web.RoutingContext;
 
 public class TestURLMappedEdgeDispatcher {
+  Environment environment = Mockito.mock(Environment.class);
+
   @BeforeEach
   public void setUp() throws Exception {
+    DynamicPropertyFactory.getInstance();
   }
 
   @AfterEach
@@ -41,9 +47,10 @@ public class TestURLMappedEdgeDispatcher {
 
   @Test
   public void testConfigurations() {
-    ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.enabled", 
true);
-
+    
Mockito.when(environment.getProperty("servicecomb.http.dispatcher.edge.url.enabled",
 boolean.class, false))
+        .thenReturn(true);
     URLMappedEdgeDispatcher dispatcher = new URLMappedEdgeDispatcher();
+    dispatcher.setEnvironment(environment);
     Map<String, URLMappedConfigurationItem> items = 
dispatcher.getConfigurations();
     Assertions.assertEquals(items.size(), 0);
 
diff --git 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java
 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java
index cb96d8c22..373d63094 100644
--- 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java
+++ 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxHttpDispatcher.java
@@ -22,6 +22,7 @@ import 
org.apache.servicecomb.foundation.common.utils.SPIOrder;
 
 import io.vertx.ext.web.Router;
 
+// TODO: use spring beans.
 public interface VertxHttpDispatcher extends SPIOrder, SPIEnabled {
   @Override
   default boolean enabled() {

Reply via email to