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))