You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/06/17 13:34:33 UTC

[shardingsphere-ui] branch api-refactor created (now c1bf0ba)

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

menghaoran pushed a change to branch api-refactor
in repository https://gitbox.apache.org/repos/asf/shardingsphere-ui.git.


      at c1bf0ba  Refactor referenced API

This branch includes the following new commits:

     new c1bf0ba  Refactor referenced API

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[shardingsphere-ui] 01/01: Refactor referenced API

Posted by me...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

menghaoran pushed a commit to branch api-refactor
in repository https://gitbox.apache.org/repos/asf/shardingsphere-ui.git

commit c1bf0bafa9b2e98ae7e4917d1d791125f3a78be7
Author: menghaoranss <me...@gmail.com>
AuthorDate: Thu Jun 17 18:04:57 2021 +0800

    Refactor referenced API
---
 pom.xml                                            | 22 ++++++-
 shardingsphere-ui-backend/pom.xml                  | 18 +++++-
 .../ui/servcie/RegistryCenterService.java          | 12 +---
 .../ui/servcie/impl/GovernanceServiceImpl.java     | 71 +++++++++++++---------
 .../impl/ProxyAuthenticationServiceImpl.java       | 14 +++--
 .../ui/servcie/impl/RegistryCenterServiceImpl.java | 14 +----
 .../impl/ShardingPropertiesServiceImpl.java        |  9 +--
 .../ui/servcie/impl/ShardingSchemaServiceImpl.java | 50 +++++++--------
 .../ui/util/CenterRepositoryFactory.java           | 23 ++++---
 shardingsphere-ui-distribution/pom.xml             |  2 +-
 .../shardingsphere-ui-bin-distribution/pom.xml     |  2 +-
 .../shardingsphere-ui-src-distribution/pom.xml     |  2 +-
 shardingsphere-ui-frontend/pom.xml                 |  2 +-
 13 files changed, 136 insertions(+), 105 deletions(-)

diff --git a/pom.xml b/pom.xml
index eacaddc..67b066c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
     </parent>
     <groupId>org.apache.shardingsphere</groupId>
     <artifactId>shardingsphere-ui</artifactId>
-    <version>5.0.0-beta-SNAPSHOT</version>
+    <version>5.0.0-RC1-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>${project.artifactId}</name>
     
