Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
javalover123888
SkyWalking
提交
8b074a0a
S
SkyWalking
项目概览
javalover123888
/
SkyWalking
与 Fork 源项目一致
Fork自
山不在高_有仙则灵 / SkyWalking
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8b074a0a
编写于
5月 08, 2017
作者:
wu-sheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support multi plugins for one target class.
上级
ecf7a2bf
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
26 addition
and
10 deletion
+26
-10
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefine.java
...m/agent/core/plugin/AbstractClassEnhancePluginDefine.java
+3
-3
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginFinder.java
...va/org/skywalking/apm/agent/core/plugin/PluginFinder.java
+10
-3
apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java
...c/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java
+13
-4
未找到文件。
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefine.java
浏览文件 @
8b074a0a
...
@@ -24,7 +24,7 @@ public abstract class AbstractClassEnhancePluginDefine {
...
@@ -24,7 +24,7 @@ public abstract class AbstractClassEnhancePluginDefine {
*
*
* @param transformClassName target class.
* @param transformClassName target class.
* @param builder byte-buddy's builder to manipulate target class's bytecode.
* @param builder byte-buddy's builder to manipulate target class's bytecode.
* @return
be defined builder
.
* @return
the new builder, or <code>null</code> if not be enhanced
.
* @throws PluginException, when set builder failure.
* @throws PluginException, when set builder failure.
*/
*/
public
DynamicType
.
Builder
<?>
define
(
String
transformClassName
,
public
DynamicType
.
Builder
<?>
define
(
String
transformClassName
,
...
@@ -33,7 +33,7 @@ public abstract class AbstractClassEnhancePluginDefine {
...
@@ -33,7 +33,7 @@ public abstract class AbstractClassEnhancePluginDefine {
if
(
StringUtil
.
isEmpty
(
transformClassName
))
{
if
(
StringUtil
.
isEmpty
(
transformClassName
))
{
logger
.
warn
(
"classname of being intercepted is not defined by {}."
,
interceptorDefineClassName
);
logger
.
warn
(
"classname of being intercepted is not defined by {}."
,
interceptorDefineClassName
);
return
builder
;
return
null
;
}
}
logger
.
debug
(
"prepare to enhance class {} by {}."
,
transformClassName
,
interceptorDefineClassName
);
logger
.
debug
(
"prepare to enhance class {} by {}."
,
transformClassName
,
interceptorDefineClassName
);
...
@@ -48,7 +48,7 @@ public abstract class AbstractClassEnhancePluginDefine {
...
@@ -48,7 +48,7 @@ public abstract class AbstractClassEnhancePluginDefine {
if
(!
witnessClassResolution
.
isResolved
())
{
if
(!
witnessClassResolution
.
isResolved
())
{
logger
.
warn
(
"enhance class {} by plugin {} is not working. Because witness class {} is not existed."
,
transformClassName
,
interceptorDefineClassName
,
logger
.
warn
(
"enhance class {} by plugin {} is not working. Because witness class {} is not existed."
,
transformClassName
,
interceptorDefineClassName
,
witnessClass
);
witnessClass
);
return
builder
;
return
null
;
}
}
}
}
}
}
...
...
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginFinder.java
浏览文件 @
8b074a0a
package
org.skywalking.apm.agent.core.plugin
;
package
org.skywalking.apm.agent.core.plugin
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -11,7 +12,7 @@ import java.util.Map;
...
@@ -11,7 +12,7 @@ import java.util.Map;
* @author wusheng
* @author wusheng
*/
*/
public
class
PluginFinder
{
public
class
PluginFinder
{
private
final
Map
<
String
,
AbstractClassEnhancePluginDefine
>
pluginDefineMap
=
new
HashMap
<
String
,
AbstractClassEnhancePluginDefine
>();
private
final
Map
<
String
,
LinkedList
<
AbstractClassEnhancePluginDefine
>>
pluginDefineMap
=
new
HashMap
<
String
,
LinkedList
<
AbstractClassEnhancePluginDefine
>
>();
public
PluginFinder
(
List
<
AbstractClassEnhancePluginDefine
>
plugins
)
{
public
PluginFinder
(
List
<
AbstractClassEnhancePluginDefine
>
plugins
)
{
for
(
AbstractClassEnhancePluginDefine
plugin
:
plugins
)
{
for
(
AbstractClassEnhancePluginDefine
plugin
:
plugins
)
{
...
@@ -21,11 +22,17 @@ public class PluginFinder {
...
@@ -21,11 +22,17 @@ public class PluginFinder {
continue
;
continue
;
}
}
pluginDefineMap
.
put
(
enhanceClassName
,
plugin
);
LinkedList
<
AbstractClassEnhancePluginDefine
>
pluginDefinesWithSameTarget
=
pluginDefineMap
.
get
(
enhanceClassName
);
if
(
pluginDefinesWithSameTarget
==
null
)
{
pluginDefinesWithSameTarget
=
new
LinkedList
<
AbstractClassEnhancePluginDefine
>();
pluginDefineMap
.
put
(
enhanceClassName
,
pluginDefinesWithSameTarget
);
}
pluginDefinesWithSameTarget
.
add
(
plugin
);
}
}
}
}
public
AbstractClassEnhancePluginDefine
find
(
String
enhanceClassName
)
{
public
List
<
AbstractClassEnhancePluginDefine
>
find
(
String
enhanceClassName
)
{
if
(
pluginDefineMap
.
containsKey
(
enhanceClassName
))
{
if
(
pluginDefineMap
.
containsKey
(
enhanceClassName
))
{
return
pluginDefineMap
.
get
(
enhanceClassName
);
return
pluginDefineMap
.
get
(
enhanceClassName
);
}
}
...
...
apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java
浏览文件 @
8b074a0a
package
org.skywalking.apm.agent
;
package
org.skywalking.apm.agent
;
import
java.util.List
;
import
net.bytebuddy.agent.builder.AgentBuilder
;
import
net.bytebuddy.agent.builder.AgentBuilder
;
import
net.bytebuddy.description.NamedElement
;
import
net.bytebuddy.description.NamedElement
;
import
net.bytebuddy.description.type.TypeDescription
;
import
net.bytebuddy.description.type.TypeDescription
;
...
@@ -54,8 +55,16 @@ public class SkyWalkingAgent {
...
@@ -54,8 +55,16 @@ public class SkyWalkingAgent {
new
AgentBuilder
.
Default
().
type
(
enhanceClassMatcher
(
pluginFinder
).
and
(
not
(
isInterface
()))).
transform
(
new
AgentBuilder
.
Transformer
()
{
new
AgentBuilder
.
Default
().
type
(
enhanceClassMatcher
(
pluginFinder
).
and
(
not
(
isInterface
()))).
transform
(
new
AgentBuilder
.
Transformer
()
{
public
DynamicType
.
Builder
<?>
transform
(
DynamicType
.
Builder
<?>
builder
,
TypeDescription
typeDescription
,
public
DynamicType
.
Builder
<?>
transform
(
DynamicType
.
Builder
<?>
builder
,
TypeDescription
typeDescription
,
ClassLoader
classLoader
)
{
ClassLoader
classLoader
)
{
AbstractClassEnhancePluginDefine
pluginDefine
=
pluginFinder
.
find
(
typeDescription
.
getTypeName
());
List
<
AbstractClassEnhancePluginDefine
>
pluginDefines
=
pluginFinder
.
find
(
typeDescription
.
getTypeName
());
return
pluginDefine
.
define
(
typeDescription
.
getTypeName
(),
builder
);
for
(
AbstractClassEnhancePluginDefine
pluginDefine
:
pluginDefines
)
{
DynamicType
.
Builder
<?>
newBuilder
=
pluginDefine
.
define
(
typeDescription
.
getTypeName
(),
builder
);
if
(
newBuilder
!=
null
)
{
return
newBuilder
;
}
}
logger
.
warn
(
"Matched class {}, but enhancement fail."
,
typeDescription
.
getTypeName
());
return
builder
;
}
}
}).
with
(
new
AgentBuilder
.
Listener
()
{
}).
with
(
new
AgentBuilder
.
Listener
()
{
@Override
@Override
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录