diff --git a/README.md b/README.md
index 31e607ea98854cd307db78455d0c0a5231694bf7..4943df3139c60035e8563a25d1ce823d6af6ef72 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@ Sky Walking | [中文](README_ZH.md)
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com.
# Screenshots
-- Topological graph of application clusters based on dubbox and [motan](https://github.com/weibocom/motan).
+- Discovery topological graph of application clusters automatically.
- Trace query.
diff --git a/README_ZH.md b/README_ZH.md
index f5b9c8c25bed2a2eb6e5503a852c7386b6826bea..3d92f9357076c292001320b10ec3464a0a99e60f 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -19,7 +19,7 @@ Sky Walking | [English](README.md)
* 使用 [**@Trace**](docs/cn/Application-toolkit-trace-CN.md) 标注追踪业务方法
* 将 traceId 集成到 log4j, log4j2 或 logback这些日志组件中
* 纯Java后端Collector实现,提供RESTful和gRPC接口。兼容接受其他语言探针发送数据
- * [如何将探针的Metric和Trace数据上传到Collector?]()
+ * [如何将探针的Metric和Trace数据上传到Collector?](/docs/cn/How-to-communicate-with-the-collector-CN.md)
* UI工程请查看 [skywalking-ui](https://github.com/OpenSkywalking/skywalking-ui)
* 中文QQ群:392443393
@@ -33,7 +33,7 @@ Sky Walking | [English](README.md)
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com.
# Screenshots
-- 追踪基于 dubbox 和 [motan](https://github.com/weibocom/motan)的分布式系统,生成的拓扑截图
+- 分布式系统拓扑图自动发现
- 调用链查询
diff --git a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml
index 0435f8150704f23214a858ce6be536672cab776b..1da25be4177634df713cf14932729d0f33d19359 100644
--- a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml
@@ -49,6 +49,7 @@
attach-sources
+ none
jar
diff --git a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml
index 6905c72800548ae85a163d12dcd18d318819606b..86e16fa3be2c6822d28373320c392490a6d40e81 100644
--- a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml
@@ -49,6 +49,7 @@
attach-sources
+ none
jar
diff --git a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml
index d12c15ff04c8e017162c537dd2ec48a4ac4cb5a2..94da54eb3a945c5467c1c8430ed57cb667cd6939 100644
--- a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml
@@ -49,6 +49,7 @@
attach-sources
+ none
jar
diff --git a/apm-application-toolkit/apm-toolkit-trace/pom.xml b/apm-application-toolkit/apm-toolkit-trace/pom.xml
index 6750bfbac61fcba66e90314ff024e943ec5002f4..024864a3e90d2ace2ac62ed23f53a91ebabe0455 100644
--- a/apm-application-toolkit/apm-toolkit-trace/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-trace/pom.xml
@@ -41,6 +41,7 @@
attach-sources
+ none
jar
diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java
index 9cd994750c920ea76ad949aa6d98cd9c59404f7c..63a5ba5f3d2ba2dc1ad032f75f7d57bc411d91e1 100644
--- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java
+++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java
@@ -103,10 +103,12 @@ public class BootstrapFlow {
if (isAllRequiredModuleStarted) {
startupSequence.add(provider);
allProviders.remove(i);
+ i--;
}
} else {
startupSequence.add(provider);
allProviders.remove(i);
+ i--;
}
}
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml
index f044205a5aa271a70f59570eec08876a843fe8e1..b7596e805053be2982785835c1e9d7985e470db8 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml
@@ -148,6 +148,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml
index 3193c551a6ec326d81660b5a50cb15d2bd27ef05..d8930b18ef359118afd7a1da75e7bbbd5c74fd78 100755
--- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml
@@ -64,6 +64,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml
index 23f52cdf623a3428d5509b14b053d0a3ea004b6b..bb30f7e7c2554f37fb84321a27a4e524362afc9c 100755
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml
@@ -58,6 +58,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
index 9f095c83cb3bcd7a4564acd337dc06d23a41908a..fc9c7519a0ca7581e1de01336856a611ffdfc091 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
@@ -60,6 +60,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml
index 8b89fe45171c4fb1839c3a5e01d6a0a0a8a2d2e7..a5a4bf6c7f9d54f1744417f4a984eee3fa32df2c 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml
@@ -54,6 +54,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml
index 4ee21d5037c7c118675c8279d2028b95afb0db47..ef20bcc362d95b7991ac54742bacf9c626431df3 100755
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml
@@ -70,6 +70,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml
index 9948a73dcb984e0901083e5bdbffec7f96f5b0d7..b3a766b9b94442bad97d281dd1ce32f86a518d8a 100755
--- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml
@@ -64,6 +64,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml
index 83f20f735e9edf1c14c3deba4987f62826ee07aa..32bb38fba3e24ec5ffde34acc96743cd0eff119b 100644
--- a/apm-sniffer/apm-sdk-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/pom.xml
@@ -143,6 +143,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml
index ce4c3a4ee483d46d628de354a0a13289e8001b63..afb53be0afc6554d3310938570241a3dcc976d9c 100755
--- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml
@@ -64,6 +64,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml
index 5a5bcba1f778e3231f5dabed7482c4e49b617984..27c229d943af4a070b4554822386244e3a2a89de 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml
@@ -63,6 +63,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml
index 7977f3c2ae6305175c57b065c88e100386d0e4ee..6b96dd0dd8df83a4c547f7ab6b70fea30e464492 100644
--- a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml
@@ -63,6 +63,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml
index a1a31447eaf57382d967b49451b0dc70527cc4b8..0694f35b788ad59d466f3fcf7920d8fc9c0a3523 100644
--- a/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml
@@ -66,6 +66,7 @@
attach-sources
+ none
jar
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..52dd64a32e3009915c7d6efb798f076ad83178ca
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/HandlerMethodInvokerInterceptor.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed 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.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.spring.mvc.v3;
+
+import java.lang.reflect.Method;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.springframework.web.context.request.NativeWebRequest;
+
+/**
+ * {@link HandlerMethodInvokerInterceptor} pass the {@link NativeWebRequest} object into the {@link
+ * org.springframework.stereotype.Controller} object.
+ *
+ * @author zhangxin
+ */
+public class HandlerMethodInvokerInterceptor implements InstanceMethodsAroundInterceptor {
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ Object handler = allArguments[1];
+ if (handler instanceof EnhancedInstance) {
+ ((EnhanceRequireObjectCache)((EnhancedInstance)handler).getSkyWalkingDynamicField()).setNativeWebRequest((NativeWebRequest)allArguments[2]);
+ }
+ }
+
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class>[] argumentsTypes,
+ Object ret) throws Throwable {
+ return ret;
+ }
+
+ @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+ Class>[] argumentsTypes, Throwable t) {
+
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/HandlerMethodInvokerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/HandlerMethodInvokerInstrumentation.java
new file mode 100644
index 0000000000000000000000000000000000000000..b708c4c6d35ea8adeb3618a9808f5a0eb546d150
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/v3/define/HandlerMethodInvokerInstrumentation.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2017, OpenSkywalking Organization All rights reserved.
+ *
+ * Licensed 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.
+ *
+ * Project repository: https://github.com/OpenSkywalking/skywalking
+ */
+
+package org.skywalking.apm.plugin.spring.mvc.v3.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+/**
+ * {@link HandlerMethodInvokerInstrumentation} intercept the invokeHandlerMethod
method in the
+ * org.springframework.web.bind.annotation.support.HandlerMethodInvoker
class.
+ *
+ * @author zhangxin
+ */
+public class HandlerMethodInvokerInstrumentation extends AbstractSpring3Instrumentation {
+ private static final String ENHANCE_CLASS = "org.springframework.web.bind.annotation.support.HandlerMethodInvoker";
+ private static final String ENHANCE_METHOD = "invokeHandlerMethod";
+ private static final String INTERCEPTOR_CLASS = "org.skywalking.apm.plugin.spring.mvc.v3.HandlerMethodInvokerInterceptor";
+
+ @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[0];
+ }
+
+ @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[] {
+ new InstanceMethodsInterceptPoint() {
+ @Override public ElementMatcher getMethodsMatcher() {
+ return named(ENHANCE_METHOD);
+ }
+
+ @Override public String getMethodsInterceptor() {
+ return INTERCEPTOR_CLASS;
+ }
+
+ @Override public boolean isOverrideArgs() {
+ return false;
+ }
+ }
+ };
+ }
+
+ @Override protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/resources/skywalking-plugin.def
index 86b7b7658a7a956232728aece5e2629b3aebd6b4..8f4010b67f00309aa26478164bb3a4497c4b2720 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/resources/skywalking-plugin.def
@@ -1,3 +1,4 @@
spring-mvc-annotation-3.x=org.skywalking.apm.plugin.spring.mvc.v3.define.ControllerInstrumentation
spring-mvc-annotation-3.x=org.skywalking.apm.plugin.spring.mvc.v3.define.HandlerMethodInstrumentation
spring-mvc-annotation-3.x=org.skywalking.apm.plugin.spring.mvc.v3.define.InvocableHandlerInstrumentation
+spring-mvc-annotation-3.x=org.skywalking.apm.plugin.spring.mvc.v3.define.HandlerMethodInvokerInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml
index d832876eb653a3113b28dd3ce1452b4d8b04b7a6..cd10153180fd984e445e3f8fd4068de76b63ed3d 100644
--- a/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml
@@ -65,6 +65,7 @@
attach-sources
+ none
jar
diff --git a/pom.xml b/pom.xml
index 1f92cfceb9e2f48d6f7c5f156310e624977733d1..da91cc79bf7fa567b045a275c74630bdebd2e431 100644
--- a/pom.xml
+++ b/pom.xml
@@ -252,6 +252,7 @@
attach-sources
+ none
jar