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

zhangliang 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 50be70f033b Add MetaDataContextsInitFactory (#34400)
50be70f033b is described below

commit 50be70f033b4df14919439985d98ac63f4d90e6f
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jan 19 18:06:16 2025 +0800

    Add MetaDataContextsInitFactory (#34400)
    
    * Add MetaDataContextsInitFactory
    
    * Add MetaDataContextsInitFactory
    
    * Add MetaDataContextsInitFactory
---
 .../metadata/factory/MetaDataContextsFactory.java  | 12 +++--
 .../factory/init/MetaDataContextsInitFactory.java  | 60 ++++++++++++++++++++++
 ...lConfigurationMetaDataContextsInitFactory.java} | 32 +++---------
 ...RegisterCenterMetaDataContextsInitFactory.java} | 32 +++---------
 4 files changed, 79 insertions(+), 57 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
index 9ada96c58eb..646d595a0e9 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
@@ -36,8 +36,9 @@ import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSpher
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import 
org.apache.shardingsphere.mode.metadata.factory.type.LocalConfigurationMetaDataContextsFactory;
-import 
org.apache.shardingsphere.mode.metadata.factory.type.RegisterCenterMetaDataContextsFactory;
+import 
org.apache.shardingsphere.mode.metadata.factory.init.MetaDataContextsInitFactory;
+import 
org.apache.shardingsphere.mode.metadata.factory.init.type.LocalConfigurationMetaDataContextsInitFactory;
+import 
org.apache.shardingsphere.mode.metadata.factory.init.type.RegisterCenterMetaDataContextsInitFactory;
 import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 
@@ -67,9 +68,10 @@ public final class MetaDataContextsFactory {
      * @throws SQLException SQL exception
      */
     public MetaDataContexts create(final ContextManagerBuilderParameter param) 
throws SQLException {
-        return containsRegisteredDatabases()
-                ? new RegisterCenterMetaDataContextsFactory(persistService, 
instanceContext).create(param)
-                : new 
LocalConfigurationMetaDataContextsFactory(persistService, 
instanceContext).create(param);
+        MetaDataContextsInitFactory initFactory = containsRegisteredDatabases()
+                ? new 
RegisterCenterMetaDataContextsInitFactory(persistService, instanceContext)
+                : new 
LocalConfigurationMetaDataContextsInitFactory(persistService, instanceContext);
+        return initFactory.create(param);
     }
     
     private boolean containsRegisteredDatabases() {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/MetaDataContextsInitFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/MetaDataContextsInitFactory.java
new file mode 100644
index 00000000000..bc4a55c83cf
--- /dev/null
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/MetaDataContextsInitFactory.java
@@ -0,0 +1,60 @@
+/*
+ * 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.mode.metadata.factory.init;
+
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
+import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
+import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
+import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Meta data contexts init factory.
+ */
+public abstract class MetaDataContextsInitFactory {
+    
+    /**
+     * Create meta data contexts.
+     *
+     * @param param context manager builder parameter
+     * @return created meta data contexts
+     * @throws SQLException SQL exception
+     */
+    public abstract MetaDataContexts create(ContextManagerBuilderParameter 
param) throws SQLException;
+    
+    protected final MetaDataContexts create(final 
Collection<RuleConfiguration> globalRuleConfigs, final Map<String, DataSource> 
globalDataSources,
+                                            final 
Collection<ShardingSphereDatabase> databases, final ConfigurationProperties 
props, final MetaDataPersistService persistService) {
+        Collection<ShardingSphereRule> globalRules = 
GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props);
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, new ResourceMetaData(globalDataSources), new 
RuleMetaData(globalRules), props);
+        ShardingSphereStatistics statistics = 
ShardingSphereStatisticsFactory.create(metaData, 
persistService.getShardingSphereDataPersistService().load(metaData));
+        return new MetaDataContexts(metaData, statistics);
+    }
+}
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/type/LocalConfigurationMetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactory.java
similarity index 70%
rename from 
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/type/LocalConfigurationMetaDataContextsFactory.java
rename to 
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactory.java
index 23b3aaa4440..0059a3e6c98 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/type/LocalConfigurationMetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactory.java
@@ -15,26 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.metadata.factory.type;
+package org.apache.shardingsphere.mode.metadata.factory.init.type;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabasesFactory;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereSchemaData;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
-import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import 
org.apache.shardingsphere.mode.metadata.factory.init.MetaDataContextsInitFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 
 import javax.sql.DataSource;
@@ -46,39 +40,25 @@ import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
 /**
- * Local configuration meta data contexts factory.
+ * Local configuration meta data contexts init factory.
  */
 @RequiredArgsConstructor
