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 2f726fabf9d Agent: optimize AgentClassloader (#23194)
2f726fabf9d is described below

commit 2f726fabf9da0ce56e209b68c8c06b999991c0c6
Author: jiangML <[email protected]>
AuthorDate: Fri Dec 30 15:53:36 2022 +0800

    Agent: optimize AgentClassloader (#23194)
    
    * optimize AgentClassLoader
    
    * optimize code
---
 .../agent/core/classloader/AgentClassLoader.java   | 22 +---------------------
 .../agent/core/logging/LoggerFactory.java          |  8 ++++----
 .../plugin/loader/AdvisorConfigurationLoader.java  | 10 +++++-----
 .../core/transformer/AgentTransformerTest.java     |  2 --
 4 files changed, 10 insertions(+), 32 deletions(-)

diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
index 5f284f4ddfd..e3f370bbaa6 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
@@ -18,9 +18,7 @@
 package org.apache.shardingsphere.agent.core.classloader;
 
 import com.google.common.io.ByteStreams;
-import lombok.Getter;
 import org.apache.shardingsphere.agent.core.plugin.PluginJar;
-import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -44,9 +42,6 @@ public final class AgentClassLoader extends ClassLoader {
         registerAsParallelCapable();
     }
     
-    @Getter
-    private static volatile AgentClassLoader classLoader;
-    
     private final Collection<PluginJar> pluginJars;
     
     public AgentClassLoader(final ClassLoader classLoader, final 
Collection<PluginJar> pluginJars) {
@@ -54,21 +49,6 @@ public final class AgentClassLoader extends ClassLoader {
         this.pluginJars = pluginJars;
     }
     
-    /**
-     * Initialize agent class loader.
-     * 
-     * @param pluginJars plugin jars
-     */
-    public static void init(final Collection<PluginJar> pluginJars) {
-        if (null == classLoader) {
-            synchronized (AgentClassLoader.class) {
-                if (null == classLoader) {
-                    classLoader = new 
AgentClassLoader(AgentPluginLoader.class.getClassLoader(), pluginJars);
-                }
-            }
-        }
-    }
-    
     @Override
     protected Class<?> findClass(final String name) throws 
ClassNotFoundException {
         String path = convertClassNameToPath(name);
@@ -129,7 +109,7 @@ public final class AgentClassLoader extends ClassLoader {
     
     @Override
     protected URL findResource(final String name) {
-        return pluginJars.stream().map(each -> findResource(name, 
each)).filter(Optional::isPresent).findFirst().map(Optional::get).orElse(null);
+        return pluginJars.stream().map(each -> findResource(name, 
each)).filter(Optional::isPresent).findFirst().filter(Optional::isPresent).map(Optional::get).orElse(null);
     }
     
     private Optional<URL> findResource(final String name, final PluginJar 
pluginJar) {
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
index c61f4c48edf..eee14c77ad7 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
@@ -137,15 +137,15 @@ public final class LoggerFactory {
         
         @SneakyThrows(ReflectiveOperationException.class)
         private void invokeMethod(final String methodName, final String msg) {
-            Class<?> logicLogger = 
LoggerFactory.getClassLoader().loadClass("org.slf4j.Logger");
-            Method method = logicLogger.getMethod(methodName, String.class);
+            Class<?> actualLogger = 
LoggerFactory.getClassLoader().loadClass("org.slf4j.Logger");
+            Method method = actualLogger.getMethod(methodName, String.class);
             method.invoke(logger, msg);
         }
         
         @SneakyThrows(ReflectiveOperationException.class)
         private void invokeMethod(final String methodName, final String msg, 
final Object... arguments) {
-            Class<?> logicLogger = 
LoggerFactory.getClassLoader().loadClass("org.slf4j.Logger");
-            Method method = logicLogger.getMethod(methodName, String.class, 
Object[].class);
+            Class<?> actualLogger = 
LoggerFactory.getClassLoader().loadClass("org.slf4j.Logger");
+            Method method = actualLogger.getMethod(methodName, String.class, 
Object[].class);
             method.invoke(logger, msg, arguments);
         }
     }
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AdvisorConfigurationLoader.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AdvisorConfigurationLoader.java
index e67363fcf3f..de76a7f450f 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AdvisorConfigurationLoader.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AdvisorConfigurationLoader.java
@@ -51,9 +51,9 @@ public final class AdvisorConfigurationLoader {
      */
     public static Map<String, AdvisorConfiguration> load(final 
Collection<PluginJar> pluginJars, final Collection<String> pluginTypes, final 
boolean isEnhancedForProxy) {
         Map<String, AdvisorConfiguration> result = new HashMap<>();
-        AgentClassLoader.init(pluginJars);
+        AgentClassLoader classLoader = new 
AgentClassLoader(AdvisorConfigurationLoader.class.getClassLoader(), pluginJars);
         for (String each : pluginTypes) {
-            InputStream advisorsResourceStream = 
getAdvisorsResourceStream(each, isEnhancedForProxy);
+            InputStream advisorsResourceStream = 
getAdvisorsResourceStream(classLoader, each, isEnhancedForProxy);
             if (null == advisorsResourceStream) {
                 LOGGER.error("No configuration of advisor for type `{}`", 
each);
                 continue;
@@ -64,9 +64,9 @@ public final class AdvisorConfigurationLoader {
         return ImmutableMap.<String, 
AdvisorConfiguration>builder().putAll(result).build();
     }
     
-    private static InputStream getAdvisorsResourceStream(final String type, 
final boolean isEnhancedForProxy) {
-        InputStream result = 
AgentClassLoader.getClassLoader().getResourceAsStream(getAdvisorsResourceFile(type,
 (isEnhancedForProxy ? "proxy" : "jdbc") + "-advisors.yaml"));
-        return null == result ? 
AgentClassLoader.getClassLoader().getResourceAsStream(getAdvisorsResourceFile(type,
 "advisors.yaml")) : result;
+    private static InputStream getAdvisorsResourceStream(final ClassLoader 
classLoader, final String type, final boolean isEnhancedForProxy) {
+        InputStream result = 
classLoader.getResourceAsStream(getAdvisorsResourceFile(type, 
(isEnhancedForProxy ? "proxy" : "jdbc") + "-advisors.yaml"));
+        return null == result ? 
classLoader.getResourceAsStream(getAdvisorsResourceFile(type, "advisors.yaml")) 
: result;
     }
     
     private static String getAdvisorsResourceFile(final String type, final 
String fileName) {
diff --git 
a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
 
b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
index dd8db56eebe..86c6ac484be 100644
--- 
a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
+++ 
b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
@@ -25,7 +25,6 @@ import net.bytebuddy.dynamic.scaffold.TypeValidation;
 import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
 import 
org.apache.shardingsphere.agent.config.advisor.MethodAdvisorConfiguration;
-import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.logging.LoggingListener;
 import 
org.apache.shardingsphere.agent.core.transformer.fixture.advice.BarAdvice;
 import 
org.apache.shardingsphere.agent.core.transformer.fixture.advice.FooAdvice;
@@ -50,7 +49,6 @@ public final class AgentTransformerTest {
     @BeforeClass
     public static void setup() {
         ByteBuddyAgent.install();
-        AgentClassLoader.init(Collections.emptyList());
         AdvisorConfiguration advisorConfig = createAdvisorConfiguration();
         Map<String, AdvisorConfiguration> advisorConfigs = 
Collections.singletonMap(advisorConfig.getTargetClassName(), advisorConfig);
         byteBuddyAgent = new AgentBuilder.Default().with(new 
ByteBuddy().with(TypeValidation.ENABLED))

Reply via email to