You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/12/23 10:26:46 UTC
[shardingsphere] branch master updated: Add ReflectionUtil.invokeMethod (#23058)
This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 5ccb3b9366d Add ReflectionUtil.invokeMethod (#23058)
5ccb3b9366d is described below
commit 5ccb3b9366d1f20071e2ade11b4c3b759dd566c8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Dec 23 18:26:38 2022 +0800
Add ReflectionUtil.invokeMethod (#23058)
* Add ReflectionUtil.invokeMethod
* Add ReflectionUtil.invokeMethod
* Refactor ReflectionUtil
* Refactor JDBCExecutorCallbackAdviceTest
* Refactor CommandExecutorTaskAdvice
* Refactor ReflectionUtil
---
.../agent/core/util/ReflectionUtil.java | 35 ++++++++++++++++++++--
.../core/advice/CommandExecutorTaskAdviceTest.java | 9 +++---
.../jaeger/advice/CommandExecutorTaskAdvice.java | 11 ++-----
.../jaeger/advice/JDBCExecutorCallbackAdvice.java | 7 ++---
.../advice/CommandExecutorTaskAdviceTest.java | 14 ++++-----
.../advice/JDBCExecutorCallbackAdviceTest.java | 14 ++++-----
.../advice/JDBCExecutorCallbackAdvice.java | 9 +++---
.../advice/CommandExecutorTaskAdviceTest.java | 10 ++-----
.../advice/JDBCExecutorCallbackAdviceTest.java | 10 ++-----
.../advice/JDBCExecutorCallbackAdviceTest.java | 14 ++++-----
.../zipkin/advice/CommandExecutorTaskAdvice.java | 16 ++++------
.../zipkin/advice/JDBCExecutorCallbackAdvice.java | 7 ++---
.../advice/CommandExecutorTaskAdviceTest.java | 10 ++-----
.../advice/JDBCExecutorCallbackAdviceTest.java | 5 ++--
14 files changed, 83 insertions(+), 88 deletions(-)
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/ReflectionUtil.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/ReflectionUtil.java
index 2820627f0b3..cb1a65be627 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/ReflectionUtil.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/ReflectionUtil.java
@@ -22,6 +22,7 @@ import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import java.lang.reflect.Field;
+import java.lang.reflect.Method;
/**
* Reflection utility.
@@ -41,13 +42,41 @@ public final class ReflectionUtil {
Class<?> clazz = target.getClass();
while (null != clazz) {
try {
- Field result = clazz.getDeclaredField(fieldName);
- result.setAccessible(true);
- return result.get(target);
+ Field field = clazz.getDeclaredField(fieldName);
+ boolean accessible = field.isAccessible();
+ if (!accessible) {
+ field.setAccessible(true);
+ }
+ Object result = field.get(target);
+ if (!accessible) {
+ field.setAccessible(false);
+ }
+ return result;
} catch (final NoSuchFieldException ignored) {
}
clazz = clazz.getSuperclass();
}
throw new NoSuchFieldException(String.format("Can not find field name `%s` in class %s.", fieldName, target.getClass()));
}
+
+ /**
+ * Invoke method.
+ *
+ * @param method method
+ * @param target target
+ * @param args arguments
+ * @return invoke result
+ */
+ @SneakyThrows(ReflectiveOperationException.class)
+ public static Object invokeMethod(final Method method, final Object target, final Object... args) {
+ boolean accessible = method.isAccessible();
+ if (!accessible) {
+ method.setAccessible(true);
+ }
+ Object result = method.invoke(target, args);
+ if (!accessible) {
+ method.setAccessible(false);
+ }
+ return result;
+ }
}
diff --git a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/metrics/core/advice/CommandExecutorTaskAdviceTest.java b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/metrics/core/advice/CommandExecutorTaskAdviceTest.java
index 8ecaba9fa40..554bebad624 100644
--- a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/metrics/core/advice/CommandExecutorTaskAdviceTest.java
+++ b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/metrics/core/advice/CommandExecutorTaskAdviceTest.java
@@ -36,8 +36,6 @@ import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class CommandExecutorTaskAdviceTest extends MetricsAdviceBaseTest {
- private final CommandExecutorTaskAdvice commandExecutorTaskAdvice = new CommandExecutorTaskAdvice();
-
@Mock
private Method run;
@@ -47,14 +45,15 @@ public final class CommandExecutorTaskAdviceTest extends MetricsAdviceBaseTest {
@Test
public void assertExecuteLatency() {
when(run.getName()).thenReturn(CommandExecutorTaskAdvice.COMMAND_EXECUTOR_RUN);
+ CommandExecutorTaskAdvice advice = new CommandExecutorTaskAdvice();
MockTargetAdviceObject targetObject = new MockTargetAdviceObject();
- commandExecutorTaskAdvice.beforeMethod(targetObject, run, new Object[]{}, new MethodInvocationResult());
+ advice.beforeMethod(targetObject, run, new Object[]{}, new MethodInvocationResult());
try {
Thread.sleep(500L);
} catch (final InterruptedException ex) {
ex.printStackTrace();
}
- commandExecutorTaskAdvice.afterMethod(targetObject, run, new Object[]{}, new MethodInvocationResult());
+ advice.afterMethod(targetObject, run, new Object[]{}, new MethodInvocationResult());
FixtureWrapper requestWrapper = (FixtureWrapper) MetricsPool.get(MetricIds.PROXY_EXECUTE_LATENCY_MILLIS).get();
assertTrue(MetricsPool.get(MetricIds.PROXY_EXECUTE_LATENCY_MILLIS).isPresent());
assertThat(requestWrapper.getFixtureValue(), greaterThan(0.0));
@@ -64,7 +63,7 @@ public final class CommandExecutorTaskAdviceTest extends MetricsAdviceBaseTest {
public void assertExecuteErrorTotal() {
when(processException.getName()).thenReturn(CommandExecutorTaskAdvice.COMMAND_EXECUTOR_EXCEPTION);
MockTargetAdviceObject targetObject = new MockTargetAdviceObject();
- commandExecutorTaskAdvice.afterMethod(targetObject, processException, new Object[]{}, new MethodInvocationResult());
+ new CommandExecutorTaskAdvice().afterMethod(targetObject, processException, new Object[]{}, new MethodInvocationResult());
FixtureWrapper requestWrapper = (FixtureWrapper) MetricsPool.get(MetricIds.PROXY_EXECUTE_ERROR).get();
assertTrue(MetricsPool.get(MetricIds.PROXY_EXECUTE_ERROR).isPresent());
assertThat(requestWrapper.getFixtureValue(), greaterThan(0.0));
diff --git a/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java b/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java
index 658146683ba..3377538c1f5 100644
--- a/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java
+++ b/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdvice.java
@@ -20,18 +20,16 @@ package org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice;
import io.opentracing.Scope;
import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer;
-import lombok.SneakyThrows;
+import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
import org.apache.shardingsphere.agent.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.advice.type.InstanceMethodAdvice;
-import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
+import org.apache.shardingsphere.agent.core.util.ReflectionUtil;
import org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
import org.apache.shardingsphere.agent.plugin.tracing.jaeger.span.JaegerErrorSpan;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutorDataMap;
import org.apache.shardingsphere.proxy.backend.communication.BackendConnection;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
@@ -50,12 +48,9 @@ public final class CommandExecutorTaskAdvice implements InstanceMethodAdvice {
}
@Override
- @SneakyThrows(ReflectiveOperationException.class)
public void afterMethod(final TargetAdviceObject target, final Method method, final Object[] args, final MethodInvocationResult invocationResult) {
ExecutorDataMap.getValue().remove(JaegerConstants.ROOT_SPAN);
- Field field = CommandExecutorTask.class.getDeclaredField("connectionSession");
- field.setAccessible(true);
- BackendConnection connection = ((ConnectionSession) field.get(target)).getBackendConnection();
+ BackendConnection connection = ((ConnectionSession) ReflectionUtil.getFieldValue(target, "connectionSession")).getBackendConnection();
Scope scope = GlobalTracer.get().scopeManager().active();
scope.span().setTag(JaegerConstants.ShardingSphereTags.CONNECTION_COUNT.getKey(), connection.getConnectionSize());
scope.close();
diff --git a/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java b/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java
index 1e0229f65d2..38ca7088db4 100644
--- a/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java
+++ b/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java
@@ -57,10 +57,9 @@ public final class JDBCExecutorCallbackAdvice implements InstanceMethodAdvice {
}
JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
Map<String, DatabaseType> storageTypes = (Map<String, DatabaseType>) ReflectionUtil.getFieldValue(target, "storageTypes");
- Method getMetaDataMethod = JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", DatabaseMetaData.class, DatabaseType.class);
- getMetaDataMethod.setAccessible(true);
- DataSourceMetaData metaData = (DataSourceMetaData) getMetaDataMethod.invoke(target,
- new Object[]{executionUnit.getStorageResource().getConnection().getMetaData(), storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName())});
+ DataSourceMetaData metaData = (DataSourceMetaData) ReflectionUtil.invokeMethod(
+ JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", DatabaseMetaData.class, DatabaseType.class),
+ target, executionUnit.getStorageResource().getConnection().getMetaData(), storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName()));
builder.withTag(Tags.COMPONENT.getKey(), JaegerConstants.COMPONENT_NAME)
.withTag(Tags.DB_TYPE.getKey(), JaegerConstants.DB_TYPE_VALUE)
.withTag(Tags.DB_INSTANCE.getKey(), executionUnit.getExecutionUnit().getDataSourceName())
diff --git a/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java b/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java
index a15b85c133d..52188debb9e 100644
--- a/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java
+++ b/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/CommandExecutorTaskAdviceTest.java
@@ -43,8 +43,6 @@ public final class CommandExecutorTaskAdviceTest extends AbstractCommandExecutor
@ClassRule
public static final JaegerCollector COLLECTOR = new JaegerCollector();
- private static final CommandExecutorTaskAdvice ADVICE = new CommandExecutorTaskAdvice();
-
private static final Map<String, Object> EXPECTED = new HashMap<>(2, 1);
@BeforeClass
@@ -55,8 +53,9 @@ public final class CommandExecutorTaskAdviceTest extends AbstractCommandExecutor
@Test
public void assertMethod() {
- ADVICE.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
- ADVICE.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
+ CommandExecutorTaskAdvice advice = new CommandExecutorTaskAdvice();
+ advice.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
+ advice.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
List<MockSpan> spans = COLLECTOR.finishedSpans();
assertThat(spans.size(), is(1));
assertTrue(spans.get(0).logEntries().isEmpty());
@@ -66,9 +65,10 @@ public final class CommandExecutorTaskAdviceTest extends AbstractCommandExecutor
@Test
public void assertExceptionHandle() {
- ADVICE.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
- ADVICE.onThrowing(getTargetObject(), null, new Object[]{}, new IOException());
- ADVICE.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
+ CommandExecutorTaskAdvice advice = new CommandExecutorTaskAdvice();
+ advice.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
+ advice.onThrowing(getTargetObject(), null, new Object[]{}, new IOException());
+ advice.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
List<MockSpan> spans = COLLECTOR.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
diff --git a/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java b/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java
index 4abfb58c471..61d69b36286 100644
--- a/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java
+++ b/agent/plugins/tracing/type/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JDBCExecutorCallbackAdviceTest.java
@@ -39,8 +39,6 @@ public final class JDBCExecutorCallbackAdviceTest extends AbstractJDBCExecutorCa
@ClassRule
public static final JaegerCollector COLLECTOR = new JaegerCollector();
- private static final JDBCExecutorCallbackAdvice ADVICE = new JDBCExecutorCallbackAdvice();
-
@Before
public void setup() {
getExtraMap().put(JaegerConstants.ROOT_SPAN, null);
@@ -48,8 +46,9 @@ public final class JDBCExecutorCallbackAdviceTest extends AbstractJDBCExecutorCa
@Test
public void assertMethod() {
- ADVICE.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
- ADVICE.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
+ advice.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
+ advice.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
List<MockSpan> spans = COLLECTOR.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
@@ -64,9 +63,10 @@ public final class JDBCExecutorCallbackAdviceTest extends AbstractJDBCExecutorCa
@Test
public void assertExceptionHandle() {
- ADVICE.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
- ADVICE.onThrowing(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new IOException());
- ADVICE.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
+ advice.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
+ advice.onThrowing(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new IOException());
+ advice.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
List<MockSpan> spans = COLLECTOR.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
diff --git a/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdvice.java b/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdvice.java
index 76ca576acab..c4b3d606820 100644
--- a/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdvice.java
+++ b/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdvice.java
@@ -52,17 +52,16 @@ public class JDBCExecutorCallbackAdvice implements InstanceMethodAdvice {
Span root = (Span) ((Map<String, Object>) args[2]).get(OpenTelemetryConstants.ROOT_SPAN);
Tracer tracer = GlobalOpenTelemetry.getTracer("shardingsphere-agent");
SpanBuilder spanBuilder = tracer.spanBuilder(OPERATION_NAME);
- if (root != null) {
+ if (null != root) {
spanBuilder.setParent(Context.current().with(root));
}
spanBuilder.setAttribute(OpenTelemetryConstants.COMPONENT, OpenTelemetryConstants.COMPONENT_NAME);
spanBuilder.setAttribute(OpenTelemetryConstants.DB_TYPE, OpenTelemetryConstants.DB_TYPE_VALUE);
JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
Map<String, DatabaseType> storageTypes = (Map<String, DatabaseType>) ReflectionUtil.getFieldValue(target, "storageTypes");
- Method getMetaDataMethod = JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", DatabaseMetaData.class, DatabaseType.class);
- getMetaDataMethod.setAccessible(true);
- DataSourceMetaData metaData = (DataSourceMetaData) getMetaDataMethod.invoke(target,
- new Object[]{executionUnit.getStorageResource().getConnection().getMetaData(), storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName())});
+ DataSourceMetaData metaData = (DataSourceMetaData) ReflectionUtil.invokeMethod(
+ JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", DatabaseMetaData.class, DatabaseType.class),
+ target, executionUnit.getStorageResource().getConnection().getMetaData(), storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName()));
spanBuilder.setAttribute(OpenTelemetryConstants.DB_INSTANCE, executionUnit.getExecutionUnit().getDataSourceName())
.setAttribute(OpenTelemetryConstants.PEER_HOSTNAME, metaData.getHostname())
.setAttribute(OpenTelemetryConstants.PEER_PORT, String.valueOf(metaData.getPort()))
diff --git a/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/CommandExecutorTaskAdviceTest.java b/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/CommandExecutorTaskAdviceTest.java
index 3f2c8cb9b42..5cff5090908 100644
--- a/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/CommandExecutorTaskAdviceTest.java
+++ b/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/CommandExecutorTaskAdviceTest.java
@@ -25,7 +25,6 @@ import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
import org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractCommandExecutorTaskAdviceTest;
import org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.collector.OpenTelemetryCollector;
import org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.constant.OpenTelemetryConstants;
-import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
@@ -40,15 +39,9 @@ public final class CommandExecutorTaskAdviceTest extends AbstractCommandExecutor
@ClassRule
public static final OpenTelemetryCollector COLLECTOR = new OpenTelemetryCollector();
- private CommandExecutorTaskAdvice advice;
-
- @Before
- public void setup() {
- advice = new CommandExecutorTaskAdvice();
- }
-
@Test
public void assertMethod() {
+ CommandExecutorTaskAdvice advice = new CommandExecutorTaskAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
advice.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
List<SpanData> spanItems = COLLECTOR.getSpanItems();
@@ -61,6 +54,7 @@ public final class CommandExecutorTaskAdviceTest extends AbstractCommandExecutor
@Test
public void assertExceptionHandle() {
+ CommandExecutorTaskAdvice advice = new CommandExecutorTaskAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
advice.onThrowing(getTargetObject(), null, new Object[]{}, new IOException());
advice.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
diff --git a/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdviceTest.java b/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdviceTest.java
index ff586f5e34f..b6f712b5c93 100644
--- a/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdviceTest.java
+++ b/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/JDBCExecutorCallbackAdviceTest.java
@@ -25,7 +25,6 @@ import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
import org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractJDBCExecutorCallbackAdviceTest;
import org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.collector.OpenTelemetryCollector;
import org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.constant.OpenTelemetryConstants;
-import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
@@ -40,15 +39,9 @@ public final class JDBCExecutorCallbackAdviceTest extends AbstractJDBCExecutorCa
@ClassRule
public static final OpenTelemetryCollector COLLECTOR = new OpenTelemetryCollector();
- private JDBCExecutorCallbackAdvice advice;
-
- @Before
- public void setup() {
- advice = new JDBCExecutorCallbackAdvice();
- }
-
@Test
public void assertMethod() {
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
advice.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
List<SpanData> spanItems = COLLECTOR.getSpanItems();
@@ -64,6 +57,7 @@ public final class JDBCExecutorCallbackAdviceTest extends AbstractJDBCExecutorCa
@Test
public void assertExceptionHandle() {
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
advice.onThrowing(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new IOException());
advice.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
diff --git a/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdviceTest.java b/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdviceTest.java
index 92d48e4dbac..f1b34b42aa0 100644
--- a/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdviceTest.java
+++ b/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/JDBCExecutorCallbackAdviceTest.java
@@ -45,8 +45,6 @@ import static org.mockito.Mockito.when;
public final class JDBCExecutorCallbackAdviceTest {
- private static final JDBCExecutorCallbackAdvice ADVICE = new JDBCExecutorCallbackAdvice();
-
private static MockTracer tracer;
private static Method executeMethod;
@@ -71,8 +69,9 @@ public final class JDBCExecutorCallbackAdviceTest {
Map<String, Object> extraMap = Collections.singletonMap("_root_span_", null);
JDBCExecutionUnit executionUnit = mock(JDBCExecutionUnit.class);
when(executionUnit.getExecutionUnit()).thenReturn(new ExecutionUnit("mock.db", new SQLUnit("select 1", Collections.emptyList())));
- ADVICE.beforeMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- ADVICE.afterMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
+ advice.beforeMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
+ advice.afterMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
List<MockSpan> spans = tracer.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
@@ -91,9 +90,10 @@ public final class JDBCExecutorCallbackAdviceTest {
Map<String, Object> extraMap = Collections.singletonMap("_root_span_", null);
JDBCExecutionUnit executionUnit = mock(JDBCExecutionUnit.class);
when(executionUnit.getExecutionUnit()).thenReturn(new ExecutionUnit("mock.db", new SQLUnit("select 1", Collections.emptyList())));
- ADVICE.beforeMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
- ADVICE.onThrowing(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new IOException());
- ADVICE.afterMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
+ advice.beforeMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
+ advice.onThrowing(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new IOException());
+ advice.afterMethod(targetObject, executeMethod, new Object[]{executionUnit, false, extraMap}, new MethodInvocationResult());
List<MockSpan> spans = tracer.finishedSpans();
assertThat(spans.size(), is(1));
MockSpan span = spans.get(0);
diff --git a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java b/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
index f9d78e71d07..7f5f23b51ab 100644
--- a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
+++ b/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdvice.java
@@ -19,17 +19,15 @@ package org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
import brave.Span;
import brave.Tracing;
-import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.advice.type.InstanceMethodAdvice;
-import org.apache.shardingsphere.agent.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
+import org.apache.shardingsphere.agent.advice.TargetAdviceObject;
+import org.apache.shardingsphere.agent.advice.type.InstanceMethodAdvice;
+import org.apache.shardingsphere.agent.core.util.ReflectionUtil;
import org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutorDataMap;
import org.apache.shardingsphere.proxy.backend.communication.BackendConnection;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
@@ -42,17 +40,13 @@ public final class CommandExecutorTaskAdvice implements InstanceMethodAdvice {
@Override
public void beforeMethod(final TargetAdviceObject target, final Method method, final Object[] args, final MethodInvocationResult invocationResult) {
Span span = Tracing.currentTracer().newTrace().name(OPERATION_NAME);
- span.tag(ZipkinConstants.Tags.COMPONENT, ZipkinConstants.COMPONENT_NAME).kind(Span.Kind.CLIENT)
- .tag(ZipkinConstants.Tags.DB_TYPE, ZipkinConstants.DB_TYPE_VALUE).start();
+ span.tag(ZipkinConstants.Tags.COMPONENT, ZipkinConstants.COMPONENT_NAME).kind(Span.Kind.CLIENT).tag(ZipkinConstants.Tags.DB_TYPE, ZipkinConstants.DB_TYPE_VALUE).start();
ExecutorDataMap.getValue().put(ZipkinConstants.ROOT_SPAN, span);
}
- @SneakyThrows(ReflectiveOperationException.class)
@Override
public void afterMethod(final TargetAdviceObject target, final Method method, final Object[] args, final MethodInvocationResult invocationResult) {
- Field field = CommandExecutorTask.class.getDeclaredField("connectionSession");
- field.setAccessible(true);
- BackendConnection connection = ((ConnectionSession) field.get(target)).getBackendConnection();
+ BackendConnection connection = ((ConnectionSession) ReflectionUtil.getFieldValue(target, "connectionSession")).getBackendConnection();
Span span = (Span) ExecutorDataMap.getValue().remove(ZipkinConstants.ROOT_SPAN);
span.tag(ZipkinConstants.Tags.CONNECTION_COUNT, String.valueOf(connection.getConnectionSize()));
span.finish();
diff --git a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdvice.java b/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdvice.java
index 60445053563..e24e9c45783 100644
--- a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdvice.java
+++ b/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdvice.java
@@ -52,10 +52,9 @@ public final class JDBCExecutorCallbackAdvice implements InstanceMethodAdvice {
span.tag(ZipkinConstants.Tags.DB_TYPE, ZipkinConstants.DB_TYPE_VALUE);
JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
Map<String, DatabaseType> storageTypes = (Map<String, DatabaseType>) ReflectionUtil.getFieldValue(target, "storageTypes");
- Method getMetaDataMethod = JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", DatabaseMetaData.class, DatabaseType.class);
- getMetaDataMethod.setAccessible(true);
- DataSourceMetaData metaData = (DataSourceMetaData) getMetaDataMethod.invoke(target,
- new Object[]{executionUnit.getStorageResource().getConnection().getMetaData(), storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName())});
+ DataSourceMetaData metaData = (DataSourceMetaData) ReflectionUtil.invokeMethod(
+ JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", DatabaseMetaData.class, DatabaseType.class),
+ target, executionUnit.getStorageResource().getConnection().getMetaData(), storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName()));
span.tag(ZipkinConstants.Tags.DB_INSTANCE, executionUnit.getExecutionUnit().getDataSourceName());
span.tag(ZipkinConstants.Tags.PEER_HOSTNAME, metaData.getHostname());
span.tag(ZipkinConstants.Tags.PEER_PORT, String.valueOf(metaData.getPort()));
diff --git a/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java b/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java
index 7990a71ef25..762325df946 100644
--- a/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java
+++ b/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/CommandExecutorTaskAdviceTest.java
@@ -21,7 +21,6 @@ import org.apache.shardingsphere.agent.advice.MethodInvocationResult;
import org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractCommandExecutorTaskAdviceTest;
import org.apache.shardingsphere.agent.plugin.tracing.zipkin.collector.ZipkinCollector;
import org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
-import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import zipkin2.Span;
@@ -37,15 +36,9 @@ public final class CommandExecutorTaskAdviceTest extends AbstractCommandExecutor
@ClassRule
public static final ZipkinCollector COLLECTOR = new ZipkinCollector();
- private CommandExecutorTaskAdvice advice;
-
- @Before
- public void setup() {
- advice = new CommandExecutorTaskAdvice();
- }
-
@Test
public void assertMethod() {
+ CommandExecutorTaskAdvice advice = new CommandExecutorTaskAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
advice.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
Span span = COLLECTOR.pop();
@@ -58,6 +51,7 @@ public final class CommandExecutorTaskAdviceTest extends AbstractCommandExecutor
@Test
public void assertExceptionHandle() {
+ CommandExecutorTaskAdvice advice = new CommandExecutorTaskAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
advice.onThrowing(getTargetObject(), null, new Object[]{}, new IOException());
advice.afterMethod(getTargetObject(), null, new Object[]{}, new MethodInvocationResult());
diff --git a/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java b/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java
index c11af7f473e..9ec6687b025 100644
--- a/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java
+++ b/agent/plugins/tracing/type/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/JDBCExecutorCallbackAdviceTest.java
@@ -38,16 +38,14 @@ public final class JDBCExecutorCallbackAdviceTest extends AbstractJDBCExecutorCa
@ClassRule
public static final ZipkinCollector COLLECTOR = new ZipkinCollector();
- private JDBCExecutorCallbackAdvice advice;
-
@Before
public void setup() {
getExtraMap().put(ZipkinConstants.ROOT_SPAN, null);
- advice = new JDBCExecutorCallbackAdvice();
}
@Test
public void assertMethod() {
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
advice.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
Span span = COLLECTOR.pop();
@@ -64,6 +62,7 @@ public final class JDBCExecutorCallbackAdviceTest extends AbstractJDBCExecutorCa
@Test
public void assertExceptionHandle() {
+ JDBCExecutorCallbackAdvice advice = new JDBCExecutorCallbackAdvice();
advice.beforeMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());
advice.onThrowing(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new IOException());
advice.afterMethod(getTargetObject(), null, new Object[]{getExecutionUnit(), false, getExtraMap()}, new MethodInvocationResult());