Skip to content

Commit

Permalink
refactoring TraceInfoExportHelper extract method
Browse files Browse the repository at this point in the history
  • Loading branch information
yjqg6666 committed May 28, 2020
1 parent 048e2f5 commit 7a30355
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.navercorp.pinpoint.interaction.trace.export;


import com.navercorp.pinpoint.interaction.util.ClassLoaderUtils;

import java.lang.reflect.Method;

/**
Expand All @@ -26,25 +28,32 @@
public class TraceInfoExportHelper {

public static final String TRACE_INFO_CLZ_NAME = "com.navercorp.pinpoint.interaction.trace.export.DefaultTraceInfo";

public static final String TRACE_INFO_HOLDER_CLZ_NAME = "com.navercorp.pinpoint.interaction.trace.export.TraceInfoHolder";

private TraceInfoExportHelper() {
}

public static void exportTraceInfo(Object appLoadedObject, String transactionId, Long spanId) {
if (transactionId == null || spanId == null) {
return;
}
ClassLoader appClassLoader = getAppClassLoader(appLoadedObject);
if (appClassLoader == null) {
return;
}

try {
Class<?> traceInfoClass = Class.forName(TRACE_INFO_CLZ_NAME, false, appClassLoader);
ClassLoader appClassLoader = ClassLoaderUtils.getAppClassLoader(appLoadedObject);
Class<?> traceInfoClass = ClassLoaderUtils.loadClassFromClassLoader(appClassLoader, TRACE_INFO_CLZ_NAME);
if (traceInfoClass == null) {
return;
}
Class<?> traceInfoHolderClass = ClassLoaderUtils.loadClassFromClassLoader(appClassLoader, TRACE_INFO_HOLDER_CLZ_NAME);
if (traceInfoHolderClass == null) {
return;
}
Object traceInfoObj = traceInfoClass.getDeclaredConstructor().newInstance();
Method setTxIdMethod = traceInfoClass.getDeclaredMethod("setTransactionId", String.class);
setTxIdMethod.invoke(traceInfoObj, transactionId);
Method setSpanIdMethod = traceInfoClass.getDeclaredMethod("setSpanId", Long.TYPE);
setSpanIdMethod.invoke(traceInfoObj, spanId);
Class<?> traceInfoHolderClass = Class.forName(TRACE_INFO_HOLDER_CLZ_NAME, false, appClassLoader);
Method setTraceInfoMethod = traceInfoHolderClass.getDeclaredMethod("setTraceInfo", TraceInfo.class);
//noinspection JavaReflectionInvocation
setTraceInfoMethod.invoke(traceInfoHolderClass, traceInfoObj);
Expand All @@ -66,12 +75,11 @@ private static ClassLoader getAppClassLoader(Object appLoadedObject) {
}

public static void clearExportedTraceInfo(Object appLoadedObject) {
ClassLoader appClassLoader = getAppClassLoader(appLoadedObject);
if (appClassLoader == null) {
return;
}
try {
Class<?> traceInfoHolderClass = Class.forName(TRACE_INFO_HOLDER_CLZ_NAME, false, appClassLoader);
Class<?> traceInfoHolderClass = ClassLoaderUtils.loadClassFromAppObject(appLoadedObject, TRACE_INFO_HOLDER_CLZ_NAME);
if (traceInfoHolderClass == null) {
return;
}
Method setTraceInfoMethod = traceInfoHolderClass.getDeclaredMethod("clearTraceInfo");
setTraceInfoMethod.invoke(traceInfoHolderClass);
} catch (Throwable t) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright 2020 NAVER Corp.
*
* Licensed 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 com.navercorp.pinpoint.interaction.util;

/**
* @author yjqg6666
*/
@SuppressWarnings("unused")
public class ClassLoaderUtils {

public static Class<?> loadClassFromAppObject(Object appLoadedObject, String className) {
ClassLoader appClassLoader = getAppClassLoader(appLoadedObject);
return loadClassFromClassLoader(appClassLoader, className);
}

public static Class<?> loadClassFromClassLoader(ClassLoader appClassLoader, String className) {
if (appClassLoader == null || className == null) {
return null;
}
try {
return Class.forName(className, false, appClassLoader);
} catch (Throwable t) {
//t.printStackTrace();
//do nothing even no logging for no introduced dependency
}
return null;
}

public static ClassLoader getAppClassLoader(Object appLoadedObject) {
if (appLoadedObject == null) {
return null;
}
Class<?> targetClass = appLoadedObject.getClass();
if (targetClass == null) {
return null;
}
return targetClass.getClassLoader();
}
}

0 comments on commit 7a30355

Please sign in to comment.