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