Skip to content

Files

sample-ttl-agent-extension-transformlet

TTL Agent扩展Transformlet实现的示例工程

扩展Transformlet的实现

为了提供TTL Agent扩展Transformlet,包含2部分:

  1. TTL Agent扩展Transformlet的实现类:SampleExtensionTransformlet
    • 这个示例Transformlet修改了类ToBeTransformedClasstoBeTransformedMethod方法:在修改方法前插入一行代码,修改方法参数值乘以2($1 *= 2;)。
  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引入到应用中就会自动生效。
    • 这个扫描并自动加载生效与JDKServiceLoader一样,只是使用不同的扩展配置文件。

扩展Transformlet实现的注意点

Transformlet的实现逻辑中,不要 加载被transform的类 或是 做实例化,如

  • ToBeTransformedClass.class
  • Class.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快速上面命令行的运行。