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

menghaoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 72fe63c  Add MemoryContextManagerBuilder and 
StandaloneContextManagerBuilder (#11863)
72fe63c is described below

commit 72fe63c3fca868d1a5797d3258f3108b6941f042
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Aug 17 20:19:24 2021 +0800

    Add MemoryContextManagerBuilder and StandaloneContextManagerBuilder (#11863)
    
    * Move ClusterContextManagerBuilder to shardingsphere-governance-context 
module
    
    * Add MemoryContextManagerBuilder and StandaloneContextManagerBuilder
    
    * Add MemoryContextManagerBuilder and StandaloneContextManagerBuilder
---
 .../context/ClusterContextManagerBuilder.java      |  3 +-
 .../context/manager/ContextManagerBuilder.java     |  4 +-
 .../manager/impl/MemoryContextManagerBuilder.java  | 65 ++++++++++++++++++++++
 .../impl/StandaloneContextManagerBuilder.java      | 20 +++----
 .../GovernanceShardingSphereDataSource.java        |  2 +-
 .../impl/AbstractBootstrapInitializer.java         | 54 +++---------------
 .../impl/ClusterBootstrapInitializer.java          | 34 ++++++++---
 .../impl/MemoryBootstrapInitializer.java           | 35 +++++++++---
 .../impl/StandaloneBootstrapInitializer.java       | 35 +++++++++---
 9 files changed, 167 insertions(+), 85 deletions(-)

diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/context/ClusterContextManagerBuilder.java
 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/ClusterContextManagerBuilder.java
similarity index 98%
copy from 
shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/context/ClusterContextManagerBuilder.java
copy to 
shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/ClusterContextManagerBuilder.java
index 99f5cfd..3cbe11a 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/context/ClusterContextManagerBuilder.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/ClusterContextManagerBuilder.java
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.driver.governance.internal.context;
+package org.apache.shardingsphere.governance.context;
 
 import com.google.common.base.Preconditions;
-import org.apache.shardingsphere.governance.context.ClusterContextManager;
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/ContextManagerBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/ContextManagerBuilder.java
index 33488f0..0848edf 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/ContextManagerBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/ContextManagerBuilder.java
@@ -35,7 +35,7 @@ public interface ContextManagerBuilder {
      * Build context manager.
      * 
      * @param mode ShardingSphere mode
-     * @param dataSources data sources
+     * @param dataSourcesMap data sources map
      * @param schemaRuleConfigs schema rule configurations
      * @param globalRuleConfigs global rule configurations
      * @param props properties
@@ -43,6 +43,6 @@ public interface ContextManagerBuilder {
      * @return context manager
      * @throws SQLException SQL exception
      */
-    ContextManager build(ShardingSphereMode mode, Map<String, Map<String, 
DataSource>> dataSources,
+    ContextManager build(ShardingSphereMode mode, Map<String, Map<String, 
DataSource>> dataSourcesMap,
                          Map<String, Collection<RuleConfiguration>> 
schemaRuleConfigs, Collection<RuleConfiguration> globalRuleConfigs, Properties 
props, boolean isOverwrite) throws SQLException;
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/MemoryContextManagerBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/MemoryContextManagerBuilder.java
new file mode 100644
index 0000000..8d48d29
--- /dev/null
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/MemoryContextManagerBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * 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.shardingsphere.infra.context.manager.impl;
+
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.context.manager.ContextManager;
+import org.apache.shardingsphere.infra.context.manager.ContextManagerBuilder;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
+import 
org.apache.shardingsphere.infra.context.metadata.MetaDataContextsBuilder;
+import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import org.apache.shardingsphere.infra.mode.ShardingSphereMode;
+import org.apache.shardingsphere.transaction.ShardingTransactionManagerEngine;
+import org.apache.shardingsphere.transaction.context.TransactionContexts;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Memory context manager builder.
+ */
+public final class MemoryContextManagerBuilder implements 
ContextManagerBuilder {
+    
+    @Override
+    public ContextManager build(final ShardingSphereMode mode, final 
Map<String, Map<String, DataSource>> dataSourcesMap, 
+                                final Map<String, 
Collection<RuleConfiguration>> schemaRuleConfigs, final 
Collection<RuleConfiguration> globalRuleConfigs, 
+                                final Properties props, final boolean 
isOverwrite) throws SQLException {
+        MetaDataContexts metaDataContexts = new 
MetaDataContextsBuilder(dataSourcesMap, schemaRuleConfigs, globalRuleConfigs, 
props).build(null);
+        TransactionContexts transactionContexts = 
createTransactionContexts(metaDataContexts);
+        ContextManager result = new MemoryContextManager();
+        result.init(metaDataContexts, transactionContexts);
+        return result;
+    }
+    
+    private TransactionContexts createTransactionContexts(final 
MetaDataContexts metaDataContexts) {
+        Map<String, ShardingTransactionManagerEngine> engines = new 
HashMap<>(metaDataContexts.getAllSchemaNames().size(), 1);
+        String xaTransactionMangerType = 
metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);
+        for (String each : metaDataContexts.getAllSchemaNames()) {
+            ShardingTransactionManagerEngine engine = new 
ShardingTransactionManagerEngine();
+            ShardingSphereResource resource = 
metaDataContexts.getMetaData(each).getResource();
+            engine.init(resource.getDatabaseType(), resource.getDataSources(), 
xaTransactionMangerType);
+            engines.put(each, engine);
+        }
+        return new TransactionContexts(engines);
+    }
+}
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/context/ClusterContextManagerBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/StandaloneContextManagerBuilder.java
similarity index 92%
rename from 
shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/context/ClusterContextManagerBuilder.java
rename to 
shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/StandaloneContextManagerBuilder.java
index 99f5cfd..256271f 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/context/ClusterContextManagerBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/StandaloneContextManagerBuilder.java
@@ -15,12 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.driver.governance.internal.context;
+package org.apache.shardingsphere.infra.context.manager.impl;
 
 import com.google.common.base.Preconditions;
-import org.apache.shardingsphere.governance.context.ClusterContextManager;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
@@ -49,18 +46,17 @@ import java.util.Properties;
 import java.util.stream.Collectors;
 
 /**
- * Cluster context manager builder.
+ * Standalone context manager builder.
  */
-public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder {
+public final class StandaloneContextManagerBuilder implements 
ContextManagerBuilder {
     
     @Override
-    public ContextManager build(final ShardingSphereMode mode, final 
Map<String, Map<String, DataSource>> dataSourcesMap,
-                                final Map<String, 
Collection<RuleConfiguration>> schemaRuleConfigs, final 
Collection<RuleConfiguration> globalRuleConfigs,
+    public ContextManager build(final ShardingSphereMode mode, final 
Map<String, Map<String, DataSource>> dataSourcesMap, 
+                                final Map<String, 
Collection<RuleConfiguration>> schemaRuleConfigs, final 
Collection<RuleConfiguration> globalRuleConfigs, 
                                 final Properties props, final boolean 
isOverwrite) throws SQLException {
         Optional<PersistRepository> persistRepository = 
mode.getPersistRepository();
         Preconditions.checkState(persistRepository.isPresent());
         DistMetaDataPersistService persistService = new 
DistMetaDataPersistService(persistRepository.get());
-        RegistryCenter registryCenter = new 
RegistryCenter((RegistryCenterRepository) persistRepository.get());
         persistConfigurations(persistService, dataSourcesMap, 
schemaRuleConfigs, globalRuleConfigs, props, isOverwrite);
         Collection<String> schemaNames = 
persistService.getSchemaMetaDataService().loadAllNames();
         MetaDataContexts metaDataContexts;
@@ -69,11 +65,11 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
             metaDataContexts = new MetaDataContextsBuilder(dataSourcesMap, 
schemaRuleConfigs, globalRuleConfigs, props).build(persistService);
             // TODO finish TODO 
         } else {
-            metaDataContexts = new 
MetaDataContextsBuilder(loadDataSourcesMap(persistService, dataSourcesMap, 
schemaNames), 
+            metaDataContexts = new 
MetaDataContextsBuilder(loadDataSourcesMap(persistService, dataSourcesMap, 
schemaNames),
                     loadSchemaRules(persistService, schemaNames), 
persistService.getGlobalRuleService().load(), 
persistService.getPropsService().load()).build(persistService);
         }
         TransactionContexts transactionContexts = 
createTransactionContexts(metaDataContexts);
-        ContextManager result = new ClusterContextManager(persistService, 
registryCenter);
+        ContextManager result = new StandaloneContextManager();
         result.init(metaDataContexts, transactionContexts);
         return result;
     }
@@ -125,7 +121,7 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
     }
     
     // TODO finish this method
-    private Map<String, Map<String, DataSourceConfiguration>> 
getChangedDataSourceConfigurations(final Map<String, Map<String, DataSource>> 
configuredDataSourcesMap, 
+    private Map<String, Map<String, DataSourceConfiguration>> 
getChangedDataSourceConfigurations(final Map<String, Map<String, DataSource>> 
configuredDataSourcesMap,
                                                                                
                  final Map<String, Map<String, DataSourceConfiguration>> 
loadedDataSourceConfigs) {
         return isEmptyLocalDataSourcesMap(configuredDataSourcesMap) ? 
loadedDataSourceConfigs : Collections.emptyMap();
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
index 30b655a..0c998b2 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.driver.governance.internal.datasource;
 
 import lombok.Getter;
-import 
org.apache.shardingsphere.driver.governance.internal.context.ClusterContextManagerBuilder;
+import 
org.apache.shardingsphere.governance.context.ClusterContextManagerBuilder;
 import 
org.apache.shardingsphere.driver.governance.internal.state.DriverStateContext;
 import 
org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOperationDataSource;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
index 72b5432..d7300f0 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
@@ -24,13 +24,8 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLServe
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.condition.PreConditionRuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
-import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
-import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.context.manager.ContextManager;
-import 
org.apache.shardingsphere.infra.context.metadata.MetaDataContextsBuilder;
-import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
-import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
 import org.apache.shardingsphere.infra.mode.ShardingSphereMode;
 import org.apache.shardingsphere.infra.persist.DistMetaDataPersistService;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRuleConfiguration;
@@ -41,16 +36,14 @@ import 
org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
 import 
org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
 import org.apache.shardingsphere.proxy.config.yaml.YamlProxyRuleConfiguration;
 import 
org.apache.shardingsphere.proxy.config.yaml.YamlProxyServerConfiguration;
+import 
org.apache.shardingsphere.proxy.config.yaml.swapper.YamlProxyConfigurationSwapper;
 import org.apache.shardingsphere.proxy.database.DatabaseServerInfo;
 import org.apache.shardingsphere.proxy.initializer.BootstrapInitializer;
 import org.apache.shardingsphere.scaling.core.config.ServerConfiguration;
-import org.apache.shardingsphere.transaction.ShardingTransactionManagerEngine;
-import org.apache.shardingsphere.transaction.context.TransactionContexts;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -64,60 +57,27 @@ import java.util.stream.Collectors;
 @Slf4j
 public abstract class AbstractBootstrapInitializer implements 
BootstrapInitializer {
     
+    private final ShardingSphereMode mode;
+    
     @Getter
     private final DistMetaDataPersistService distMetaDataPersistService;
     
     public AbstractBootstrapInitializer(final ShardingSphereMode mode) {
+        this.mode = mode;
         distMetaDataPersistService = mode.getPersistRepository().isPresent() ? 
new DistMetaDataPersistService(mode.getPersistRepository().get()) : null;
     }
     
     @Override
     public final void init(final YamlProxyConfiguration yamlConfig) throws 
SQLException {
-        ProxyConfiguration proxyConfig = getProxyConfiguration(yamlConfig);
-        MetaDataContexts metaDataContexts = 
createMetaDataContexts(proxyConfig);
-        TransactionContexts transactionContexts = 
createTransactionContexts(metaDataContexts);
-        ContextManager contextManager = createContextManager();
-        contextManager.init(metaDataContexts, transactionContexts);
+        ProxyConfiguration proxyConfig = new 
YamlProxyConfigurationSwapper().swap(yamlConfig);
+        ContextManager contextManager = createContextManager(mode, 
proxyConfig);
         ProxyContext.getInstance().init(contextManager);
         setDatabaseServerInfo();
         initScalingInternal(yamlConfig);
         postInit(yamlConfig);
     }
     
-    protected abstract ProxyConfiguration 
getProxyConfiguration(YamlProxyConfiguration yamlConfig);
-    
-    protected abstract ContextManager createContextManager();
-    
-    private MetaDataContexts createMetaDataContexts(final ProxyConfiguration 
proxyConfig) throws SQLException {
-        Map<String, Map<String, DataSource>> dataSourcesMap = 
createDataSourcesMap(proxyConfig.getSchemaDataSources());
-        return new MetaDataContextsBuilder(
-                dataSourcesMap, proxyConfig.getSchemaRules(), 
getPostConditionGlobalRuleConfigurations(proxyConfig), 
proxyConfig.getProps()).build(distMetaDataPersistService);
-    }
-    
-    private static Map<String, Map<String, DataSource>> 
createDataSourcesMap(final Map<String, Map<String, DataSourceParameter>> 
schemaDataSources) {
-        return 
schemaDataSources.entrySet().stream().collect(Collectors.toMap(Entry::getKey, 
entry -> createDataSources(entry.getValue()), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new));
-    }
-    
-    private static Map<String, DataSource> createDataSources(final Map<String, 
DataSourceParameter> dataSourceParameters) {
-        Map<String, DataSourceConfiguration> dataSourceConfigMap = 
DataSourceParameterConverter.getDataSourceConfigurationMap(dataSourceParameters);
-        return DataSourceConverter.getDataSourceMap(dataSourceConfigMap);
-    }
-    
-    private static Collection<RuleConfiguration> 
getPostConditionGlobalRuleConfigurations(final ProxyConfiguration proxyConfig) {
-        return proxyConfig.getGlobalRules().stream().filter(each -> !(each 
instanceof PreConditionRuleConfiguration)).collect(Collectors.toList());
-    }
-    
-    private TransactionContexts createTransactionContexts(final 
org.apache.shardingsphere.infra.context.metadata.MetaDataContexts 
metaDataContexts) {
-        Map<String, ShardingTransactionManagerEngine> 
transactionManagerEngines = new 
HashMap<>(metaDataContexts.getAllSchemaNames().size(), 1);
-        String xaTransactionMangerType = 
metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);
-        for (String each : metaDataContexts.getAllSchemaNames()) {
-            ShardingTransactionManagerEngine engine = new 
ShardingTransactionManagerEngine();
-            ShardingSphereResource resource = 
metaDataContexts.getMetaData(each).getResource();
-            engine.init(resource.getDatabaseType(), resource.getDataSources(), 
xaTransactionMangerType);
-            transactionManagerEngines.put(each, engine);
-        }
-        return new TransactionContexts(transactionManagerEngines);
-    }
+    protected abstract ContextManager createContextManager(ShardingSphereMode 
mode, ProxyConfiguration proxyConfig) throws SQLException;
     
     private void setDatabaseServerInfo() {
         findBackendDataSource().ifPresent(dataSourceSample -> {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/ClusterBootstrapInitializer.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/ClusterBootstrapInitializer.java
index 634e487..abd7587 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/ClusterBootstrapInitializer.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/ClusterBootstrapInitializer.java
@@ -18,20 +18,28 @@
 package org.apache.shardingsphere.proxy.initializer.impl;
 
 import com.google.common.base.Preconditions;
-import org.apache.shardingsphere.governance.context.ClusterContextManager;
+import 
org.apache.shardingsphere.governance.context.ClusterContextManagerBuilder;
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
 import org.apache.shardingsphere.infra.context.manager.ContextManager;
 import org.apache.shardingsphere.infra.mode.ShardingSphereMode;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlModeConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.mode.ModeConfigurationYamlSwapper;
 import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
 import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
+import 
org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
 import org.apache.shardingsphere.scaling.core.api.ScalingWorker;
 import org.apache.shardingsphere.scaling.core.config.ScalingContext;
 import org.apache.shardingsphere.scaling.core.config.ServerConfiguration;
 
+import javax.sql.DataSource;
+import java.sql.SQLException;
 import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -54,14 +62,26 @@ public final class ClusterBootstrapInitializer extends 
AbstractBootstrapInitiali
     }
     
     @Override
-    protected ProxyConfiguration getProxyConfiguration(final 
YamlProxyConfiguration yamlConfig) {
-        persistConfigurations(yamlConfig, isOverwrite);
-        return loadProxyConfiguration();
+    protected ContextManager createContextManager(final ShardingSphereMode 
mode, final ProxyConfiguration proxyConfig) throws SQLException {
+        return new ClusterContextManagerBuilder().build(
+                mode, getDataSourcesMap(proxyConfig.getSchemaDataSources()), 
proxyConfig.getSchemaRules(), proxyConfig.getGlobalRules(), 
proxyConfig.getProps(), isOverwrite);
     }
     
-    @Override
-    protected ContextManager createContextManager() {
-        return new ClusterContextManager(getDistMetaDataPersistService(), 
registryCenter);
+    // TODO add DataSourceParameter param to ContextManagerBuilder to avoid 
re-build data source
+    private Map<String, Map<String, DataSource>> getDataSourcesMap(final 
Map<String, Map<String, DataSourceParameter>> dataSourceParametersMap) {
+        Map<String, Map<String, DataSource>> result = new 
LinkedHashMap<>(dataSourceParametersMap.size(), 1);
+        for (Entry<String, Map<String, DataSourceParameter>> entry : 
dataSourceParametersMap.entrySet()) {
+            result.put(entry.getKey(), 
getDataSourceMap(DataSourceParameterConverter.getDataSourceConfigurationMap(entry.getValue())));
+        }
+        return result;
+    }
+    
+    private Map<String, DataSource> getDataSourceMap(final Map<String, 
DataSourceConfiguration> dataSourceConfigMap) {
+        Map<String, DataSource> result = new 
LinkedHashMap<>(dataSourceConfigMap.size(), 1);
+        for (Entry<String, DataSourceConfiguration> entry : 
dataSourceConfigMap.entrySet()) {
+            result.put(entry.getKey(), entry.getValue().createDataSource());
+        }
+        return result;
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/MemoryBootstrapInitializer.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/MemoryBootstrapInitializer.java
index d0dd25d..d18b9b6 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/MemoryBootstrapInitializer.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/MemoryBootstrapInitializer.java
@@ -17,14 +17,22 @@
 
 package org.apache.shardingsphere.proxy.initializer.impl;
 
+import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
 import org.apache.shardingsphere.infra.context.manager.ContextManager;
-import 
org.apache.shardingsphere.infra.context.manager.impl.MemoryContextManager;
+import 
org.apache.shardingsphere.infra.context.manager.impl.MemoryContextManagerBuilder;
 import org.apache.shardingsphere.infra.mode.ShardingSphereMode;
 import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
 import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
-import 
org.apache.shardingsphere.proxy.config.yaml.swapper.YamlProxyConfigurationSwapper;
+import 
org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
 import org.apache.shardingsphere.scaling.core.config.ScalingContext;
 
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
 /**
  * Memory bootstrap initializer.
  */
@@ -35,13 +43,26 @@ public final class MemoryBootstrapInitializer extends 
AbstractBootstrapInitializ
     }
     
     @Override
-    protected ProxyConfiguration getProxyConfiguration(final 
YamlProxyConfiguration yamlConfig) {
-        return new YamlProxyConfigurationSwapper().swap(yamlConfig);
+    protected ContextManager createContextManager(final ShardingSphereMode 
mode, final ProxyConfiguration proxyConfig) throws SQLException {
+        return new MemoryContextManagerBuilder().build(
+                mode, getDataSourcesMap(proxyConfig.getSchemaDataSources()), 
proxyConfig.getSchemaRules(), proxyConfig.getGlobalRules(), 
proxyConfig.getProps(), true);
     }
     
-    @Override
-    protected ContextManager createContextManager() {
-        return new MemoryContextManager();
+    // TODO add DataSourceParameter param to ContextManagerBuilder to avoid 
re-build data source
+    private Map<String, Map<String, DataSource>> getDataSourcesMap(final 
Map<String, Map<String, DataSourceParameter>> dataSourceParametersMap) {
+        Map<String, Map<String, DataSource>> result = new 
LinkedHashMap<>(dataSourceParametersMap.size(), 1);
+        for (Entry<String, Map<String, DataSourceParameter>> entry : 
dataSourceParametersMap.entrySet()) {
+            result.put(entry.getKey(), 
getDataSourceMap(DataSourceParameterConverter.getDataSourceConfigurationMap(entry.getValue())));
+        }
+        return result;
+    }
+    
+    private Map<String, DataSource> getDataSourceMap(final Map<String, 
DataSourceConfiguration> dataSourceConfigMap) {
+        Map<String, DataSource> result = new 
LinkedHashMap<>(dataSourceConfigMap.size(), 1);
+        for (Entry<String, DataSourceConfiguration> entry : 
dataSourceConfigMap.entrySet()) {
+            result.put(entry.getKey(), entry.getValue().createDataSource());
+        }
+        return result;
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandaloneBootstrapInitializer.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandaloneBootstrapInitializer.java
index 82f80dc..43a41e3 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandaloneBootstrapInitializer.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandaloneBootstrapInitializer.java
@@ -17,13 +17,22 @@
 
 package org.apache.shardingsphere.proxy.initializer.impl;
 
+import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
 import org.apache.shardingsphere.infra.context.manager.ContextManager;
-import 
org.apache.shardingsphere.infra.context.manager.impl.StandaloneContextManager;
+import 
org.apache.shardingsphere.infra.context.manager.impl.StandaloneContextManagerBuilder;
 import org.apache.shardingsphere.infra.mode.ShardingSphereMode;
 import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
 import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
+import 
org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
 import org.apache.shardingsphere.scaling.core.config.ScalingContext;
 
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
 /**
  * Standalone bootstrap initializer.
  */
@@ -37,14 +46,26 @@ public final class StandaloneBootstrapInitializer extends 
AbstractBootstrapIniti
     }
     
     @Override
-    protected ProxyConfiguration getProxyConfiguration(final 
YamlProxyConfiguration yamlConfig) {
-        persistConfigurations(yamlConfig, isOverwrite);
-        return loadProxyConfiguration();
+    protected ContextManager createContextManager(final ShardingSphereMode 
mode, final ProxyConfiguration proxyConfig) throws SQLException {
+        return new StandaloneContextManagerBuilder().build(
+                mode, getDataSourcesMap(proxyConfig.getSchemaDataSources()), 
proxyConfig.getSchemaRules(), proxyConfig.getGlobalRules(), 
proxyConfig.getProps(), isOverwrite);
     }
     
-    @Override
-    protected ContextManager createContextManager() {
-        return new StandaloneContextManager();
+    // TODO add DataSourceParameter param to ContextManagerBuilder to avoid 
re-build data source
+    private Map<String, Map<String, DataSource>> getDataSourcesMap(final 
Map<String, Map<String, DataSourceParameter>> dataSourceParametersMap) {
+        Map<String, Map<String, DataSource>> result = new 
LinkedHashMap<>(dataSourceParametersMap.size(), 1);
+        for (Entry<String, Map<String, DataSourceParameter>> entry : 
dataSourceParametersMap.entrySet()) {
+            result.put(entry.getKey(), 
getDataSourceMap(DataSourceParameterConverter.getDataSourceConfigurationMap(entry.getValue())));
+        }
+        return result;
+    }
+    
+    private Map<String, DataSource> getDataSourceMap(final Map<String, 
DataSourceConfiguration> dataSourceConfigMap) {
+        Map<String, DataSource> result = new 
LinkedHashMap<>(dataSourceConfigMap.size(), 1);
+        for (Entry<String, DataSourceConfiguration> entry : 
dataSourceConfigMap.entrySet()) {
+            result.put(entry.getKey(), entry.getValue().createDataSource());
+        }
+        return result;
     }
     
     @Override

Reply via email to