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/incubator-servicecomb-java-chassis.git

commit 424bd022e03ba06fcbd9eb90ae8bb3a71f6ecf86
Author: heyile <[email protected]>
AuthorDate: Tue Aug 7 19:46:11 2018 +0800

    make ParseConfigUtils singleton
---
 .../config/client/ConfigCenterClient.java          |  6 ++--
 .../config/client/ParseConfigUtils.java            | 38 ++++++++++++++++------
 2 files changed, 31 insertions(+), 13 deletions(-)

diff --git 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
index e7aa18f..09d26c4 100644
--- 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
+++ 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
@@ -128,14 +128,14 @@ public class ConfigCenterClient {
       LOGGER.error("refreshMode must be 0 or 1.");
       return;
     }
-    ParseConfigUtils parseConfigUtils = new ParseConfigUtils(updateHandler);
+    ParseConfigUtils.getInstance().initWithUpdateHandler(updateHandler);
     try {
       deployConfigClient();
     } catch (InterruptedException e) {
       throw new IllegalStateException(e);
     }
     refreshMembers(memberDiscovery);
-    ConfigRefresh refreshTask = new ConfigRefresh(parseConfigUtils, 
memberDiscovery);
+    ConfigRefresh refreshTask = new 
ConfigRefresh(ParseConfigUtils.getInstance(), memberDiscovery);
     refreshTask.run(true);
     executor.scheduleWithFixedDelay(refreshTask,
         firstRefreshInterval,
@@ -364,7 +364,7 @@ public class ConfigCenterClient {
         encodeServiceName = StringUtils.deleteWhitespace(serviceName);
       }
       String path = uriConst.ITEMS + "?dimensionsInfo=" + encodeServiceName + 
"&revision="
-          + ParseConfigUtils.getCurrentVersionInfo();
+          + ParseConfigUtils.getInstance().getCurrentVersionInfo();
       clientMgr.findThreadBindClientPool().runOnContext(client -> {
         IpPort ipPort = NetUtils.parseIpPortFromURI(configcenter);
         HttpClientRequest request = client.get(ipPort.getPort(), 
ipPort.getHostOrIp(), path, rsp -> {
diff --git 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ParseConfigUtils.java
 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ParseConfigUtils.java
index 79366dc..3dd95c8 100644
--- 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ParseConfigUtils.java
+++ 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ParseConfigUtils.java
@@ -38,25 +38,39 @@ public class ParseConfigUtils {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(ParseConfigUtils.class);
 
-  private static LinkedHashMap<String, Map<String, Object>> 
multiDimensionItems = new LinkedHashMap<>();
-  //it's dangerous that makes flatItems public
-  private static final Map<String, Object> flatItems = new HashMap<>();
+  private static final ParseConfigUtils INSTANCE = new ParseConfigUtils();
 
-  private static String currentVersionInfo = "default";
+  private LinkedHashMap<String, Map<String, Object>> multiDimensionItems = new 
LinkedHashMap<>();
+
+  //it's dangerous to make flatItems public
+  private final Map<String, Object> flatItems = new HashMap<>();
+
+  private String currentVersionInfo = "default";
 
   private UpdateHandler updateHandler;
 
   private Lock configLock = new ReentrantLock();
 
+  //for compatibility with other modules and JunitTest
   public ParseConfigUtils(UpdateHandler updateHandler) {
     this.updateHandler = updateHandler;
   }
 
+  private ParseConfigUtils() {
+  }
+
+  public void initWithUpdateHandler(UpdateHandler updateHandler) {
+    if (updateHandler == null) {
+      LOGGER.error("when init ParseConfigUtils, updateHandler can not be 
null");
+    }
+    this.updateHandler = updateHandler;
+  }
+
   /*
-    as the data is returned, we can block the thread at a short time. consider 
that if the multiple verticle is deployed
-    and if we use pull mode and push mode at the same time , we must share a 
common lock with all methods which would
-    change the config setting
-   */
+      as the data is returned, we can block the thread at a short time. 
consider that if the multiple verticle is deployed
+      and if we use pull mode and push mode at the same time , we must share a 
common lock with all methods which would
+      change the config setting
+     */
   public void refreshConfigItems(Map<String, Map<String, Object>> remoteItems) 
{
     try {
       configLock.lock();
@@ -74,8 +88,12 @@ public class ParseConfigUtils {
     }
   }
 
-  public static String getCurrentVersionInfo() {
-    return currentVersionInfo;
+  public static ParseConfigUtils getInstance() {
+    return INSTANCE;
+  }
+
+  public String getCurrentVersionInfo() {
+    return this.currentVersionInfo;
   }
 
   public void refreshConfigItemsIncremental(Map<String, Object> action) {

Reply via email to