Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
阿啄debugIT
transmittable-thread-local
提交
2e562cd9
T
transmittable-thread-local
项目概览
阿啄debugIT
/
transmittable-thread-local
与 Fork 源项目一致
从无法访问的项目Fork
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
transmittable-thread-local
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2e562cd9
编写于
10月 23, 2018
作者:
oldratlee
🔥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remove hard-coded TTL class name #116
上级
cfdeb558
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
20 addition
and
10 deletion
+20
-10
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlExecutorTransformlet.java
...t/internal/transformlet/impl/TtlExecutorTransformlet.java
+4
-2
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlForkJoinTransformlet.java
...t/internal/transformlet/impl/TtlForkJoinTransformlet.java
+10
-5
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlTimerTaskTransformlet.java
.../internal/transformlet/impl/TtlTimerTaskTransformlet.java
+6
-3
未找到文件。
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlExecutorTransformlet.java
浏览文件 @
2e562cd9
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.transformlet.JavassistTransformlet
;
import
javassist.CannotCompileException
;
...
...
@@ -38,8 +40,8 @@ public class TtlExecutorTransformlet implements JavassistTransformlet {
EXECUTOR_CLASS_NAMES
.
add
(
"java.util.concurrent.ThreadPoolExecutor"
);
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.util.concurrent.Callable"
,
"com.alibaba.ttl.TtlCallable"
);
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"
,
TtlCallable
.
class
.
getName
()
);
}
@Override
...
...
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlForkJoinTransformlet.java
浏览文件 @
2e562cd9
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.transformlet.JavassistTransformlet
;
import
javassist.*
;
...
...
@@ -22,8 +25,8 @@ import static com.alibaba.ttl.threadpool.agent.internal.transformlet.impl.Utils.
public
class
TtlForkJoinTransformlet
implements
JavassistTransformlet
{
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
TTL_RECURSIVE_ACTION_CLASS_NAME
=
"com.alibaba.ttl.TtlRecursiveAction"
;
private
static
final
String
TTL_RECURSIVE_TASK_CLASS_NAME
=
"com.alibaba.ttl.TtlRecursiveTask"
;
private
static
final
String
TTL_RECURSIVE_ACTION_CLASS_NAME
=
TtlRecursiveAction
.
class
.
getName
()
;
private
static
final
String
TTL_RECURSIVE_TASK_CLASS_NAME
=
TtlRecursiveTask
.
class
.
getName
()
;
@Override
public
byte
[]
doTransform
(
String
className
,
byte
[]
classFileBuffer
,
ClassLoader
loader
)
throws
IOException
,
NotFoundException
,
CannotCompileException
{
...
...
@@ -38,10 +41,12 @@ public class TtlForkJoinTransformlet implements JavassistTransformlet {
private
void
updateForkJoinTaskClass
(
final
CtClass
clazz
)
throws
CannotCompileException
,
NotFoundException
{
// add new field
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
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
);
final
String
doExec_methodName
=
"doExec"
;
...
...
@@ -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"
+
" return "
+
original_doExec_method_rename
+
"($$);\n"
+
"}\n"
+
"Object backup =
com.alibaba.ttl.TransmittableThreadLocal.Transmitter
.replay("
+
capturedFieldName
+
");\n"
+
"Object backup =
"
+
transmitterClassName
+
"
.replay("
+
capturedFieldName
+
");\n"
+
"try {\n"
+
" return "
+
original_doExec_method_rename
+
"($$);\n"
+
"} finally {\n"
+
"
com.alibaba.ttl.TransmittableThreadLocal.Transmitter
.restore(backup);\n"
+
"
"
+
transmitterClassName
+
"
.restore(backup);\n"
+
"}\n"
+
"}"
;
new_doExecMethod
.
setBody
(
code
);
clazz
.
addMethod
(
new_doExecMethod
);
...
...
src/main/java/com/alibaba/ttl/threadpool/agent/internal/transformlet/impl/TtlTimerTaskTransformlet.java
浏览文件 @
2e562cd9
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.transformlet.JavassistTransformlet
;
import
javassist.*
;
...
...
@@ -55,10 +56,12 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
private
void
updateTimerTaskClass
(
final
CtClass
clazz
)
throws
CannotCompileException
,
NotFoundException
{
// add new field
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
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
);
final
CtMethod
runMethod
=
clazz
.
getDeclaredMethod
(
RUN_METHOD_NAME
,
new
CtClass
[
0
]);
...
...
@@ -71,11 +74,11 @@ public class TtlTimerTaskTransformlet implements JavassistTransformlet {
// set new run method implementation
final
String
code
=
"{\n"
+
"Object backup =
com.alibaba.ttl.TransmittableThreadLocal.Transmitter
.replay("
+
capturedFieldName
+
");\n"
+
"Object backup =
"
+
transmitterClassName
+
"
.replay("
+
capturedFieldName
+
");\n"
+
"try {\n"
+
" return "
+
original_run_method_rename
+
"($$);\n"
+
"} finally {\n"
+
"
com.alibaba.ttl.TransmittableThreadLocal.Transmitter
.restore(backup);\n"
+
"
"
+
transmitterClassName
+
"
.restore(backup);\n"
+
"}\n"
+
"}"
;
new_runMethod
.
setBody
(
code
);
clazz
.
addMethod
(
new_runMethod
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录