ttl-integrations/sample-ttl-agent-extension-transformlet/README.md
TTL Agent扩展Transformlet实现的示例工程Transformlet的实现为了提供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实现的注意点在Transformlet的实现逻辑中,不要 加载被transform的类 或是 做实例化,如
ToBeTransformedClass.classClass.forName("com.alibaba.ttl.agent.extension_transformlet.sample.biz.ToBeTransformedClass")new ToBeTransformedClass()加载被transform的类会导致对该类的transform操作被跳过,也就是Transformlet失效了。
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
SampleMain可以通过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快速上面命令行的运行。