-public final class LocalConfigurationMetaDataContextsFactory {
+public final class LocalConfigurationMetaDataContextsInitFactory extends 
MetaDataContextsInitFactory {
     
     private final MetaDataPersistService persistService;
     
     private final ComputeNodeInstanceContext instanceContext;
     
-    /**
-     * Create meta data contexts.
-     *
-     * @param param context manager builder parameter
-     * @return meta data contexts
-     * @throws SQLException SQL exception
-     */
+    @Override
     public MetaDataContexts create(final ContextManagerBuilderParameter param) 
throws SQLException {
         ConfigurationProperties props = new 
ConfigurationProperties(param.getProps());
         Collection<ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(param.getDatabaseConfigs(), props, 
instanceContext);
-        MetaDataContexts result = 
createMetaDataContexts(param.getGlobalRuleConfigs(), 
param.getGlobalDataSources(), databases, props);
+        MetaDataContexts result = create(param.getGlobalRuleConfigs(), 
param.getGlobalDataSources(), databases, props, persistService);
         persistDatabaseConfigurations(result, param);
         persistMetaData(result);
         return result;
     }
     
-    private MetaDataContexts createMetaDataContexts(final 
Collection<RuleConfiguration> globalRuleConfigs, final Map<String, DataSource> 
globalDataSources,
-                                                    final 
Collection<ShardingSphereDatabase> databases, final ConfigurationProperties 
props) {
-        Collection<ShardingSphereRule> globalRules = 
GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props);
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, new ResourceMetaData(globalDataSources), new 
RuleMetaData(globalRules), props);
-        ShardingSphereStatistics statistics = 
ShardingSphereStatisticsFactory.create(metaData, 
persistService.getShardingSphereDataPersistService().load(metaData));
-        return new MetaDataContexts(metaData, statistics);
-    }
-    
     private void persistDatabaseConfigurations(final MetaDataContexts 
metadataContexts, final ContextManagerBuilderParameter param) {
         Collection<RuleConfiguration> globalRuleConfigs = 
metadataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations();
         persistService.persistGlobalRuleConfiguration(globalRuleConfigs, 
param.getProps());
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/type/RegisterCenterMetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactory.java
similarity index 73%
rename from 
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/type/RegisterCenterMetaDataContextsFactory.java
rename to 
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactory.java
index 42461ec3d14..56943f0f10b 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/type/RegisterCenterMetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.metadata.factory.type;
+package org.apache.shardingsphere.mode.metadata.factory.init.type;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
@@ -26,18 +26,12 @@ import 
org.apache.shardingsphere.infra.datasource.pool.config.DataSourceConfigur
 import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import 
org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaData;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabasesFactory;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
-import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import 
org.apache.shardingsphere.mode.metadata.factory.init.MetaDataContextsInitFactory;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 
 import javax.sql.DataSource;
@@ -47,22 +41,16 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
- * Register center meta data contexts factory.
+ * Register center meta data contexts init factory.
  */
 @RequiredArgsConstructor
-public final class RegisterCenterMetaDataContextsFactory {
+public final class RegisterCenterMetaDataContextsInitFactory extends 
MetaDataContextsInitFactory {
     
     private final MetaDataPersistService persistService;
     
     private final ComputeNodeInstanceContext instanceContext;
     
-    /**
-     * Create meta data contexts.
-     *
-     * @param param context manager builder parameter
-     * @return meta data contexts
-     * @throws SQLException SQL exception
-     */
+    @Override
     public MetaDataContexts create(final ContextManagerBuilderParameter param) 
throws SQLException {
         Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = 
createEffectiveDatabaseConfigurations(getDatabaseNames(param.getDatabaseConfigs()),
 param.getDatabaseConfigs());
         Collection<RuleConfiguration> globalRuleConfigs = 
persistService.getGlobalRuleService().load();
@@ -70,7 +58,7 @@ public final class RegisterCenterMetaDataContextsFactory {
         Map<String, DataSource> globalDataSources = 
param.getGlobalDataSources();
         ConfigurationProperties props = new 
ConfigurationProperties(persistService.getPropsService().load());
         Collection<ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(effectiveDatabaseConfigs, 
loadSchemas(effectiveDatabaseConfigs.keySet()), props, instanceContext);
-        return createMetaDataContexts(globalRuleConfigs, globalDataSources, 
databases, props);
+        return create(globalRuleConfigs, globalDataSources, databases, props, 
persistService);
     }
     
     private Collection<String> getDatabaseNames(final Map<String, 
DatabaseConfiguration> databaseConfigs) {
@@ -99,12 +87,4 @@ public final class RegisterCenterMetaDataContextsFactory {
     private Map<String, Collection<ShardingSphereSchema>> loadSchemas(final 
Collection<String> databaseNames) {
         return databaseNames.stream().collect(Collectors.toMap(each -> each, 
each -> persistService.getDatabaseMetaDataFacade().getSchema().load(each)));
     }
-    
-    private MetaDataContexts createMetaDataContexts(final 
Collection<RuleConfiguration> globalRuleConfigs, final Map<String, DataSource> 
globalDataSources,
-                                                    final 
Collection<ShardingSphereDatabase> databases, final ConfigurationProperties 
props) {
-        Collection<ShardingSphereRule> globalRules = 
GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props);
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, new ResourceMetaData(globalDataSources), new 
RuleMetaData(globalRules), props);
-        ShardingSphereStatistics statistics = 
ShardingSphereStatisticsFactory.create(metaData, 
persistService.getShardingSphereDataPersistService().load(metaData));
-        return new MetaDataContexts(metaData, statistics);
-    }
 }

Reply via email to