@@ -83,6 +83,26 @@
                 <artifactId>shardingsphere-governance-repository-etcd</artifactId>
                 <version>${shardingsphere.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.shardingsphere</groupId>
+                <artifactId>shardingsphere-readwrite-splitting-core</artifactId>
+                <version>${shardingsphere.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.shardingsphere</groupId>
+                <artifactId>shardingsphere-encrypt-core</artifactId>
+                <version>${shardingsphere.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.shardingsphere</groupId>
+                <artifactId>shardingsphere-db-discovery-core</artifactId>
+                <version>${shardingsphere.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.shardingsphere</groupId>
+                <artifactId>shardingsphere-shadow-core</artifactId>
+                <version>${shardingsphere.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
     
diff --git a/shardingsphere-ui-backend/pom.xml b/shardingsphere-ui-backend/pom.xml
index 6436ba4..4639c38 100644
--- a/shardingsphere-ui-backend/pom.xml
+++ b/shardingsphere-ui-backend/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
         <artifactId>shardingsphere-ui</artifactId>
-        <version>5.0.0-beta-SNAPSHOT</version>
+        <version>5.0.0-RC1-SNAPSHOT</version>
     </parent>
     <artifactId>shardingsphere-ui-backend</artifactId>
     <name>${project.artifactId}</name>
@@ -47,6 +47,22 @@
         </dependency>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-readwrite-splitting-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-encrypt-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-db-discovery-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-shadow-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
             <artifactId>shardingsphere-governance-core</artifactId>
         </dependency>
         <dependency>
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/RegistryCenterService.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/RegistryCenterService.java
index 460e0d6..6b64207 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/RegistryCenterService.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/RegistryCenterService.java
@@ -17,8 +17,7 @@
 
 package org.apache.shardingsphere.ui.servcie;
 
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
-import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
+import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 
 /**
  * Registry center service.
@@ -30,12 +29,5 @@ public interface RegistryCenterService {
      *
      * @return registry center
      */
-    RegistryRepository getActivatedRegistryCenter();
-    
-    /**
-     * Get activated state node.
-     *
-     * @return state node
-     */
-    RegistryCenterNode getActivatedStateNode();
+    RegistryCenterRepository getActivatedRegistryCenter();
 }
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java
index 8284ca9..12d2eb9 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java
@@ -19,11 +19,15 @@ package org.apache.shardingsphere.ui.servcie.impl;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNodeStatus;
-import org.apache.shardingsphere.governance.core.yaml.config.YamlConfigurationConverter;
+import com.google.common.base.Strings;
+import org.apache.shardingsphere.governance.core.registry.state.ResourceState;
+import org.apache.shardingsphere.governance.core.registry.state.node.StatesNode;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.readwrite.splitting.api.ReadWriteSplittingRuleConfiguration;
-import org.apache.shardingsphere.readwrite.splitting.api.rule.ReadWriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
+import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
 import org.apache.shardingsphere.ui.common.dto.InstanceDTO;
 import org.apache.shardingsphere.ui.common.dto.ReadDataSourceDTO;
 import org.apache.shardingsphere.ui.servcie.GovernanceService;
@@ -57,16 +61,16 @@ public final class GovernanceServiceImpl implements GovernanceService {
         List<String> instanceIds = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(getInstancesNodeFullRootPath());
         Collection<InstanceDTO> result = new ArrayList<>(instanceIds.size());
         for (String instanceId : instanceIds) {
-            String value = registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getProxyNodePath(instanceId));
-            result.add(new InstanceDTO(instanceId, !RegistryCenterNodeStatus.DISABLED.toString().equalsIgnoreCase(value)));
+            String value = registryCenterService.getActivatedRegistryCenter().get(StatesNode.getProxyNodePath(instanceId));
+            result.add(new InstanceDTO(instanceId, !ResourceState.DISABLED.toString().equalsIgnoreCase(value)));
         }
         return result;
     }
     
     @Override
     public void updateInstanceStatus(final String instanceId, final boolean enabled) {
-        String value = enabled ? "" : RegistryCenterNodeStatus.DISABLED.toString();
-        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getProxyNodePath(instanceId), value);
+        String value = enabled ? "" : ResourceState.DISABLED.toString();
+        registryCenterService.getActivatedRegistryCenter().persist(StatesNode.getProxyNodePath(instanceId), value);
     }
     
     @Override
@@ -79,7 +83,7 @@ public final class GovernanceServiceImpl implements GovernanceService {
             }
             if (configData.contains("!SHARDING")) {
                 handleShardingRuleConfiguration(result, configData, schemaName);
-            } else if (configData.contains("!READ_WRITE_SPLITTING")) {
+            } else if (configData.contains("!READWRITE_SPLITTING")) {
                 handleMasterSlaveRuleConfiguration(result, configData, schemaName);
             }
         }
@@ -88,60 +92,67 @@ public final class GovernanceServiceImpl implements GovernanceService {
     
     @Override
     public void updateReadDataSourceStatus(final String schemaNames, final String readDataSourceName, final boolean enabled) {
-        String value = enabled ? "" : RegistryCenterNodeStatus.DISABLED.toString();
-        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getDataSourcePath(schemaNames, readDataSourceName), value);
+        String value = enabled ? "" : ResourceState.DISABLED.toString();
+        registryCenterService.getActivatedRegistryCenter().persist(StatesNode.getDataSourcePath(schemaNames, readDataSourceName), value);
     }
     
     private String getInstancesNodeFullRootPath() {
-        String result = registryCenterService.getActivatedStateNode().getProxyNodePath("");
+        String result = StatesNode.getProxyNodePath("");
         return result.substring(0, result.length() - 1);
     }
     
     private void handleShardingRuleConfiguration(final Collection<ReadDataSourceDTO> readDataSourceDTOS, final String configData, final String schemaName) {
-        Collection<RuleConfiguration> configurations = YamlConfigurationConverter.convertRuleConfigurations(configData);
-        Collection<ReadWriteSplittingRuleConfiguration> readWriteSplittingRuleConfigurations = configurations.stream().filter(
-            config -> config instanceof ReadWriteSplittingRuleConfiguration).map(config -> (ReadWriteSplittingRuleConfiguration) config).collect(Collectors.toList());
-        for (ReadWriteSplittingRuleConfiguration readWriteSplittingRuleConfiguration : readWriteSplittingRuleConfigurations) {
-            addSlaveDataSource(readDataSourceDTOS, readWriteSplittingRuleConfiguration, schemaName);
+        Collection<RuleConfiguration> configurations = getRuleConfigurations(configData);
+        Collection<ReadwriteSplittingRuleConfiguration> readWriteSplittingRuleConfigurations = configurations.stream().filter(
+            config -> config instanceof ReadwriteSplittingRuleConfiguration).map(config -> (ReadwriteSplittingRuleConfiguration) config).collect(Collectors.toList());
+        for (ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfiguration : readWriteSplittingRuleConfigurations) {
+            addSlaveDataSource(readDataSourceDTOS, readwriteSplittingRuleConfiguration, schemaName);
         }
     }
     
     private void handleMasterSlaveRuleConfiguration(final Collection<ReadDataSourceDTO> readDataSourceDTOS, final String configData, final String schemaName) {
-        ReadWriteSplittingRuleConfiguration readWriteSplittingRuleConfiguration = loadPrimaryReadRuleConfiguration(configData);
-        addSlaveDataSource(readDataSourceDTOS, readWriteSplittingRuleConfiguration, schemaName);
+        ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfiguration = loadReadwriteSplittingRuleConfiguration(configData);
+        addSlaveDataSource(readDataSourceDTOS, readwriteSplittingRuleConfiguration, schemaName);
     }
     
-    private ReadWriteSplittingRuleConfiguration loadPrimaryReadRuleConfiguration(final String configData) {
-        Collection<RuleConfiguration> ruleConfigurations = YamlConfigurationConverter.convertRuleConfigurations(configData);
-        Optional<ReadWriteSplittingRuleConfiguration> result = ruleConfigurations.stream().filter(
-                each -> each instanceof ReadWriteSplittingRuleConfiguration).map(ruleConfiguration -> (ReadWriteSplittingRuleConfiguration) ruleConfiguration).findFirst();
+    private ReadwriteSplittingRuleConfiguration loadReadwriteSplittingRuleConfiguration(final String configData) {
+        Collection<RuleConfiguration> ruleConfigurations = getRuleConfigurations(configData);
+        Optional<ReadwriteSplittingRuleConfiguration> result = ruleConfigurations.stream().filter(
+                each -> each instanceof ReadwriteSplittingRuleConfiguration).map(ruleConfiguration -> (ReadwriteSplittingRuleConfiguration) ruleConfiguration).findFirst();
         Preconditions.checkState(result.isPresent());
         return result.get();
     }
     
-    private void addSlaveDataSource(final Collection<ReadDataSourceDTO> readDataSourceDTOS, final ReadWriteSplittingRuleConfiguration readWriteSplittingRuleConfiguration, final String schemaName) {
+    private void addSlaveDataSource(final Collection<ReadDataSourceDTO> readDataSourceDTOS, final ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfiguration, final String schemaName) {
         Collection<String> disabledSchemaDataSourceNames = getDisabledSchemaDataSourceNames();
-        for (ReadWriteSplittingDataSourceRuleConfiguration each : readWriteSplittingRuleConfiguration.getDataSources()) {
+        for (ReadwriteSplittingDataSourceRuleConfiguration each : readwriteSplittingRuleConfiguration.getDataSources()) {
             readDataSourceDTOS.addAll(getReadDataSourceDTOS(schemaName, disabledSchemaDataSourceNames, each));
         }
     }
     
-    private Collection<ReadDataSourceDTO> getReadDataSourceDTOS(final String schemaName, final Collection<String> disabledSchemaDataSourceNames, final ReadWriteSplittingDataSourceRuleConfiguration group) {
+    private Collection<ReadDataSourceDTO> getReadDataSourceDTOS(final String schemaName, final Collection<String> disabledSchemaDataSourceNames, 
+                                                                final ReadwriteSplittingDataSourceRuleConfiguration group) {
         Collection<ReadDataSourceDTO> result = new LinkedList<>();
         for (String each : group.getReadDataSourceNames()) {
             result.add(new ReadDataSourceDTO(schemaName, group.getWriteDataSourceName(), each, !disabledSchemaDataSourceNames.contains(schemaName + "." + each)));
         }
         return result;
     }
+
+    private Collection<RuleConfiguration> getRuleConfigurations(final String yamlContent) {
+        Collection<YamlRuleConfiguration> rules = Strings.isNullOrEmpty(yamlContent)
+                ? new LinkedList<>() : YamlEngine.unmarshal(yamlContent, Collection.class);
+        return new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(rules);
+    }
     
     private Collection<String> getDisabledSchemaDataSourceNames() {
         List<String> result = new ArrayList<>();
-        List<String> schemaNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(registryCenterService.getActivatedStateNode().getDataNodesPath());
+        List<String> schemaNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(StatesNode.getDataNodesPath());
         for (String schemaName : schemaNames) {
-            List<String> dataSourceNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(registryCenterService.getActivatedStateNode().getSchemaPath(schemaName));
+            List<String> dataSourceNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(StatesNode.getSchemaPath(schemaName));
             for (String dataSourceName : dataSourceNames) {
-                String value = registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getDataSourcePath(schemaName, dataSourceName));
-                if (RegistryCenterNodeStatus.DISABLED.toString().equalsIgnoreCase(value)) {
+                String value = registryCenterService.getActivatedRegistryCenter().get(StatesNode.getDataSourcePath(schemaName, dataSourceName));
+                if (ResourceState.DISABLED.toString().equalsIgnoreCase(value)) {
                     result.add(Joiner.on(".").join(schemaName, dataSourceName));
                 }
             }
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ProxyAuthenticationServiceImpl.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ProxyAuthenticationServiceImpl.java
index 4543759..2307808 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ProxyAuthenticationServiceImpl.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ProxyAuthenticationServiceImpl.java
@@ -17,12 +17,17 @@
 
 package org.apache.shardingsphere.ui.servcie.impl;
 
-import org.apache.shardingsphere.governance.core.yaml.config.YamlConfigurationConverter;
+import com.google.common.base.Preconditions;
+import org.apache.shardingsphere.governance.core.registry.config.node.GlobalNode;
+import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import org.apache.shardingsphere.ui.servcie.ProxyAuthenticationService;
 import org.apache.shardingsphere.ui.servcie.RegistryCenterService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
+
 /**
  * Implementation of sharding proxy authentication service.
  */
@@ -34,19 +39,20 @@ public final class ProxyAuthenticationServiceImpl implements ProxyAuthentication
     
     @Override
     public String getAuthentication() {
-        return registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getAuthenticationPath());
+        return registryCenterService.getActivatedRegistryCenter().get(GlobalNode.getGlobalRuleNode());
     }
     
     @Override
     public void updateAuthentication(final String authentication) {
         checkAuthenticationConfiguration(authentication);
         registryCenterService.getActivatedRegistryCenter()
-                .persist(registryCenterService.getActivatedStateNode().getAuthenticationPath(), authentication);
+                .persist(GlobalNode.getGlobalRuleNode(), authentication);
     }
     
     private void checkAuthenticationConfiguration(final String data) {
         try {
-            YamlConfigurationConverter.convertUserRule(data);
+            Collection<YamlRuleConfiguration> globalRuleConfigs = YamlEngine.unmarshal(data, Collection.class);
+            Preconditions.checkState(!globalRuleConfigs.isEmpty());
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
             // CHECKSTYLE:ON
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/RegistryCenterServiceImpl.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/RegistryCenterServiceImpl.java
index 02aad71..ac56fed 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/RegistryCenterServiceImpl.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/RegistryCenterServiceImpl.java
@@ -17,8 +17,7 @@
 
 package org.apache.shardingsphere.ui.servcie.impl;
 
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
-import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
+import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.ui.common.domain.CenterConfig;
 import org.apache.shardingsphere.ui.common.exception.ShardingSphereUIException;
 import org.apache.shardingsphere.ui.servcie.CenterConfigService;
@@ -39,20 +38,11 @@ public final class RegistryCenterServiceImpl implements RegistryCenterService {
     private CenterConfigService centerConfigService;
     
     @Override
-    public RegistryRepository getActivatedRegistryCenter() {
+    public RegistryCenterRepository getActivatedRegistryCenter() {
         Optional<CenterConfig> optional = centerConfigService.loadActivated();
         if (optional.isPresent()) {
             return CenterRepositoryFactory.createRegistryRepository(optional.get());
         }
         throw new ShardingSphereUIException(ShardingSphereUIException.SERVER_ERROR, "No activated registry center!");
     }
-    
-    @Override
-    public RegistryCenterNode getActivatedStateNode() {
-        Optional<CenterConfig> optional = centerConfigService.loadActivated();
-        if (optional.isPresent()) {
-            return new RegistryCenterNode();
-        }
-        throw new ShardingSphereUIException(ShardingSphereUIException.SERVER_ERROR, "No activated registry center!");
-    }
 }
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingPropertiesServiceImpl.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingPropertiesServiceImpl.java
index 62edefe..9073e2b 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingPropertiesServiceImpl.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingPropertiesServiceImpl.java
@@ -17,8 +17,9 @@
 
 package org.apache.shardingsphere.ui.servcie.impl;
 
-import org.apache.shardingsphere.governance.core.yaml.config.YamlConfigurationConverter;
+import org.apache.shardingsphere.governance.core.registry.config.node.GlobalNode;
 import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import org.apache.shardingsphere.ui.servcie.RegistryCenterService;
 import org.apache.shardingsphere.ui.servcie.ShardingPropertiesService;
 import org.springframework.stereotype.Service;
@@ -37,18 +38,18 @@ public final class ShardingPropertiesServiceImpl implements ShardingPropertiesSe
     
     @Override
     public String loadShardingProperties() {
-        return registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getPropsPath());
+        return registryCenterService.getActivatedRegistryCenter().get(GlobalNode.getPropsPath());
     }
     
     @Override
     public void updateShardingProperties(final String configData) {
         checkShardingProperties(configData);
-        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getPropsPath(), configData);
+        registryCenterService.getActivatedRegistryCenter().persist(GlobalNode.getPropsPath(), configData);
     }
     
     private void checkShardingProperties(final String configData) {
         try {
-            Properties props = YamlConfigurationConverter.convertProperties(configData);
+            Properties props = YamlEngine.unmarshal(configData, Properties.class);
             new ConfigurationProperties(props);
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java
index 7ebba13..c903677 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java
@@ -21,9 +21,11 @@ import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
-import org.apache.shardingsphere.governance.core.yaml.config.YamlConfigurationConverter;
-import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
+import org.apache.shardingsphere.governance.core.registry.config.node.SchemaMetadataNode;
+import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import org.apache.shardingsphere.infra.yaml.swapper.YamlDataSourceConfigurationSwapper;
 import org.apache.shardingsphere.ui.servcie.RegistryCenterService;
 import org.apache.shardingsphere.ui.servcie.ShardingSchemaService;
 import org.springframework.stereotype.Service;
@@ -31,8 +33,11 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Implementation of sharding schema service.
@@ -45,17 +50,17 @@ public final class ShardingSchemaServiceImpl implements ShardingSchemaService {
 
     @Override
     public Collection<String> getAllSchemaNames() {
-        return registryCenterService.getActivatedRegistryCenter().getChildrenKeys(registryCenterService.getActivatedStateNode().getMetadataNodePath());
+        return registryCenterService.getActivatedRegistryCenter().getChildrenKeys(SchemaMetadataNode.getMetadataNodePath());
     }
     
     @Override
     public String getRuleConfiguration(final String schemaName) {
-        return registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getRulePath(schemaName));
+        return registryCenterService.getActivatedRegistryCenter().get(SchemaMetadataNode.getRulePath(schemaName));
     }
     
     @Override
     public String getDataSourceConfiguration(final String schemaName) {
-        return registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getMetadataDataSourcePath(schemaName));
+        return registryCenterService.getActivatedRegistryCenter().get(SchemaMetadataNode.getMetadataDataSourcePath(schemaName));
     }
     
     @Override
@@ -77,29 +82,28 @@ public final class ShardingSchemaServiceImpl implements ShardingSchemaService {
         checkDataSourceConfiguration(dataSourceConfiguration);
         persistRuleConfiguration(schemaName, ruleConfiguration);
         persistDataSourceConfiguration(schemaName, dataSourceConfiguration);
-        persistSchemaName(schemaName);
     }
     
     @Override
     public void deleteSchemaConfiguration(final String schemaName) {
-        RegistryRepository registryRepository = registryCenterService.getActivatedRegistryCenter();
-        String schemaNamePath = registryCenterService.getActivatedStateNode().getSchemaNamePath(schemaName);
+        RegistryCenterRepository registryRepository = registryCenterService.getActivatedRegistryCenter();
+        String schemaNamePath = SchemaMetadataNode.getSchemaNamePath(schemaName);
         registryRepository.delete(schemaNamePath);
-        String schemaNames = registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getMetadataNodePath());
+        String schemaNames = registryCenterService.getActivatedRegistryCenter().get(SchemaMetadataNode.getMetadataNodePath());
         List<String> schemaNameList = new ArrayList<>(Splitter.on(",").splitToList(schemaNames));
         schemaNameList.remove(schemaName);
-        registryRepository.persist(registryCenterService.getActivatedStateNode().getMetadataNodePath(), Joiner.on(",").join(schemaNameList));
+        registryRepository.persist(SchemaMetadataNode.getMetadataNodePath(), Joiner.on(",").join(schemaNameList));
     }
 
     @Override
     public String getMetadataConfiguration(final String schemaName) {
         return registryCenterService.getActivatedRegistryCenter().get(
-                registryCenterService.getActivatedStateNode().getSchemaPath(schemaName));
+                SchemaMetadataNode.getMetadataSchemaPath(schemaName));
     }
 
     private void checkRuleConfiguration(final String configData) {
         try {
-            YamlConfigurationConverter.convertRuleConfigurations(configData);
+            YamlEngine.unmarshal(configData, Collection.class);
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
             // CHECKSTYLE:ON
@@ -108,13 +112,16 @@ public final class ShardingSchemaServiceImpl implements ShardingSchemaService {
     }
     
     private void persistRuleConfiguration(final String schemaName, final String ruleConfiguration) {
-        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getRulePath(schemaName), ruleConfiguration);
+        registryCenterService.getActivatedRegistryCenter().persist(SchemaMetadataNode.getRulePath(schemaName), ruleConfiguration);
     }
     
     private void checkDataSourceConfiguration(final String configData) {
         try {
-            Map<String, DataSourceConfiguration> dataSourceConfigs = YamlConfigurationConverter.convertDataSourceConfigurations(configData);
-            Preconditions.checkState(!dataSourceConfigs.isEmpty(), "data source configuration is invalid.");
+            Map<String, Map<String, Object>> yamlDataSources = YamlEngine.unmarshal(configData, Map.class);
+            Map<String, DataSourceConfiguration> dataSourceConfigs = yamlDataSources.isEmpty() ? new HashMap<>()
+                    : yamlDataSources.entrySet().stream().collect(Collectors.toMap(
+                    Map.Entry::getKey, entry -> new YamlDataSourceConfigurationSwapper().swapToDataSourceConfiguration(entry.getValue()), (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
+            Preconditions.checkState(!dataSourceConfigs.isEmpty());
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
             // CHECKSTYLE:ON
@@ -123,22 +130,11 @@ public final class ShardingSchemaServiceImpl implements ShardingSchemaService {
     }
     
     private void persistDataSourceConfiguration(final String schemaName, final String dataSourceConfiguration) {
-        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getMetadataDataSourcePath(schemaName), dataSourceConfiguration);
+        registryCenterService.getActivatedRegistryCenter().persist(SchemaMetadataNode.getMetadataDataSourcePath(schemaName), dataSourceConfiguration);
     }
     
     private void checkSchemaName(final String schemaName, final Collection<String> existedSchemaNames) {
         Preconditions.checkArgument(!Strings.isNullOrEmpty(schemaName), "schema name is invalid.");
         Preconditions.checkArgument(!existedSchemaNames.contains(schemaName), "schema name already exists.");
     }
-    
-    private void persistSchemaName(final String schemaName) {
-        RegistryRepository registryRepository = registryCenterService.getActivatedRegistryCenter();
-        String schemaPath = registryCenterService.getActivatedStateNode().getMetadataNodePath();
-        String schemaNames = registryRepository.get(schemaPath);
-        List<String> schemaNameList = Strings.isNullOrEmpty(schemaNames) ? new ArrayList<>() : new ArrayList<>(Splitter.on(",").splitToList(schemaNames));
-        if (!schemaNameList.contains(schemaName)) {
-            schemaNameList.add(schemaName);
-            registryRepository.persist(schemaPath, Joiner.on(",").join(schemaNameList));
-        }
-    }
 }
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/util/CenterRepositoryFactory.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/util/CenterRepositoryFactory.java
index 2cb67d1..93ba50d 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/util/CenterRepositoryFactory.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/util/CenterRepositoryFactory.java
@@ -19,10 +19,9 @@ package org.apache.shardingsphere.ui.util;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.governance.repository.api.GovernanceRepository;
-import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
-import org.apache.shardingsphere.governance.repository.api.config.GovernanceCenterConfiguration;
+import org.apache.shardingsphere.governance.repository.api.config.RegistryCenterConfiguration;
 import org.apache.shardingsphere.governance.repository.etcd.EtcdRepository;
+import org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.governance.repository.zookeeper.CuratorZookeeperRepository;
 import org.apache.shardingsphere.ui.common.constant.InstanceType;
 import org.apache.shardingsphere.ui.common.domain.CenterConfig;
@@ -36,33 +35,33 @@ import java.util.concurrent.ConcurrentHashMap;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class CenterRepositoryFactory {
     
-    private static final ConcurrentHashMap<String, RegistryRepository> REGISTRY_REPOSITORY_MAP = new ConcurrentHashMap<>();
+    private static final ConcurrentHashMap<String, RegistryCenterRepository> REGISTRY_REPOSITORY_MAP = new ConcurrentHashMap<>();
     
     /**
-     * Create registry repository.
+     * Create registry center repository.
      *
      * @param config center config
      * @return registry repository
      */
-    public static RegistryRepository createRegistryRepository(final CenterConfig config) {
-        RegistryRepository result = REGISTRY_REPOSITORY_MAP.get(config.getName());
+    public static RegistryCenterRepository createRegistryRepository(final CenterConfig config) {
+        RegistryCenterRepository result = REGISTRY_REPOSITORY_MAP.get(config.getName());
         if (null != result) {
             return result;
         }
-        result = (RegistryRepository) createGovernanceRepository(config.getInstanceType());
+        result = createGovernanceRepository(config.getInstanceType());
         result.init(config.getGovernanceName(), convert(config));
         REGISTRY_REPOSITORY_MAP.put(config.getName(), result);
         return result;
     }
     
-    private static GovernanceCenterConfiguration convert(final CenterConfig config) {
-        GovernanceCenterConfiguration result = new GovernanceCenterConfiguration(config.getInstanceType(), config.getServerLists(), new Properties());
+    private static RegistryCenterConfiguration convert(final CenterConfig config) {
+        RegistryCenterConfiguration result = new RegistryCenterConfiguration(config.getInstanceType(), config.getServerLists(), new Properties());
         result.getProps().put("digest", config.getDigest());
         return result;
     }
     
-    private static GovernanceRepository createGovernanceRepository(final String instanceType) {
-        RegistryRepository result;
+    private static RegistryCenterRepository createGovernanceRepository(final String instanceType) {
+        RegistryCenterRepository result;
         InstanceType type = InstanceType.nameOf(instanceType);
         switch (type) {
             case ZOOKEEPER:
diff --git a/shardingsphere-ui-distribution/pom.xml b/shardingsphere-ui-distribution/pom.xml
index c16f37c..b25d5be 100644
--- a/shardingsphere-ui-distribution/pom.xml
+++ b/shardingsphere-ui-distribution/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
         <artifactId>shardingsphere-ui</artifactId>
-        <version>5.0.0-beta-SNAPSHOT</version>
+        <version>5.0.0-RC1-SNAPSHOT</version>
     </parent>
     <artifactId>shardingsphere-ui-distribution</artifactId>
     <name>${project.artifactId}</name>
diff --git a/shardingsphere-ui-distribution/shardingsphere-ui-bin-distribution/pom.xml b/shardingsphere-ui-distribution/shardingsphere-ui-bin-distribution/pom.xml
index ad964c6..8a57590 100644
--- a/shardingsphere-ui-distribution/shardingsphere-ui-bin-distribution/pom.xml
+++ b/shardingsphere-ui-distribution/shardingsphere-ui-bin-distribution/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
         <artifactId>shardingsphere-ui-distribution</artifactId>
-        <version>5.0.0-beta-SNAPSHOT</version>
+        <version>5.0.0-RC1-SNAPSHOT</version>
     </parent>
     <artifactId>shardingsphere-ui-bin-distribution</artifactId>
     <name>${project.artifactId}</name>
diff --git a/shardingsphere-ui-distribution/shardingsphere-ui-src-distribution/pom.xml b/shardingsphere-ui-distribution/shardingsphere-ui-src-distribution/pom.xml
index 6b4bfdc..c623a42 100644
--- a/shardingsphere-ui-distribution/shardingsphere-ui-src-distribution/pom.xml
+++ b/shardingsphere-ui-distribution/shardingsphere-ui-src-distribution/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
         <artifactId>shardingsphere-ui-distribution</artifactId>
-        <version>5.0.0-beta-SNAPSHOT</version>
+        <version>5.0.0-RC1-SNAPSHOT</version>
     </parent>
     <artifactId>shardingsphere-ui-src-distribution</artifactId>
     <name>${project.artifactId}</name>
diff --git a/shardingsphere-ui-frontend/pom.xml b/shardingsphere-ui-frontend/pom.xml
index 51fa4d3..0d29091 100644
--- a/shardingsphere-ui-frontend/pom.xml
+++ b/shardingsphere-ui-frontend/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.apache.shardingsphere</groupId>
         <artifactId>shardingsphere-ui</artifactId>
-        <version>5.0.0-beta-SNAPSHOT</version>
+        <version>5.0.0-RC1-SNAPSHOT</version>
     </parent>
     <artifactId>shardingsphere-ui-frontend</artifactId>
     <name>${project.artifactId}</name>