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();
     }
     
     /**