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