You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/12/24 12:48:34 UTC

[shardingsphere] branch master updated: Add generic type of AgentReflectionUtil (#23082)

This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 a185a10ad46 Add generic type of AgentReflectionUtil (#23082)
a185a10ad46 is described below

commit a185a10ad46c4875877901eb7b45949173d3845c
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Dec 24 20:48:27 2022 +0800

    Add generic type of AgentReflectionUtil (#23082)
---
 .../shardingsphere/agent/core/util/AgentReflectionUtil.java  | 12 ++++++++----
 .../tracing/jaeger/advice/CommandExecutorTaskAdvice.java     |  2 +-
 .../tracing/jaeger/advice/JDBCExecutorCallbackAdvice.java    |  4 ++--
 .../opentelemetry/advice/JDBCExecutorCallbackAdvice.java     |  5 ++---
 .../tracing/zipkin/advice/CommandExecutorTaskAdvice.java     |  2 +-
 .../tracing/zipkin/advice/JDBCExecutorCallbackAdvice.java    |  4 ++--
 6 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/AgentReflectionUtil.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/AgentReflectionUtil.java
index 187e4ab1a73..9643202215d 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/AgentReflectionUtil.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/util/AgentReflectionUtil.java
@@ -35,10 +35,12 @@ public final class AgentReflectionUtil {
      *
      * @param target target
      * @param fieldName field name
+     * @param <T> type of field value
      * @return field value
      */
+    @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
-    public static Object getFieldValue(final Object target, final String fieldName) {
+    public static <T> T getFieldValue(final Object target, final String fieldName) {
         Class<?> clazz = target.getClass();
         while (null != clazz) {
             try {
@@ -47,7 +49,7 @@ public final class AgentReflectionUtil {
                 if (!accessible) {
                     field.setAccessible(true);
                 }
-                Object result = field.get(target);
+                T result = (T) field.get(target);
                 if (!accessible) {
                     field.setAccessible(false);
                 }
@@ -65,15 +67,17 @@ public final class AgentReflectionUtil {
      * @param method method
      * @param target target
      * @param args arguments
+     * @param <T> type of invoke result
      * @return invoke result
      */
+    @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
-    public static Object invokeMethod(final Method method, final Object target, final Object... args) {
+    public static <T> T 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);
+        T result = (T) method.invoke(target, args);
         if (!accessible) {
             method.setAccessible(false);
         }
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 9cc709934b3..beb4a32ba59 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
@@ -49,7 +49,7 @@ public final class CommandExecutorTaskAdvice implements InstanceMethodAdvice {
     @Override
     public void afterMethod(final TargetAdviceObject target, final Method method, final Object[] args, final Object result) {
         ExecutorDataMap.getValue().remove(JaegerConstants.ROOT_SPAN);
-        BackendConnection connection = ((ConnectionSession) AgentReflectionUtil.getFieldValue(target, "connectionSession")).getBackendConnection();
+        BackendConnection connection = AgentReflectionUtil.<ConnectionSession>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 446aba8142e..57f74cfec46 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
@@ -55,8 +55,8 @@ public final class JDBCExecutorCallbackAdvice implements InstanceMethodAdvice {
             builder = builder.asChildOf(root);
         }
         JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
-        Map<String, DatabaseType> storageTypes = (Map<String, DatabaseType>) AgentReflectionUtil.getFieldValue(target, "storageTypes");
-        DataSourceMetaData metaData = (DataSourceMetaData) AgentReflectionUtil.invokeMethod(
+        Map<String, DatabaseType> storageTypes = AgentReflectionUtil.getFieldValue(target, "storageTypes");
+        DataSourceMetaData metaData = AgentReflectionUtil.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)
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 bcb31c6c28e..3d7732bcd5f 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
@@ -57,9 +57,8 @@ public class JDBCExecutorCallbackAdvice implements InstanceMethodAdvice {
         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>) AgentReflectionUtil.getFieldValue(target, "storageTypes");
-        DataSourceMetaData metaData = (DataSourceMetaData) AgentReflectionUtil.invokeMethod(
-                JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", DatabaseMetaData.class, DatabaseType.class),
+        Map<String, DatabaseType> storageTypes = AgentReflectionUtil.getFieldValue(target, "storageTypes");
+        DataSourceMetaData metaData = AgentReflectionUtil.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())
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 6b38243b953..91755e4b968 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
@@ -45,7 +45,7 @@ public final class CommandExecutorTaskAdvice implements InstanceMethodAdvice {
     
     @Override
     public void afterMethod(final TargetAdviceObject target, final Method method, final Object[] args, final Object result) {
-        BackendConnection connection = ((ConnectionSession) AgentReflectionUtil.getFieldValue(target, "connectionSession")).getBackendConnection();
+        BackendConnection connection = AgentReflectionUtil.<ConnectionSession>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 1c7ababf26f..9f6b16b1c06 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
@@ -50,8 +50,8 @@ public final class JDBCExecutorCallbackAdvice implements InstanceMethodAdvice {
         span.tag(ZipkinConstants.Tags.COMPONENT, ZipkinConstants.COMPONENT_NAME);
         span.tag(ZipkinConstants.Tags.DB_TYPE, ZipkinConstants.DB_TYPE_VALUE);
         JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
-        Map<String, DatabaseType> storageTypes = (Map<String, DatabaseType>) AgentReflectionUtil.getFieldValue(target, "storageTypes");
-        DataSourceMetaData metaData = (DataSourceMetaData) AgentReflectionUtil.invokeMethod(
+        Map<String, DatabaseType> storageTypes = AgentReflectionUtil.getFieldValue(target, "storageTypes");
+        DataSourceMetaData metaData = AgentReflectionUtil.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());