162 lines
6.3 KiB
Markdown
162 lines
6.3 KiB
Markdown
Changes by Version
|
|
==================
|
|
Release Notes.
|
|
|
|
9.0.0
|
|
------------------
|
|
|
|
### Kernel Updates
|
|
|
|
* Support re-transform/hot-swap classes with other java agents, and remove the obsolete cache enhanced class feature.
|
|
* Implement new naming policies for names of auxiliary type, interceptor delegate field, renamed origin method, method
|
|
access name, method cache value field. All names are under `sw$` name trait. They are predictable and unchanged after
|
|
re-transform.
|
|
|
|
```
|
|
* SWAuxiliaryTypeNamingStrategy
|
|
Auxiliary type name pattern: <origin_class_name>$<name_trait>$auxiliary$<auxiliary_type_instance_hash>
|
|
|
|
* DelegateNamingResolver
|
|
Interceptor delegate field name pattern: <name_trait>$delegate$<class_name_hash>$<plugin_define_hash>$<intercept_point_hash>
|
|
|
|
* SWMethodNameTransformer
|
|
Renamed origin method pattern: <name_trait>$original$<method_name>$<method_description_hash>
|
|
|
|
* SWImplementationContextFactory
|
|
Method cache value field pattern: cachedValue$<name_trait>$<origin_class_name_hash>$<field_value_hash>
|
|
Accessor method name pattern: <renamed_origin_method>$accessor$<name_trait>$<origin_class_name_hash>
|
|
```
|
|
|
|
Here is an example of manipulated enhanced class with new naming policies of auxiliary classes, fields, and methods
|
|
|
|
```java
|
|
import sample.mybatis.controller.HotelController$sw$auxiliary$19cja42;
|
|
import sample.mybatis.controller.HotelController$sw$auxiliary$p257su0;
|
|
import sample.mybatis.domain.Hotel;
|
|
import sample.mybatis.service.HotelService;
|
|
|
|
@RequestMapping(value={"/hotel"})
|
|
@RestController
|
|
public class HotelController
|
|
implements EnhancedInstance {
|
|
@Autowired
|
|
@lazy
|
|
private HotelService hotelService;
|
|
private volatile Object _$EnhancedClassField_ws;
|
|
|
|
// Interceptor delegate fields
|
|
public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$ain2do0$8im5jm1;
|
|
public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$ain2do0$edkmf61;
|
|
public static volatile /* synthetic */ ConstructorInter sw$delegate$td03673$ain2do0$qs9unv1;
|
|
public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$fl4lnk1$m3ia3a2;
|
|
public static volatile /* synthetic */ InstMethodsInter sw$delegate$td03673$fl4lnk1$sufrvp1;
|
|
public static volatile /* synthetic */ ConstructorInter sw$delegate$td03673$fl4lnk1$cteu7s1;
|
|
|
|
// Origin method cache value field
|
|
private static final /* synthetic */ Method cachedValue$sw$td03673$g5sobj1;
|
|
|
|
public HotelController() {
|
|
this(null);
|
|
sw$delegate$td03673$ain2do0$qs9unv1.intercept(this, new Object[0]);
|
|
}
|
|
|
|
private /* synthetic */ HotelController(sw.auxiliary.p257su0 p257su02) {
|
|
}
|
|
|
|
@GetMapping(value={"city/{cityId}"})
|
|
public Hotel selectByCityId(@PathVariable(value="cityId") int n) {
|
|
// call interceptor with auxiliary type and parameters and origin method object
|
|
return (Hotel)sw$delegate$td03673$ain2do0$8im5jm1.intercept(this, new Object[]{n}, new HotelController$sw$auxiliary$19cja42(this, n), cachedValue$sw$td03673$g5sobj1);
|
|
}
|
|
|
|
// Renamed origin method
|
|
private /* synthetic */ Hotel sw$origin$selectByCityId$a8458p3(int cityId) {
|
|
/*22*/ return this.hotelService.selectByCityId(cityId);
|
|
}
|
|
|
|
// Accessor of renamed origin method, calling from auxiliary type
|
|
final /* synthetic */ Hotel sw$origin$selectByCityId$a8458p3$accessor$sw$td03673(int n) {
|
|
// Calling renamed origin method
|
|
return this.sw$origin$selectByCityId$a8458p3(n);
|
|
}
|
|
|
|
@OverRide
|
|
public Object getSkyWalkingDynamicField() {
|
|
return this._$EnhancedClassField_ws;
|
|
}
|
|
|
|
@OverRide
|
|
public void setSkyWalkingDynamicField(Object object) {
|
|
this._$EnhancedClassField_ws = object;
|
|
}
|
|
|
|
static {
|
|
ClassLoader.getSystemClassLoader().loadClass("org.apache.skywalking.apm.dependencies.net.bytebuddy.dynamic.Nexus").getMethod("initialize", Class.class, Integer.TYPE).invoke(null, HotelController.class, -1072476370);
|
|
// Method object
|
|
cachedValue$sw$td03673$g5sobj1 = HotelController.class.getMethod("selectByCityId", Integer.TYPE);
|
|
}
|
|
}
|
|
```
|
|
|
|
Auxiliary type of Constructor :
|
|
```java
|
|
class HotelController$sw$auxiliary$p257su0 {
|
|
}
|
|
```
|
|
|
|
Auxiliary type of `selectByCityId` method:
|
|
```java
|
|
class HotelController$sw$auxiliary$19cja42
|
|
implements Runnable,
|
|
Callable {
|
|
private HotelController argument0;
|
|
private int argument1;
|
|
|
|
public Object call() throws Exception {
|
|
return this.argument0.sw$origin$selectByCityId$a8458p3$accessor$sw$td03673(this.argument1);
|
|
}
|
|
|
|
@OverRide
|
|
public void run() {
|
|
this.argument0.sw$origin$selectByCityId$a8458p3$accessor$sw$td03673(this.argument1);
|
|
}
|
|
|
|
HotelController$sw$auxiliary$19cja42(HotelController hotelController, int n) {
|
|
this.argument0 = hotelController;
|
|
this.argument1 = n;
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Features and Bug Fixes
|
|
|
|
* Support Jdk17 ZGC metric collect
|
|
* Support Jetty 11.x plugin
|
|
* Support access to the sky-walking tracer context in spring gateway filter
|
|
* Fix the scenario of using the HBase plugin with spring-data-hadoop.
|
|
* Add RocketMQ 5.x plugin
|
|
* Fix the conflict between the logging kernel and the JDK threadpool plugin.
|
|
* Fix the thread safety bug of finishing operation for the span named "SpringCloudGateway/sendRequest"
|
|
* Fix NPE in guava-eventbus-plugin.
|
|
* Add WebSphere Liberty 23.x plugin
|
|
* Add Plugin to support aerospike Java client
|
|
* Add ClickHouse parsing to the jdbc-common plugin.
|
|
* Support to trace redisson lock
|
|
* Upgrade netty-codec-http2 to 4.1.94.Final
|
|
* Upgrade guava to 32.0.1
|
|
* Fix issue with duplicate enhancement by ThreadPoolExecutor
|
|
* Add plugin to support for RESTeasy 6.x.
|
|
* Fix the conditions for resetting UUID, avoid the same uuid causing the configuration not to be updated.
|
|
* Fix witness class in springmvc-annotation-5.x-plugin to avoid falling into v3 use cases.
|
|
* Fix Jedis-2.x plugin bug and add test for Redis cluster scene
|
|
* Merge two instrumentation classes to avoid duplicate enhancements in MySQL plugins.
|
|
* Support asynchronous invocation in jetty client 9.0 and 9.x plugin
|
|
* Add nacos-client 2.x plugin
|
|
* Staticize the tags for preventing synchronization in JDK 8
|
|
* Add RocketMQ-Client-Java 5.x plugin
|
|
* Fix NullPointerException in lettuce-5.x-plugin.
|
|
|
|
#### Documentation
|
|
|
|
All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/178?closed=1)
|