You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/09/21 10:55:23 UTC

[shardingsphere] branch master updated: refactor datasource&context (#7532)

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 da28a95  refactor datasource&context (#7532)
da28a95 is described below

commit da28a95d18e3c230c61f96dd19428a803eb24b4e
Author: kimmking <ki...@163.com>
AuthorDate: Mon Sep 21 18:55:03 2020 +0800

    refactor datasource&context (#7532)
    
    * refactor datasource
    
    * use autoCloseable
---
 .../context/schema/GovernanceSchemaContexts.java   | 45 +++++++++++-----------
 .../schema/GovernanceSchemaContextsTest.java       | 18 ++++-----
 .../infra/context/SchemaContext.java               |  7 ++++
 .../infra/context/SchemaContexts.java              |  5 ++-
 .../infra/context/impl/StandardSchemaContexts.java | 10 ++---
 .../infra/context/schema/ShardingSphereSchema.java | 18 +++++----
 .../infra/context/SchemaContextsBuilderTest.java   | 12 +++---
 .../context/impl/StandardSchemaContextsTest.java   |  9 +++--
 .../context/schema/ShardingSphereSchemaTest.java   |  6 +--
 ...bleDataSource.java => CloseableDataSource.java} |  3 +-
 .../core/datasource/ShardingSphereDataSource.java  | 19 +++++----
 .../GovernanceShardingSphereDataSource.java        |  2 +-
 .../jdbc/datasource/JDBCBackendDataSource.java     |  2 +-
 .../proxy/backend/context/ProxyContext.java        |  6 +--
 .../backend/text/admin/UnicastBackendHandler.java  |  2 +-
 .../backend/text/admin/RDLBackendHandlerTest.java  |  2 +-
 .../init/impl/AbstractBootstrapInitializer.java    |  4 +-
 .../impl/GovernanceBootstrapInitializerTest.java   |  2 +-
 .../frontend/netty/ServerHandlerInitializer.java   |  2 +-
 19 files changed, 94 insertions(+), 80 deletions(-)

diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
index a710293..49373bb 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
@@ -54,6 +54,7 @@ import org.apache.shardingsphere.infra.rule.StatusContainedRule;
 import org.apache.shardingsphere.infra.rule.event.impl.DataSourceNameDisabledEvent;
 
 import javax.sql.DataSource;
+import java.io.IOException;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Collection;
@@ -83,7 +84,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
     }
     
     private void disableDataSources() {
-        schemaContexts.getSchemaContexts().forEach((key, value)
+        schemaContexts.getSchemaContextMap().forEach((key, value)
             -> value.getSchema().getRules().stream().filter(each -> each instanceof StatusContainedRule).forEach(each -> disableDataSources(key, (StatusContainedRule) each)));
     }
     
@@ -97,7 +98,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
     }
     
     private void persistMetaData() {
-        schemaContexts.getSchemaContexts().forEach((key, value) -> governanceFacade.getConfigCenter()
+        schemaContexts.getSchemaContextMap().forEach((key, value) -> governanceFacade.getConfigCenter()
             .persistMetaData(key, value.getSchema().getMetaData().getRuleSchemaMetaData()));
     }
     
@@ -117,8 +118,8 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
     }
     
     @Override
-    public Map<String, SchemaContext> getSchemaContexts() {
-        return schemaContexts.getSchemaContexts();
+    public Map<String, SchemaContext> getSchemaContextMap() {
+        return schemaContexts.getSchemaContextMap();
     }
     
     @Override
@@ -142,7 +143,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
     }
     
     @Override
-    public void close() throws Exception {
+    public void close() throws IOException {
         schemaContexts.close();
         governanceFacade.close();
     }
@@ -155,11 +156,11 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
      */
     @Subscribe
     public synchronized void renew(final SchemaAddedEvent event) throws SQLException {
-        Map<String, SchemaContext> schemas = new HashMap<>(schemaContexts.getSchemaContexts());
+        Map<String, SchemaContext> schemas = new HashMap<>(schemaContexts.getSchemaContextMap());
         schemas.put(event.getSchemaName(), createAddedSchemaContext(event));
         schemaContexts = new StandardSchemaContexts(schemas, schemaContexts.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType());
         governanceFacade.getConfigCenter().persistMetaData(event.getSchemaName(), 
-                schemaContexts.getSchemaContexts().get(event.getSchemaName()).getSchema().getMetaData().getRuleSchemaMetaData());
+                schemaContexts.getSchemaContextMap().get(event.getSchemaName()).getSchema().getMetaData().getRuleSchemaMetaData());
         ShardingSphereEventBus.getInstance().post(
                 new DataSourceChangeCompletedEvent(event.getSchemaName(), schemaContexts.getDatabaseType(), schemas.get(event.getSchemaName()).getSchema().getDataSources()));
     }
@@ -171,7 +172,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
      */
     @Subscribe
     public synchronized void renew(final SchemaDeletedEvent event) {
-        Map<String, SchemaContext> schemas = new HashMap<>(schemaContexts.getSchemaContexts());
+        Map<String, SchemaContext> schemas = new HashMap<>(schemaContexts.getSchemaContextMap());
         schemas.remove(event.getSchemaName());
         schemaContexts = new StandardSchemaContexts(schemas, schemaContexts.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType());
     }
@@ -194,7 +195,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
      */
     @Subscribe
     public synchronized void renew(final AuthenticationChangedEvent event) {
-        schemaContexts = new StandardSchemaContexts(schemaContexts.getSchemaContexts(), event.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType());
+        schemaContexts = new StandardSchemaContexts(schemaContexts.getSchemaContextMap(), event.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType());
     }
     
     /**
@@ -204,8 +205,8 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
      */
     @Subscribe
     public synchronized void renew(final MetaDataChangedEvent event) {
-        Map<String, SchemaContext> newSchemaContexts = new HashMap<>(schemaContexts.getSchemaContexts().size(), 1);
-        for (Entry<String, SchemaContext> entry : schemaContexts.getSchemaContexts().entrySet()) {
+        Map<String, SchemaContext> newSchemaContexts = new HashMap<>(schemaContexts.getSchemaContextMap().size(), 1);
+        for (Entry<String, SchemaContext> entry : schemaContexts.getSchemaContextMap().entrySet()) {
             String schemaName = entry.getKey();
             SchemaContext oldSchemaContext = entry.getValue();
             SchemaContext newSchemaContext = event.getSchemaNames().contains(schemaName) 
@@ -224,10 +225,10 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
      */
     @Subscribe
     public synchronized void renew(final RuleConfigurationsChangedEvent event) throws SQLException {
-        Map<String, SchemaContext> newSchemaContexts = new HashMap<>(schemaContexts.getSchemaContexts());
+        Map<String, SchemaContext> newSchemaContexts = new HashMap<>(schemaContexts.getSchemaContextMap());
         String schemaName = event.getSchemaName();
         newSchemaContexts.remove(schemaName);
-        newSchemaContexts.put(schemaName, getChangedSchemaContext(schemaContexts.getSchemaContexts().get(schemaName), event.getRuleConfigurations()));
+        newSchemaContexts.put(schemaName, getChangedSchemaContext(schemaContexts.getSchemaContextMap().get(schemaName), event.getRuleConfigurations()));
         schemaContexts = new StandardSchemaContexts(newSchemaContexts, schemaContexts.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType());
         governanceFacade.getConfigCenter().persistMetaData(schemaName, newSchemaContexts.get(schemaName).getSchema().getMetaData().getRuleSchemaMetaData());
     }
@@ -241,9 +242,9 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
     @Subscribe
     public synchronized void renew(final DataSourceChangedEvent event) throws SQLException {
         String schemaName = event.getSchemaName();
-        Map<String, SchemaContext> newSchemaContexts = new HashMap<>(schemaContexts.getSchemaContexts());
+        Map<String, SchemaContext> newSchemaContexts = new HashMap<>(schemaContexts.getSchemaContextMap());
         newSchemaContexts.remove(schemaName);
-        newSchemaContexts.put(schemaName, getChangedSchemaContext(schemaContexts.getSchemaContexts().get(schemaName), event.getDataSourceConfigurations()));
+        newSchemaContexts.put(schemaName, getChangedSchemaContext(schemaContexts.getSchemaContextMap().get(schemaName), event.getDataSourceConfigurations()));
         schemaContexts = new StandardSchemaContexts(newSchemaContexts, schemaContexts.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType());
         ShardingSphereEventBus.getInstance().post(
                 new DataSourceChangeCompletedEvent(event.getSchemaName(), schemaContexts.getDatabaseType(), newSchemaContexts.get(event.getSchemaName()).getSchema().getDataSources()));
@@ -257,7 +258,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
     @Subscribe
     public synchronized void renew(final DisabledStateChangedEvent event) {
         GovernanceSchema governanceSchema = event.getGovernanceSchema();
-        Collection<ShardingSphereRule> rules = schemaContexts.getSchemaContexts().get(governanceSchema.getSchemaName()).getSchema().getRules();
+        Collection<ShardingSphereRule> rules = schemaContexts.getSchemaContextMap().get(governanceSchema.getSchemaName()).getSchema().getRules();
         for (ShardingSphereRule each : rules) {
             if (each instanceof StatusContainedRule) {
                 ((StatusContainedRule) each).updateRuleStatus(new DataSourceNameDisabledEvent(governanceSchema.getDataSourceName(), event.isDisabled()));
@@ -273,7 +274,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
     @Subscribe
     public synchronized void renew(final CircuitStateChangedEvent event) {
         schemaContexts = new StandardSchemaContexts(
-                schemaContexts.getSchemaContexts(), schemaContexts.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType(), event.isCircuitBreak());
+                schemaContexts.getSchemaContextMap(), schemaContexts.getAuthentication(), schemaContexts.getProps(), schemaContexts.getDatabaseType(), event.isCircuitBreak());
     }
     
     private SchemaContext createAddedSchemaContext(final SchemaAddedEvent event) throws SQLException {
@@ -282,12 +283,12 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
         DatabaseType databaseType = getDatabaseType(dataSourcesMap);
         SchemaContextsBuilder schemaContextsBuilder = new SchemaContextsBuilder(databaseType, dataSourcesMap, 
                 Collections.singletonMap(schemaName, event.getRuleConfigurations()), schemaContexts.getAuthentication(), schemaContexts.getProps().getProps());
-        return schemaContextsBuilder.build().getSchemaContexts().get(schemaName);
+        return schemaContextsBuilder.build().getSchemaContextMap().get(schemaName);
     }
     
     private Map<String, SchemaContext> getChangedSchemaContexts(final ConfigurationProperties props) {
-        Map<String, SchemaContext> result = new HashMap<>(schemaContexts.getSchemaContexts().size());
-        for (Entry<String, SchemaContext> entry : schemaContexts.getSchemaContexts().entrySet()) {
+        Map<String, SchemaContext> result = new HashMap<>(schemaContexts.getSchemaContextMap().size());
+        for (Entry<String, SchemaContext> entry : schemaContexts.getSchemaContextMap().entrySet()) {
             RuntimeContext runtimeContext = entry.getValue().getRuntimeContext();
             result.put(entry.getKey(), new SchemaContext(entry.getValue().getName(), entry.getValue().getSchema(), new RuntimeContext(runtimeContext.getCachedDatabaseMetaData(),
                     new ExecutorKernel(props.<Integer>getValue(ConfigurationPropertyKey.EXECUTOR_SIZE)), runtimeContext.getSqlParserEngine())));
@@ -304,7 +305,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
         ShardingSphereSchema oldSchema = oldSchemaContext.getSchema();
         SchemaContextsBuilder builder = new SchemaContextsBuilder(schemaContexts.getDatabaseType(), Collections.singletonMap(oldSchemaContext.getName(), oldSchema.getDataSources()),
                 Collections.singletonMap(oldSchemaContext.getName(), ruleConfigs), schemaContexts.getAuthentication(), schemaContexts.getProps().getProps());
-        return builder.build().getSchemaContexts().values().iterator().next();
+        return builder.build().getSchemaContextMap().values().iterator().next();
     }
     
     private SchemaContext getChangedSchemaContext(final SchemaContext oldSchemaContext, final Map<String, DataSourceConfiguration> newDataSourceConfigs) throws SQLException {
@@ -316,7 +317,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
                 getNewDataSources(oldSchemaContext.getSchema().getDataSources(), getAddedDataSources(oldSchemaContext, newDataSourceConfigs), modifiedDataSources, deletedDataSources));
         return new SchemaContextsBuilder(schemaContexts.getDatabaseType(), dataSourcesMap,
                 Collections.singletonMap(oldSchemaContext.getName(), oldSchemaContext.getSchema().getConfigurations()), schemaContexts.getAuthentication(), 
-                schemaContexts.getProps().getProps()).build().getSchemaContexts().get(oldSchemaContext.getName());
+                schemaContexts.getProps().getProps()).build().getSchemaContextMap().get(oldSchemaContext.getName());
     }
     
     private Map<String, DataSource> getNewDataSources(final Map<String, DataSource> oldDataSources, 
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
index f3082d3..3a1fabb 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
@@ -128,7 +128,7 @@ public final class GovernanceSchemaContextsTest {
     
     @Test
     public void assertGetSchemaContexts() {
-        assertThat(governanceSchemaContexts.getSchemaContexts().get("schema"), is(schemaContext));
+        assertThat(governanceSchemaContexts.getSchemaContextMap().get("schema"), is(schemaContext));
     }
     
     @Test
@@ -156,7 +156,7 @@ public final class GovernanceSchemaContextsTest {
     public void assertSchemaAdd() {
         SchemaAddedEvent event = new SchemaAddedEvent("schema_add", getDataSourceConfigurations(), new LinkedList<>());
         governanceSchemaContexts.renew(event);
-        assertNotNull(governanceSchemaContexts.getSchemaContexts().get("schema_add"));
+        assertNotNull(governanceSchemaContexts.getSchemaContextMap().get("schema_add"));
     }
     
     private Map<String, DataSourceConfiguration> getDataSourceConfigurations() {
@@ -172,7 +172,7 @@ public final class GovernanceSchemaContextsTest {
     public void assertSchemaDelete() {
         SchemaDeletedEvent event = new SchemaDeletedEvent("schema");
         governanceSchemaContexts.renew(event);
-        assertNull(governanceSchemaContexts.getSchemaContexts().get("schema"));
+        assertNull(governanceSchemaContexts.getSchemaContextMap().get("schema"));
     }
     
     @Test
@@ -196,24 +196,24 @@ public final class GovernanceSchemaContextsTest {
     public void assertMetaDataChanged() {
         MetaDataChangedEvent event = new MetaDataChangedEvent(Collections.singletonList("schema_changed"), mock(RuleSchemaMetaData.class));
         governanceSchemaContexts.renew(event);
-        assertTrue(governanceSchemaContexts.getSchemaContexts().containsKey("schema"));
-        assertFalse(governanceSchemaContexts.getSchemaContexts().containsKey("schema_changed"));
+        assertTrue(governanceSchemaContexts.getSchemaContextMap().containsKey("schema"));
+        assertFalse(governanceSchemaContexts.getSchemaContextMap().containsKey("schema_changed"));
     }
     
     @Test
     public void assertMetaDataChangedWithExistSchema() {
         MetaDataChangedEvent event = new MetaDataChangedEvent(Collections.singletonList("schema"), mock(RuleSchemaMetaData.class));
         governanceSchemaContexts.renew(event);
-        assertThat(governanceSchemaContexts.getSchemaContexts().get("schema"), not(schemaContext));
+        assertThat(governanceSchemaContexts.getSchemaContextMap().get("schema"), not(schemaContext));
     }
     
     @Test
     @SneakyThrows
     public void assertRuleConfigurationsChanged() {
-        assertThat(governanceSchemaContexts.getSchemaContexts().get("schema"), is(schemaContext));
+        assertThat(governanceSchemaContexts.getSchemaContextMap().get("schema"), is(schemaContext));
         RuleConfigurationsChangedEvent event = new RuleConfigurationsChangedEvent("schema", new LinkedList<>());
         governanceSchemaContexts.renew(event);
-        assertThat(governanceSchemaContexts.getSchemaContexts().get("schema"), not(schemaContext));
+        assertThat(governanceSchemaContexts.getSchemaContextMap().get("schema"), not(schemaContext));
     }
     
     @Test
@@ -228,7 +228,7 @@ public final class GovernanceSchemaContextsTest {
     public void assertDataSourceChanged() {
         DataSourceChangedEvent event = new DataSourceChangedEvent("schema", getChangedDataSourceConfigurations());
         governanceSchemaContexts.renew(event);
-        assertTrue(governanceSchemaContexts.getSchemaContexts().get("schema").getSchema().getDataSources().containsKey("ds_2"));
+        assertTrue(governanceSchemaContexts.getSchemaContextMap().get("schema").getSchema().getDataSources().containsKey("ds_2"));
     }
     
     private Map<String, DataSourceConfiguration> getChangedDataSourceConfigurations() {
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContext.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContext.java
index c6a78e7..736b6d8 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContext.java
@@ -43,4 +43,11 @@ public final class SchemaContext {
     public boolean isComplete() {
         return !schema.getRules().isEmpty() && !schema.getDataSources().isEmpty();
     }
+    
+    /**
+     * Close executorKernel in runtimeContext.
+     */
+    public void close() {
+        runtimeContext.getExecutorKernel().close();
+    }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContexts.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContexts.java
index fdbbc95..3321bf9 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContexts.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/SchemaContexts.java
@@ -21,12 +21,13 @@ import org.apache.shardingsphere.infra.auth.Authentication;
 import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 
+import java.io.Closeable;
 import java.util.Map;
 
 /**
  * Schema contexts.
  */
-public interface SchemaContexts extends AutoCloseable {
+public interface SchemaContexts extends Closeable {
     
     /**
      * Get database type.
@@ -40,7 +41,7 @@ public interface SchemaContexts extends AutoCloseable {
      * 
      * @return schema contexts
      */
-    Map<String, SchemaContext> getSchemaContexts();
+    Map<String, SchemaContext> getSchemaContextMap();
     
     /**
      * Get default schema context.
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContexts.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContexts.java
index f46ec23..f3cee3d 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContexts.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContexts.java
@@ -38,7 +38,7 @@ import java.util.Properties;
 @Getter
 public final class StandardSchemaContexts implements SchemaContexts {
     
-    private final Map<String, SchemaContext> schemaContexts;
+    private final Map<String, SchemaContext> schemaContextMap;
     
     private final Authentication authentication;
     
@@ -53,17 +53,17 @@ public final class StandardSchemaContexts implements SchemaContexts {
         this(new HashMap<>(), new Authentication(), new ConfigurationProperties(new Properties()), new MySQLDatabaseType(), false);
     }
     
-    public StandardSchemaContexts(final Map<String, SchemaContext> schemaContexts, final Authentication authentication, final ConfigurationProperties props, final DatabaseType databaseType) {
-        this(schemaContexts, authentication, props, databaseType, false);
+    public StandardSchemaContexts(final Map<String, SchemaContext> schemaContextMap, final Authentication authentication, final ConfigurationProperties props, final DatabaseType databaseType) {
+        this(schemaContextMap, authentication, props, databaseType, false);
     }
     
     @Override
     public SchemaContext getDefaultSchemaContext() {
-        return schemaContexts.get(DefaultSchema.LOGIC_NAME);
+        return schemaContextMap.get(DefaultSchema.LOGIC_NAME);
     }
     
     @Override
     public void close() {
-        schemaContexts.values().forEach(each -> each.getRuntimeContext().getExecutorKernel().close());
+        schemaContextMap.values().forEach(each -> each.close());
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchema.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchema.java
index b55a22e..424434b 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchema.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchema.java
@@ -24,7 +24,7 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 
 import javax.sql.DataSource;
-import java.lang.reflect.Method;
+import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Map;
 
@@ -46,19 +46,21 @@ public final class ShardingSphereSchema {
     /**
      * Close data sources.
      * @param dataSources data sources
+     * @throws SQLException exception
      */
-    public void closeDataSources(final Collection<String> dataSources) {
+    public void closeDataSources(final Collection<String> dataSources) throws SQLException {
         for (String each :dataSources) {
             close(this.dataSources.get(each));
         }
     }
     
-    private void close(final DataSource dataSource) {
-        try {
-            Method method = dataSource.getClass().getDeclaredMethod("close");
-            method.setAccessible(true);
-            method.invoke(dataSource);
-        } catch (final ReflectiveOperationException ignored) {
+    private void close(final DataSource dataSource) throws SQLException {
+        if (dataSource instanceof AutoCloseable) {
+            try {
+                ((AutoCloseable) dataSource).close();
+            } catch (Exception e) {
+                throw new SQLException(e);
+            }
         }
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/SchemaContextsBuilderTest.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/SchemaContextsBuilderTest.java
index 1bb8cdb..d3eef72 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/SchemaContextsBuilderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/SchemaContextsBuilderTest.java
@@ -44,7 +44,7 @@ public final class SchemaContextsBuilderTest {
         DatabaseType databaseType = DatabaseTypes.getActualDatabaseType("FixtureDB");
         SchemaContexts actual = new SchemaContextsBuilder(databaseType, Collections.emptyMap(), Collections.emptyMap(), null).build();
         assertThat(actual.getDatabaseType(), CoreMatchers.is(databaseType));
-        assertTrue(actual.getSchemaContexts().isEmpty());
+        assertTrue(actual.getSchemaContextMap().isEmpty());
         assertTrue(actual.getAuthentication().getUsers().isEmpty());
         assertTrue(actual.getProps().getProps().isEmpty());
         assertFalse(actual.isCircuitBreak());
@@ -59,7 +59,7 @@ public final class SchemaContextsBuilderTest {
                 Collections.singletonMap("logic_db", Collections.singleton(new FixtureRuleConfiguration())), props).build();
         assertThat(actual.getDatabaseType(), CoreMatchers.is(databaseType));
         assertRules(actual);
-        assertTrue(actual.getSchemaContexts().get("logic_db").getSchema().getDataSources().isEmpty());
+        assertTrue(actual.getSchemaContextMap().get("logic_db").getSchema().getDataSources().isEmpty());
         assertTrue(actual.getAuthentication().getUsers().isEmpty());
         assertThat(actual.getProps().getProps().size(), CoreMatchers.is(1));
         assertThat(actual.getProps().getValue(ConfigurationPropertyKey.EXECUTOR_SIZE), CoreMatchers.is(1));
@@ -83,12 +83,12 @@ public final class SchemaContextsBuilderTest {
     }
     
     private void assertRules(final SchemaContexts actual) {
-        assertThat(actual.getSchemaContexts().get("logic_db").getSchema().getRules().size(), CoreMatchers.is(1));
-        assertThat(actual.getSchemaContexts().get("logic_db").getSchema().getRules().iterator().next(), CoreMatchers.instanceOf(FixtureRule.class));
+        assertThat(actual.getSchemaContextMap().get("logic_db").getSchema().getRules().size(), CoreMatchers.is(1));
+        assertThat(actual.getSchemaContextMap().get("logic_db").getSchema().getRules().iterator().next(), CoreMatchers.instanceOf(FixtureRule.class));
     }
     
     private void assertDataSources(final SchemaContexts actual) {
-        assertThat(actual.getSchemaContexts().get("logic_db").getSchema().getDataSources().size(), CoreMatchers.is(1));
-        assertThat(actual.getSchemaContexts().get("logic_db").getSchema().getDataSources().get("ds"), CoreMatchers.instanceOf(MockedDataSource.class));
+        assertThat(actual.getSchemaContextMap().get("logic_db").getSchema().getDataSources().size(), CoreMatchers.is(1));
+        assertThat(actual.getSchemaContextMap().get("logic_db").getSchema().getDataSources().get("ds"), CoreMatchers.instanceOf(MockedDataSource.class));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContextsTest.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContextsTest.java
index 562724d..c0f0618 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContextsTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/impl/StandardSchemaContextsTest.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.infra.context.impl;
 import org.apache.shardingsphere.infra.auth.Authentication;
 import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.SchemaContext;
+import org.apache.shardingsphere.infra.context.runtime.RuntimeContext;
+import org.apache.shardingsphere.infra.context.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorKernel;
 import org.junit.Test;
@@ -40,15 +42,16 @@ public final class StandardSchemaContextsTest {
     public void assertGetDefaultSchemaContext() {
         StandardSchemaContexts standardSchemaContexts = new StandardSchemaContexts();
         SchemaContext expected = mock(SchemaContext.class);
-        standardSchemaContexts.getSchemaContexts().put("logic_db", expected);
+        standardSchemaContexts.getSchemaContextMap().put("logic_db", expected);
         assertThat(standardSchemaContexts.getDefaultSchemaContext(), is(expected));
     }
     
     @Test
     public void assertClose() {
-        SchemaContext schemaContext = mock(SchemaContext.class, RETURNS_DEEP_STUBS);
+        RuntimeContext runtimeContext = mock(RuntimeContext.class, RETURNS_DEEP_STUBS);
         ExecutorKernel executorKernel = mock(ExecutorKernel.class);
-        when(schemaContext.getRuntimeContext().getExecutorKernel()).thenReturn(executorKernel);
+        when(runtimeContext.getExecutorKernel()).thenReturn(executorKernel);
+        SchemaContext schemaContext = new SchemaContext("logic_db", mock(ShardingSphereSchema.class), runtimeContext);
         StandardSchemaContexts standardSchemaContexts = new StandardSchemaContexts(
                 Collections.singletonMap("logic_db", schemaContext), new Authentication(), new ConfigurationProperties(new Properties()), mock(DatabaseType.class));
         standardSchemaContexts.close();
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchemaTest.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchemaTest.java
index d7a298e..ed34cbe 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchemaTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/ShardingSphereSchemaTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.infra.context.schema;
 
-import org.apache.shardingsphere.infra.context.schema.fixture.ClosableDataSource;
+import org.apache.shardingsphere.infra.context.schema.fixture.CloseableDataSource;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,10 +38,10 @@ import static org.mockito.Mockito.verify;
 public final class ShardingSphereSchemaTest {
     
     @Mock
-    private ClosableDataSource dataSource0;
+    private CloseableDataSource dataSource0;
     
     @Mock
-    private ClosableDataSource dataSource1;
+    private CloseableDataSource dataSource1;
     
     @Mock
     private DataSource dataSource2;
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/fixture/ClosableDataSource.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/fixture/CloseableDataSource.java
similarity index 90%
rename from shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/fixture/ClosableDataSource.java
rename to shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/fixture/CloseableDataSource.java
index 63cea89..cd92a1e 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/fixture/ClosableDataSource.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/fixture/CloseableDataSource.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.infra.context.schema.fixture;
 
 import javax.sql.DataSource;
+import java.io.Closeable;
 
-public interface ClosableDataSource extends DataSource, AutoCloseable {
+public interface CloseableDataSource extends DataSource, Closeable {
 }
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
index 0ac2499..a3179d2 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
@@ -34,7 +34,7 @@ import org.apache.shardingsphere.transaction.context.impl.StandardTransactionCon
 import org.apache.shardingsphere.transaction.core.TransactionTypeHolder;
 
 import javax.sql.DataSource;
-import java.lang.reflect.Method;
+import java.io.IOException;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Collection;
@@ -101,7 +101,7 @@ public final class ShardingSphereDataSource extends AbstractUnsupportedOperation
      * @return data sources
      */
     public Map<String, DataSource> getDataSourceMap() {
-        return schemaContexts.getSchemaContexts().get(DefaultSchema.LOGIC_NAME).getSchema().getDataSources();
+        return schemaContexts.getSchemaContextMap().get(DefaultSchema.LOGIC_NAME).getSchema().getDataSources();
     }
     
     @Override
@@ -113,19 +113,18 @@ public final class ShardingSphereDataSource extends AbstractUnsupportedOperation
      * Close dataSources.
      * 
      * @param dataSourceNames data source names
-     * @throws Exception exception
+     * @throws IOException exception
      */
     public void close(final Collection<String> dataSourceNames) throws Exception {
-        dataSourceNames.forEach(each -> close(getDataSourceMap().get(each)));
+        for (String each : dataSourceNames) {
+            close(getDataSourceMap().get(each));
+        }
         schemaContexts.close();
     }
     
-    private void close(final DataSource dataSource) {
-        try {
-            Method method = dataSource.getClass().getDeclaredMethod("close");
-            method.setAccessible(true);
-            method.invoke(dataSource);
-        } catch (final ReflectiveOperationException ignored) {
+    private void close(final DataSource dataSource) throws Exception {
+        if (dataSource instanceof AutoCloseable) {
+            ((AutoCloseable) dataSource).close();
         }
     }
 }
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
index 18f1be3..a03bad0 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
@@ -152,6 +152,6 @@ public final class GovernanceShardingSphereDataSource extends AbstractUnsupporte
     }
     
     private Map<String, DataSource> getDataSourceMap() {
-        return schemaContexts.getSchemaContexts().get(DefaultSchema.LOGIC_NAME).getSchema().getDataSources();
+        return schemaContexts.getSchemaContextMap().get(DefaultSchema.LOGIC_NAME).getSchema().getDataSources();
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java
index a8db578..cbcf8a6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSource.java
@@ -76,7 +76,7 @@ public final class JDBCBackendDataSource implements BackendDataSource {
     @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter")
     public List<Connection> getConnections(final String schemaName, final String dataSourceName,
                                            final int connectionSize, final ConnectionMode connectionMode, final TransactionType transactionType) throws SQLException {
-        DataSource dataSource = ProxyContext.getInstance().getSchemaContexts().getSchemaContexts().get(schemaName).getSchema().getDataSources().get(dataSourceName);
+        DataSource dataSource = ProxyContext.getInstance().getSchemaContexts().getSchemaContextMap().get(schemaName).getSchema().getDataSources().get(dataSourceName);
         Preconditions.checkNotNull(dataSource, "Can not get connection from datasource %s.", dataSourceName);
         if (1 == connectionSize) {
             return Collections.singletonList(createConnection(schemaName, dataSourceName, dataSource, transactionType));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
index 0e70975..3a601c2 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
@@ -80,7 +80,7 @@ public final class ProxyContext {
      * @return schema exists or not
      */
     public boolean schemaExists(final String schemaName) {
-        return schemaContexts.getSchemaContexts().containsKey(schemaName);
+        return schemaContexts.getSchemaContextMap().containsKey(schemaName);
     }
     
     /**
@@ -90,7 +90,7 @@ public final class ProxyContext {
      * @return schema context
      */
     public SchemaContext getSchema(final String schemaName) {
-        return Strings.isNullOrEmpty(schemaName) ? null : schemaContexts.getSchemaContexts().get(schemaName);
+        return Strings.isNullOrEmpty(schemaName) ? null : schemaContexts.getSchemaContextMap().get(schemaName);
     }
     
     /**
@@ -99,7 +99,7 @@ public final class ProxyContext {
      * @return all schema names
      */
     public List<String> getAllSchemaNames() {
-        return new ArrayList<>(schemaContexts.getSchemaContexts().keySet());
+        return new ArrayList<>(schemaContexts.getSchemaContextMap().keySet());
     }
     
     /**
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java
index 0ac4f38..5a584ba 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/UnicastBackendHandler.java
@@ -51,7 +51,7 @@ public final class UnicastBackendHandler implements TextProtocolBackendHandler {
     @Override
     public BackendResponse execute() throws SQLException {
         if (null == backendConnection.getSchemaName()) {
-            Map<String, SchemaContext> schemaContexts = ProxyContext.getInstance().getSchemaContexts().getSchemaContexts();
+            Map<String, SchemaContext> schemaContexts = ProxyContext.getInstance().getSchemaContexts().getSchemaContextMap();
             if (schemaContexts.isEmpty()) {
                 throw new NoDatabaseSelectedException();
             }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandlerTest.java
index c21ff2a..e611336 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandlerTest.java
@@ -184,7 +184,7 @@ public final class RDLBackendHandlerTest {
         schemaContexts.setAccessible(true);
         if (isGovernance) {
             SchemaContexts mockedSchemaContexts = mock(SchemaContexts.class);
-            when(mockedSchemaContexts.getSchemaContexts()).thenReturn(Collections.singletonMap("schema", mock(SchemaContext.class)));
+            when(mockedSchemaContexts.getSchemaContextMap()).thenReturn(Collections.singletonMap("schema", mock(SchemaContext.class)));
             schemaContexts.set(ProxyContext.getInstance(), mockedSchemaContexts);
         } else {
             schemaContexts.set(ProxyContext.getInstance(), new StandardSchemaContexts());
diff --git a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/init/impl/AbstractBootstrapInitializer.java b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/init/impl/AbstractBootstrapInitializer.java
index 7b752f9..a0f96fc 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/init/impl/AbstractBootstrapInitializer.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/init/impl/AbstractBootstrapInitializer.java
@@ -95,8 +95,8 @@ public abstract class AbstractBootstrapInitializer implements BootstrapInitializ
     }
     
     private TransactionContexts createTransactionContexts(final SchemaContexts schemaContexts) {
-        Map<String, ShardingTransactionManagerEngine> transactionManagerEngines = new HashMap<>(schemaContexts.getSchemaContexts().size(), 1);
-        for (Entry<String, SchemaContext> entry : schemaContexts.getSchemaContexts().entrySet()) {
+        Map<String, ShardingTransactionManagerEngine> transactionManagerEngines = new HashMap<>(schemaContexts.getSchemaContextMap().size(), 1);
+        for (Entry<String, SchemaContext> entry : schemaContexts.getSchemaContextMap().entrySet()) {
             ShardingTransactionManagerEngine engine = new ShardingTransactionManagerEngine();
             engine.init(schemaContexts.getDatabaseType(), entry.getValue().getSchema().getDataSources());
             transactionManagerEngines.put(entry.getKey(), engine);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/init/impl/GovernanceBootstrapInitializerTest.java b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/init/impl/GovernanceBootstrapInitializerTest.java
index 70dc4cc..9b488df 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/init/impl/GovernanceBootstrapInitializerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/init/impl/GovernanceBootstrapInitializerTest.java
@@ -211,7 +211,7 @@ public final class GovernanceBootstrapInitializerTest extends AbstractBootstrapI
         assertNotNull(actualSchemaContexts);
         assertThat(actualSchemaContexts, instanceOf(GovernanceSchemaContexts.class));
         assertThat(actualSchemaContexts.getDatabaseType(), is(schemaContexts.getDatabaseType()));
-        assertThat(actualSchemaContexts.getSchemaContexts(), is(schemaContexts.getSchemaContexts()));
+        assertThat(actualSchemaContexts.getSchemaContextMap(), is(schemaContexts.getSchemaContextMap()));
         assertThat(actualSchemaContexts.getDefaultSchemaContext(), is(schemaContexts.getDefaultSchemaContext()));
         assertThat(actualSchemaContexts.getAuthentication(), is(schemaContexts.getAuthentication()));
         assertThat(actualSchemaContexts.getProps(), is(schemaContexts.getProps()));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
index a03ea57..d5e02d6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
@@ -44,6 +44,6 @@ public final class ServerHandlerInitializer extends ChannelInitializer<SocketCha
     
     private DatabaseType getDatabaseType() {
         // TODO Consider loading from configuration.
-        return ProxyContext.getInstance().getSchemaContexts().getSchemaContexts().isEmpty() ? new MySQLDatabaseType() : ProxyContext.getInstance().getSchemaContexts().getDatabaseType();
+        return ProxyContext.getInstance().getSchemaContexts().getSchemaContextMap().isEmpty() ? new MySQLDatabaseType() : ProxyContext.getInstance().getSchemaContexts().getDatabaseType();
     }
 }