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 0000000000000000000000000000000000000000..582b5f533f513e71b796ad11f8ac32478dae9334
--- /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 0000000000000000000000000000000000000000..f6963c24d00670a7277b85b359e0f70fae97b8e7
--- /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 0000000000000000000000000000000000000000..e03c011447f238b8d8dd30cd0899c403f7eaff49
--- /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 0000000000000000000000000000000000000000..f70f73083ca6fd3d515778b0d6e2fbffcbd65a60
--- /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 0000000000000000000000000000000000000000..7392f98cf23da03e58659682aa134982121caf0a
--- /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 0000000000000000000000000000000000000000..bc02b1db94034f8b2672155eff2f0fd80dc3df02
--- /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 0000000000000000000000000000000000000000..80a0ffb1266f6cafc01072cb2c766b6a76442712
--- /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 0000000000000000000000000000000000000000..f844abe11c8d28fb1f515ca9b4ca8612e3541f6e
--- /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 0000000000000000000000000000000000000000..6ef4e4076b263617d597a119590783252760830d
--- /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 0000000000000000000000000000000000000000..dd9d47830294fb8fe55515002b7b20c60538baf4
--- /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 0000000000000000000000000000000000000000..2a43d850f063daac7a7ed1abd7bdee01ed73208f
--- /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 0000000000000000000000000000000000000000..214befe0f0e27bbe60e49ee3f29cc8c508254ef8
--- /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 0000000000000000000000000000000000000000..ce8d169bce12563e0c5ce50739e6443194a64ef0
--- /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 0000000000000000000000000000000000000000..918d8873b21bebf333e3de6fe0814004cef607eb
--- /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 0000000000000000000000000000000000000000..9acc916df09bade6267c76866a5bf3afff12d73c
--- /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 0000000000000000000000000000000000000000..cecbd2ea43ef1e4c03f470365f0e7341881c8474
--- /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 5b169089d8ef182efb22768c5545b3096f508099..24c360ace84942b3d689179d8a70446224cf2c34 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 29f823c6dcf2628554e691a7d7249f3e71c5d68b..0dbd2a1dbf76f7583aa6b16e552981b160485ca4 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 5c3315bdf91516c5857a81f792f0fc2f124a6e58..8c69fe4ba2c3797d18c331524ac366c9e9a1237c 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);