You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/03/17 07:07:23 UTC

[shardingsphere] branch master updated: Use SPI to introduce PrivilegeLoader (#9702)

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

panjuan 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 e1119bf  Use SPI to introduce PrivilegeLoader (#9702)
e1119bf is described below

commit e1119bf24500fd6fa8280ee9d1aac60379891ee2
Author: Liang Zhang <te...@163.com>
AuthorDate: Wed Mar 17 15:06:48 2021 +0800

    Use SPI to introduce PrivilegeLoader (#9702)
    
    * Revise #9687
    
    * Close connection for priviliege load
    
    * Use SPI to introduce PrivilegeLoader
---
 .../metadata/auth/builder/loader/PrivilegeLoader.java  | 15 +++++++--------
 .../auth/builder/loader/PrivilegeLoaderEngine.java     | 16 ++++++++++------
 .../builder/loader/dialect/MySQLPrivilegeLoader.java   | 12 +++++-------
 ....infra.metadata.auth.builder.loader.PrivilegeLoader | 18 ++++++++++++++++++
 4 files changed, 40 insertions(+), 21 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
index c233bf2..49015b3 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.infra.metadata.auth.builder.loader;
 
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.auth.model.privilege.ShardingSpherePrivilege;
 import org.apache.shardingsphere.infra.metadata.auth.model.user.ShardingSphereUser;
 
@@ -31,13 +30,6 @@ import java.util.Optional;
 public interface PrivilegeLoader {
     
     /**
-     * Get database type.
-     *
-     * @return database type
-     */
-    DatabaseType getDatabaseType();
-    
-    /**
      * Load.
      *
      * @param user user
@@ -46,4 +38,11 @@ public interface PrivilegeLoader {
      * @throws SQLException sql exception
      */
     Optional<ShardingSpherePrivilege> load(ShardingSphereUser user, DataSource dataSource) throws SQLException;
+    
+    /**
+     * Get database type.
+     *
+     * @return database type
+     */
+    String getDatabaseType();
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
index 2b6e9c2..2278af6 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.infra.metadata.auth.builder.loader;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.metadata.auth.builder.loader.dialect.MySQLPrivilegeLoader;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 
 import java.util.Optional;
 
@@ -30,6 +30,10 @@ import java.util.Optional;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class PrivilegeLoaderEngine {
     
+    static {
+        ShardingSphereServiceLoader.newServiceInstances(PrivilegeLoader.class);
+    }
+    
     /**
      * Get privilege loader.
      *
@@ -37,11 +41,11 @@ public final class PrivilegeLoaderEngine {
      * @return privilege loader
      */
     public static Optional<PrivilegeLoader> getPrivilegeLoader(final DatabaseType databaseType) {
-        switch (databaseType.getName()) {
-            case "MySQL":
-                return Optional.of(new MySQLPrivilegeLoader());
-            default:
-                return Optional.empty();
+        for (PrivilegeLoader each : ShardingSphereServiceLoader.newServiceInstances(PrivilegeLoader.class)) {
+            if (each.getDatabaseType().equals(databaseType.getName())) {
+                return Optional.of(each);
+            }
         }
+        return Optional.empty();
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/dialect/MySQLPrivilegeLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/dialect/MySQLPrivilegeLoader.java
index 4c8a877..7dcba5e 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/dialect/MySQLPrivilegeLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/dialect/MySQLPrivilegeLoader.java
@@ -17,8 +17,6 @@
 
 package org.apache.shardingsphere.infra.metadata.auth.builder.loader.dialect;
 
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.metadata.auth.builder.loader.PrivilegeLoader;
 import org.apache.shardingsphere.infra.metadata.auth.model.privilege.PrivilegeType;
 import org.apache.shardingsphere.infra.metadata.auth.model.privilege.ShardingSpherePrivilege;
@@ -39,11 +37,6 @@ import java.util.Optional;
 public final class MySQLPrivilegeLoader implements PrivilegeLoader {
     
     @Override
-    public DatabaseType getDatabaseType() {
-        return new MySQLDatabaseType();
-    }
-    
-    @Override
     public Optional<ShardingSpherePrivilege> load(final ShardingSphereUser user, final DataSource dataSource) throws SQLException {
         ShardingSpherePrivilege result = new ShardingSpherePrivilege();
         fillGlobalPrivilege(result, dataSource, user);
@@ -358,4 +351,9 @@ public final class MySQLPrivilegeLoader implements PrivilegeLoader {
             }
         }
     }
+    
+    @Override
+    public String getDatabaseType() {
+        return "MySQL";
+    }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.auth.builder.loader.PrivilegeLoader b/shardingsphere-infra/shardingsphere-infra-common/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.auth.builder.loader.PrivilegeLoader
new file mode 100644
index 0000000..be5992f
--- /dev/null
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.auth.builder.loader.PrivilegeLoader
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.infra.metadata.auth.builder.loader.dialect.MySQLPrivilegeLoader