为了提供TTL Agent
扩展Transformlet
,包含2部分:
TTL Agent
扩展Transformlet
的实现类:SampleExtensionTransformlet
。- 这个示例
Transformlet
修改了类ToBeTransformedClass
的toBeTransformedMethod
方法:在修改方法前插入一行代码,修改方法参数值乘以2($1 *= 2;
)。
- 这个示例
TTL Agent
扩展Transformlet
的配置文件:META-INF/ttl.agent.transformlets
- 配置文件的内容是 扩展
Transformlet
实现类的全类名。
在这个示例工程是com.alibaba.ttl.agent.extension_transformlet.sample.transformlet.SampleExtensionTransformlet
。 TTL Agent
会扫描Class Path
上的META-INF/ttl.agent.transformlets
文件,自动发现并启用这些扩展Transformlet
。
即只要将扩展Transformlet
的依赖Jar
引入到应用中就会自动生效。- 这个扫描并自动加载生效与
JDK
的ServiceLoader
一样,只是使用不同的扩展配置文件。
- 配置文件的内容是 扩展
在Transformlet
的实现逻辑中,不要 加载被transform
的类 或是 做实例化,如
ToBeTransformedClass.class
Class.forName("com.alibaba.ttl.agent.extension_transformlet.sample.biz.ToBeTransformedClass")
new ToBeTransformedClass()
加载被transform
的类会导致对该类的transform
操作被跳过,也就是Transformlet
失效了。
单元测试类 在 ToBeTransformedClassTest
。
通过运行Maven
单元测试验证扩展Transformlet
SampleExtensionTransformlet
是否生效:
# sample-ttl-agent-extension-transformlet 工程目录,执行
# 1. 先 mvn install TTL lib
(cd ../.. && mvn install -Dmaven.test.skip)
# 2. 验证 扩展Transformlet SampleExtensionTransformlet 是否生效
mvn test -Penable-TtlAgent-forTest
# 更多输出TTL的Transform类操作的日志
mvn test -Penable-TtlAgent-forTest -Penable-LogTransform-forTest
可以通过Java
命令行参数来运行示例SampleMain
:
java -javaagent:path/to/transmittable-thread-local-2.x.y.jar \
-cp target/classes \
com.alibaba.ttl.agent.extension_transformlet.sample.biz.SampleMain
通过脚本scripts/run.sh
快速上面命令行的运行。