diff --git a/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml
new file mode 100644
index 000000000..582b5f533
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ apm-collector-cluster
+ org.skywalking
+ 3.2.3-2017
+
+ 4.0.0
+
+ collector-cluster-define
+ jar
+
+
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/java/org/skywalking/apm/collector/cluster/ClusterModule.java b/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/java/org/skywalking/apm/collector/cluster/ClusterModule.java
new file mode 100644
index 000000000..f6963c24d
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/java/org/skywalking/apm/collector/cluster/ClusterModule.java
@@ -0,0 +1,36 @@
+/*
+ * 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.collector.cluster;
+
+import org.skywalking.apm.collector.core.module.Module;
+import org.skywalking.apm.collector.core.module.Service;
+
+/**
+ * @author peng-yongsheng
+ */
+public class ClusterModule extends Module {
+
+ @Override public String name() {
+ return "Cluster";
+ }
+
+ @Override public Class extends Service>[] services() {
+ return new Class[0];
+ }
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/java/org/skywalking/apm/collector/cluster/service/ModuleRegisterService.java b/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/java/org/skywalking/apm/collector/cluster/service/ModuleRegisterService.java
new file mode 100644
index 000000000..e03c01144
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/java/org/skywalking/apm/collector/cluster/service/ModuleRegisterService.java
@@ -0,0 +1,27 @@
+/*
+ * 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.collector.cluster.service;
+
+import org.skywalking.apm.collector.core.module.Service;
+
+/**
+ * @author peng-yongsheng
+ */
+public interface ModuleRegisterService extends Service {
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.Module b/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.Module
new file mode 100644
index 000000000..f70f73083
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-define/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.Module
@@ -0,0 +1,19 @@
+#
+# 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
+#
+
+org.skywalking.apm.collector.cluster.ClusterModule
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml
new file mode 100644
index 000000000..7392f98cf
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+ apm-collector-cluster
+ org.skywalking
+ 3.2.3-2017
+
+ 4.0.0
+
+ collector-cluster-redis-provider
+ jar
+
+
+
+ org.skywalking
+ collector-cluster-define
+ ${project.version}
+
+
+
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterModuleRedisProvider.java b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterModuleRedisProvider.java
new file mode 100644
index 000000000..bc02b1db9
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterModuleRedisProvider.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.collector.cluster.redis;
+
+import java.util.Properties;
+import org.skywalking.apm.collector.cluster.ClusterModule;
+import org.skywalking.apm.collector.cluster.redis.service.RedisModuleRegisterService;
+import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
+import org.skywalking.apm.collector.core.module.Module;
+import org.skywalking.apm.collector.core.module.ModuleProvider;
+import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
+
+/**
+ * @author peng-yongsheng
+ */
+public class ClusterModuleRedisProvider extends ModuleProvider {
+
+ @Override public String name() {
+ return "redis";
+ }
+
+ @Override public Class extends Module> module() {
+ return ClusterModule.class;
+ }
+
+ @Override public void prepare(Properties config) throws ServiceNotProvidedException {
+ this.registerServiceImplementation(ModuleRegisterService.class, new RedisModuleRegisterService());
+ }
+
+ @Override public void init(Properties config) throws ServiceNotProvidedException {
+
+ }
+
+ @Override public String[] requiredModules() {
+ return new String[0];
+ }
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/java/org/skywalking/apm/collector/cluster/redis/service/RedisModuleRegisterService.java b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/java/org/skywalking/apm/collector/cluster/redis/service/RedisModuleRegisterService.java
new file mode 100644
index 000000000..80a0ffb12
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/java/org/skywalking/apm/collector/cluster/redis/service/RedisModuleRegisterService.java
@@ -0,0 +1,27 @@
+/*
+ * 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.collector.cluster.redis.service;
+
+import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
+
+/**
+ * @author peng-yongsheng
+ */
+public class RedisModuleRegisterService implements ModuleRegisterService {
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider
new file mode 100644
index 000000000..f844abe11
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider
@@ -0,0 +1,19 @@
+#
+# 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
+#
+
+org.skywalking.apm.collector.cluster.redis.ClusterModuleRedisProvider
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml
new file mode 100644
index 000000000..6ef4e4076
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+ apm-collector-cluster
+ org.skywalking
+ 3.2.3-2017
+
+ 4.0.0
+
+ collector-cluster-standalone-provider
+ jar
+
+
+
+ org.skywalking
+ collector-cluster-define
+ ${project.version}
+
+
+
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterModuleStandaloneProvider.java b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterModuleStandaloneProvider.java
new file mode 100644
index 000000000..dd9d47830
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterModuleStandaloneProvider.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.collector.cluster.standalone;
+
+import java.util.Properties;
+import org.skywalking.apm.collector.cluster.ClusterModule;
+import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
+import org.skywalking.apm.collector.cluster.standalone.service.StandaloneModuleRegisterService;
+import org.skywalking.apm.collector.core.module.Module;
+import org.skywalking.apm.collector.core.module.ModuleProvider;
+import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
+
+/**
+ * @author peng-yongsheng
+ */
+public class ClusterModuleStandaloneProvider extends ModuleProvider {
+
+ @Override public String name() {
+ return "standalone";
+ }
+
+ @Override public Class extends Module> module() {
+ return ClusterModule.class;
+ }
+
+ @Override public void prepare(Properties config) throws ServiceNotProvidedException {
+ this.registerServiceImplementation(ModuleRegisterService.class, new StandaloneModuleRegisterService());
+ }
+
+ @Override public void init(Properties config) throws ServiceNotProvidedException {
+
+ }
+
+ @Override public String[] requiredModules() {
+ return new String[0];
+ }
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/java/org/skywalking/apm/collector/cluster/standalone/service/StandaloneModuleRegisterService.java b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/java/org/skywalking/apm/collector/cluster/standalone/service/StandaloneModuleRegisterService.java
new file mode 100644
index 000000000..2a43d850f
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/java/org/skywalking/apm/collector/cluster/standalone/service/StandaloneModuleRegisterService.java
@@ -0,0 +1,27 @@
+/*
+ * 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.collector.cluster.standalone.service;
+
+import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
+
+/**
+ * @author peng-yongsheng
+ */
+public class StandaloneModuleRegisterService implements ModuleRegisterService {
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider
new file mode 100644
index 000000000..214befe0f
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider
@@ -0,0 +1,19 @@
+#
+# 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
+#
+
+org.skywalking.apm.collector.cluster.standalone.ClusterModuleStandaloneProvider
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml
new file mode 100644
index 000000000..ce8d169bc
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+ apm-collector-cluster
+ org.skywalking
+ 3.2.3-2017
+
+ 4.0.0
+
+ collector-cluster-zookeeper-provider
+ jar
+
+
+
+ org.skywalking
+ collector-cluster-define
+ ${project.version}
+
+
+
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterModuleZKProvider.java b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterModuleZKProvider.java
new file mode 100644
index 000000000..918d8873b
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterModuleZKProvider.java
@@ -0,0 +1,54 @@
+/*
+ * 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.collector.cluster.zookeeper;
+
+import java.util.Properties;
+import org.skywalking.apm.collector.cluster.ClusterModule;
+import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
+import org.skywalking.apm.collector.cluster.zookeeper.service.ZKModuleRegisterService;
+import org.skywalking.apm.collector.core.module.Module;
+import org.skywalking.apm.collector.core.module.ModuleProvider;
+import org.skywalking.apm.collector.core.module.ServiceNotProvidedException;
+
+/**
+ * @author peng-yongsheng
+ */
+public class ClusterModuleZKProvider extends ModuleProvider {
+
+ @Override public String name() {
+ return "zookeeper";
+ }
+
+ @Override public Class extends Module> module() {
+ return ClusterModule.class;
+ }
+
+ @Override public void prepare(Properties config) throws ServiceNotProvidedException {
+ this.registerServiceImplementation(ModuleRegisterService.class, new ZKModuleRegisterService());
+ }
+
+ @Override public void init(Properties config) throws ServiceNotProvidedException {
+
+ }
+
+ @Override public String[] requiredModules() {
+ return new String[0];
+ }
+
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/service/ZKModuleRegisterService.java b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/service/ZKModuleRegisterService.java
new file mode 100644
index 000000000..9acc916df
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/service/ZKModuleRegisterService.java
@@ -0,0 +1,27 @@
+/*
+ * 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.collector.cluster.zookeeper.service;
+
+import org.skywalking.apm.collector.cluster.service.ModuleRegisterService;
+
+/**
+ * @author peng-yongsheng
+ */
+public class ZKModuleRegisterService implements ModuleRegisterService {
+}
diff --git a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider
new file mode 100644
index 000000000..cecbd2ea4
--- /dev/null
+++ b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/src/main/resources/META-INF/services/org.skywalking.apm.collector.core.module.ModuleProvider
@@ -0,0 +1,19 @@
+#
+# 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
+#
+
+org.skywalking.apm.collector.cluster.zookeeper.ClusterModuleZKProvider
\ No newline at end of file
diff --git a/apm-collector/apm-collector-cluster/pom.xml b/apm-collector/apm-collector-cluster/pom.xml
index 5b169089d..24c360ace 100644
--- a/apm-collector/apm-collector-cluster/pom.xml
+++ b/apm-collector/apm-collector-cluster/pom.xml
@@ -10,6 +10,19 @@
4.0.0
apm-collector-cluster
- jar
+ pom
+
+ collector-cluster-define
+ collector-cluster-zookeeper-provider
+ collector-cluster-redis-provider
+ collector-cluster-standalone-provider
+
+
+
+ org.skywalking
+ apm-collector-core
+ ${project.version}
+
+
\ No newline at end of file
diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java
index 29f823c6d..0dbd2a1db 100644
--- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java
+++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java
@@ -25,7 +25,7 @@ import java.util.ServiceLoader;
/**
* A module definition.
*
- * @author wu-sheng
+ * @author wu-sheng, peng-yongsheng
*/
public abstract class Module {
private LinkedList loadedProviders = new LinkedList<>();
@@ -97,7 +97,7 @@ public abstract class Module {
/**
* @return providers of this module
*/
- public List providers() throws ProviderNotFoundException {
+ public final List providers() throws ProviderNotFoundException {
if (loadedProviders.size() == 0) {
throw new ProviderNotFoundException("no provider exists.");
}
@@ -105,7 +105,7 @@ public abstract class Module {
return loadedProviders;
}
- public ModuleProvider provider() throws ProviderNotFoundException, DuplicateProviderException {
+ public final ModuleProvider provider() throws ProviderNotFoundException, DuplicateProviderException {
if (loadedProviders.size() == 0) {
throw new ProviderNotFoundException("no provider exists.");
} else if (loadedProviders.size() > 1) {
diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java
index 5c3315bdf..8c69fe4ba 100644
--- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java
+++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java
@@ -27,7 +27,7 @@ import java.util.Properties;
*
* And each module can have one or more implementation, which depends on `application.yml`
*
- * @author wu-sheng
+ * @author wu-sheng, peng-yongsheng
*/
public abstract class ModuleProvider {
protected ModuleManager manager;
@@ -80,7 +80,7 @@ public abstract class ModuleProvider {
* @param serviceType
* @param service
*/
- protected void registerServiceImplementation(Class extends Service> serviceType,
+ protected final void registerServiceImplementation(Class extends Service> serviceType,
Service service) throws ServiceNotProvidedException {
if (serviceType.isInstance(service)) {
this.services.put(serviceType, service);