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 2022/12/20 13:50:43 UTC
[shardingsphere] branch master updated: Refactor AgentServiceLoader (#23000)
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 df8ca57fbbe Refactor AgentServiceLoader (#23000)
df8ca57fbbe is described below
commit df8ca57fbbeaefe57935cadc2dbfc9e9a9904175
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue Dec 20 21:50:36 2022 +0800
Refactor AgentServiceLoader (#23000)
---
.../agent/core/spi/AgentServiceLoader.java | 46 +++++++++-------------
.../agent/core/spi/PluginBootServiceRegistry.java | 4 +-
2 files changed, 20 insertions(+), 30 deletions(-)
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
index f5ed142165e..fd1ecb55da4 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.agent.core.spi;
import com.google.common.base.Preconditions;
+import lombok.Getter;
import java.util.Collection;
import java.util.LinkedList;
@@ -28,17 +29,29 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* Agent service loader.
*/
+@Getter
public final class AgentServiceLoader<T> {
private static final Map<Class<?>, AgentServiceLoader<?>> LOADERS = new ConcurrentHashMap<>();
- private final Map<Class<?>, Collection<T>> serviceMap = new ConcurrentHashMap<>();
-
- private final Class<T> service;
+ private final Collection<T> services;
private AgentServiceLoader(final Class<T> service) {
- this.service = service;
- register(service);
+ validate(service);
+ this.services = register(service);
+ }
+
+ private void validate(final Class<T> service) {
+ Preconditions.checkNotNull(service, "Extension clazz is null.");
+ Preconditions.checkArgument(service.isInterface(), "Extension clazz `%s` is not interface.", service);
+ }
+
+ private Collection<T> register(final Class<T> service) {
+ Collection<T> result = new LinkedList<>();
+ for (T each : ServiceLoader.load(service)) {
+ result.add(each);
+ }
+ return result;
}
/**
@@ -50,29 +63,6 @@ public final class AgentServiceLoader<T> {
*/
@SuppressWarnings("unchecked")
public static <T> AgentServiceLoader<T> getServiceLoader(final Class<T> service) {
- Preconditions.checkNotNull(service, "Extension clazz is null.");
- Preconditions.checkArgument(service.isInterface(), "Extension clazz `%s` is not interface.", service);
- AgentServiceLoader<T> agentServiceLoader = (AgentServiceLoader<T>) LOADERS.get(service);
- if (null != agentServiceLoader) {
- return agentServiceLoader;
- }
return (AgentServiceLoader<T>) LOADERS.computeIfAbsent(service, AgentServiceLoader::new);
}
-
- /**
- * New service instances.
- *
- * @return service instances
- */
- public Collection<T> newServiceInstances() {
- return serviceMap.get(service);
- }
-
- private void register(final Class<T> service) {
- if (serviceMap.containsKey(service)) {
- return;
- }
- serviceMap.put(service, new LinkedList<>());
- ServiceLoader.load(service).forEach(each -> serviceMap.get(service).add(each));
- }
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java
index c5a5acb782a..682c7abee10 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java
@@ -39,7 +39,7 @@ public final class PluginBootServiceRegistry {
* @return registered service
*/
public static Optional<PluginBootService> getRegisteredService(final String type) {
- return AgentServiceLoader.getServiceLoader(PluginBootService.class).newServiceInstances().stream().filter(each -> each.getType().equalsIgnoreCase(type)).findFirst();
+ return AgentServiceLoader.getServiceLoader(PluginBootService.class).getServices().stream().filter(each -> each.getType().equalsIgnoreCase(type)).findFirst();
}
/**
@@ -48,7 +48,7 @@ public final class PluginBootServiceRegistry {
* @return registered services
*/
public static Collection<PluginBootService> getAllRegisteredServices() {
- return AgentServiceLoader.getServiceLoader(PluginBootService.class).newServiceInstances();
+ return AgentServiceLoader.getServiceLoader(PluginBootService.class).getServices();
}
/**