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/17 04:48:23 UTC
[shardingsphere] branch master updated: Remove PluginJarHolder (#22930)
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 18ebdd85cef Remove PluginJarHolder (#22930)
18ebdd85cef is described below
commit 18ebdd85cef0f5f437ac79af584c6edfcd406510
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Dec 17 12:48:09 2022 +0800
Remove PluginJarHolder (#22930)
---
.../agent/bootstrap/ShardingSphereAgent.java | 19 ++++----
.../core/plugin/PluginBootServiceManager.java | 7 ++-
.../agent/core/plugin/PluginJarHolder.java | 51 ----------------------
.../core/plugin/loader/AgentPluginLoader.java | 4 +-
.../agent/core/transformer/AgentTransformer.java | 8 +++-
.../transformer/build/advise/AdviceFactory.java | 6 ++-
.../build/advise/JDBCAdviceFactory.java | 9 ++--
.../core/transformer/AgentTransformerTest.java | 2 +-
8 files changed, 34 insertions(+), 72 deletions(-)
diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
index f8dd6d8d368..1e5c57b58ad 100644
--- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
+++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
@@ -29,6 +29,7 @@ import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.config.loader.PluginConfigurationLoader;
import org.apache.shardingsphere.agent.core.logging.LoggingListener;
import org.apache.shardingsphere.agent.core.plugin.PluginBootServiceManager;
+import org.apache.shardingsphere.agent.core.plugin.PluginJar;
import org.apache.shardingsphere.agent.core.plugin.loader.AdvisorConfigurationLoader;
import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
import org.apache.shardingsphere.agent.core.transformer.AgentJunction;
@@ -36,6 +37,7 @@ import org.apache.shardingsphere.agent.core.transformer.AgentTransformer;
import java.io.IOException;
import java.lang.instrument.Instrumentation;
+import java.util.Collection;
import java.util.Map;
/**
@@ -54,10 +56,11 @@ public final class ShardingSphereAgent {
public static void premain(final String args, final Instrumentation instrumentation) throws IOException {
Map<String, PluginConfiguration> pluginConfigs = PluginConfigurationLoader.load();
boolean isEnhancedForProxy = isEnhancedForProxy();
- Map<String, AdvisorConfiguration> advisorConfigs = AdvisorConfigurationLoader.load(AgentPluginLoader.load(), pluginConfigs.keySet(), isEnhancedForProxy);
- setUpAgentBuilder(instrumentation, pluginConfigs, advisorConfigs, isEnhancedForProxy);
+ Collection<PluginJar> pluginJars = AgentPluginLoader.load();
+ Map<String, AdvisorConfiguration> advisorConfigs = AdvisorConfigurationLoader.load(pluginJars, pluginConfigs.keySet(), isEnhancedForProxy);
+ setUpAgentBuilder(instrumentation, pluginConfigs, pluginJars, advisorConfigs, isEnhancedForProxy);
if (isEnhancedForProxy) {
- setupPluginBootService(pluginConfigs);
+ setupPluginBootService(pluginConfigs, pluginJars);
}
}
@@ -70,19 +73,19 @@ public final class ShardingSphereAgent {
return true;
}
- private static void setUpAgentBuilder(final Instrumentation instrumentation,
- final Map<String, PluginConfiguration> pluginConfigs, final Map<String, AdvisorConfiguration> advisorConfigs, final boolean isEnhancedForProxy) {
+ private static void setUpAgentBuilder(final Instrumentation instrumentation, final Map<String, PluginConfiguration> pluginConfigs,
+ final Collection<PluginJar> pluginJars, final Map<String, AdvisorConfiguration> advisorConfigs, final boolean isEnhancedForProxy) {
AgentBuilder agentBuilder = new AgentBuilder.Default().with(new ByteBuddy().with(TypeValidation.ENABLED))
.ignore(ElementMatchers.isSynthetic())
.or(ElementMatchers.nameStartsWith("org.apache.shardingsphere.agent."));
agentBuilder.type(new AgentJunction(advisorConfigs))
- .transform(new AgentTransformer(pluginConfigs, advisorConfigs, isEnhancedForProxy))
+ .transform(new AgentTransformer(pluginConfigs, pluginJars, advisorConfigs, isEnhancedForProxy))
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(new LoggingListener()).installOn(instrumentation);
}
- private static void setupPluginBootService(final Map<String, PluginConfiguration> pluginConfigs) {
+ private static void setupPluginBootService(final Map<String, PluginConfiguration> pluginConfigs, final Collection<PluginJar> pluginJars) {
PluginBootServiceManager.startAllServices(pluginConfigs, AgentClassLoader.getClassLoader(), true);
- Runtime.getRuntime().addShutdownHook(new Thread(PluginBootServiceManager::closeAllServices));
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> PluginBootServiceManager.closeAllServices(pluginJars)));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
index 0c159b0b2fe..fe2face144c 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.agent.core.spi.AgentSPIRegistry;
import org.apache.shardingsphere.agent.spi.plugin.PluginBootService;
import java.io.IOException;
+import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
@@ -66,8 +67,10 @@ public final class PluginBootServiceManager {
/**
* Close all services.
+ *
+ * @param pluginJars plugin jars
*/
- public static void closeAllServices() {
+ public static void closeAllServices(final Collection<PluginJar> pluginJars) {
AgentSPIRegistry.getAllRegisteredServices(PluginBootService.class).forEach(each -> {
try {
each.close();
@@ -77,7 +80,7 @@ public final class PluginBootServiceManager {
LOGGER.error("Failed to close service.", ex);
}
});
- PluginJarHolder.getPluginJars().forEach(each -> {
+ pluginJars.forEach(each -> {
try {
each.getJarFile().close();
} catch (final IOException ex) {
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginJarHolder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginJarHolder.java
deleted file mode 100644
index 5f00459794d..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginJarHolder.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.agent.core.plugin;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * Plugin jar holder.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class PluginJarHolder {
-
- private static volatile Collection<PluginJar> pluginJars = new LinkedList<>();
-
- /**
- * Get plugin jars.
- *
- * @return plugin jars
- */
- public static Collection<PluginJar> getPluginJars() {
- return pluginJars;
- }
-
- /**
- * Set plugin jars.
- *
- * @param pluginJars plugin jars
- */
- public static void setPluginJars(final Collection<PluginJar> pluginJars) {
- PluginJarHolder.pluginJars = pluginJars;
- }
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
index ee0a53166e4..fe5bf384516 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
@@ -19,11 +19,10 @@ package org.apache.shardingsphere.agent.core.plugin.loader;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.agent.core.path.AgentPathBuilder;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory.Logger;
+import org.apache.shardingsphere.agent.core.path.AgentPathBuilder;
import org.apache.shardingsphere.agent.core.plugin.PluginJar;
-import org.apache.shardingsphere.agent.core.plugin.PluginJarHolder;
import java.io.File;
import java.io.IOException;
@@ -56,7 +55,6 @@ public final class AgentPluginLoader {
result.add(new PluginJar(new JarFile(each, true), each));
LOGGER.info("Loaded jar: {}", each.getName());
}
- PluginJarHolder.setPluginJars(result);
return result;
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
index f4d14fbf92d..6f5bd5efe7e 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
@@ -24,15 +24,17 @@ import net.bytebuddy.dynamic.DynamicType.Builder;
import net.bytebuddy.implementation.FieldAccessor;
import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.utility.JavaModule;
+import org.apache.shardingsphere.agent.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
-import org.apache.shardingsphere.agent.advice.TargetAdviceObject;
+import org.apache.shardingsphere.agent.core.plugin.PluginJar;
import org.apache.shardingsphere.agent.core.transformer.build.MethodAdvisorBuildEngine;
import org.apache.shardingsphere.agent.core.transformer.build.advise.AdviceFactory;
import org.apache.shardingsphere.agent.core.transformer.build.builder.type.ConstructorAdvisorBuilder;
import org.apache.shardingsphere.agent.core.transformer.build.builder.type.InstanceMethodAdvisorBuilder;
import org.apache.shardingsphere.agent.core.transformer.build.builder.type.StaticMethodAdvisorBuilder;
+import java.util.Collection;
import java.util.Map;
/**
@@ -45,6 +47,8 @@ public final class AgentTransformer implements Transformer {
private final Map<String, PluginConfiguration> pluginConfigs;
+ private final Collection<PluginJar> pluginJars;
+
private final Map<String, AdvisorConfiguration> advisorConfigs;
private final boolean enhanceProxy;
@@ -57,7 +61,7 @@ public final class AgentTransformer implements Transformer {
}
Builder<?> result = builder.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE).implement(TargetAdviceObject.class).intercept(FieldAccessor.ofField(EXTRA_DATA));
AdvisorConfiguration advisorConfig = advisorConfigs.get(typeDescription.getTypeName());
- AdviceFactory adviceFactory = new AdviceFactory(classLoader, pluginConfigs, enhanceProxy);
+ AdviceFactory adviceFactory = new AdviceFactory(classLoader, pluginConfigs, pluginJars, enhanceProxy);
result = new MethodAdvisorBuildEngine(advisorConfig.getConstructorAdvisors(), typeDescription).create(result, new ConstructorAdvisorBuilder(adviceFactory));
result = new MethodAdvisorBuildEngine(advisorConfig.getInstanceMethodAdvisors(), typeDescription).create(result, new InstanceMethodAdvisorBuilder(adviceFactory));
result = new MethodAdvisorBuildEngine(advisorConfig.getStaticMethodAdvisors(), typeDescription).create(result, new StaticMethodAdvisorBuilder(adviceFactory));
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/AdviceFactory.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/AdviceFactory.java
index b3d261b71ef..d2609112d7d 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/AdviceFactory.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/AdviceFactory.java
@@ -19,7 +19,9 @@ package org.apache.shardingsphere.agent.core.transformer.build.advise;
import org.apache.shardingsphere.agent.advice.AgentAdvice;
import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
+import org.apache.shardingsphere.agent.core.plugin.PluginJar;
+import java.util.Collection;
import java.util.Map;
/**
@@ -33,9 +35,9 @@ public final class AdviceFactory {
private final boolean isEnhancedForProxy;
- public AdviceFactory(final ClassLoader classLoader, final Map<String, PluginConfiguration> pluginConfigs, final boolean isEnhancedForProxy) {
+ public AdviceFactory(final ClassLoader classLoader, final Map<String, PluginConfiguration> pluginConfigs, final Collection<PluginJar> pluginJars, final boolean isEnhancedForProxy) {
proxyAdviceFactory = new ProxyAdviceFactory();
- jdbcAdviceFactory = new JDBCAdviceFactory(classLoader, pluginConfigs);
+ jdbcAdviceFactory = new JDBCAdviceFactory(classLoader, pluginConfigs, pluginJars);
this.isEnhancedForProxy = isEnhancedForProxy;
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/JDBCAdviceFactory.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/JDBCAdviceFactory.java
index ed7fba49705..2e7db63c73e 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/JDBCAdviceFactory.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/build/advise/JDBCAdviceFactory.java
@@ -22,8 +22,9 @@ import lombok.SneakyThrows;
import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.plugin.PluginBootServiceManager;
-import org.apache.shardingsphere.agent.core.plugin.PluginJarHolder;
+import org.apache.shardingsphere.agent.core.plugin.PluginJar;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -44,6 +45,8 @@ public final class JDBCAdviceFactory {
private final Map<String, PluginConfiguration> pluginConfigs;
+ private final Collection<PluginJar> pluginJars;
+
/**
* Get advice.
*
@@ -59,7 +62,7 @@ public final class JDBCAdviceFactory {
@SneakyThrows(ReflectiveOperationException.class)
private Object createAdviceForJDBC(final String adviceClassName) {
- ClassLoader pluginClassLoader = PLUGIN_CLASS_LOADERS.computeIfAbsent(classLoader, key -> new AgentClassLoader(key, PluginJarHolder.getPluginJars()));
+ ClassLoader pluginClassLoader = PLUGIN_CLASS_LOADERS.computeIfAbsent(classLoader, key -> new AgentClassLoader(key, pluginJars));
Object result = Class.forName(adviceClassName, true, pluginClassLoader).getDeclaredConstructor().newInstance();
setupPluginBootService(pluginClassLoader);
return result;
@@ -71,7 +74,7 @@ public final class JDBCAdviceFactory {
}
try {
PluginBootServiceManager.startAllServices(pluginConfigs, pluginClassLoader, false);
- Runtime.getRuntime().addShutdownHook(new Thread(PluginBootServiceManager::closeAllServices));
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> PluginBootServiceManager.closeAllServices(pluginJars)));
} finally {
isStarted = true;
}
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 ccb6a832aaa..202b3a6a225 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
@@ -69,7 +69,7 @@ public final class AgentTransformerTest {
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(new LoggingListener())
.type(new AgentJunction(advisorConfigs))
- .transform(new AgentTransformer(Collections.emptyMap(), advisorConfigs, true))
+ .transform(new AgentTransformer(Collections.emptyMap(), Collections.emptyList(), advisorConfigs, true))
.asTerminalTransformation()
.installOnByteBuddyAgent();
}