From f377c3350e971d21173db8dcd60cbc0ee527fa09 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Thu, 25 Jan 2018 21:58:57 +0800 Subject: [PATCH 1/4] [Agent] support spring bean plugin --- apm-sniffer/apm-sdk-plugin/pom.xml | 7 ++- .../apm-sdk-plugin/spring-plugins/pom.xml | 1 + .../spring-annotation-plugin/README.md | 18 +++++++ .../spring-annotation-plugin/pom.xml | 44 +++++++++++++++ .../AbstractSpringBeanInstrumentation.java | 53 +++++++++++++++++++ .../SpringAnnotationInterceptor.java | 46 ++++++++++++++++ .../bean/SpringBeanInstrumentation.java | 34 ++++++++++++ .../SpringComponentInstrumentation.java | 31 +++++++++++ .../SpringRepositoryInstrumentation.java | 30 +++++++++++ .../SpringServicesInstrumentation.java | 31 +++++++++++ .../src/main/resources/skywalking-plugin.def | 4 ++ 11 files changed, 297 insertions(+), 2 deletions(-) create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/pom.xml create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java create mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index 4b81d1d8c..dba83ca90 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -64,6 +64,9 @@ net.bytebuddy ${shade.package}.${shade.net.bytebuddy.source} + + ${project.build.directory}${sdk.plugin.related.dir}/../../../../packages/skywalking-agent + ${agent.package.dest.dir}/plugins @@ -167,10 +170,10 @@ + dir="${plugin.dest.dir}"/> diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml index 0aa9d4512..71764b541 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml @@ -36,6 +36,7 @@ mvc-annotation-3.x-plugin core-patch mvc-annotation-commons + spring-annotation-plugin pom diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md new file mode 100644 index 000000000..6cf0c4c1f --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md @@ -0,0 +1,18 @@ +# Spring Annotation Plugin (Optional) + +Date: 2018/01/24 + +## Purpose +Because of multiple project are used + +Spring annotation plugin is an Optional plugin, the plugin +and if you want to active the plugin, you should move the plugin jar to the plugins folder. +The plugin will intercept all public method in the classs annotation with the following annotation. +1. `@Bean` +2. `@Service` +3. `@Componet` +4. `@Repository` + +## Purpose + + diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/pom.xml new file mode 100644 index 000000000..df46249b9 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/pom.xml @@ -0,0 +1,44 @@ + + + + + + spring-plugins + org.apache.skywalking + 5.0.0-alpha + + 4.0.0 + + apm-spring-annotation-plugin + + + ${agent.package.dest.dir}/optional-plugins + + + + + org.springframework + spring-context + 3.2.0.RELEASE + provided + + + \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java new file mode 100644 index 000000000..1bee08a51 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.plugin.spring.annotations; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; + +import static net.bytebuddy.matcher.ElementMatchers.isPublic; + +public abstract class AbstractSpringBeanInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.spring.annotations.SpringAnnotationInterceptor"; + + @Override protected final ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override protected final InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return isPublic(); + } + + @Override public String getMethodsInterceptor() { + return INTERCEPTOR_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java new file mode 100644 index 000000000..ad66e1d21 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.plugin.spring.annotations; + +import java.lang.reflect.Method; +import org.apache.skywalking.apm.agent.core.context.ContextManager; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; + +public class SpringAnnotationInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + MethodInterceptResult result) throws Throwable { + String operationName = objInst.getClass().getName() + "." + method.getName(); + ContextManager.createLocalSpan(operationName); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + Object ret) throws Throwable { + ContextManager.stopSpan(); + return ret; + } + + @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + ContextManager.activeSpan().errorOccurred().log(t); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java new file mode 100644 index 000000000..366e3c55e --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.plugin.spring.annotations.bean; + +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.plugin.spring.annotations.AbstractSpringBeanInstrumentation; + +import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.byClassAnnotationMatch; + +/** + * + */ +public class SpringBeanInstrumentation extends AbstractSpringBeanInstrumentation { + + @Override protected ClassMatch enhanceClass() { + return byClassAnnotationMatch(new String[] {"org.springframework.context.annotation.Bean"}); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java new file mode 100644 index 000000000..e65a98d25 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.plugin.spring.annotations.component; + +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.plugin.spring.annotations.AbstractSpringBeanInstrumentation; + +import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.byClassAnnotationMatch; + +public class SpringComponentInstrumentation extends AbstractSpringBeanInstrumentation { + + @Override protected ClassMatch enhanceClass() { + return byClassAnnotationMatch(new String[] {"org.springframework.stereotype.Component"}); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java new file mode 100644 index 000000000..c97c32656 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.plugin.spring.annotations.repository; + +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.plugin.spring.annotations.AbstractSpringBeanInstrumentation; + +import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.byClassAnnotationMatch; + +public class SpringRepositoryInstrumentation extends AbstractSpringBeanInstrumentation { + @Override protected ClassMatch enhanceClass() { + return byClassAnnotationMatch(new String[] {"org.springframework.stereotype.Repository"}); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java new file mode 100644 index 000000000..b38bfcb50 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.plugin.spring.annotations.services; + +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import org.apache.skywalking.apm.plugin.spring.annotations.AbstractSpringBeanInstrumentation; + +import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.byClassAnnotationMatch; + +public class SpringServicesInstrumentation extends AbstractSpringBeanInstrumentation { + + @Override protected ClassMatch enhanceClass() { + return byClassAnnotationMatch(new String[] {"org.springframework.stereotype.Service"}); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def new file mode 100644 index 000000000..e69e32aa2 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def @@ -0,0 +1,4 @@ +spring-annotation=org.apache.skywalking.apm.plugin.spring.annotations.bean.SpringBeanInstrumentation +spring-annotation=org.apache.skywalking.apm.plugin.spring.annotations.component.SpringComponentInstrumentation +spring-annotation=org.apache.skywalking.apm.plugin.spring.annotations.repository.SpringRepositoryInstrumentation +spring-annotation=org.apache.skywalking.apm.plugin.spring.annotations.services.SpringServicesInstrumentation From 44e966526219bf88f8f4176b7cc9061e1adf252b Mon Sep 17 00:00:00 2001 From: ascrutae Date: Fri, 26 Jan 2018 18:55:19 +0800 Subject: [PATCH 2/4] [Agent] modify the method matcher of spring bean --- .../spring-annotation-plugin/README.md | 18 ------------------ .../AbstractSpringBeanInstrumentation.java | 5 ++++- 2 files changed, 4 insertions(+), 19 deletions(-) delete mode 100644 apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md deleted file mode 100644 index 6cf0c4c1f..000000000 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Spring Annotation Plugin (Optional) - -Date: 2018/01/24 - -## Purpose -Because of multiple project are used - -Spring annotation plugin is an Optional plugin, the plugin -and if you want to active the plugin, you should move the plugin jar to the plugins folder. -The plugin will intercept all public method in the classs annotation with the following annotation. -1. `@Bean` -2. `@Service` -3. `@Componet` -4. `@Repository` - -## Purpose - - diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java index 1bee08a51..fd769f8fd 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java @@ -24,7 +24,10 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy; import static net.bytebuddy.matcher.ElementMatchers.isPublic; +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.not; public abstract class AbstractSpringBeanInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.spring.annotations.SpringAnnotationInterceptor"; @@ -37,7 +40,7 @@ public abstract class AbstractSpringBeanInstrumentation extends ClassInstanceMet return new InstanceMethodsInterceptPoint[] { new InstanceMethodsInterceptPoint() { @Override public ElementMatcher getMethodsMatcher() { - return isPublic(); + return isPublic().and(not(isDeclaredBy(Object.class)).and(not(named("getSkyWalkingDynamicField"))).and(not(named("setSkyWalkingDynamicField")))); } @Override public String getMethodsInterceptor() { From c300e85d9cff885782eb05eabd7b74278f49649f Mon Sep 17 00:00:00 2001 From: ascrutae Date: Sat, 27 Jan 2018 12:05:01 +0800 Subject: [PATCH 3/4] Change the file structure of spring bean plugin --- .../apm-sdk-plugin/spring-plugins/pom.xml | 1 - .../optional-spring-plugins/pom.xml | 40 ++++++ .../spring-annotation-plugin/pom.xml | 7 +- .../AbstractSpringBeanInstrumentation.java | 0 .../SpringAnnotationInterceptor.java | 0 .../bean/SpringBeanInstrumentation.java | 0 .../SpringComponentInstrumentation.java | 0 .../SpringRepositoryInstrumentation.java | 0 .../SpringServicesInstrumentation.java | 0 .../src/main/resources/skywalking-plugin.def | 0 apm-sniffer/optional-plugins/pom.xml | 114 ++++++++++++++++++ apm-sniffer/pom.xml | 1 + 12 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/pom.xml (89%) rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java (100%) rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java (100%) rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java (100%) rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java (100%) rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java (100%) rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java (100%) rename apm-sniffer/{apm-sdk-plugin/spring-plugins => optional-plugins/optional-spring-plugins}/spring-annotation-plugin/src/main/resources/skywalking-plugin.def (100%) create mode 100644 apm-sniffer/optional-plugins/pom.xml diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml index 71764b541..0aa9d4512 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml @@ -36,7 +36,6 @@ mvc-annotation-3.x-plugin core-patch mvc-annotation-commons - spring-annotation-plugin pom diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml b/apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml new file mode 100644 index 000000000..e3b38f27c --- /dev/null +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml @@ -0,0 +1,40 @@ + + + + + + optional-plugins + org.apache.skywalking + 5.0.0-alpha + + 4.0.0 + pom + + optional-spring-plugins + + ${project.build.directory}/../../../../../packages/skywalking-agent/optional-plugins + + + + spring-annotation-plugin + + + \ No newline at end of file diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/pom.xml b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml similarity index 89% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/pom.xml rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml index df46249b9..03413fc0b 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/pom.xml +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml @@ -21,18 +21,15 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - spring-plugins + optional-spring-plugins org.apache.skywalking 5.0.0-alpha 4.0.0 + jar apm-spring-annotation-plugin - - ${agent.package.dest.dir}/optional-plugins - - org.springframework diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java similarity index 100% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java similarity index 100% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/SpringAnnotationInterceptor.java diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java similarity index 100% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java similarity index 100% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java similarity index 100% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java similarity index 100% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def similarity index 100% rename from apm-sniffer/apm-sdk-plugin/spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def rename to apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/resources/skywalking-plugin.def diff --git a/apm-sniffer/optional-plugins/pom.xml b/apm-sniffer/optional-plugins/pom.xml new file mode 100644 index 000000000..07061b9d6 --- /dev/null +++ b/apm-sniffer/optional-plugins/pom.xml @@ -0,0 +1,114 @@ + + + + + + apm-sniffer + org.apache.skywalking + 5.0.0-alpha + + 4.0.0 + + optional-plugins + pom + + ${project.build.directory}/../../../../packages/skywalking-agent/optional-plugins + + + + optional-spring-plugins + + + + + org.apache.skywalking + apm-agent-core + ${project.version} + provided + + + org.apache.skywalking + apm-util + ${project.version} + provided + + + org.apache.skywalking + apm-test-tools + ${project.version} + test + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + package + + run + + + + + + + + + + + + + + + + + + + ant-contrib + ant-contrib + 1.0b3 + + + ant + ant + + + + + org.apache.ant + ant-nodeps + 1.8.1 + + + + + + + \ No newline at end of file diff --git a/apm-sniffer/pom.xml b/apm-sniffer/pom.xml index 509de67ce..c5a7607c0 100644 --- a/apm-sniffer/pom.xml +++ b/apm-sniffer/pom.xml @@ -36,6 +36,7 @@ apm-sdk-plugin apm-toolkit-activation apm-test-tools + optional-plugins From a5e37108afc2ad8cfcf5fd79ac2f38ca070891d6 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Sun, 28 Jan 2018 14:48:56 +0800 Subject: [PATCH 4/4] refactory code --- .../annotations/AbstractSpringBeanInstrumentation.java | 4 +++- .../spring/annotations/bean/SpringBeanInstrumentation.java | 4 +++- .../component/SpringComponentInstrumentation.java | 4 +++- .../repository/SpringRepositoryInstrumentation.java | 5 ++++- .../annotations/services/SpringServicesInstrumentation.java | 4 +++- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java index fd769f8fd..961eab6cb 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/AbstractSpringBeanInstrumentation.java @@ -31,6 +31,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not; public abstract class AbstractSpringBeanInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { private static final String INTERCEPTOR_CLASS = "org.apache.skywalking.apm.plugin.spring.annotations.SpringAnnotationInterceptor"; + public static final String INTERCEPT_GET_SKYWALKING_DYNAMIC_FIELD_METHOD = "getSkyWalkingDynamicField"; + public static final String INTERCEPT_SET_SKYWALKING_DYNAMIC_FEILD_METHOD = "setSkyWalkingDynamicField"; @Override protected final ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[0]; @@ -40,7 +42,7 @@ public abstract class AbstractSpringBeanInstrumentation extends ClassInstanceMet return new InstanceMethodsInterceptPoint[] { new InstanceMethodsInterceptPoint() { @Override public ElementMatcher getMethodsMatcher() { - return isPublic().and(not(isDeclaredBy(Object.class)).and(not(named("getSkyWalkingDynamicField"))).and(not(named("setSkyWalkingDynamicField")))); + return isPublic().and(not(isDeclaredBy(Object.class)).and(not(named(INTERCEPT_GET_SKYWALKING_DYNAMIC_FIELD_METHOD))).and(not(named(INTERCEPT_SET_SKYWALKING_DYNAMIC_FEILD_METHOD)))); } @Override public String getMethodsInterceptor() { diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java index 366e3c55e..8aa5b2277 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/bean/SpringBeanInstrumentation.java @@ -28,7 +28,9 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationM */ public class SpringBeanInstrumentation extends AbstractSpringBeanInstrumentation { + public static final String ENHANCE_ANNOTATION = "org.springframework.context.annotation.Bean"; + @Override protected ClassMatch enhanceClass() { - return byClassAnnotationMatch(new String[] {"org.springframework.context.annotation.Bean"}); + return byClassAnnotationMatch(new String[] {ENHANCE_ANNOTATION}); } } diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java index e65a98d25..eac6bb0c4 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/component/SpringComponentInstrumentation.java @@ -25,7 +25,9 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationM public class SpringComponentInstrumentation extends AbstractSpringBeanInstrumentation { + public static final String ENHANCE_ANNOTATION = "org.springframework.stereotype.Component"; + @Override protected ClassMatch enhanceClass() { - return byClassAnnotationMatch(new String[] {"org.springframework.stereotype.Component"}); + return byClassAnnotationMatch(new String[] {ENHANCE_ANNOTATION}); } } diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java index c97c32656..d91637e0e 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/repository/SpringRepositoryInstrumentation.java @@ -24,7 +24,10 @@ import org.apache.skywalking.apm.plugin.spring.annotations.AbstractSpringBeanIns import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch.byClassAnnotationMatch; public class SpringRepositoryInstrumentation extends AbstractSpringBeanInstrumentation { + + public static final String ENHANCE_ANNOTATION = "org.springframework.stereotype.Repository"; + @Override protected ClassMatch enhanceClass() { - return byClassAnnotationMatch(new String[] {"org.springframework.stereotype.Repository"}); + return byClassAnnotationMatch(new String[] {ENHANCE_ANNOTATION}); } } diff --git a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java index b38bfcb50..759097ab3 100644 --- a/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java +++ b/apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/annotations/services/SpringServicesInstrumentation.java @@ -25,7 +25,9 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationM public class SpringServicesInstrumentation extends AbstractSpringBeanInstrumentation { + public static final String ENHANCE_ANNOTATION = "org.springframework.stereotype.Service"; + @Override protected ClassMatch enhanceClass() { - return byClassAnnotationMatch(new String[] {"org.springframework.stereotype.Service"}); + return byClassAnnotationMatch(new String[] {ENHANCE_ANNOTATION}); } }