diff --git a/dubbo-registry-admin/pom.xml b/dubbo-registry-admin/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..23b21358d8be2b5578ddd5b6a97d4b0cee2a42d7
--- /dev/null
+++ b/dubbo-registry-admin/pom.xml
@@ -0,0 +1,43 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.9-SNAPSHOT
+
+ dubbo-registry-admin
+ jar
+ Dubbo Registry Admin Module
+ The registry admin module of dubbo project
+
+ true
+
+
+
+ com.alibaba
+ dubbo-registry
+ ${project.parent.version}
+
+
+ com.alibaba
+ dubbo-container
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/dubbo-registry-admin/src/assembly/assembly.xml b/dubbo-registry-admin/src/assembly/assembly.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9b2629fdef8c4327fa06896c68de84494cde6b39
--- /dev/null
+++ b/dubbo-registry-admin/src/assembly/assembly.xml
@@ -0,0 +1,19 @@
+
+ dist
+
+ tar.gz
+
+ true
+
+
+ src/main/assembly/bin
+ bin
+ 0755
+
+
+
+
+ lib
+
+
+
\ No newline at end of file
diff --git a/dubbo-registry-admin/src/assembly/bin/restart.sh b/dubbo-registry-admin/src/assembly/bin/restart.sh
new file mode 100644
index 0000000000000000000000000000000000000000..647ec1951954d7340d804c5caf2b2e692839ba1e
--- /dev/null
+++ b/dubbo-registry-admin/src/assembly/bin/restart.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+cd `dirname $0`
+./stop.sh
+./start.sh
diff --git a/dubbo-registry-admin/src/assembly/bin/start.sh b/dubbo-registry-admin/src/assembly/bin/start.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9dd460e0a377e50559c56237c89be0a194cf16d3
--- /dev/null
+++ b/dubbo-registry-admin/src/assembly/bin/start.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+cd `dirname $0`
+BIN_DIR=`pwd`
+cd ..
+DEPLOY_DIR=`pwd`
+
+LIB_DIR=$DEPLOY_DIR/lib
+LOGS_DIR=$DEPLOY_DIR/logs
+STDOUT_FILE=$LOGS_DIR/stdout.log
+SERVER_PORT=$1
+
+if [ ! -d $LOGS_DIR ]; then
+ mkdir $LOGS_DIR
+fi
+
+if [ -z "$SERVER_PORT" ]; then
+ SERVER_PORT=8080
+fi
+
+SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
+if [ $SERVER_PORT_COUNT -gt 0 ]; then
+ echo "********************************************************************"
+ echo "** Error: Dubbo registry admin server port $SERVER_PORT already used!"
+ echo "********************************************************************"
+ exit 1
+fi
+
+JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
+JAVA_MEM_OPTS=""
+BITS=`file $JAVA_HOME/bin/java | grep 64-bit`
+if [ -n "$BITS" ]; then
+ let memTotal=`cat /proc/meminfo |grep MemTotal|awk '{printf "%d", $2/1024 }'`
+ if [ $memTotal -gt 2500 ];then
+ JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
+ else
+ JAVA_MEM_OPTS=" -server -Xmx1g -Xms1g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
+ fi
+else
+ JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
+fi
+
+EXIST_PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_DIR" |awk '{print $2}'`
+if [ ! -z "$EXIST_PIDS" ]; then
+ echo "Dubbo registry admin server already started!"
+ echo "PID: $EXIST_PIDS"
+ exit;
+fi
+
+LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"`
+
+echo -e "Starting dubbo registry admin server on $SERVER_PORT \c"
+nohup $JAVA_HOME/bin/java $JAVA_OPTS $JAVA_MEM_OPTS -classpath $LIB_JARS com.alibaba.dubbo.container.Main spring jetty log4j >> $STDOUT_FILE 2>&1 &
+
+COUNT=0
+while [ $COUNT -lt 1 ]; do
+ echo -e ".\c"
+ sleep 1
+ COUNT=`curl -s "http://127.0.0.1:$SERVER_PORT/status" |grep -c "OK"`
+ if [ $COUNT -lt 1 ]; then
+ break
+ fi
+done
+echo "OK!"
+START_PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_DIR" |awk '{print $2}'`
+echo "PID: $START_PIDS"
diff --git a/dubbo-registry-admin/src/assembly/bin/stop.sh b/dubbo-registry-admin/src/assembly/bin/stop.sh
new file mode 100644
index 0000000000000000000000000000000000000000..83db8e9389fca1ad6a7ba8cec14f0e94124dd79d
--- /dev/null
+++ b/dubbo-registry-admin/src/assembly/bin/stop.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+cd `dirname $0`
+BIN_DIR=`pwd`
+cd ..
+DEPLOY_DIR=`pwd`
+
+KILL_PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_DIR" |awk '{print $2}'`
+if [ -z "$KILL_PIDS" ]; then
+ echo "Dubbo registry admin server does not started!"
+ exit 1;
+fi
+
+echo -e "Stopping dubbo registry admin server \c"
+for PID in $KILL_PIDS ; do
+ echo -e "$PID \c"
+ kill $PID > /dev/null 2>&1
+done
+
+COUNT=0
+while [ $COUNT -lt 1 ]; do
+ echo -e ".\c"
+ sleep 1
+ COUNT=1
+ for PID in $KILL_PIDS ; do
+ PID_PS=`ps --no-heading -p $PID`
+ if [ -n "$PID_PS" ]; then
+ COUNT=0
+ break
+ fi
+ done
+done
+echo "OK!"
+echo "PID: $KILL_PIDS"
diff --git a/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/RegistryContainer.java b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/RegistryContainer.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb1d205b58108da6659f3caafa66ccb65c14e053
--- /dev/null
+++ b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/RegistryContainer.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright 1999-2011 Alibaba Group.
+ *
+ * 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.
+ */
+package com.alibaba.dubbo.registry.admin;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.ExtensionLoader;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.logger.Logger;
+import com.alibaba.dubbo.common.logger.LoggerFactory;
+import com.alibaba.dubbo.common.utils.ConcurrentHashSet;
+import com.alibaba.dubbo.container.Container;
+import com.alibaba.dubbo.registry.Registry;
+import com.alibaba.dubbo.registry.RegistryFactory;
+
+/**
+ * RegistryContainer
+ *
+ * @author william.liangf
+ */
+@Extension("registry")
+public class RegistryContainer implements Container {
+
+ private static final Logger logger = LoggerFactory.getLogger(RegistryContainer.class);
+
+ public static final String REGISTRY_URL = "registry.url";
+
+ private final RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
+
+ private final Set services = new ConcurrentHashSet();
+
+ private final Map> providers = new ConcurrentHashMap>();
+
+ private final Map> routes = new ConcurrentHashMap>();
+
+ private Registry registry;
+
+ private static RegistryContainer INSTANCE = null;
+
+ public RegistryContainer() {
+ INSTANCE = this;
+ }
+
+ public static RegistryContainer getInstance() {
+ return INSTANCE;
+ }
+
+ public Registry getRegistry() {
+ return registry;
+ }
+
+ public Set getServices() {
+ return Collections.unmodifiableSet(services);
+ }
+
+ public Map> getProviders() {
+ return Collections.unmodifiableMap(providers);
+ }
+
+ public Map> getRoutes() {
+ return Collections.unmodifiableMap(routes);
+ }
+
+ public List getProviders(String service) {
+ List urls = providers.get(service);
+ return urls == null ? null : Collections.unmodifiableList(urls);
+ }
+
+ public List getRoutes(String service) {
+ List urls = routes.get(service);
+ return urls == null ? null : Collections.unmodifiableList(urls);
+ }
+
+ public void start() {
+ /*String url = System.getProperty(REGISTRY_URL);
+ if (url == null || url.length() == 0) {
+ throw new IllegalArgumentException("Please set java start argument: -D" + REGISTRY_URL + "=zookeeper://127.0.0.1:2181");
+ }
+ URL registryUrl = URL.valueOf(url);
+ registry = registryFactory.getRegistry(registryUrl);
+ URL subscribeUrl = new URL(Constants.SUBSCRIBE_PROTOCOL, NetUtils.getLocalHost(), 0)
+ .addParameters(Constants.INTERFACE_KEY, Constants.ANY_VALUE,
+ Constants.GROUP_KEY, Constants.ANY_VALUE,
+ Constants.VERSION_KEY, Constants.ANY_VALUE);
+ registry.subscribe(subscribeUrl, new NotifyListener() {
+ public void notify(List urls) {
+ if (urls == null || urls.size() == 0) {
+ return;
+ }
+ String service = urls.get(0).getServiceName();
+ services.add(service);
+ List proivderUrls = new ArrayList();
+ List routeUrls = new ArrayList();
+ for (URL url : urls) {
+ if (Constants.ROUTE_PROTOCOL.equals(url.getProtocol())) {
+ routeUrls.add(url);
+ } else {
+ proivderUrls.add(url);
+ }
+ }
+ providers.put(service, proivderUrls);
+ routes.put(service, proivderUrls);
+ }
+ });*/
+ for (int i = 0; i < 5; i ++) {
+ String service = "com.alibaba.foo.BarService" + i;
+ services.add(service);
+
+ List proivderUrls = new ArrayList();
+ for (int j = 0; j < 10; j ++) {
+ proivderUrls.add(URL.valueOf("dubbo://10.20.153." + j + ":20880/" + service));
+ }
+ providers.put(service, proivderUrls);
+
+ List routeUrls = new ArrayList();
+ for (int j = 0; j < 10; j ++) {
+ routeUrls.add(URL.valueOf("registry://127.0.0.1:20880?type=js&rule=aaa" + j));
+ }
+ routes.put(service, routeUrls);
+ }
+
+ }
+
+ public void stop() {
+ try {
+ registry.destroy();
+ } catch (Throwable e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+
+}
diff --git a/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/ProvidersPageHandler.java b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/ProvidersPageHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..61d798bc1613cba4028dee1bd55110125729d263
--- /dev/null
+++ b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/ProvidersPageHandler.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 1999-2011 Alibaba Group.
+ *
+ * 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.
+ */
+package com.alibaba.dubbo.registry.admin.pages;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.container.page.Page;
+import com.alibaba.dubbo.container.page.PageHandler;
+import com.alibaba.dubbo.registry.admin.RegistryContainer;
+
+/**
+ * ProvidersPageHandler
+ *
+ * @author william.liangf
+ */
+@Extension("providers")
+public class ProvidersPageHandler implements PageHandler {
+
+ public Page handle(URL url) {
+ String service = url.getParameter("service");
+ List> rows = new ArrayList>();
+ String nav;
+ if (service != null && service.length() > 0) {
+ List providers = RegistryContainer.getInstance().getProviders(service);
+ if (providers != null && providers.size() > 0) {
+ for (URL provider : providers) {
+ List row = new ArrayList();
+ row.add(provider.toFullString());
+ rows.add(row);
+ }
+ }
+ nav = " > Services > " + service;
+ } else {
+ Collection> values = RegistryContainer.getInstance().getProviders().values();
+ if (values != null && values.size() > 0) {
+ for (List providers : values) {
+ if (providers != null && providers.size() > 0) {
+ for (URL provider : providers) {
+ List row = new ArrayList();
+ row.add(provider.toFullString());
+ rows.add(row);
+ }
+ }
+ }
+ }
+ nav = "";
+ }
+ return new Page("Home" + nav + " > Providers", "Providers (" + rows.size() + ")",
+ new String[] { "Provider URL:" }, rows);
+ }
+
+}
diff --git a/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/RoutesPageHandler.java b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/RoutesPageHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..73e5607b61ec5c58ed43f510179ba05482ae15a6
--- /dev/null
+++ b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/RoutesPageHandler.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 1999-2011 Alibaba Group.
+ *
+ * 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.
+ */
+package com.alibaba.dubbo.registry.admin.pages;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.container.page.Page;
+import com.alibaba.dubbo.container.page.PageHandler;
+import com.alibaba.dubbo.registry.admin.RegistryContainer;
+import com.alibaba.dubbo.rpc.RpcConstants;
+
+/**
+ * RoutesPageHandler
+ *
+ * @author william.liangf
+ */
+@Extension("routes")
+public class RoutesPageHandler implements PageHandler {
+
+ public Page handle(URL url) {
+ String service = url.getParameter("service");
+ List> rows = new ArrayList>();
+ String nav;
+ if (service != null && service.length() > 0) {
+ List routes = RegistryContainer.getInstance().getRoutes(service);
+ if (routes != null && routes.size() > 0) {
+ for (URL route : routes) {
+ List row = new ArrayList();
+ row.add(route.getParameter(RpcConstants.TYPE_KEY));
+ row.add(route.getParameterAndDecoded(RpcConstants.RULE_KEY).replace("<", "lt;").replace(">", "gt;"));
+ rows.add(row);
+ }
+ }
+ nav = " > Services > " + service;
+ } else {
+ Collection> values = RegistryContainer.getInstance().getRoutes().values();
+ if (values != null && values.size() > 0) {
+ for (List routes : values) {
+ if (routes != null && routes.size() > 0) {
+ for (URL route : routes) {
+ List row = new ArrayList();
+ row.add(route.getParameter(RpcConstants.TYPE_KEY));
+ row.add(route.getParameterAndDecoded(RpcConstants.RULE_KEY).replace("<", "lt;").replace(">", "gt;"));
+ rows.add(row);
+ }
+ }
+ }
+ }
+ nav = "";
+ }
+ return new Page("Home" + nav + " > Routes", "Routes (" + rows.size() + ")",
+ new String[] { "Route Type:", "Route Rule:" }, rows);
+ }
+
+}
diff --git a/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/ServicesPageHandler.java b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/ServicesPageHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1622aa3d214d57e495354381a984e75d9f9c5f5
--- /dev/null
+++ b/dubbo-registry-admin/src/main/java/com/alibaba/dubbo/registry/admin/pages/ServicesPageHandler.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 1999-2011 Alibaba Group.
+ *
+ * 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.
+ */
+package com.alibaba.dubbo.registry.admin.pages;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.container.page.Menu;
+import com.alibaba.dubbo.container.page.Page;
+import com.alibaba.dubbo.container.page.PageHandler;
+import com.alibaba.dubbo.registry.admin.RegistryContainer;
+
+/**
+ * ServicesPageHandler
+ *
+ * @author william.liangf
+ */
+@Menu(name = "Services", desc = "Services", order = 1000)
+@Extension("services")
+public class ServicesPageHandler implements PageHandler {
+
+ public Page handle(URL url) {
+ Set services = RegistryContainer.getInstance().getServices();
+ List> rows = new ArrayList>();
+ if (services != null && services.size() > 0) {
+ for (String service : services) {
+ List row = new ArrayList();
+ row.add(service);
+ row.add("Providers");
+ row.add("Routes");
+ rows.add(row);
+ }
+ }
+ return new Page("Home > Services", "Services (" + rows.size() + ")",
+ new String[] { "Service Name:", "Providers", "Routes" }, rows);
+ }
+
+}
diff --git a/dubbo-registry-admin/src/main/resources/META-INF/services/com.alibaba.dubbo.container.Container b/dubbo-registry-admin/src/main/resources/META-INF/services/com.alibaba.dubbo.container.Container
new file mode 100644
index 0000000000000000000000000000000000000000..060465d32fc6f49c1d855420b25bf8afd3ef8c6e
--- /dev/null
+++ b/dubbo-registry-admin/src/main/resources/META-INF/services/com.alibaba.dubbo.container.Container
@@ -0,0 +1 @@
+com.alibaba.dubbo.registry.admin.RegistryContainer
\ No newline at end of file
diff --git a/dubbo-registry-admin/src/main/resources/META-INF/services/com.alibaba.dubbo.container.page.PageHandler b/dubbo-registry-admin/src/main/resources/META-INF/services/com.alibaba.dubbo.container.page.PageHandler
new file mode 100644
index 0000000000000000000000000000000000000000..78a8ead560e69a2a271d3200d0e2e7e76a414b26
--- /dev/null
+++ b/dubbo-registry-admin/src/main/resources/META-INF/services/com.alibaba.dubbo.container.page.PageHandler
@@ -0,0 +1,3 @@
+com.alibaba.dubbo.registry.admin.pages.ServicesPageHandler
+com.alibaba.dubbo.registry.admin.pages.ProvidersPageHandler
+com.alibaba.dubbo.registry.admin.pages.RoutesPageHandler
\ No newline at end of file
diff --git a/dubbo-registry-admin/src/test/java/com/alibaba/dubbo/registry/admin/Admin.java b/dubbo-registry-admin/src/test/java/com/alibaba/dubbo/registry/admin/Admin.java
new file mode 100644
index 0000000000000000000000000000000000000000..cef7f863d4b861e11aa492673219758957a97659
--- /dev/null
+++ b/dubbo-registry-admin/src/test/java/com/alibaba/dubbo/registry/admin/Admin.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 1999-2011 Alibaba Group.
+ *
+ * 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.
+ */
+package com.alibaba.dubbo.registry.admin;
+
+/**
+ * Main
+ *
+ * @author william.liangf
+ */
+public class Admin {
+
+ public static void main(String[] args) {
+ System.setProperty(RegistryContainer.REGISTRY_URL, "zookeeper://10.20.153.10:2181");
+ com.alibaba.dubbo.container.Main.main(new String[] {"registry", "log4j", "jetty"});
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 0c7e530ef392aa84b90c82fd739252ab9a69ef23..58a2b01263925570fe879ecf915c1dcdde26c769 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,7 @@
dubbo-registry-simple
dubbo-registry-multicast
dubbo-registry-zookeeper
+ dubbo-registry-admin
dubbo-monitor
dubbo-monitor-simple
dubbo-config