@@ -2,21 +2,144 @@ Changes by Version
22==================
33Release Notes.
44
5- 8.17 .0
5+ 9.0 .0
66------------------
77
8+ ### Kernel Updates
9+
10+ * Support re-transform/hot-swap classes with other java agents, and remove the obsolete cache enhanced class feature.
11+ * Implement new naming policies for names of auxiliary type, interceptor delegate field, renamed origin method, method
12+ access name, method cache value field. All names are under ` sw$ ` name trait. They are predictable and unchanged after
13+ re-transform.
14+
15+ ```
16+ * SWAuxiliaryTypeNamingStrategy
17+ Auxiliary type name pattern: <origin_class_name>$<name_trait>$auxiliary$<auxiliary_type_instance_hash>
18+
19+ * DelegateNamingResolver
20+ Interceptor delegate field name pattern: <name_trait>$delegate$<class_name_hash>$<plugin_define_hash>$<intercept_point_hash>
21+
22+ * SWMethodNameTransformer
23+ Renamed origin method pattern: <name_trait>$original$<method_name>$<method_description_hash>
24+
25+ * SWImplementationContextFactory
26+ Method cache value field pattern: cachedValue$<name_trait>$<origin_class_name_hash>$<field_value_hash>
27+ Accessor method name pattern: <renamed_origin_method>$accessor$<name_trait>$<origin_class_name_hash>
28+ ```
29+
30+ Here is an example of manipulated enhanced class with new naming policies of auxiliary classes, fields, and methods
31+
32+ ``` java
33+ import sample.mybatis.controller.HotelController$sw$auxiliary$19cja42 ;
34+ import sample.mybatis.controller.HotelController$sw$auxiliary$p257su0 ;
35+ import sample.mybatis.domain.Hotel ;
36+ import sample.mybatis.service.HotelService ;
37+
38+ @RequestMapping (value = {" /hotel" })
39+ @RestController
40+ public class HotelController
41+ implements EnhancedInstance {
42+ @Autowired
43+ @lazy
44+ private HotelService hotelService;
45+ private volatile Object _$EnhancedClassField_ws ;
46+
47+ // Interceptor delegate fields
48+ public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$ain2do0$8im5jm1;
49+ public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$ain2do0$edkmf61;
50+ public static volatile /* synthetic */ ConstructorInter sw$delegate$td03673$ain2do0$qs9unv1;
51+ public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$fl4lnk1$m3ia3a2;
52+ public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$fl4lnk1$sufrvp1;
53+ public static volatile /* synthetic */ ConstructorInter sw$delegate$td03673$fl4lnk1$cteu7s1;
54+
55+ // Origin method cache value field
56+ private static final /* synthetic */ Method cachedValue$sw$td03673$g5sobj1;
57+
58+ public HotelController () {
59+ this (null );
60+ sw$delegate$td03673$ain2do0$qs9unv1. intercept(this , new Object [0 ]);
61+ }
62+
63+ private /* synthetic */ HotelController (sw .auxiliary .p257su0 p257su02 ) {
64+ }
65+
66+ @GetMapping (value = {" city/{cityId}" })
67+ public Hotel selectByCityId (@PathVariable (value = " cityId" ) int n ) {
68+ // call interceptor with auxiliary type and parameters and origin method object
69+ return (Hotel )sw$delegate$td03673$ain2do0$8im5jm1. intercept(this , new Object []{n}, new HotelController $sw$auxiliary$19cja42(this , n), cachedValue$sw$td03673$g5sobj1);
70+ }
71+
72+ // Renamed origin method
73+ private /* synthetic */ Hotel sw$origin$selectByCityId$a8458p3 (int cityId ) {
74+ /* 22*/ return this . hotelService. selectByCityId(cityId);
75+ }
76+
77+ // Accessor of renamed origin method, calling from auxiliary type
78+ final /* synthetic */ Hotel sw$origin$selectByCityId$a8458p3$accessor$sw$td03673 (int n ) {
79+ // Calling renamed origin method
80+ return this . sw$origin$selectByCityId$a8458p3(n);
81+ }
82+
83+ @OverRide
84+ public Object getSkyWalkingDynamicField () {
85+ return this . _$EnhancedClassField_ws ;
86+ }
87+
88+ @OverRide
89+ public void setSkyWalkingDynamicField (Object object ) {
90+ this . _$EnhancedClassField_ws = object;
91+ }
92+
93+ static {
94+ ClassLoader . getSystemClassLoader(). loadClass(" org.apache.skywalking.apm.dependencies.net.bytebuddy.dynamic.Nexus" ). getMethod(" initialize" , Class . class, Integer . TYPE ). invoke(null , HotelController . class, - 1072476370 );
95+ // Method object
96+ cachedValue$sw$td03673$g5sobj1 = HotelController . class. getMethod(" selectByCityId" , Integer . TYPE );
97+ }
98+ }
99+ ```
100+
101+ Auxiliary type of Constructor :
102+ ``` java
103+ class HotelController $sw$auxiliary$p257su0 {
104+ }
105+ ```
106+
107+ Auxiliary type of ` selectByCityId ` method:
108+ ``` java
109+ class HotelController $sw$auxiliary$19cja42
110+ implements Runnable ,
111+ Callable {
112+ private HotelController argument0;
113+ private int argument1;
114+
115+ public Object call () throws Exception {
116+ return this . argument0. sw$origin$selectByCityId$a8458p3$accessor$sw$td03673(this . argument1);
117+ }
118+
119+ @OverRide
120+ public void run () {
121+ this . argument0. sw$origin$selectByCityId$a8458p3$accessor$sw$td03673(this . argument1);
122+ }
123+
124+ HotelController$sw$auxiliary$19cja42 (HotelController hotelController , int n ) {
125+ this . argument0 = hotelController;
126+ this . argument1 = n;
127+ }
128+ }
129+ ```
130+
131+ #### Features and Bug Fixes
132+
8133* Support Jdk17 ZGC metric collect
9134* Support Jetty 11.x plugin
10135* Fix the scenario of using the HBase plugin with spring-data-hadoop.
11136* Add RocketMQ 5.x plugin
12137* Fix the conflict between the logging kernel and the JDK threadpool plugin.
13138* Fix the thread safety bug of finishing operation for the span named "SpringCloudGateway/sendRequest"
14139* Fix NPE in guava-eventbus-plugin.
15- * Support re-transform/hot-swap classes with other java agents, and remove the obsolete cache enhanced class feature.
16140
17141#### Documentation
18142
19-
20143All issues and pull requests are [ here] ( https://github.com/apache/skywalking/milestone/178?closed=1 )
21144
22145------------------
0 commit comments