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
-

Reply via email to