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 a392386 Refactor ShardingSphereAgent (#8704)
a392386 is described below
commit a392386975625d42aa38858f55f28f6ea13a5d11
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Dec 21 18:42:22 2020 +0800
Refactor ShardingSphereAgent (#8704)
* Refactor ShardingSphereAgent
* For code style
* Avoid inline import
* Avoid inline import
* Refactor ShardingSphereAgent
* Avoid inline import
* Use RequiredArgsConstructor on ShardingSphereTransformer
* For code format
---
.../agent/bootstrap/ShardingSphereAgent.java | 35 +++++++++++-----------
.../shardingsphere/agent/core/LoggingListener.java | 4 +--
.../agent/core/ShardingSphereTransformer.java | 16 +++++-----
.../agent/core/plugin/PluginDefinition.java | 6 ++--
.../src/test/resources/conf/agent.yaml | 1 -
5 files changed, 30 insertions(+), 32 deletions(-)
diff --git
a/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
b/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
index 9f7affb..75b2d42 100644
---
a/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
+++
b/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
@@ -24,7 +24,6 @@ import net.bytebuddy.dynamic.scaffold.TypeValidation;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.core.LoggingListener;
import org.apache.shardingsphere.agent.core.ShardingSphereTransformer;
-import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
import org.apache.shardingsphere.agent.core.config.AgentConfigurationLoader;
import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
@@ -45,22 +44,24 @@ public class ShardingSphereAgent {
* @throws IOException IO exception
*/
public static void premain(final String agentArgs, final Instrumentation
instrumentation) throws IOException {
- AgentConfiguration agentConfiguration =
AgentConfigurationLoader.load();
- SingletonHolder.INSTANCE.put(agentConfiguration);
- ByteBuddy byteBuddy = new ByteBuddy().with(TypeValidation.ENABLED);
- AgentBuilder builder = new AgentBuilder.Default()
- .with(byteBuddy)
- .ignore(ElementMatchers.isSynthetic())
-
.or(ElementMatchers.nameStartsWith("org.apache.shardingsphere.agent."));
- AgentPluginLoader agentPluginLoader = AgentPluginLoader.getInstance();
- agentPluginLoader.loadAllPlugins();
- builder.type(agentPluginLoader.typeMatcher())
- .transform(new ShardingSphereTransformer(agentPluginLoader))
- .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
- .with(new LoggingListener())
- .installOn(instrumentation);
- agentPluginLoader.initialAllServices();
- agentPluginLoader.startAllServices();
+ SingletonHolder.INSTANCE.put(AgentConfigurationLoader.load());
+ AgentPluginLoader agentPluginLoader = createAgentPluginLoader();
+ setUpAgentBuilder(instrumentation, agentPluginLoader);
Runtime.getRuntime().addShutdownHook(new
Thread(agentPluginLoader::shutdownAllServices));
}
+
+ private static AgentPluginLoader createAgentPluginLoader() throws
IOException {
+ AgentPluginLoader result = AgentPluginLoader.getInstance();
+ result.loadAllPlugins();
+ result.initialAllServices();
+ result.startAllServices();
+ return result;
+ }
+
+ private static void setUpAgentBuilder(final Instrumentation
instrumentation, final AgentPluginLoader agentPluginLoader) {
+ AgentBuilder agentBuilder = new AgentBuilder.Default().with(new
ByteBuddy().with(TypeValidation.ENABLED))
+
.ignore(ElementMatchers.isSynthetic()).or(ElementMatchers.nameStartsWith("org.apache.shardingsphere.agent."));
+ agentBuilder.type(agentPluginLoader.typeMatcher())
+ .transform(new
ShardingSphereTransformer(agentPluginLoader)).with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION).with(new
LoggingListener()).installOn(instrumentation);
+ }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
index cb98daf..8c5a94b 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
@@ -19,7 +19,7 @@
package org.apache.shardingsphere.agent.core;
import lombok.extern.slf4j.Slf4j;
-import net.bytebuddy.agent.builder.AgentBuilder;
+import net.bytebuddy.agent.builder.AgentBuilder.Listener;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.utility.JavaModule;
@@ -28,7 +28,7 @@ import net.bytebuddy.utility.JavaModule;
* Listener to log what is informed about events that occur during an
instrumentation process.
*/
@Slf4j
-public class LoggingListener implements AgentBuilder.Listener {
+public class LoggingListener implements Listener {
@Override
public void onDiscovery(final String typeName, final ClassLoader
classLoader, final JavaModule module, final boolean loaded) {
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
index 289c23f..f416838 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
@@ -18,10 +18,11 @@
package org.apache.shardingsphere.agent.core;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import net.bytebuddy.agent.builder.AgentBuilder;
+import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
import net.bytebuddy.description.type.TypeDescription;
-import net.bytebuddy.dynamic.DynamicType;
+import net.bytebuddy.dynamic.DynamicType.Builder;
import net.bytebuddy.implementation.FieldAccessor;
import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.SuperMethodCall;
@@ -40,21 +41,18 @@ import
org.apache.shardingsphere.agent.core.plugin.point.InstanceMethodPoint;
/**
* Shardingsphere transformer.
*/
+@RequiredArgsConstructor
@Slf4j
-public class ShardingSphereTransformer implements AgentBuilder.Transformer {
+public class ShardingSphereTransformer implements Transformer {
private static final String SS_EXTRA_DATA = "_$EXTRA_DATA$_";
private final AgentPluginLoader agentPluginLoader;
- public ShardingSphereTransformer(final AgentPluginLoader
agentPluginLoader) {
- this.agentPluginLoader = agentPluginLoader;
- }
-
@Override
- public DynamicType.Builder<?> transform(final DynamicType.Builder<?>
builder, final TypeDescription typeDescription, final ClassLoader classLoader,
final JavaModule module) {
+ public Builder<?> transform(final Builder<?> builder, final
TypeDescription typeDescription, final ClassLoader classLoader, final
JavaModule module) {
if (agentPluginLoader.containsType(typeDescription)) {
- DynamicType.Builder<?> newBuilder = builder;
+ Builder<?> newBuilder = builder;
newBuilder = newBuilder.defineField(SS_EXTRA_DATA, Object.class,
Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
.implement(TargetObject.class)
.intercept(FieldAccessor.ofField(SS_EXTRA_DATA));
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
index d6efcb3..9ae1aea 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
@@ -33,9 +33,9 @@ public abstract class PluginDefinition {
private final Map<String, PluginAdviceDefinition.Builder> defineMap =
Maps.newHashMap();
private final List<Class<? extends Service>> services =
Lists.newArrayList();
-
+
private final String pluginName;
-
+
public PluginDefinition(final String pluginName) {
this.pluginName = pluginName;
}
@@ -81,7 +81,7 @@ public abstract class PluginDefinition {
public List<Class<? extends Service>> getAllServices() {
return services;
}
-
+
/**
* To get plugin name.
*
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/test/resources/conf/agent.yaml
b/shardingsphere-agent/shardingsphere-agent-core/src/test/resources/conf/agent.yaml
index d4ce979..d4b2635 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/test/resources/conf/agent.yaml
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/test/resources/conf/agent.yaml
@@ -20,4 +20,3 @@ applicationName: shardingsphere-agent
metrics:
host: localhost
port: 8090
-