提交 2e562cd9 编写于 作者: oldratlee's avatar oldratlee 🔥

remove hard-coded TTL class name #116

上级 cfdeb558
package com.alibaba.ttl.threadpool.agent.internal.transformlet.impl; package com.alibaba.ttl.threadpool.agent.internal.transformlet.impl;
import com.alibaba.ttl.TtlCallable;
import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger; import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet; import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet;
import javassist.CannotCompileException; import javassist.CannotCompileException;
...@@ -38,8 +40,8 @@ public class TtlExecutorTransformlet implements JavassistTransformlet { ...@@ -38,8 +40,8 @@ public class TtlExecutorTransformlet implements JavassistTransformlet {
EXECUTOR_CLASS_NAMES.add("java.util.concurrent.ThreadPoolExecutor"); EXECUTOR_CLASS_NAMES.add("java.util.concurrent.ThreadPoolExecutor");
EXECUTOR_CLASS_NAMES.add("java.util.concurrent.ScheduledThreadPoolExecutor"); EXECUTOR_CLASS_NAMES.add("java.util.concurrent.ScheduledThreadPoolExecutor");
PARAM_TYPE_NAME_TO_DECORATE_METHOD_CLASS.put("java.lang.Runnable", "com.alibaba.ttl.TtlRunnable"); PARAM_TYPE_NAME_TO_DECORATE_METHOD_CLASS.put("java.lang.Runnable", TtlRunnable.class.getName());
PARAM_TYPE_NAME_TO_DECORATE_METHOD_CLASS.put("java.util.concurrent.Callable", "com.alibaba.ttl.TtlCallable"); PARAM_TYPE_NAME_TO_DECORATE_METHOD_CLASS.put("java.util.concurrent.Callable", TtlCallable.class.getName());
} }
@Override @Override
......
package com.alibaba.ttl.threadpool.agent.internal.transformlet.impl; package com.alibaba.ttl.threadpool.agent.internal.transformlet.impl;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlRecursiveAction;
import com.alibaba.ttl.TtlRecursiveTask;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger; import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet; import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet;
import javassist.*; import javassist.*;
...@@ -22,8 +25,8 @@ import static com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils. ...@@ -22,8 +25,8 @@ import static com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.
public class TtlForkJoinTransformlet implements JavassistTransformlet { public class TtlForkJoinTransformlet implements JavassistTransformlet {
private static final Logger logger = Logger.getLogger(TtlForkJoinTransformlet.class); private static final Logger logger = Logger.getLogger(TtlForkJoinTransformlet.class);
private static final String FORK_JOIN_TASK_CLASS_NAME = "java.util.concurrent.ForkJoinTask"; private static final String FORK_JOIN_TASK_CLASS_NAME = "java.util.concurrent.ForkJoinTask";
private static final String TTL_RECURSIVE_ACTION_CLASS_NAME = "com.alibaba.ttl.TtlRecursiveAction"; private static final String TTL_RECURSIVE_ACTION_CLASS_NAME = TtlRecursiveAction.class.getName();
private static final String TTL_RECURSIVE_TASK_CLASS_NAME = "com.alibaba.ttl.TtlRecursiveTask"; private static final String TTL_RECURSIVE_TASK_CLASS_NAME = TtlRecursiveTask.class.getName();
@Override @Override
public byte[] doTransform(String className, byte[] classFileBuffer, ClassLoader loader) throws IOException, NotFoundException, CannotCompileException { public byte[] doTransform(String className, byte[] classFileBuffer, ClassLoader loader) throws IOException, NotFoundException, CannotCompileException {
...@@ -38,10 +41,12 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet { ...@@ -38,10 +41,12 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
private void updateForkJoinTaskClass(final CtClass clazz) throws CannotCompileException, NotFoundException { private void updateForkJoinTaskClass(final CtClass clazz) throws CannotCompileException, NotFoundException {
// add new field // add new field
final String className = clazz.getName(); final String className = clazz.getName();
// use getCanonicalName method for inner class
final String transmitterClassName = TransmittableThreadLocal.Transmitter.class.getCanonicalName();
final String capturedFieldName = "captured$field$add$by$ttl"; final String capturedFieldName = "captured$field$add$by$ttl";
final CtField capturedField = CtField.make("private final Object " + capturedFieldName + ";", clazz); final CtField capturedField = CtField.make("private final Object " + capturedFieldName + ";", clazz);
clazz.addField(capturedField, "com.alibaba.ttl.TransmittableThreadLocal.Transmitter.capture();"); clazz.addField(capturedField, transmitterClassName + ".capture();");
logger.info("add new field " + capturedFieldName + " to class " + className); logger.info("add new field " + capturedFieldName + " to class " + className);
final String doExec_methodName = "doExec"; final String doExec_methodName = "doExec";
...@@ -59,11 +64,11 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet { ...@@ -59,11 +64,11 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
"if (this instanceof " + TTL_RECURSIVE_ACTION_CLASS_NAME + " || this instanceof " + TTL_RECURSIVE_TASK_CLASS_NAME + ") {\n" + "if (this instanceof " + TTL_RECURSIVE_ACTION_CLASS_NAME + " || this instanceof " + TTL_RECURSIVE_TASK_CLASS_NAME + ") {\n" +
" return " + original_doExec_method_rename + "($$);\n" + " return " + original_doExec_method_rename + "($$);\n" +
"}\n" + "}\n" +
"Object backup = com.alibaba.ttl.TransmittableThreadLocal.Transmitter.replay(" + capturedFieldName + ");\n" + "Object backup = " + transmitterClassName + ".replay(" + capturedFieldName + ");\n" +
"try {\n" + "try {\n" +
" return " + original_doExec_method_rename + "($$);\n" + " return " + original_doExec_method_rename + "($$);\n" +
"} finally {\n" + "} finally {\n" +
" com.alibaba.ttl.TransmittableThreadLocal.Transmitter.restore(backup);\n" + " " + transmitterClassName + ".restore(backup);\n" +
"}\n" + "}"; "}\n" + "}";
new_doExecMethod.setBody(code); new_doExecMethod.setBody(code);
clazz.addMethod(new_doExecMethod); clazz.addMethod(new_doExecMethod);
......
package com.alibaba.ttl.threadpool.agent.internal.transformlet.impl; package com.alibaba.ttl.threadpool.agent.internal.transformlet.impl;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.threadpool.agent.internal.logging.Logger; import com.alibaba.ttl.threadpool.agent.internal.logging.Logger;
import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet; import com.alibaba.ttl.threadpool.agent.internal.transformlet.JavassistTransformlet;
import javassist.*; import javassist.*;
...@@ -55,10 +56,12 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet { ...@@ -55,10 +56,12 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
private void updateTimerTaskClass(final CtClass clazz) throws CannotCompileException, NotFoundException { private void updateTimerTaskClass(final CtClass clazz) throws CannotCompileException, NotFoundException {
// add new field // add new field
final String className = clazz.getName(); final String className = clazz.getName();
// use getCanonicalName method for inner class
final String transmitterClassName = TransmittableThreadLocal.Transmitter.class.getCanonicalName();
final String capturedFieldName = "captured$field$add$by$ttl"; final String capturedFieldName = "captured$field$add$by$ttl";
final CtField capturedField = CtField.make("private final Object " + capturedFieldName + ";", clazz); final CtField capturedField = CtField.make("private final Object " + capturedFieldName + ";", clazz);
clazz.addField(capturedField, "com.alibaba.ttl.TransmittableThreadLocal.Transmitter.capture();"); clazz.addField(capturedField, transmitterClassName + ".capture();");
logger.info("add new field " + capturedFieldName + " to class " + className); logger.info("add new field " + capturedFieldName + " to class " + className);
final CtMethod runMethod = clazz.getDeclaredMethod(RUN_METHOD_NAME, new CtClass[0]); final CtMethod runMethod = clazz.getDeclaredMethod(RUN_METHOD_NAME, new CtClass[0]);
...@@ -71,11 +74,11 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet { ...@@ -71,11 +74,11 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
// set new run method implementation // set new run method implementation
final String code = "{\n" + final String code = "{\n" +
"Object backup = com.alibaba.ttl.TransmittableThreadLocal.Transmitter.replay(" + capturedFieldName + ");\n" + "Object backup = " + transmitterClassName + ".replay(" + capturedFieldName + ");\n" +
"try {\n" + "try {\n" +
" return " + original_run_method_rename + "($$);\n" + " return " + original_run_method_rename + "($$);\n" +
"} finally {\n" + "} finally {\n" +
" com.alibaba.ttl.TransmittableThreadLocal.Transmitter.restore(backup);\n" + " " + transmitterClassName + ".restore(backup);\n" +
"}\n" + "}"; "}\n" + "}";
new_runMethod.setBody(code); new_runMethod.setBody(code);
clazz.addMethod(new_runMethod); clazz.addMethod(new_runMethod);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册