提交 09cbcc22 编写于 作者: J jaehong-kim 提交者: Jaehong Kim

[#7679] Fix assert class of retransform

上级 c4b566b9
......@@ -21,14 +21,20 @@ import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;
import com.navercorp.pinpoint.bootstrap.instrument.RequestHandle;
import com.navercorp.pinpoint.common.util.JvmUtils;
import com.navercorp.pinpoint.common.util.JvmVersion;
import com.navercorp.pinpoint.profiler.ProfilerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.navercorp.pinpoint.bootstrap.instrument.DynamicTransformRequestListener;
import com.navercorp.pinpoint.bootstrap.instrument.DynamicTransformTrigger;
import java.util.Objects;
import static com.navercorp.pinpoint.common.util.JvmVersion.JAVA_8;
import static com.navercorp.pinpoint.common.util.JvmVersion.JAVA_9;
/**
* @author emeroad
*/
......@@ -63,13 +69,13 @@ public class DynamicTransformService implements DynamicTransformTrigger {
}
}
}
@Override
public void addClassFileTransformer(ClassLoader classLoader, String targetClassName, ClassFileTransformer transformer) {
if (this.logger.isDebugEnabled()) {
logger.debug("Add dynamic transform. classLoader={}, class={}", classLoader, targetClassName);
}
this.dynamicTransformRequestListener.onTransformRequest(classLoader, targetClassName, transformer);
}
......@@ -77,6 +83,15 @@ public class DynamicTransformService implements DynamicTransformTrigger {
if (!instrumentation.isModifiableClass(target)) {
throw new ProfilerException("Target class " + target + " is not modifiable");
}
final JvmVersion version = JvmUtils.getVersion();
if (JAVA_8.compareTo(version) == 0) {
// If the version is java 8
// Java 8 bug - NoClassDefFound error in transforming lambdas(https://bugs.openjdk.java.net/browse/JDK-8145964)
final String className = target.getName();
if (className != null && className.contains("$$Lambda$")) {
throw new ProfilerException("Target class " + target + " is lambda class, Causes NoClassDefFound error in java 8.");
}
}
}
private void triggerRetransform(Class<?> target) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册