alibaba / one-java-agent

Apache License 2.0
550 stars 118 forks source link

在 instrument-lib/ 里,需要支持define 工具类 #26

Open hengyunabc opened 3 years ago

hengyunabc commented 3 years ago

比如在增强 dubbo里,可能会有一些工具类,处理数据之后,才能传送到后续处理函数里。那么这些工具类需要在运行时动态 define 到应用的 ClassLoader 里。

hengyunabc commented 3 years ago

目前会有重复define现象,需要解决,只define一次。 当instrument=里配置了多个类时。

Caused by: java.lang.LinkageError: loader (instance of  sun/misc/Launcher$AppClassLoader): attempted  duplicate class definition for name: "org/apache/http/impl/client/MyTextMapSetter"
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.alibaba.bytekit.utils.ReflectUtils.defineClass(ReflectUtils.java:462)