This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 a0e4d9a refactor agent code (#8718)
a0e4d9a is described below
commit a0e4d9a1ada52938e5cc136e21594f77c390adac
Author: xiaoyu <[email protected]>
AuthorDate: Tue Dec 22 15:33:35 2020 +0800
refactor agent code (#8718)
* refactor agent code
* refactor agent code
---
.../agent/bootstrap/ShardingSphereAgent.java | 20 ++--
.../agent/core/ShardingSphereTransformer.java | 94 -----------------
.../AgentObjectPool.java} | 6 +-
.../agent/core/config/AgentConfiguration.java | 3 +-
.../core/config/AgentConfigurationLoader.java | 2 +-
.../agent/core/{ => listener}/LoggingListener.java | 7 +-
.../core/{common => path}/AgentPathBuilder.java | 2 +-
.../agent/core/plugin/PluginDefinition.java | 93 ----------------
.../core/plugin/definition/PluginDefinition.java | 82 +++++++++++++++
.../plugin/{ => loader}/AgentPluginLoader.java | 117 +++++++++++----------
.../core/plugin/point/ClassStaticMethodPoint.java | 39 +------
.../agent/core/plugin/point/ConstructorPoint.java | 29 +----
.../core/plugin/point/InstanceMethodPoint.java | 39 +------
.../PluginInterceptorPoint.java} | 70 +++---------
.../{Service.java => service/BootService.java} | 13 ++-
.../plugin/{ => service}/ServiceSupervisor.java | 31 +++---
.../agent/core/spi/AgentServiceLoader.java | 2 +-
.../transformer/ShardingSphereTransformer.java | 108 +++++++++++++++++++
.../agent/metrics/api/MetricsProvider.java | 4 +-
.../api/prometheus/PrometheusMetricsRegister.java | 4 +-
.../shardingsphere/agent/metrics/api/BaseTest.java | 4 +-
.../definition/MetricsPluginDefinition.java | 2 +-
.../tracing/jaeger/JaegerPluginDefinition.java | 4 +-
...erService.java => JaegerTracerBootService.java} | 12 +--
.../tracing/zipkin/ZipkinPluginDefinition.java | 4 +-
...erService.java => ZipkinTracerBootService.java} | 11 +-
26 files changed, 343 insertions(+), 459 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 10880aa..7d76319 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
@@ -21,12 +21,12 @@ import net.bytebuddy.ByteBuddy;
import net.bytebuddy.agent.builder.AgentBuilder;
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.listener.LoggingListener;
+import
org.apache.shardingsphere.agent.core.transformer.ShardingSphereTransformer;
import org.apache.shardingsphere.agent.core.config.AgentConfigurationLoader;
-import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
-import org.apache.shardingsphere.agent.core.plugin.ServiceSupervisor;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.service.ServiceSupervisor;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
import java.io.IOException;
import java.lang.instrument.Instrumentation;
@@ -34,20 +34,20 @@ import java.lang.instrument.Instrumentation;
/**
* ShardingSphere agent.
*/
-public class ShardingSphereAgent {
+public final class ShardingSphereAgent {
/**
* Premain for instrumentation.
*
- * @param agentArgs agent args
+ * @param arguments arguments
* @param instrumentation instrumentation
* @throws IOException IO exception
*/
- public static void premain(final String agentArgs, final Instrumentation
instrumentation) throws IOException {
- SingletonHolder.INSTANCE.put(AgentConfigurationLoader.load());
+ public static void premain(final String arguments, final Instrumentation
instrumentation) throws IOException {
+ AgentObjectPool.INSTANCE.put(AgentConfigurationLoader.load());
AgentPluginLoader agentPluginLoader = createAgentPluginLoader();
setUpAgentBuilder(instrumentation, agentPluginLoader);
- superviseServices(agentPluginLoader.getServices());
+ superviseServices(agentPluginLoader.getBootServices());
}
private static AgentPluginLoader createAgentPluginLoader() throws
IOException {
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
deleted file mode 100644
index f416838..0000000
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
+++ /dev/null
@@ -1,94 +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;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
-import net.bytebuddy.description.type.TypeDescription;
-import net.bytebuddy.dynamic.DynamicType.Builder;
-import net.bytebuddy.implementation.FieldAccessor;
-import net.bytebuddy.implementation.MethodDelegation;
-import net.bytebuddy.implementation.SuperMethodCall;
-import net.bytebuddy.jar.asm.Opcodes;
-import net.bytebuddy.utility.JavaModule;
-import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
-import org.apache.shardingsphere.agent.core.plugin.PluginAdviceDefinition;
-import
org.apache.shardingsphere.agent.core.plugin.advice.ConstructorMethodInterceptor;
-import
org.apache.shardingsphere.agent.core.plugin.advice.MethodAroundInterceptor;
-import
org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundInterceptor;
-import org.apache.shardingsphere.agent.core.plugin.advice.TargetObject;
-import
org.apache.shardingsphere.agent.core.plugin.point.ClassStaticMethodPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.ConstructorPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.InstanceMethodPoint;
-
-/**
- * Shardingsphere transformer.
- */
-@RequiredArgsConstructor
-@Slf4j
-public class ShardingSphereTransformer implements Transformer {
-
- private static final String SS_EXTRA_DATA = "_$EXTRA_DATA$_";
-
- private final AgentPluginLoader agentPluginLoader;
-
- @Override
- public Builder<?> transform(final Builder<?> builder, final
TypeDescription typeDescription, final ClassLoader classLoader, final
JavaModule module) {
- if (agentPluginLoader.containsType(typeDescription)) {
- 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));
- final PluginAdviceDefinition define =
agentPluginLoader.loadPluginAdviceDefine(typeDescription);
- for (ConstructorPoint point : define.getConstructorPoints()) {
- try {
- final ConstructorMethodInterceptor interceptor = new
ConstructorMethodInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
- newBuilder =
newBuilder.constructor(point.getConstructorMatcher()).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
- // CHECKSTYLE:OFF
- } catch (final Throwable e) {
- // CHECKSTYLE:ON
- log.error("Failed to load advice class: {}",
point.getAdvice(), e);
- }
- }
- for (ClassStaticMethodPoint point :
define.getClassStaticMethodPoints()) {
- try {
- final StaticMethodAroundInterceptor interceptor = new
StaticMethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
- newBuilder =
newBuilder.method(point.getMethodsMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
- // CHECKSTYLE:OFF
- } catch (final Throwable e) {
- // CHECKSTYLE:ON
- log.error("Failed to load advice class: {}",
point.getAdvice(), e);
- }
- }
- for (InstanceMethodPoint point : define.getInstanceMethodPoints())
{
- try {
- final MethodAroundInterceptor interceptor = new
MethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
- newBuilder =
newBuilder.method(point.getMethodMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
- // CHECKSTYLE:OFF
- } catch (final Throwable e) {
- // CHECKSTYLE:ON
- log.error("Failed to load advice class: {}",
point.getAdvice(), e);
- }
- }
- return newBuilder;
- }
- return builder;
- }
-}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/SingletonHolder.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/cache/AgentObjectPool.java
similarity index 93%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/SingletonHolder.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/cache/AgentObjectPool.java
index 50428a9..34a1c9d 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/SingletonHolder.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/cache/AgentObjectPool.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.utils;
+package org.apache.shardingsphere.agent.core.cache;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
- * Singleton holder.
+ * Agent object pool.
*/
-public enum SingletonHolder {
+public enum AgentObjectPool {
/**
* Instance singleton.
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
index 077dd35..5fdc8e9 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.agent.core.config;
+import java.util.LinkedList;
import lombok.Data;
import java.util.List;
@@ -34,7 +35,7 @@ public class AgentConfiguration {
private TracingConfiguration tracing;
- private List<String> activatedPlugins;
+ private List<String> activatedPlugins = new LinkedList<>();
@Data
public static class MetricsConfiguration {
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
index 03f6366..72e5674 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
@@ -22,7 +22,7 @@ import java.io.File;
import java.io.IOException;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.agent.core.common.AgentPathBuilder;
+import org.apache.shardingsphere.agent.core.path.AgentPathBuilder;
import org.apache.shardingsphere.agent.core.yaml.YamlEngine;
/**
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/listener/LoggingListener.java
similarity index 90%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/listener/LoggingListener.java
index 8c5a94b..f15bfac 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/listener/LoggingListener.java
@@ -13,10 +13,9 @@
* 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;
+package org.apache.shardingsphere.agent.core.listener;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.agent.builder.AgentBuilder.Listener;
@@ -25,10 +24,10 @@ import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.utility.JavaModule;
/**
- * Listener to log what is informed about events that occur during an
instrumentation process.
+ * Logging listener what is informed about events that occur during an
instrumentation process.
*/
@Slf4j
-public class LoggingListener implements Listener {
+public final 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/common/AgentPathBuilder.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/path/AgentPathBuilder.java
similarity index 98%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/path/AgentPathBuilder.java
index 409cdf6..e69d619 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/path/AgentPathBuilder.java
@@ -16,7 +16,7 @@
*
*/
-package org.apache.shardingsphere.agent.core.common;
+package org.apache.shardingsphere.agent.core.path;
import java.io.File;
import java.net.MalformedURLException;
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
deleted file mode 100644
index 9ae1aea..0000000
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
+++ /dev/null
@@ -1,93 +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 com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * Plugin definition.
- */
-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;
- }
-
- /**
- * Define the plugin here.
- */
- protected abstract void define();
-
- protected PluginAdviceDefinition.Builder intercept(final String
classNameOfTarget) {
- if (defineMap.containsKey(classNameOfTarget)) {
- return defineMap.get(classNameOfTarget);
- }
- PluginAdviceDefinition.Builder builder =
PluginAdviceDefinition.intercept(classNameOfTarget);
- defineMap.put(classNameOfTarget, builder);
- return builder;
- }
-
- /**
- * Register service to agent.
- *
- * @param service the class of Service
- */
- protected void registerService(final Class<? extends Service> service) {
- services.add(service);
- }
-
- /**
- * To build Plugin definition.
- *
- * @return configurations
- */
- public final List<PluginAdviceDefinition> build() {
- define();
- return
defineMap.values().stream().map(PluginAdviceDefinition.Builder::install).collect(Collectors.toList());
- }
-
- /**
- * To get all services.
- *
- * @return all services
- */
- public List<Class<? extends Service>> getAllServices() {
- return services;
- }
-
- /**
- * To get plugin name.
- *
- * @return plugin name
- */
- public String getPluginName() {
- return pluginName;
- }
-}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/definition/PluginDefinition.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/definition/PluginDefinition.java
new file mode 100644
index 0000000..de474eb
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/definition/PluginDefinition.java
@@ -0,0 +1,82 @@
+/*
+ * 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.definition;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import
org.apache.shardingsphere.agent.core.plugin.point.PluginInterceptorPoint;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+
+/**
+ * Plugin definition.
+ */
+@RequiredArgsConstructor
+public abstract class PluginDefinition {
+
+ private final Map<String, PluginInterceptorPoint.Builder>
interceptorPointMap = Maps.newHashMap();
+
+ private final List<Class<? extends BootService>> bootServices =
Lists.newArrayList();
+
+ @Getter
+ private final String pluginName;
+
+ protected abstract void define();
+
+ protected PluginInterceptorPoint.Builder intercept(final String
classNameOfTarget) {
+ if (interceptorPointMap.containsKey(classNameOfTarget)) {
+ return interceptorPointMap.get(classNameOfTarget);
+ }
+ PluginInterceptorPoint.Builder builder =
PluginInterceptorPoint.intercept(classNameOfTarget);
+ interceptorPointMap.put(classNameOfTarget, builder);
+ return builder;
+ }
+
+ /**
+ * Register boot service to agent.
+ *
+ * @param service the class of Service
+ */
+ protected void registerService(final Class<? extends BootService> service)
{
+ bootServices.add(service);
+ }
+
+ /**
+ * Build collection of pluginInterceptorPoint.
+ *
+ * @return Collection of pluginInterceptorPoint
+ */
+ public final List<PluginInterceptorPoint> build() {
+ define();
+ return
interceptorPointMap.values().stream().map(PluginInterceptorPoint.Builder::install).collect(Collectors.toList());
+ }
+
+ /**
+ * To get all boot services.
+ *
+ * @return all boot services
+ */
+ public List<Class<? extends BootService>> getAllServices() {
+ return bootServices;
+ }
+}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
similarity index 69%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
index fccc12e..2f7fd30 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.plugin;
+package org.apache.shardingsphere.agent.core.plugin.loader;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -30,9 +30,13 @@ import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatcher.Junction;
-import org.apache.shardingsphere.agent.core.common.AgentPathBuilder;
+import org.apache.shardingsphere.agent.core.path.AgentPathBuilder;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import
org.apache.shardingsphere.agent.core.plugin.point.PluginInterceptorPoint;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+import org.apache.shardingsphere.agent.core.plugin.service.ServiceSupervisor;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
@@ -69,11 +73,11 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
private final ReentrantLock lock = new ReentrantLock();
- private final List<UberJar> jars = Lists.newArrayList();
+ private final List<PluginJar> jars = Lists.newArrayList();
- private final List<Service> services = Lists.newArrayList();
+ private final List<BootService> bootServices = Lists.newArrayList();
- private Map<String, PluginAdviceDefinition> pluginDefineMap;
+ private Map<String, PluginInterceptorPoint> interceptorPointMap;
private AgentPluginLoader() {
super(AgentPluginLoader.class.getClassLoader());
@@ -105,17 +109,14 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
if (null == jarFiles) {
return;
}
- Map<String, PluginAdviceDefinition> pluginAdviceDefinitionMap =
Maps.newHashMap();
- List<String> activatedLists =
SingletonHolder.INSTANCE.get(AgentConfiguration.class).getActivatedPlugins();
- if (null == activatedLists) {
- activatedLists = Lists.newArrayList();
- }
+ Map<String, PluginInterceptorPoint> pointMap = Maps.newHashMap();
+ List<String> activatedLists =
AgentObjectPool.INSTANCE.get(AgentConfiguration.class).getActivatedPlugins();
Set<String> activatedPlugins = Sets.newHashSet(activatedLists);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
for (File jarFile : jarFiles) {
outputStream.reset();
JarFile jar = new JarFile(jarFile, true);
- jars.add(new UberJar(jar, jarFile));
+ jars.add(new PluginJar(jar, jarFile));
log.info("Loaded jar {}.", jarFile.getName());
Attributes attributes = jar.getManifest().getMainAttributes();
String entrypoint = attributes.getValue("Entrypoint");
@@ -129,33 +130,15 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
if (!activatedPlugins.isEmpty() &&
!activatedPlugins.contains(pluginDefinition.getPluginName())) {
continue;
}
- pluginDefinition.build().forEach(plugin -> {
- String target = plugin.getClassNameOfTarget();
- if (pluginAdviceDefinitionMap.containsKey(target)) {
- PluginAdviceDefinition definition =
pluginAdviceDefinitionMap.get(target);
-
definition.getConstructorPoints().addAll(plugin.getConstructorPoints());
-
definition.getInstanceMethodPoints().addAll(plugin.getInstanceMethodPoints());
-
definition.getClassStaticMethodPoints().addAll(plugin.getClassStaticMethodPoints());
- } else {
- pluginAdviceDefinitionMap.put(target, plugin);
- }
- });
- pluginDefinition.getAllServices().forEach(klass -> {
- try {
- services.add(klass.newInstance());
- // CHECKSTYLE:OFF
- } catch (final Throwable ex) {
- // CHECKSTYLE:ON
- log.error("Failed to create service instance, {}.",
klass, ex);
- }
- });
+ buildPluginInterceptorPointMap(pluginDefinition, pointMap);
+ buildBootServices(pluginDefinition);
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
log.error("Failed to load plugin definition, {}.", entrypoint,
ex);
}
}
- pluginDefineMap = ImmutableMap.<String,
PluginAdviceDefinition>builder().putAll(pluginAdviceDefinitionMap).build();
+ interceptorPointMap = ImmutableMap.<String,
PluginInterceptorPoint>builder().putAll(pointMap).build();
}
/**
@@ -168,7 +151,7 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
@Override
public boolean matches(final TypeDescription target) {
- return pluginDefineMap.containsKey(target.getTypeName());
+ return interceptorPointMap.containsKey(target.getTypeName());
}
@Override
@@ -190,26 +173,26 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
* @return contains when it is true
*/
public boolean containsType(final TypeDescription typeDescription) {
- return pluginDefineMap.containsKey(typeDescription.getTypeName());
+ return interceptorPointMap.containsKey(typeDescription.getTypeName());
}
/**
- * Load the definition configuration by TypeDescription.
+ * Load plugin interceptor point by TypeDescription.
*
* @param typeDescription TypeDescription
- * @return the plugin definition configurations
+ * @return plugin interceptor point
*/
- public PluginAdviceDefinition loadPluginAdviceDefine(final TypeDescription
typeDescription) {
- return pluginDefineMap.getOrDefault(typeDescription.getTypeName(),
PluginAdviceDefinition.createDefault());
+ public PluginInterceptorPoint loadPluginInterceptorPoint(final
TypeDescription typeDescription) {
+ return interceptorPointMap.getOrDefault(typeDescription.getTypeName(),
PluginInterceptorPoint.createDefault());
}
/**
- * Get the supervisor of services.
+ * Get the supervisor of boot services.
*
* @return service supervisor
*/
- public ServiceSupervisor getServices() {
- return new
ServiceSupervisor(ImmutableList.<Service>builder().addAll(services).build());
+ public ServiceSupervisor getBootServices() {
+ return new
ServiceSupervisor(ImmutableList.<BootService>builder().addAll(bootServices).build());
}
/**
@@ -241,11 +224,11 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
@Override
protected Class<?> findClass(final String name) throws
ClassNotFoundException {
String path = classNameToPath(name);
- for (UberJar jar : jars) {
- ZipEntry entry = jar.jarFile.getEntry(path);
+ for (PluginJar each : jars) {
+ ZipEntry entry = each.jarFile.getEntry(path);
if (Objects.nonNull(entry)) {
try {
- byte[] data =
ByteStreams.toByteArray(jar.jarFile.getInputStream(entry));
+ byte[] data =
ByteStreams.toByteArray(each.jarFile.getInputStream(entry));
return defineClass(name, data, 0, data.length);
} catch (final IOException ex) {
log.error("Failed to load class {}.", name, ex);
@@ -262,11 +245,11 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
@Override
protected Enumeration<URL> findResources(final String name) {
List<URL> resources = Lists.newArrayList();
- for (UberJar jar : jars) {
- JarEntry entry = jar.jarFile.getJarEntry(name);
+ for (PluginJar each : jars) {
+ JarEntry entry = each.jarFile.getJarEntry(name);
if (Objects.nonNull(entry)) {
try {
- resources.add(new URL("jar:file:" +
jar.sourcePath.getAbsolutePath() + "!/" + name));
+ resources.add(new URL("jar:file:" +
each.sourcePath.getAbsolutePath() + "!/" + name));
} catch (final MalformedURLException ignored) {
}
}
@@ -276,11 +259,11 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
@Override
protected URL findResource(final String name) {
- for (UberJar jar : jars) {
- JarEntry entry = jar.jarFile.getJarEntry(name);
+ for (PluginJar each : jars) {
+ JarEntry entry = each.jarFile.getJarEntry(name);
if (Objects.nonNull(entry)) {
try {
- return new URL("jar:file:" +
jar.sourcePath.getAbsolutePath() + "!/" + name);
+ return new URL("jar:file:" +
each.sourcePath.getAbsolutePath() + "!/" + name);
} catch (final MalformedURLException ignored) {
}
}
@@ -290,17 +273,43 @@ public final class AgentPluginLoader extends ClassLoader
implements Closeable {
@Override
public void close() {
- for (UberJar jar : jars) {
+ for (PluginJar each : jars) {
try {
- jar.jarFile.close();
+ each.jarFile.close();
} catch (final IOException ex) {
log.error("close is ", ex);
}
}
}
+ private void buildPluginInterceptorPointMap(final PluginDefinition
pluginDefinition, final Map<String, PluginInterceptorPoint> pointMap) {
+ pluginDefinition.build().forEach(each -> {
+ String target = each.getClassNameOfTarget();
+ if (pointMap.containsKey(target)) {
+ PluginInterceptorPoint definition = pointMap.get(target);
+
definition.getConstructorPoints().addAll(each.getConstructorPoints());
+
definition.getInstanceMethodPoints().addAll(each.getInstanceMethodPoints());
+
definition.getClassStaticMethodPoints().addAll(each.getClassStaticMethodPoints());
+ } else {
+ pointMap.put(target, each);
+ }
+ });
+ }
+
+ private void buildBootServices(final PluginDefinition pluginDefinition) {
+ pluginDefinition.getAllServices().forEach(each -> {
+ try {
+ bootServices.add(each.newInstance());
+ // CHECKSTYLE:OFF
+ } catch (final Throwable ex) {
+ // CHECKSTYLE:ON
+ log.error("Failed to create service instance, {}.", each, ex);
+ }
+ });
+ }
+
@RequiredArgsConstructor
- private static class UberJar {
+ private static class PluginJar {
private final JarFile jarFile;
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
index 66abb0d..8e45f33 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
@@ -18,50 +18,21 @@
package org.apache.shardingsphere.agent.core.plugin.point;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
/**
* Configuration of static method intercepting point.
*/
-public class ClassStaticMethodPoint {
+@Getter
+@RequiredArgsConstructor
+public final class ClassStaticMethodPoint {
private final ElementMatcher<? super MethodDescription> matcher;
private final String advice;
private final boolean overrideArgs;
-
- public ClassStaticMethodPoint(final ElementMatcher<? super
MethodDescription> matcher, final String advice, final boolean overrideArgs) {
- this.matcher = matcher;
- this.advice = advice;
- this.overrideArgs = overrideArgs;
- }
-
- /**
- * To detect target method constraints.
- *
- * @return constraints
- */
- public ElementMatcher<? super MethodDescription> getMethodsMatcher() {
- return matcher;
- }
-
- /**
- * To get the class name of advice.
- *
- * @return the class name of advice
- */
- public String getAdvice() {
- return advice;
- }
-
- /**
- * To detect whether to override origin arguments.
- *
- * @return override if true
- */
- public boolean isOverrideArgs() {
- return overrideArgs;
- }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
index 9282312..b111235 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
@@ -18,38 +18,19 @@
package org.apache.shardingsphere.agent.core.plugin.point;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
/**
* Configuration of constructor intercepting point.
*/
-public class ConstructorPoint {
+@Getter
+@RequiredArgsConstructor
+public final class ConstructorPoint {
private final ElementMatcher<? super MethodDescription> matcher;
private final String advice;
-
- public ConstructorPoint(final ElementMatcher<? super MethodDescription>
matcher, final String advice) {
- this.matcher = matcher;
- this.advice = advice;
- }
-
- /**
- * To detect target constructor constraints.
- *
- * @return constraints
- */
- public ElementMatcher<? super MethodDescription> getConstructorMatcher() {
- return matcher;
- }
-
- /**
- * To get the class name of advice.
- *
- * @return the class name of advice
- */
- public String getAdvice() {
- return advice;
- }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
index e25502b..ad15360 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
@@ -18,50 +18,21 @@
package org.apache.shardingsphere.agent.core.plugin.point;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
/**
* Configuration of instance method intercepting point.
*/
-public class InstanceMethodPoint {
+@Getter
+@RequiredArgsConstructor
+public final class InstanceMethodPoint {
private final ElementMatcher<? super MethodDescription> matcher;
private final String advice;
private final boolean overrideArgs;
-
- public InstanceMethodPoint(final ElementMatcher<? super MethodDescription>
matcher, final String advice, final boolean overrideArgs) {
- this.matcher = matcher;
- this.advice = advice;
- this.overrideArgs = overrideArgs;
- }
-
- /**
- * Detecting target method constraints but static methods.
- *
- * @return constraints
- */
- public ElementMatcher<? super MethodDescription> getMethodMatcher() {
- return matcher;
- }
-
- /**
- * To get the class name of advice.
- *
- * @return the class name of advice
- */
- public String getAdvice() {
- return advice;
- }
-
- /**
- * To detect whether to override origin arguments.
- *
- * @return override if true
- */
- public boolean isOverrideArgs() {
- return overrideArgs;
- }
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginAdviceDefinition.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/PluginInterceptorPoint.java
similarity index 81%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginAdviceDefinition.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/PluginInterceptorPoint.java
index ebb73c5..f09edb6 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginAdviceDefinition.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/PluginInterceptorPoint.java
@@ -13,34 +13,34 @@
* 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;
+package org.apache.shardingsphere.agent.core.plugin.point;
import com.google.common.collect.Lists;
import java.util.Collections;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatchers;
-import
org.apache.shardingsphere.agent.core.plugin.point.ClassStaticMethodPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.ConstructorPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.InstanceMethodPoint;
import java.util.List;
/**
- * Plugin advice definition.
+ * Plugin interceptor Point.
*
* <code>
- * PluginAdviceDefinition.intercept("Target.class")
+ * PluginInterceptorPoint.intercept("Target.class")
* .onConstructor(ElementMatchers.any()).implement("Advice.class").build()
* .method(ElementMatchers.named("greet").implement("Advice.class").build()
*
.staticMethod(ElementMatchers.named("of").implement("OfAdvice.class").build()
* .install();
* </code>
*/
-public final class PluginAdviceDefinition {
+@Getter
+@RequiredArgsConstructor
+public final class PluginInterceptorPoint {
private final String classNameOfTarget;
@@ -50,32 +50,13 @@ public final class PluginAdviceDefinition {
private final List<ClassStaticMethodPoint> classStaticMethodPoints;
- private PluginAdviceDefinition(final String classNameOfTarget,
- final List<ConstructorPoint>
constructorPoints,
- final List<InstanceMethodPoint>
instanceMethodPoints,
- final List<ClassStaticMethodPoint>
classStaticMethodPoints) {
- this.classNameOfTarget = classNameOfTarget;
- this.constructorPoints = constructorPoints;
- this.instanceMethodPoints = instanceMethodPoints;
- this.classStaticMethodPoints = classStaticMethodPoints;
- }
-
/**
* Create default plugin advice definition.
*
* @return plugin advice definition
*/
- public static PluginAdviceDefinition createDefault() {
- return new PluginAdviceDefinition("", Collections.emptyList(),
Collections.emptyList(), Collections.emptyList());
- }
-
- /**
- * Get class name of target.
- *
- * @return class name
- */
- public String getClassNameOfTarget() {
- return classNameOfTarget;
+ public static PluginInterceptorPoint createDefault() {
+ return new PluginInterceptorPoint("", Collections.emptyList(),
Collections.emptyList(), Collections.emptyList());
}
/**
@@ -89,33 +70,6 @@ public final class PluginAdviceDefinition {
}
/**
- * To get static method point configurations.
- *
- * @return series of static method point configuration
- */
- public List<ClassStaticMethodPoint> getClassStaticMethodPoints() {
- return classStaticMethodPoints;
- }
-
- /**
- * To get constructor point configurations.
- *
- * @return series of constructor point configuration
- */
- public List<ConstructorPoint> getConstructorPoints() {
- return constructorPoints;
- }
-
- /**
- * To get instance point configurations.
- *
- * @return series of instance method point configuration
- */
- public List<InstanceMethodPoint> getInstanceMethodPoints() {
- return instanceMethodPoints;
- }
-
- /**
* Plugin advice definition configuration builder.
*/
public static final class Builder {
@@ -167,8 +121,8 @@ public final class PluginAdviceDefinition {
*
* @return plugin advice definition
*/
- public PluginAdviceDefinition install() {
- return new PluginAdviceDefinition(classNameOfTarget,
constructorPoints, instanceMethodPoints, classStaticMethodPoints);
+ public PluginInterceptorPoint install() {
+ return new PluginInterceptorPoint(classNameOfTarget,
constructorPoints, instanceMethodPoints, classStaticMethodPoints);
}
/**
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/Service.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/BootService.java
similarity index 75%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/Service.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/BootService.java
index da30bd1..16c7db7 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/Service.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/BootService.java
@@ -13,28 +13,27 @@
* 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;
+package org.apache.shardingsphere.agent.core.plugin.service;
/**
- * Service that the lifecycle is from the agent startup to shutdown.
+ * Boot service that the lifecycle is from the agent startup to shutdown.
*/
-public interface Service {
+public interface BootService {
/**
- * Setup the service, like to configure or to initial.
+ * Setup the boot service, like to configure or to initial.
*/
void setup();
/**
- * Start up the service.
+ * Start up the boot service.
*/
void start();
/**
- * Cleanup the service.
+ * Cleanup the boot service.
*/
void cleanup();
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/ServiceSupervisor.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/ServiceSupervisor.java
similarity index 78%
rename from
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/ServiceSupervisor.java
rename to
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/ServiceSupervisor.java
index c357241..10f66ec 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/ServiceSupervisor.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/ServiceSupervisor.java
@@ -15,29 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.plugin;
+package org.apache.shardingsphere.agent.core.plugin.service;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
+/**
+ * Service supervisor.
+ */
@Slf4j
+@RequiredArgsConstructor
public final class ServiceSupervisor {
- private final List<Service> services;
-
- public ServiceSupervisor(final List<Service> services) {
- this.services = services;
- }
-
+ private final List<BootService> bootServices;
/**
- * Initial all services.
+ * Set up services.
*/
public void setUpAllServices() {
- services.forEach(service -> {
+ bootServices.forEach(each -> {
try {
- service.setup();
+ each.setup();
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
@@ -50,9 +50,9 @@ public final class ServiceSupervisor {
* Start all services.
*/
public void startAllServices() {
- services.forEach(service -> {
+ bootServices.forEach(each -> {
try {
- service.start();
+ each.start();
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
@@ -62,12 +62,12 @@ public final class ServiceSupervisor {
}
/**
- * Shutdown all services.
+ * Clean up all services.
*/
public void cleanUpAllServices() {
- services.forEach(service -> {
+ bootServices.forEach(each -> {
try {
- service.cleanup();
+ each.cleanup();
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
@@ -75,5 +75,4 @@ public final class ServiceSupervisor {
}
});
}
-
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
index 2c8293b..f6f08fa 100644
---
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
@@ -22,7 +22,7 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
/**
* Agent service loader.
diff --git
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/transformer/ShardingSphereTransformer.java
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/transformer/ShardingSphereTransformer.java
new file mode 100644
index 0000000..8d6bedd
--- /dev/null
+++
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/transformer/ShardingSphereTransformer.java
@@ -0,0 +1,108 @@
+/*
+ * 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.transformer;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
+import net.bytebuddy.description.type.TypeDescription;
+import net.bytebuddy.dynamic.DynamicType.Builder;
+import net.bytebuddy.implementation.FieldAccessor;
+import net.bytebuddy.implementation.MethodDelegation;
+import net.bytebuddy.implementation.SuperMethodCall;
+import net.bytebuddy.jar.asm.Opcodes;
+import net.bytebuddy.utility.JavaModule;
+import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
+import
org.apache.shardingsphere.agent.core.plugin.point.PluginInterceptorPoint;
+import
org.apache.shardingsphere.agent.core.plugin.advice.ConstructorMethodInterceptor;
+import
org.apache.shardingsphere.agent.core.plugin.advice.MethodAroundInterceptor;
+import
org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundInterceptor;
+import org.apache.shardingsphere.agent.core.plugin.advice.TargetObject;
+import
org.apache.shardingsphere.agent.core.plugin.point.ClassStaticMethodPoint;
+import org.apache.shardingsphere.agent.core.plugin.point.ConstructorPoint;
+import org.apache.shardingsphere.agent.core.plugin.point.InstanceMethodPoint;
+
+/**
+ * Shardingsphere transformer.
+ */
+@Slf4j
+@RequiredArgsConstructor
+public final class ShardingSphereTransformer implements Transformer {
+
+ private static final String EXTRA_DATA = "_$EXTRA_DATA$_";
+
+ private final AgentPluginLoader agentPluginLoader;
+
+ @Override
+ public Builder<?> transform(final Builder<?> builder, final
TypeDescription typeDescription, final ClassLoader classLoader, final
JavaModule module) {
+ if (agentPluginLoader.containsType(typeDescription)) {
+ Builder<?> newBuilder = builder;
+ newBuilder = newBuilder.defineField(EXTRA_DATA, Object.class,
Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
+ .implement(TargetObject.class)
+ .intercept(FieldAccessor.ofField(EXTRA_DATA));
+ final PluginInterceptorPoint pluginInterceptorPoint =
agentPluginLoader.loadPluginInterceptorPoint(typeDescription);
+ newBuilder = interceptorConstructorPoint(pluginInterceptorPoint,
newBuilder);
+ newBuilder =
interceptorClassStaticMethodPoint(pluginInterceptorPoint, newBuilder);
+ newBuilder =
interceptorInstanceMethodPoint(pluginInterceptorPoint, newBuilder);
+ return newBuilder;
+ }
+ return builder;
+ }
+
+ private Builder<?> interceptorConstructorPoint(final
PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+ for (ConstructorPoint each :
pluginInterceptorPoint.getConstructorPoints()) {
+ try {
+ ConstructorMethodInterceptor interceptor = new
ConstructorMethodInterceptor(agentPluginLoader.getOrCreateInstance(each.getAdvice()));
+ return
builder.constructor(each.getMatcher()).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
+ // CHECKSTYLE:OFF
+ } catch (final Throwable ex) {
+ // CHECKSTYLE:ON
+ log.error("Failed to load advice class: {}", each.getAdvice(),
ex);
+ }
+ }
+ return builder;
+ }
+
+ private Builder<?> interceptorClassStaticMethodPoint(final
PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+ for (ClassStaticMethodPoint each :
pluginInterceptorPoint.getClassStaticMethodPoints()) {
+ try {
+ StaticMethodAroundInterceptor interceptor = new
StaticMethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(each.getAdvice()));
+ return
builder.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
+ // CHECKSTYLE:OFF
+ } catch (final Throwable ex) {
+ // CHECKSTYLE:ON
+ log.error("Failed to load advice class: {}", each.getAdvice(),
ex);
+ }
+ }
+ return builder;
+ }
+
+ private Builder<?> interceptorInstanceMethodPoint(final
PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+ for (InstanceMethodPoint each :
pluginInterceptorPoint.getInstanceMethodPoints()) {
+ try {
+ MethodAroundInterceptor interceptor = new
MethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(each.getAdvice()));
+ return
builder.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
+ // CHECKSTYLE:OFF
+ } catch (final Throwable ex) {
+ // CHECKSTYLE:ON
+ log.error("Failed to load advice class: {}", each.getAdvice(),
ex);
+ }
+ }
+ return builder;
+ }
+}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
index aeab546..d401a7b 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.agent.metrics.api;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
import org.apache.shardingsphere.agent.core.spi.AgentTypedSPIRegistry;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
/**
* The enum metrics provider.
@@ -34,7 +34,7 @@ public enum MetricsProvider {
private static MetricsRegisterFactory metricRegisterFactory;
static {
- AgentConfiguration.MetricsConfiguration metricsConfiguration =
SingletonHolder.INSTANCE.get(AgentConfiguration.class).getMetrics();
+ AgentConfiguration.MetricsConfiguration metricsConfiguration =
AgentObjectPool.INSTANCE.get(AgentConfiguration.class).getMetrics();
metricRegisterFactory =
AgentTypedSPIRegistry.getRegisteredService(MetricsRegisterFactory.class,
metricsConfiguration.getType());
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
index f06f7bb..9c54508 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
@@ -29,7 +29,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
import org.apache.shardingsphere.agent.metrics.api.MetricsRegister;
/**
@@ -44,7 +44,7 @@ public final class PrometheusMetricsRegister implements
MetricsRegister {
private static final Map<String, Histogram> HISTOGRAM_MAP = new
ConcurrentHashMap<>();
- private final AgentConfiguration.MetricsConfiguration metricsConfiguration
= SingletonHolder.INSTANCE.get(AgentConfiguration.class).getMetrics();
+ private final AgentConfiguration.MetricsConfiguration metricsConfiguration
= AgentObjectPool.INSTANCE.get(AgentConfiguration.class).getMetrics();
private HTTPServer httpServer;
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
index 14eee03..08e19c8 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.net.URL;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
import org.apache.shardingsphere.agent.core.config.AgentConfigurationLoader;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
import org.junit.Before;
public class BaseTest {
@@ -32,7 +32,7 @@ public class BaseTest {
public void assertLoad() throws IOException {
System.setProperty("agent-path", getResourceUrl());
AgentConfiguration configuration = AgentConfigurationLoader.load();
- SingletonHolder.INSTANCE.put(configuration);
+ AgentObjectPool.INSTANCE.put(configuration);
}
private static String getResourceUrl() {
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
index 2161e21..d3d6530 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.metrics.bootstrap.definition;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.plugin.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
import org.apache.shardingsphere.agent.metrics.api.MetricsProvider;
import org.apache.shardingsphere.agent.metrics.bootstrap.MethodNameConstant;
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
index c122484..2509e84 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.plugin.tracing.jaeger;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.plugin.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
/**
* Jaeger plugin definition.
@@ -31,7 +31,7 @@ public class JaegerPluginDefinition extends PluginDefinition {
@Override
protected void define() {
- registerService(JaegerTracerService.class);
+ registerService(JaegerTracerBootService.class);
intercept("org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask")
.aroundInstanceMethod(ElementMatchers.named("executeCommand"))
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerService.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerBootService.java
similarity index 87%
rename from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerService.java
rename to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerBootService.java
index 9d88fec..0589eb6 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerService.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerBootService.java
@@ -20,17 +20,17 @@ package
org.apache.shardingsphere.agent.plugin.tracing.jaeger;
import io.jaegertracing.Configuration;
import io.opentracing.util.GlobalTracer;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.plugin.Service;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
/**
- * Jaeger tracer service.
+ * Jaeger tracer boot service.
*/
-public class JaegerTracerService implements Service {
+public final class JaegerTracerBootService implements BootService {
@Override
public void setup() {
- AgentConfiguration configuration =
SingletonHolder.INSTANCE.get(AgentConfiguration.class);
+ AgentConfiguration configuration =
AgentObjectPool.INSTANCE.get(AgentConfiguration.class);
AgentConfiguration.TracingConfiguration tracingConfiguration =
configuration.getTracing();
tracingConfiguration.getExtra().forEach(System::setProperty);
Configuration.SamplerConfiguration samplerConfig =
Configuration.SamplerConfiguration.fromEnv();
@@ -48,11 +48,9 @@ public class JaegerTracerService implements Service {
@Override
public void start() {
-
}
@Override
public void cleanup() {
-
}
}
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
index 98dab67..1f61576 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.agent.plugin.tracing.zipkin;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.plugin.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
/**
* Zipkin plugin definition.
@@ -31,7 +31,7 @@ public class ZipkinPluginDefinition extends PluginDefinition {
@Override
protected void define() {
- registerService(ZipkinTracerService.class);
+ registerService(ZipkinTracerBootService.class);
intercept("org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask")
.aroundInstanceMethod(ElementMatchers.named("executeCommand"))
diff --git
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerService.java
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerBootService.java
similarity index 86%
rename from
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerService.java
rename to
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerBootService.java
index 0e722dc..faad7ed 100644
---
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerService.java
+++
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerBootService.java
@@ -19,15 +19,15 @@ package
org.apache.shardingsphere.agent.plugin.tracing.zipkin;
import brave.Tracing;
import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.plugin.Service;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
import zipkin2.reporter.brave.AsyncZipkinSpanHandler;
import zipkin2.reporter.okhttp3.OkHttpSender;
/**
- * Zipkin tracer service.
+ * Zipkin tracer boot service.
*/
-public class ZipkinTracerService implements Service {
+public final class ZipkinTracerBootService implements BootService {
private AsyncZipkinSpanHandler zipkinSpanHandler;
@@ -37,7 +37,7 @@ public class ZipkinTracerService implements Service {
@Override
public void setup() {
- AgentConfiguration configuration =
SingletonHolder.INSTANCE.get(AgentConfiguration.class);
+ AgentConfiguration configuration =
AgentObjectPool.INSTANCE.get(AgentConfiguration.class);
AgentConfiguration.TracingConfiguration tracingConfiguration =
configuration.getTracing();
sender = OkHttpSender.create("http://" +
tracingConfiguration.getAgentHost() + ":" +
tracingConfiguration.getAgentPort());
zipkinSpanHandler = AsyncZipkinSpanHandler.create(sender);
@@ -54,5 +54,4 @@ public class ZipkinTracerService implements Service {
zipkinSpanHandler.close();
sender.close();
}
-
}