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 36165d64bd0 Refactor metadata NodePathGenerator from static to 
instance (#34691)
36165d64bd0 is described below

commit 36165d64bd0546e4c8e0bdb15d6053ee35b027a8
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Feb 16 12:04:38 2025 +0800

    Refactor metadata NodePathGenerator from static to instance (#34691)
    
    * Refactor metadata NodePathGenerator from static to instance
    
    * Refactor metadata NodePathGenerator from static to instance
---
 .../database/DataSourceUnitPersistService.java     | 11 ++++----
 .../database/DatabaseRulePersistService.java       | 10 ++++----
 .../config/global/GlobalRulePersistService.java    |  6 ++---
 .../config/global/PropertiesPersistService.java    |  6 ++---
 .../service/DatabaseMetaDataPersistService.java    |  6 ++---
 .../service/SchemaMetaDataPersistService.java      |  6 ++---
 .../service/TableMetaDataPersistService.java       | 11 ++++----
 .../service/ViewMetaDataPersistService.java        | 11 ++++----
 .../mode/manager/ContextManagerTest.java           |  2 +-
 .../global/GlobalPropertiesNodePathGenerator.java  |  7 ++---
 .../global/GlobalPropertiesNodePathParser.java     |  2 +-
 .../config/global/GlobalRuleNodePathGenerator.java |  9 +++----
 .../config/global/GlobalRuleNodePathParser.java    |  2 +-
 .../path/metadata/DatabaseNodePathGenerator.java   |  8 ++----
 .../node/path/metadata/DatabaseNodePathParser.java |  2 +-
 .../metadata/database/SchemaNodePathGenerator.java | 17 ++++++------
 .../metadata/database/SchemaNodePathParser.java    |  2 +-
 .../metadata/database/TableNodePathGenerator.java  | 30 +++++++++++-----------
 .../metadata/database/TableNodePathParser.java     |  4 +--
 .../metadata/database/ViewNodePathGenerator.java   | 30 +++++++++++-----------
 .../path/metadata/database/ViewNodePathParser.java |  4 +--
 .../rule/DatabaseRuleNodePathGenerator.java        | 27 +++++++++----------
 .../storage/DataSourceNodePathGenerator.java       | 12 ++++-----
 .../metadata/storage/DataSourceNodePathParser.java |  2 +-
 .../storage/StorageNodeNodePathGenerator.java      | 22 ++++++++--------
 .../storage/StorageNodeNodePathParser.java         |  4 +--
 .../storage/StorageUnitNodePathGenerator.java      | 22 ++++++++--------
 .../storage/StorageUnitNodePathParser.java         |  7 ++---
 .../GlobalPropertiesNodePathGeneratorTest.java     | 10 +++++---
 .../global/GlobalRuleNodePathGeneratorTest.java    | 12 +++++----
 .../metadata/DatabaseNodePathGeneratorTest.java    |  4 +--
 .../database/SchemaNodePathGeneratorTest.java      |  4 +--
 .../database/TableNodePathGeneratorTest.java       | 12 ++++-----
 .../database/ViewNodePathGeneratorTest.java        | 12 ++++-----
 .../rule/DatabaseRuleNodePathGeneratorTest.java    | 17 ++++++------
 .../storage/DataSourceNodePathGeneratorTest.java   |  2 +-
 .../storage/StorageNodeNodePathGeneratorTest.java  | 13 +++++-----
 .../storage/StorageUnitNodePathGeneratorTest.java  | 13 +++++-----
 .../type/DatabaseListenerChangedHandler.java       |  4 +--
 .../global/type/GlobalRuleChangedHandler.java      |  2 +-
 .../global/type/PropertiesChangedHandler.java      |  2 +-
 .../listener/DataChangedEventListenerRegistry.java |  2 +-
 42 files changed, 189 insertions(+), 202 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
index 9db416da925..0021abc76c5 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
@@ -55,7 +55,7 @@ public final class DataSourceUnitPersistService {
      * @return data source pool properties map
      */
     public Map<String, DataSourcePoolProperties> load(final String 
databaseName) {
-        Collection<String> childrenKeys = 
repository.getChildrenKeys(StorageUnitNodePathGenerator.getRootPath(databaseName));
+        Collection<String> childrenKeys = repository.getChildrenKeys(new 
StorageUnitNodePathGenerator(databaseName).getRootPath());
         return childrenKeys.stream().collect(Collectors.toMap(each -> each, 
each -> load(databaseName, each), (a, b) -> b, () -> new 
LinkedHashMap<>(childrenKeys.size(), 1F)));
     }
     
@@ -68,8 +68,9 @@ public final class DataSourceUnitPersistService {
      */
     @SuppressWarnings("unchecked")
     public DataSourcePoolProperties load(final String databaseName, final 
String dataSourceName) {
-        int activeVersion = 
Integer.parseInt(repository.query(StorageUnitNodePathGenerator.getVersion(databaseName,
 dataSourceName).getActiveVersionPath()));
-        String dataSourceContent = 
repository.query(StorageUnitNodePathGenerator.getVersion(databaseName, 
dataSourceName).getVersionPath(activeVersion));
+        VersionNodePathGenerator versionNodePathGenerator = new 
StorageUnitNodePathGenerator(databaseName).getVersion(dataSourceName);
+        int activeVersion = 
Integer.parseInt(repository.query(versionNodePathGenerator.getActiveVersionPath()));
+        String dataSourceContent = 
repository.query(versionNodePathGenerator.getVersionPath(activeVersion));
         return 
yamlDataSourceConfigurationSwapper.swapToDataSourcePoolProperties(YamlEngine.unmarshal(dataSourceContent,
 Map.class));
     }
     
@@ -81,7 +82,7 @@ public final class DataSourceUnitPersistService {
      */
     public void persist(final String databaseName, final Map<String, 
DataSourcePoolProperties> dataSourcePropsMap) {
         for (Entry<String, DataSourcePoolProperties> entry : 
dataSourcePropsMap.entrySet()) {
-            VersionNodePathGenerator versionNodePathGenerator = 
StorageUnitNodePathGenerator.getVersion(databaseName, entry.getKey());
+            VersionNodePathGenerator versionNodePathGenerator = new 
StorageUnitNodePathGenerator(databaseName).getVersion(entry.getKey());
             metaDataVersionPersistService.persist(versionNodePathGenerator, 
YamlEngine.marshal(yamlDataSourceConfigurationSwapper.swapToMap(entry.getValue())));
         }
     }
@@ -93,6 +94,6 @@ public final class DataSourceUnitPersistService {
      * @param dataSourceName data source name
      */
     public void delete(final String databaseName, final String dataSourceName) 
{
-        
repository.delete(StorageUnitNodePathGenerator.getStorageUnitPath(databaseName, 
dataSourceName));
+        repository.delete(new 
StorageUnitNodePathGenerator(databaseName).getStorageUnitPath(dataSourceName));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
index 43492938707..8f7a21bd2db 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
@@ -67,7 +67,7 @@ public final class DatabaseRulePersistService {
      * @return configurations
      */
     public Collection<RuleConfiguration> load(final String databaseName) {
-        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfigurations(repositoryTuplePersistService.load(DatabaseRuleNodePathGenerator.getRootPath(databaseName)));
+        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfigurations(repositoryTuplePersistService.load(new
 DatabaseRuleNodePathGenerator(databaseName).getRootPath()));
     }
     
     /**
@@ -92,9 +92,9 @@ public final class DatabaseRulePersistService {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
             DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem(each.getKey());
-            VersionNodePathGenerator versionNodePathGenerator = 
DatabaseRuleNodePathGenerator.getVersion(databaseName, ruleType, 
databaseRuleItem);
+            VersionNodePathGenerator versionNodePathGenerator = new 
DatabaseRuleNodePathGenerator(databaseName).getVersion(ruleType, 
databaseRuleItem);
             int nextVersion = 
metaDataVersionPersistService.persist(versionNodePathGenerator, 
each.getValue());
-            result.add(new 
MetaDataVersion(DatabaseRuleNodePathGenerator.getRulePath(databaseName, 
ruleType, databaseRuleItem), Math.max(MetaDataVersion.INIT_VERSION, nextVersion 
- 1)));
+            result.add(new MetaDataVersion(new 
DatabaseRuleNodePathGenerator(databaseName).getRulePath(ruleType, 
databaseRuleItem), Math.max(MetaDataVersion.INIT_VERSION, nextVersion - 1)));
         }
         return result;
     }
@@ -106,7 +106,7 @@ public final class DatabaseRulePersistService {
      * @param ruleType rule type
      */
     public void delete(final String databaseName, final String ruleType) {
-        
repository.delete(DatabaseRuleNodePathGenerator.getRulePath(databaseName, 
ruleType));
+        repository.delete(new 
DatabaseRuleNodePathGenerator(databaseName).getRulePath(ruleType));
     }
     
     /**
@@ -132,7 +132,7 @@ public final class DatabaseRulePersistService {
     private Collection<MetaDataVersion> delete(final String databaseName, 
final String ruleType, final Collection<RepositoryTuple> repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            String toBeDeletedKey = 
DatabaseRuleNodePathGenerator.getRulePath(databaseName, ruleType, new 
DatabaseRuleItem(each.getKey()));
+            String toBeDeletedKey = new 
DatabaseRuleNodePathGenerator(databaseName).getRulePath(ruleType, new 
DatabaseRuleItem(each.getKey()));
             repository.delete(toBeDeletedKey);
             result.add(new MetaDataVersion(toBeDeletedKey));
         }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
index 4f47ac6aff8..d1754fa4b32 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
@@ -57,7 +57,7 @@ public final class GlobalRulePersistService {
      * @return global rule configurations
      */
     public Collection<RuleConfiguration> load() {
-        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfigurations(repositoryTuplePersistService.load(GlobalRuleNodePathGenerator.getRootPath()));
+        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfigurations(repositoryTuplePersistService.load(new
 GlobalRuleNodePathGenerator().getRootPath()));
     }
     
     /**
@@ -67,7 +67,7 @@ public final class GlobalRulePersistService {
      * @return global rule configuration
      */
     public Optional<RuleConfiguration> load(final String ruleType) {
-        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfiguration(ruleType, 
repositoryTuplePersistService.load(GlobalRuleNodePathGenerator.getRulePath(ruleType)));
+        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfiguration(ruleType, 
repositoryTuplePersistService.load(new 
GlobalRuleNodePathGenerator().getRulePath(ruleType)));
     }
     
     /**
@@ -83,7 +83,7 @@ public final class GlobalRulePersistService {
     
     private void persistTuples(final Collection<RepositoryTuple> tuples) {
         for (RepositoryTuple each : tuples) {
-            VersionNodePathGenerator versionNodePathGenerator = 
GlobalRuleNodePathGenerator.getVersion(each.getKey());
+            VersionNodePathGenerator versionNodePathGenerator = new 
GlobalRuleNodePathGenerator().getVersion(each.getKey());
             metaDataVersionPersistService.persist(versionNodePathGenerator, 
each.getValue());
         }
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
index 681148ce76f..63cdfd65684 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
@@ -45,12 +45,12 @@ public final class PropertiesPersistService {
      */
     public Properties load() {
         return loadActiveVersion()
-                .map(optional -> 
YamlEngine.unmarshal(repository.query(GlobalPropertiesNodePathGenerator.getVersion().getVersionPath(optional)),
 Properties.class))
+                .map(optional -> YamlEngine.unmarshal(repository.query(new 
GlobalPropertiesNodePathGenerator().getVersion().getVersionPath(optional)), 
Properties.class))
                 .orElse(new Properties());
     }
     
     private Optional<Integer> loadActiveVersion() {
-        String value = 
repository.query(GlobalPropertiesNodePathGenerator.getVersion().getActiveVersionPath());
+        String value = repository.query(new 
GlobalPropertiesNodePathGenerator().getVersion().getActiveVersionPath());
         return Strings.isNullOrEmpty(value) ? Optional.empty() : 
Optional.of(Integer.parseInt(value));
     }
     
@@ -60,7 +60,7 @@ public final class PropertiesPersistService {
      * @param props properties
      */
     public void persist(final Properties props) {
-        VersionNodePathGenerator versionNodePathGenerator = 
GlobalPropertiesNodePathGenerator.getVersion();
+        VersionNodePathGenerator versionNodePathGenerator = new 
GlobalPropertiesNodePathGenerator().getVersion();
         metaDataVersionPersistService.persist(versionNodePathGenerator, 
YamlEngine.marshal(props));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
index 458ccdcb352..82dbb753b13 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
@@ -37,7 +37,7 @@ public final class DatabaseMetaDataPersistService {
      * @param databaseName to be added database name
      */
     public void add(final String databaseName) {
-        
repository.persist(DatabaseNodePathGenerator.getDatabasePath(databaseName), "");
+        repository.persist(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), "");
     }
     
     /**
@@ -46,7 +46,7 @@ public final class DatabaseMetaDataPersistService {
      * @param databaseName to be dropped database name
      */
     public void drop(final String databaseName) {
-        
repository.delete(DatabaseNodePathGenerator.getDatabasePath(databaseName));
+        repository.delete(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName));
     }
     
     /**
@@ -55,6 +55,6 @@ public final class DatabaseMetaDataPersistService {
      * @return loaded database names
      */
     public Collection<String> loadAllDatabaseNames() {
-        return 
repository.getChildrenKeys(DatabaseNodePathGenerator.getRootPath());
+        return repository.getChildrenKeys(new 
DatabaseNodePathGenerator().getRootPath());
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
index ce54be7dec4..e7cfac67827 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
@@ -52,7 +52,7 @@ public final class SchemaMetaDataPersistService {
      * @param schemaName to be added schema name
      */
     public void add(final String databaseName, final String schemaName) {
-        repository.persist(TableNodePathGenerator.getRootPath(databaseName, 
schemaName), "");
+        repository.persist(new TableNodePathGenerator(databaseName, 
schemaName).getRootPath(), "");
     }
     
     /**
@@ -62,7 +62,7 @@ public final class SchemaMetaDataPersistService {
      * @param schemaName to be dropped schema name
      */
     public void drop(final String databaseName, final String schemaName) {
-        repository.delete(SchemaNodePathGenerator.getSchemaPath(databaseName, 
schemaName));
+        repository.delete(new 
SchemaNodePathGenerator(databaseName).getSchemaPath(schemaName));
     }
     
     /**
@@ -112,7 +112,7 @@ public final class SchemaMetaDataPersistService {
      * @return schemas
      */
     public Collection<ShardingSphereSchema> load(final String databaseName) {
-        return 
repository.getChildrenKeys(SchemaNodePathGenerator.getRootPath(databaseName)).stream()
+        return repository.getChildrenKeys(new 
SchemaNodePathGenerator(databaseName).getRootPath()).stream()
                 .map(each -> new ShardingSphereSchema(each, 
tableMetaDataPersistService.load(databaseName, each), 
viewMetaDataPersistService.load(databaseName, 
each))).collect(Collectors.toList());
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
index 2f2d8df0188..e1bfd5b7c57 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
@@ -50,7 +50,7 @@ public final class TableMetaDataPersistService {
      * @return loaded tables
      */
     public Collection<ShardingSphereTable> load(final String databaseName, 
final String schemaName) {
-        return 
repository.getChildrenKeys(TableNodePathGenerator.getRootPath(databaseName, 
schemaName)).stream().map(each -> load(databaseName, schemaName, each))
+        return repository.getChildrenKeys(new 
TableNodePathGenerator(databaseName, 
schemaName).getRootPath()).stream().map(each -> load(databaseName, schemaName, 
each))
                 .collect(Collectors.toList());
     }
     
@@ -63,8 +63,9 @@ public final class TableMetaDataPersistService {
      * @return loaded table
      */
     public ShardingSphereTable load(final String databaseName, final String 
schemaName, final String tableName) {
-        int activeVersion = 
Integer.parseInt(repository.query(TableNodePathGenerator.getVersion(databaseName,
 schemaName, tableName).getActiveVersionPath()));
-        String tableContent = 
repository.query(TableNodePathGenerator.getVersion(databaseName, schemaName, 
tableName).getVersionPath(activeVersion));
+        VersionNodePathGenerator versionNodePathGenerator = new 
TableNodePathGenerator(databaseName, schemaName).getVersion(tableName);
+        int activeVersion = 
Integer.parseInt(repository.query(versionNodePathGenerator.getActiveVersionPath()));
+        String tableContent = 
repository.query(versionNodePathGenerator.getVersionPath(activeVersion));
         return swapper.swapToObject(YamlEngine.unmarshal(tableContent, 
YamlShardingSphereTable.class));
     }
     
@@ -78,7 +79,7 @@ public final class TableMetaDataPersistService {
     public void persist(final String databaseName, final String schemaName, 
final Collection<ShardingSphereTable> tables) {
         for (ShardingSphereTable each : tables) {
             String tableName = each.getName().toLowerCase();
-            VersionNodePathGenerator versionNodePathGenerator = 
TableNodePathGenerator.getVersion(databaseName, schemaName, tableName);
+            VersionNodePathGenerator versionNodePathGenerator = new 
TableNodePathGenerator(databaseName, schemaName).getVersion(tableName);
             metaDataVersionPersistService.persist(versionNodePathGenerator, 
YamlEngine.marshal(swapper.swapToYamlConfiguration(each)));
         }
     }
@@ -91,7 +92,7 @@ public final class TableMetaDataPersistService {
      * @param tableName to be dropped table name
      */
     public void drop(final String databaseName, final String schemaName, final 
String tableName) {
-        repository.delete(TableNodePathGenerator.getTablePath(databaseName, 
schemaName, tableName.toLowerCase()));
+        repository.delete(new TableNodePathGenerator(databaseName, 
schemaName).getTablePath(tableName.toLowerCase()));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
index 50700ae10e0..7478dad912b 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
@@ -50,7 +50,7 @@ public final class ViewMetaDataPersistService {
      * @return loaded views
      */
     public Collection<ShardingSphereView> load(final String databaseName, 
final String schemaName) {
-        return 
repository.getChildrenKeys(ViewNodePathGenerator.getRootPath(databaseName, 
schemaName)).stream().map(each -> load(databaseName, schemaName, each))
+        return repository.getChildrenKeys(new 
ViewNodePathGenerator(databaseName, 
schemaName).getRootPath()).stream().map(each -> load(databaseName, schemaName, 
each))
                 .collect(Collectors.toList());
     }
     
@@ -63,8 +63,9 @@ public final class ViewMetaDataPersistService {
      * @return loaded view
      */
     public ShardingSphereView load(final String databaseName, final String 
schemaName, final String viewName) {
-        int activeVersion = 
Integer.parseInt(repository.query(ViewNodePathGenerator.getVersion(databaseName,
 schemaName, viewName).getActiveVersionPath()));
-        String view = 
repository.query(ViewNodePathGenerator.getVersion(databaseName, schemaName, 
viewName).getVersionPath(activeVersion));
+        VersionNodePathGenerator versionNodePathGenerator = new 
ViewNodePathGenerator(databaseName, schemaName).getVersion(viewName);
+        int activeVersion = 
Integer.parseInt(repository.query(versionNodePathGenerator.getActiveVersionPath()));
+        String view = 
repository.query(versionNodePathGenerator.getVersionPath(activeVersion));
         return swapper.swapToObject(YamlEngine.unmarshal(view, 
YamlShardingSphereView.class));
     }
     
@@ -78,7 +79,7 @@ public final class ViewMetaDataPersistService {
     public void persist(final String databaseName, final String schemaName, 
final Collection<ShardingSphereView> views) {
         for (ShardingSphereView each : views) {
             String viewName = each.getName().toLowerCase();
-            VersionNodePathGenerator versionNodePathGenerator = 
ViewNodePathGenerator.getVersion(databaseName, schemaName, viewName);
+            VersionNodePathGenerator versionNodePathGenerator = new 
ViewNodePathGenerator(databaseName, schemaName).getVersion(viewName);
             metaDataVersionPersistService.persist(versionNodePathGenerator, 
YamlEngine.marshal(swapper.swapToYamlConfiguration(each)));
         }
     }
@@ -91,6 +92,6 @@ public final class ViewMetaDataPersistService {
      * @param viewName to be dropped view name
      */
     public void drop(final String databaseName, final String schemaName, final 
String viewName) {
-        repository.delete(ViewNodePathGenerator.getViewPath(databaseName, 
schemaName, viewName.toLowerCase()));
+        repository.delete(new ViewNodePathGenerator(databaseName, 
schemaName).getViewPath(viewName.toLowerCase()));
     }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index d50681a0abd..d86f3402ba0 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -146,7 +146,7 @@ class ContextManagerTest {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getName()).thenReturn("foo_db");
         ShardingSphereDatabase database = mockDatabase();
         contextManager.reloadSchema(database, "foo_schema", "foo_ds");
-        
verify(contextManager.getPersistServiceFacade().getRepository()).delete(SchemaNodePathGenerator.getSchemaPath("foo_db",
 "foo_schema"));
+        
verify(contextManager.getPersistServiceFacade().getRepository()).delete(new 
SchemaNodePathGenerator("foo_db").getSchemaPath("foo_schema"));
     }
     
     @Test
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
index 7f2b35a31ec..e63c5ada304 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
@@ -17,14 +17,11 @@
 
 package org.apache.shardingsphere.mode.node.path.config.global;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Global properties node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class GlobalPropertiesNodePathGenerator {
     
     private static final String ROOT_NODE = "/props";
@@ -34,7 +31,7 @@ public final class GlobalPropertiesNodePathGenerator {
      *
      * @return properties path
      */
-    public static String getRootPath() {
+    public String getRootPath() {
         return ROOT_NODE;
     }
     
@@ -43,7 +40,7 @@ public final class GlobalPropertiesNodePathGenerator {
      *
      * @return properties version node path generator
      */
-    public static VersionNodePathGenerator getVersion() {
+    public VersionNodePathGenerator getVersion() {
         return new VersionNodePathGenerator(getRootPath());
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
index 5cecfabbad4..e8a9a54b774 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathParser.java
@@ -27,7 +27,7 @@ import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathParser;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class GlobalPropertiesNodePathParser {
     
-    private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(GlobalPropertiesNodePathGenerator.getRootPath());
+    private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(new GlobalPropertiesNodePathGenerator().getRootPath());
     
     /**
      * Get properties version node path parser.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
index 172fe3482cf..f6ec2b4b5ac 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
@@ -17,14 +17,11 @@
 
 package org.apache.shardingsphere.mode.node.path.config.global;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Global props node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class GlobalRuleNodePathGenerator {
     
     private static final String ROOT_NODE = "/rules";
@@ -34,7 +31,7 @@ public final class GlobalRuleNodePathGenerator {
      *
      * @return global rule root path
      */
-    public static String getRootPath() {
+    public String getRootPath() {
         return ROOT_NODE;
     }
     
@@ -44,7 +41,7 @@ public final class GlobalRuleNodePathGenerator {
      * @param ruleType rule type
      * @return global rule path
      */
-    public static String getRulePath(final String ruleType) {
+    public String getRulePath(final String ruleType) {
         return String.join("/", getRootPath(), ruleType);
     }
     
@@ -54,7 +51,7 @@ public final class GlobalRuleNodePathGenerator {
      * @param ruleType rule type
      * @return global rule version node path generator
      */
-    public static VersionNodePathGenerator getVersion(final String ruleType) {
+    public VersionNodePathGenerator getVersion(final String ruleType) {
         return new VersionNodePathGenerator(getRulePath(ruleType));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
index b20948e3404..cc6260d842b 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathParser.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathParser;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class GlobalRuleNodePathParser {
     
-    private static final VersionNodePathParser PARSER = new 
VersionNodePathParser(GlobalRuleNodePathGenerator.getRootPath() + "/" + 
NodePathPattern.IDENTIFIER);
+    private static final VersionNodePathParser PARSER = new 
VersionNodePathParser(new GlobalRuleNodePathGenerator().getRootPath() + "/" + 
NodePathPattern.IDENTIFIER);
     
     /**
      * Get global rule version node path parser.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
index fbc59eb269e..b1b63141c4b 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
@@ -17,13 +17,9 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
 /**
  * Database node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class DatabaseNodePathGenerator {
     
     private static final String ROOT_NODE = "/metadata";
@@ -33,7 +29,7 @@ public final class DatabaseNodePathGenerator {
      *
      * @return schema root path
      */
-    public static String getRootPath() {
+    public String getRootPath() {
         return ROOT_NODE;
     }
     
@@ -43,7 +39,7 @@ public final class DatabaseNodePathGenerator {
      * @param databaseName database name
      * @return database path
      */
-    public static String getDatabasePath(final String databaseName) {
+    public String getDatabasePath(final String databaseName) {
         return String.join("/", ROOT_NODE, databaseName);
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
index c863c1f78cf..a65db5e2198 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
@@ -31,7 +31,7 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class DatabaseNodePathParser {
     
-    private static final Pattern DATABASE_PATTERN = 
Pattern.compile(DatabaseNodePathGenerator.getDatabasePath(NodePathPattern.IDENTIFIER)
 + "?", Pattern.CASE_INSENSITIVE);
+    private static final Pattern DATABASE_PATTERN = Pattern.compile(new 
DatabaseNodePathGenerator().getDatabasePath(NodePathPattern.IDENTIFIER) + "?", 
Pattern.CASE_INSENSITIVE);
     
     /**
      * Find database name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
index 24cc6fde30e..caa02577573 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
@@ -17,36 +17,35 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.database;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseNodePathGenerator;
 
 /**
  * Schema node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@RequiredArgsConstructor
 public final class SchemaNodePathGenerator {
     
     private static final String SCHEMAS_NODE = "schemas";
     
+    private final String databaseName;
+    
     /**
      * Get schema root path.
      *
-     * @param databaseName database name
      * @return schema root path
      */
-    public static String getRootPath(final String databaseName) {
-        return String.join("/", 
DatabaseNodePathGenerator.getDatabasePath(databaseName), SCHEMAS_NODE);
+    public String getRootPath() {
+        return String.join("/", new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), SCHEMAS_NODE);
     }
     
     /**
      * Get schema path.
      *
-     * @param databaseName database name
      * @param schemaName schema name
      * @return schema path
      */
-    public static String getSchemaPath(final String databaseName, final String 
schemaName) {
-        return String.join("/", getRootPath(databaseName), schemaName);
+    public String getSchemaPath(final String schemaName) {
+        return String.join("/", getRootPath(), schemaName);
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
index 0ff422438df..67d06a5bc7e 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
@@ -40,7 +40,7 @@ public final class SchemaNodePathParser {
      */
     public static Optional<String> findSchemaName(final String path, final 
boolean containsChildPath) {
         String endPattern = containsChildPath ? "?" : "$";
-        Pattern pattern = 
Pattern.compile(SchemaNodePathGenerator.getSchemaPath(NodePathPattern.IDENTIFIER,
 NodePathPattern.IDENTIFIER) + endPattern, Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(new 
SchemaNodePathGenerator(NodePathPattern.IDENTIFIER).getSchemaPath(NodePathPattern.IDENTIFIER)
 + endPattern, Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
     }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
index 0c9bbf40fa8..d98ed1ee54e 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
@@ -17,50 +17,50 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.database;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Table node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class TableNodePathGenerator {
     
     private static final String TABLES_NODE = "tables";
     
+    private final SchemaNodePathGenerator schemaNodePathGenerator;
+    
+    private final String schemaName;
+    
+    public TableNodePathGenerator(final String databaseName, final String 
schemaName) {
+        schemaNodePathGenerator = new SchemaNodePathGenerator(databaseName);
+        this.schemaName = schemaName;
+    }
+    
     /**
      * Get table root path.
      *
-     * @param databaseName database name
-     * @param schemaName schema name
      * @return table root path
      */
-    public static String getRootPath(final String databaseName, final String 
schemaName) {
-        return String.join("/", 
SchemaNodePathGenerator.getSchemaPath(databaseName, schemaName), TABLES_NODE);
+    public String getRootPath() {
+        return String.join("/", 
schemaNodePathGenerator.getSchemaPath(schemaName), TABLES_NODE);
     }
     
     /**
      * Get table path.
      *
-     * @param databaseName database name
-     * @param schemaName schema name
      * @param tableName table name
      * @return table path
      */
-    public static String getTablePath(final String databaseName, final String 
schemaName, final String tableName) {
-        return String.join("/", getRootPath(databaseName, schemaName), 
tableName);
+    public String getTablePath(final String tableName) {
+        return String.join("/", getRootPath(), tableName);
     }
     
     /**
      * Get table version node path generator.
      *
-     * @param databaseName database name
-     * @param schemaName schema name
      * @param tableName table name
      * @return table version node path generator
      */
-    public static VersionNodePathGenerator getVersion(final String 
databaseName, final String schemaName, final String tableName) {
-        return new VersionNodePathGenerator(getTablePath(databaseName, 
schemaName, tableName));
+    public VersionNodePathGenerator getVersion(final String tableName) {
+        return new VersionNodePathGenerator(getTablePath(tableName));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
index f1033b050f1..9ad6efa37df 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
@@ -33,10 +33,10 @@ import java.util.regex.Pattern;
 public final class TableNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            TableNodePathGenerator.getTablePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
+            new TableNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getTablePath(NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            TableNodePathGenerator.getTablePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER));
+            new TableNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getTablePath(NodePathPattern.IDENTIFIER));
     
     /**
      * Find table name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
index 5d67828e1d2..c9342a36074 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
@@ -17,50 +17,50 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.database;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * View path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class ViewNodePathGenerator {
     
     private static final String VIEWS_NODE = "views";
     
+    private final SchemaNodePathGenerator schemaNodePathGenerator;
+    
+    private final String schemaName;
+    
+    public ViewNodePathGenerator(final String databaseName, final String 
schemaName) {
+        schemaNodePathGenerator = new SchemaNodePathGenerator(databaseName);
+        this.schemaName = schemaName;
+    }
+    
     /**
      * Get view root path.
      *
-     * @param databaseName database name
-     * @param schemaName schema name
      * @return view root path
      */
-    public static String getRootPath(final String databaseName, final String 
schemaName) {
-        return String.join("/", 
SchemaNodePathGenerator.getSchemaPath(databaseName, schemaName), VIEWS_NODE);
+    public String getRootPath() {
+        return String.join("/", 
schemaNodePathGenerator.getSchemaPath(schemaName), VIEWS_NODE);
     }
     
     /**
      * Get view path.
      *
-     * @param databaseName database name
-     * @param schemaName schema name
      * @param viewName view name
      * @return view path
      */
-    public static String getViewPath(final String databaseName, final String 
schemaName, final String viewName) {
-        return String.join("/", getRootPath(databaseName, schemaName), 
viewName);
+    public String getViewPath(final String viewName) {
+        return String.join("/", getRootPath(), viewName);
     }
     
     /**
      * Get view version node path generator.
      *
-     * @param databaseName database name
-     * @param schemaName schema name
      * @param viewName view name
      * @return view version node path generator
      */
-    public static VersionNodePathGenerator getVersion(final String 
databaseName, final String schemaName, final String viewName) {
-        return new VersionNodePathGenerator(getViewPath(databaseName, 
schemaName, viewName));
+    public VersionNodePathGenerator getVersion(final String viewName) {
+        return new VersionNodePathGenerator(getViewPath(viewName));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
index 76690382ec6..ae94e8055b0 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
@@ -33,10 +33,10 @@ import java.util.regex.Pattern;
 public final class ViewNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            ViewNodePathGenerator.getViewPath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
+            new ViewNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getViewPath(NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            ViewNodePathGenerator.getViewPath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER));
+            new ViewNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getViewPath(NodePathPattern.IDENTIFIER));
     
     /**
      * Get view name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
index 6941f97deb3..d562bcd0072 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
@@ -17,8 +17,7 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.rule;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseNodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
@@ -26,53 +25,51 @@ import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator
 /**
  * Database rule node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@RequiredArgsConstructor
 public final class DatabaseRuleNodePathGenerator {
     
     private static final String RULE_NODE = "rules";
     
+    private final String databaseName;
+    
     /**
      * Get database root path.
      *
-     * @param databaseName database name
      * @return database root path
      */
-    public static String getRootPath(final String databaseName) {
-        return String.join("/", DatabaseNodePathGenerator.getRootPath(), 
databaseName, RULE_NODE);
+    public String getRootPath() {
+        return String.join("/", new DatabaseNodePathGenerator().getRootPath(), 
databaseName, RULE_NODE);
     }
     
     /**
      * Get database rule path.
      *
-     * @param databaseName database name
      * @param ruleType rule type
      * @return database rule path
      */
-    public static String getRulePath(final String databaseName, final String 
ruleType) {
-        return String.join("/", getRootPath(databaseName), ruleType);
+    public String getRulePath(final String ruleType) {
+        return String.join("/", getRootPath(), ruleType);
     }
     
     /**
      * Get database rule path.
      *
-     * @param databaseName database name
      * @param ruleType rule type
      * @param databaseRuleItem database rule item
      * @return database rule path
      */
-    public static String getRulePath(final String databaseName, final String 
ruleType, final DatabaseRuleItem databaseRuleItem) {
-        return String.join("/", getRulePath(databaseName, ruleType), 
databaseRuleItem.toString());
+    public String getRulePath(final String ruleType, final DatabaseRuleItem 
databaseRuleItem) {
+        return String.join("/", getRulePath(ruleType), 
databaseRuleItem.toString());
     }
     
     /**
      * Get database rule version node path generator.
      *
-     * @param databaseName database name
      * @param ruleType rule type
      * @param databaseRuleItem database rule item
      * @return database rule version node path generator
      */
-    public static VersionNodePathGenerator getVersion(final String 
databaseName, final String ruleType, final DatabaseRuleItem databaseRuleItem) {
-        return new VersionNodePathGenerator(getRulePath(databaseName, 
ruleType, databaseRuleItem));
+    public VersionNodePathGenerator getVersion(final String ruleType, final 
DatabaseRuleItem databaseRuleItem) {
+        return new VersionNodePathGenerator(getRulePath(ruleType, 
databaseRuleItem));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
index c7145b53707..e2e8be73ab2 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
@@ -17,25 +17,25 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseNodePathGenerator;
 
 /**
  * Data source node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@RequiredArgsConstructor
 public final class DataSourceNodePathGenerator {
     
     private static final String DATA_SOURCES_NODE = "data_sources";
     
+    private final String databaseName;
+    
     /**
      * Get data source root path.
      *
-     * @param databaseName database name
      * @return data source root path
      */
-    public static String getRootPath(final String databaseName) {
-        return String.join("/", DatabaseNodePathGenerator.getRootPath(), 
databaseName, DATA_SOURCES_NODE);
+    public String getRootPath() {
+        return String.join("/", new DatabaseNodePathGenerator().getRootPath(), 
databaseName, DATA_SOURCES_NODE);
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
index 1b35e9c307f..69bbb869719 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathParser.java
@@ -29,7 +29,7 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class DataSourceNodePathParser {
     
-    private static final Pattern PATTERN = 
Pattern.compile(DataSourceNodePathGenerator.getRootPath(NodePathPattern.IDENTIFIER)
 + "?", Pattern.CASE_INSENSITIVE);
+    private static final Pattern PATTERN = Pattern.compile(new 
DataSourceNodePathGenerator(NodePathPattern.IDENTIFIER).getRootPath() + "?", 
Pattern.CASE_INSENSITIVE);
     
     /**
      * Is data source path.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
index 07353a9b7cd..02bb68d2c63 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
@@ -17,47 +17,45 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Storage node node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@RequiredArgsConstructor
 public final class StorageNodeNodePathGenerator {
     
     private static final String NODES_NODE = "nodes";
     
+    private final String databaseName;
+    
     /**
      * Get storage node root path.
      *
-     * @param databaseName database name
      * @return storage node root path
      */
-    public static String getRootPath(final String databaseName) {
-        return String.join("/", 
DataSourceNodePathGenerator.getRootPath(databaseName), NODES_NODE);
+    public String getRootPath() {
+        return String.join("/", new 
DataSourceNodePathGenerator(databaseName).getRootPath(), NODES_NODE);
     }
     
     /**
      * Get storage node path.
      *
-     * @param databaseName database name
      * @param storageNodeName storage node name
      * @return storage node path
      */
-    public static String getStorageNodePath(final String databaseName, final 
String storageNodeName) {
-        return String.join("/", getRootPath(databaseName), storageNodeName);
+    public String getStorageNodePath(final String storageNodeName) {
+        return String.join("/", getRootPath(), storageNodeName);
     }
     
     /**
      * Get storage node version node path generator.
      *
-     * @param databaseName database name
      * @param storageNodeName storage node name
      * @return storage node version node path generator
      */
-    public static VersionNodePathGenerator getVersion(final String 
databaseName, final String storageNodeName) {
-        return new VersionNodePathGenerator(String.join("/", 
getRootPath(databaseName), storageNodeName));
+    public VersionNodePathGenerator getVersion(final String storageNodeName) {
+        return new VersionNodePathGenerator(String.join("/", getRootPath(), 
storageNodeName));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
index abed4fd52a6..c7df6e13273 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
@@ -32,10 +32,10 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class StorageNodeNodePathParser {
     
-    private static final Pattern PATTERN = 
Pattern.compile(StorageNodeNodePathGenerator.getStorageNodePath(NodePathPattern.IDENTIFIER,
 NodePathPattern.IDENTIFIER) + "$", Pattern.CASE_INSENSITIVE);
+    private static final Pattern PATTERN = Pattern.compile(new 
StorageNodeNodePathGenerator(NodePathPattern.IDENTIFIER).getStorageNodePath(NodePathPattern.IDENTIFIER)
 + "$", Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER =
-            new VersionNodePathParser(String.join("/", 
StorageNodeNodePathGenerator.getRootPath(NodePathPattern.IDENTIFIER), 
NodePathPattern.IDENTIFIER));
+            new VersionNodePathParser(String.join("/", new 
StorageNodeNodePathGenerator(NodePathPattern.IDENTIFIER).getRootPath(), 
NodePathPattern.IDENTIFIER));
     
     /**
      * Find storage node name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
index a7a5fe30e1f..2fc0b779e79 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
@@ -17,47 +17,45 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Storage unit node path generator.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@RequiredArgsConstructor
 public final class StorageUnitNodePathGenerator {
     
     private static final String UNITS_NODE = "units";
     
+    private final String databaseName;
+    
     /**
      * Get storage unit root path.
      *
-     * @param databaseName database name
      * @return storage unit root path
      */
-    public static String getRootPath(final String databaseName) {
-        return String.join("/", 
DataSourceNodePathGenerator.getRootPath(databaseName), UNITS_NODE);
+    public String getRootPath() {
+        return String.join("/", new 
DataSourceNodePathGenerator(databaseName).getRootPath(), UNITS_NODE);
     }
     
     /**
      * Get storage unit path.
      *
-     * @param databaseName database name
      * @param storageUnitName storage unit name
      * @return storage unit path
      */
-    public static String getStorageUnitPath(final String databaseName, final 
String storageUnitName) {
-        return String.join("/", getRootPath(databaseName), storageUnitName);
+    public String getStorageUnitPath(final String storageUnitName) {
+        return String.join("/", getRootPath(), storageUnitName);
     }
     
     /**
      * Get storage unit version node path generator.
      *
-     * @param databaseName database name
      * @param storageUnitName storage unit name
      * @return storage unit version node path generator
      */
-    public static VersionNodePathGenerator getVersion(final String 
databaseName, final String storageUnitName) {
-        return new VersionNodePathGenerator(String.join("/", 
getRootPath(databaseName), storageUnitName));
+    public VersionNodePathGenerator getVersion(final String storageUnitName) {
+        return new VersionNodePathGenerator(String.join("/", getRootPath(), 
storageUnitName));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
index 7ffece7b773..9745f8d97b3 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
@@ -32,10 +32,11 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class StorageUnitNodePathParser {
     
-    private static final Pattern PATTERN = 
Pattern.compile(StorageUnitNodePathGenerator.getStorageUnitPath(NodePathPattern.IDENTIFIER,
 NodePathPattern.IDENTIFIER) + "$", Pattern.CASE_INSENSITIVE);
+    private static final Pattern PATTERN = Pattern.compile(
+            new 
StorageUnitNodePathGenerator(NodePathPattern.IDENTIFIER).getStorageUnitPath(NodePathPattern.IDENTIFIER)
 + "$", Pattern.CASE_INSENSITIVE);
     
-    private static final VersionNodePathParser VERSION_PARSER =
-            new VersionNodePathParser(String.join("/", 
StorageUnitNodePathGenerator.getRootPath(NodePathPattern.IDENTIFIER), 
NodePathPattern.IDENTIFIER));
+    private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
+            String.join("/", new 
StorageUnitNodePathGenerator(NodePathPattern.IDENTIFIER).getRootPath(), 
NodePathPattern.IDENTIFIER));
     
     /**
      * Find storage unit name.
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGeneratorTest.java
index a1d28a89da1..150565bac92 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGeneratorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.node.path.config.global;
 
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,13 +27,14 @@ class GlobalPropertiesNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(GlobalPropertiesNodePathGenerator.getRootPath(), 
is("/props"));
+        assertThat(new GlobalPropertiesNodePathGenerator().getRootPath(), 
is("/props"));
     }
     
     @Test
     void assertGetVersion() {
-        
assertThat(GlobalPropertiesNodePathGenerator.getVersion().getActiveVersionPath(),
 is("/props/active_version"));
-        
assertThat(GlobalPropertiesNodePathGenerator.getVersion().getVersionsPath(), 
is("/props/versions"));
-        
assertThat(GlobalPropertiesNodePathGenerator.getVersion().getVersionPath(0), 
is("/props/versions/0"));
+        VersionNodePathGenerator versionNodePathGenerator = new 
GlobalPropertiesNodePathGenerator().getVersion();
+        assertThat(versionNodePathGenerator.getActiveVersionPath(), 
is("/props/active_version"));
+        assertThat(versionNodePathGenerator.getVersionsPath(), 
is("/props/versions"));
+        assertThat(versionNodePathGenerator.getVersionPath(0), 
is("/props/versions/0"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
index 6bac708b560..8b6c4d0c581 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.node.path.config.global;
 
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,18 +27,19 @@ class GlobalRuleNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(GlobalRuleNodePathGenerator.getRootPath(), is("/rules"));
+        assertThat(new GlobalRuleNodePathGenerator().getRootPath(), 
is("/rules"));
     }
     
     @Test
     void assertGetRulePath() {
-        assertThat(GlobalRuleNodePathGenerator.getRulePath("foo_rule"), 
is("/rules/foo_rule"));
+        assertThat(new GlobalRuleNodePathGenerator().getRulePath("foo_rule"), 
is("/rules/foo_rule"));
     }
     
     @Test
     void assertGetVersion() {
-        
assertThat(GlobalRuleNodePathGenerator.getVersion("foo_rule").getActiveVersionPath(),
 is("/rules/foo_rule/active_version"));
-        
assertThat(GlobalRuleNodePathGenerator.getVersion("foo_rule").getVersionsPath(),
 is("/rules/foo_rule/versions"));
-        
assertThat(GlobalRuleNodePathGenerator.getVersion("foo_rule").getVersionPath(0),
 is("/rules/foo_rule/versions/0"));
+        VersionNodePathGenerator versionNodePathGenerator = new 
GlobalRuleNodePathGenerator().getVersion("foo_rule");
+        assertThat(versionNodePathGenerator.getActiveVersionPath(), 
is("/rules/foo_rule/active_version"));
+        assertThat(versionNodePathGenerator.getVersionsPath(), 
is("/rules/foo_rule/versions"));
+        assertThat(versionNodePathGenerator.getVersionPath(0), 
is("/rules/foo_rule/versions/0"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
index fd4a9e61d26..102a6cdf17f 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
@@ -26,11 +26,11 @@ class DatabaseNodePathGeneratorTest {
     
     @Test
     void assertGetPath() {
-        assertThat(DatabaseNodePathGenerator.getRootPath(), is("/metadata"));
+        assertThat(new DatabaseNodePathGenerator().getRootPath(), 
is("/metadata"));
     }
     
     @Test
     void assertGetDatabasePath() {
-        assertThat(DatabaseNodePathGenerator.getDatabasePath("foo_db"), 
is("/metadata/foo_db"));
+        assertThat(new DatabaseNodePathGenerator().getDatabasePath("foo_db"), 
is("/metadata/foo_db"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
index 343cd835f2b..7bbe3833bcd 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
@@ -26,11 +26,11 @@ class SchemaNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(SchemaNodePathGenerator.getRootPath("foo_db"), 
is("/metadata/foo_db/schemas"));
+        assertThat(new SchemaNodePathGenerator("foo_db").getRootPath(), 
is("/metadata/foo_db/schemas"));
     }
     
     @Test
     void assertGetSchemaPath() {
-        assertThat(SchemaNodePathGenerator.getSchemaPath("foo_db", 
"foo_schema"), is("/metadata/foo_db/schemas/foo_schema"));
+        assertThat(new 
SchemaNodePathGenerator("foo_db").getSchemaPath("foo_schema"), 
is("/metadata/foo_db/schemas/foo_schema"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
index 94870e41a4d..b4d475c1969 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
@@ -26,20 +26,18 @@ class TableNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(TableNodePathGenerator.getRootPath("foo_db", "foo_schema"), 
is("/metadata/foo_db/schemas/foo_schema/tables"));
+        assertThat(new TableNodePathGenerator("foo_db", 
"foo_schema").getRootPath(), is("/metadata/foo_db/schemas/foo_schema/tables"));
     }
     
     @Test
     void assertGetTablePath() {
-        assertThat(TableNodePathGenerator.getTablePath("foo_db", "foo_schema", 
"foo_tbl"), is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"));
+        assertThat(new TableNodePathGenerator("foo_db", 
"foo_schema").getTablePath("foo_tbl"), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"));
     }
     
     @Test
     void assertGetVersion() {
-        assertThat(TableNodePathGenerator.getVersion("foo_db", "foo_schema", 
"foo_tbl").getActiveVersionPath(),
-                
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"));
-        assertThat(TableNodePathGenerator.getVersion("foo_db", "foo_schema", 
"foo_tbl").getVersionsPath(), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions"));
-        assertThat(TableNodePathGenerator.getVersion("foo_db", "foo_schema", 
"foo_tbl").getVersionPath(0),
-                
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0"));
+        assertThat(new TableNodePathGenerator("foo_db", 
"foo_schema").getVersion("foo_tbl").getActiveVersionPath(), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"));
+        assertThat(new TableNodePathGenerator("foo_db", 
"foo_schema").getVersion("foo_tbl").getVersionsPath(), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions"));
+        assertThat(new TableNodePathGenerator("foo_db", 
"foo_schema").getVersion("foo_tbl").getVersionPath(0), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
index fa7ada1b3ee..1f7de96921e 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
@@ -26,20 +26,18 @@ class ViewNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(ViewNodePathGenerator.getRootPath("foo_db", "foo_schema"), 
is("/metadata/foo_db/schemas/foo_schema/views"));
+        assertThat(new ViewNodePathGenerator("foo_db", 
"foo_schema").getRootPath(), is("/metadata/foo_db/schemas/foo_schema/views"));
     }
     
     @Test
     void assertGetViewPath() {
-        assertThat(ViewNodePathGenerator.getViewPath("foo_db", "foo_schema", 
"foo_view"), is("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
+        assertThat(new ViewNodePathGenerator("foo_db", 
"foo_schema").getViewPath("foo_view"), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
     }
     
     @Test
     void assertGetVersion() {
-        assertThat(ViewNodePathGenerator.getVersion("foo_db", "foo_schema", 
"foo_view").getActiveVersionPath(),
-                
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"));
-        assertThat(ViewNodePathGenerator.getVersion("foo_db", "foo_schema", 
"foo_view").getVersionsPath(), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions"));
-        assertThat(ViewNodePathGenerator.getVersion("foo_db", "foo_schema", 
"foo_view").getVersionPath(0),
-                
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0"));
+        assertThat(new ViewNodePathGenerator("foo_db", 
"foo_schema").getVersion("foo_view").getActiveVersionPath(), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"));
+        assertThat(new ViewNodePathGenerator("foo_db", 
"foo_schema").getVersion("foo_view").getVersionsPath(), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions"));
+        assertThat(new ViewNodePathGenerator("foo_db", 
"foo_schema").getVersion("foo_view").getVersionPath(0), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
index 91c33b0d239..a6e42d4db43 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.mode.node.path.metadata.rule;
 
 import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -27,27 +28,25 @@ class DatabaseRuleNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(DatabaseRuleNodePathGenerator.getRootPath("foo_db"), 
is("/metadata/foo_db/rules"));
+        assertThat(new DatabaseRuleNodePathGenerator("foo_db").getRootPath(), 
is("/metadata/foo_db/rules"));
     }
     
     @Test
     void assertGetRulePath() {
-        assertThat(DatabaseRuleNodePathGenerator.getRulePath("foo_db", 
"foo_rule"), is("/metadata/foo_db/rules/foo_rule"));
+        assertThat(new 
DatabaseRuleNodePathGenerator("foo_db").getRulePath("foo_rule"), 
is("/metadata/foo_db/rules/foo_rule"));
     }
     
     @Test
     void assertGetRulePathWithKey() {
-        assertThat(DatabaseRuleNodePathGenerator.getRulePath("foo_db", 
"foo_rule", new DatabaseRuleItem("foo_rule_item")), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
+        assertThat(new 
DatabaseRuleNodePathGenerator("foo_db").getRulePath("foo_rule", new 
DatabaseRuleItem("foo_rule_item")), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
     }
     
     @Test
     void assertGetVersion() {
         DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem("foo_rule_item");
-        assertThat(DatabaseRuleNodePathGenerator.getVersion("foo_db", 
"foo_rule", databaseRuleItem).getActiveVersionPath(),
-                
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/active_version"));
-        assertThat(DatabaseRuleNodePathGenerator.getVersion("foo_db", 
"foo_rule", databaseRuleItem).getVersionsPath(),
-                is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
-        assertThat(DatabaseRuleNodePathGenerator.getVersion("foo_db", 
"foo_rule", databaseRuleItem).getVersionPath(0),
-                
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
+        VersionNodePathGenerator versionNodePathGenerator = new 
DatabaseRuleNodePathGenerator("foo_db").getVersion("foo_rule", 
databaseRuleItem);
+        assertThat(versionNodePathGenerator.getActiveVersionPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/active_version"));
+        assertThat(versionNodePathGenerator.getVersionsPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
+        assertThat(versionNodePathGenerator.getVersionPath(0), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGeneratorTest.java
index e58fa0d27e8..2c4e1152840 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGeneratorTest.java
@@ -26,6 +26,6 @@ class DataSourceNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(DataSourceNodePathGenerator.getRootPath("foo_db"), 
is("/metadata/foo_db/data_sources"));
+        assertThat(new DataSourceNodePathGenerator("foo_db").getRootPath(), 
is("/metadata/foo_db/data_sources"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
index 0236c7c8af0..f838d4d7e66 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,19 +27,19 @@ class StorageNodeNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(StorageNodeNodePathGenerator.getRootPath("foo_db"), 
is("/metadata/foo_db/data_sources/nodes"));
+        assertThat(new StorageNodeNodePathGenerator("foo_db").getRootPath(), 
is("/metadata/foo_db/data_sources/nodes"));
     }
     
     @Test
     void assertGetStorageNodePath() {
-        assertThat(StorageNodeNodePathGenerator.getStorageNodePath("foo_db", 
"foo_ds"), is("/metadata/foo_db/data_sources/nodes/foo_ds"));
+        assertThat(new 
StorageNodeNodePathGenerator("foo_db").getStorageNodePath("foo_ds"), 
is("/metadata/foo_db/data_sources/nodes/foo_ds"));
     }
     
     @Test
     void assertGetVersion() {
-        assertThat(StorageNodeNodePathGenerator.getVersion("foo_db", 
"foo_ds").getActiveVersionPath(),
-                
is("/metadata/foo_db/data_sources/nodes/foo_ds/active_version"));
-        assertThat(StorageNodeNodePathGenerator.getVersion("foo_db", 
"foo_ds").getVersionsPath(), 
is("/metadata/foo_db/data_sources/nodes/foo_ds/versions"));
-        assertThat(StorageNodeNodePathGenerator.getVersion("foo_db", 
"foo_ds").getVersionPath(0), 
is("/metadata/foo_db/data_sources/nodes/foo_ds/versions/0"));
+        VersionNodePathGenerator versionNodePathGenerator = new 
StorageNodeNodePathGenerator("foo_db").getVersion("foo_ds");
+        assertThat(versionNodePathGenerator.getActiveVersionPath(), 
is("/metadata/foo_db/data_sources/nodes/foo_ds/active_version"));
+        assertThat(versionNodePathGenerator.getVersionsPath(), 
is("/metadata/foo_db/data_sources/nodes/foo_ds/versions"));
+        assertThat(versionNodePathGenerator.getVersionPath(0), 
is("/metadata/foo_db/data_sources/nodes/foo_ds/versions/0"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
index 937e936acfd..49d240dd108 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,19 +27,19 @@ class StorageUnitNodePathGeneratorTest {
     
     @Test
     void assertGetRootPath() {
-        assertThat(StorageUnitNodePathGenerator.getRootPath("foo_db"), 
is("/metadata/foo_db/data_sources/units"));
+        assertThat(new StorageUnitNodePathGenerator("foo_db").getRootPath(), 
is("/metadata/foo_db/data_sources/units"));
     }
     
     @Test
     void assertGetStorageUnitPath() {
-        assertThat(StorageUnitNodePathGenerator.getStorageUnitPath("foo_db", 
"foo_ds"), is("/metadata/foo_db/data_sources/units/foo_ds"));
+        assertThat(new 
StorageUnitNodePathGenerator("foo_db").getStorageUnitPath("foo_ds"), 
is("/metadata/foo_db/data_sources/units/foo_ds"));
     }
     
     @Test
     void assertGetVersion() {
-        assertThat(StorageUnitNodePathGenerator.getVersion("foo_db", 
"foo_ds").getActiveVersionPath(),
-                
is("/metadata/foo_db/data_sources/units/foo_ds/active_version"));
-        assertThat(StorageUnitNodePathGenerator.getVersion("foo_db", 
"foo_ds").getVersionsPath(), 
is("/metadata/foo_db/data_sources/units/foo_ds/versions"));
-        assertThat(StorageUnitNodePathGenerator.getVersion("foo_db", 
"foo_ds").getVersionPath(0), 
is("/metadata/foo_db/data_sources/units/foo_ds/versions/0"));
+        VersionNodePathGenerator versionNodePathGenerator = new 
StorageUnitNodePathGenerator("foo_db").getVersion("foo_ds");
+        assertThat(versionNodePathGenerator.getActiveVersionPath(), 
is("/metadata/foo_db/data_sources/units/foo_ds/active_version"));
+        assertThat(versionNodePathGenerator.getVersionsPath(), 
is("/metadata/foo_db/data_sources/units/foo_ds/versions"));
+        assertThat(versionNodePathGenerator.getVersionPath(0), 
is("/metadata/foo_db/data_sources/units/foo_ds/versions/0"));
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
index df19a15cde7..9f897d852f2 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
@@ -57,10 +57,10 @@ public final class DatabaseListenerChangedHandler 
implements GlobalDataChangedEv
     private static void handle(final ContextManager contextManager, final 
String databaseName, final ClusterDatabaseListenerCoordinatorType 
clusterDatabaseListenerCoordinatorType) {
         ClusterPersistRepository repository = (ClusterPersistRepository) 
contextManager.getPersistServiceFacade().getRepository();
         if (ClusterDatabaseListenerCoordinatorType.CREATE == 
clusterDatabaseListenerCoordinatorType) {
-            
repository.watch(DatabaseNodePathGenerator.getDatabasePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
+            repository.watch(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
             
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().addDatabase(databaseName);
         } else if (ClusterDatabaseListenerCoordinatorType.DROP == 
clusterDatabaseListenerCoordinatorType) {
-            
repository.removeDataListener(DatabaseNodePathGenerator.getDatabasePath(databaseName));
+            repository.removeDataListener(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName));
             
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropDatabase(databaseName);
         }
         new 
ClusterDatabaseListenerPersistCoordinator(repository).delete(databaseName);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
index 330aa5d6857..e6be5a2ef8d 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java
@@ -38,7 +38,7 @@ public final class GlobalRuleChangedHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public String getSubscribedKey() {
-        return GlobalRuleNodePathGenerator.getRootPath();
+        return new GlobalRuleNodePathGenerator().getRootPath();
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
index 6eee39b901d..c9d2d6f02b6 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java
@@ -35,7 +35,7 @@ public final class PropertiesChangedHandler implements 
GlobalDataChangedEventHan
     
     @Override
     public String getSubscribedKey() {
-        return GlobalPropertiesNodePathGenerator.getRootPath();
+        return new GlobalPropertiesNodePathGenerator().getRootPath();
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
index b842848b2cd..0982a667388 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
@@ -53,7 +53,7 @@ public final class DataChangedEventListenerRegistry {
     }
     
     private void registerDatabaseListeners(final String databaseName) {
-        
repository.watch(DatabaseNodePathGenerator.getDatabasePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
+        repository.watch(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
     }
     
     private void registerGlobalHandlers(final GlobalDataChangedEventHandler 
handler) {

Reply via email to