diff --git a/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractReferenceConfig.java b/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractReferenceConfig.java
index ae5a63ba2d..2905ea523f 100644
--- a/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractReferenceConfig.java
+++ b/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractReferenceConfig.java
@@ -28,9 +28,9 @@ import com.alibaba.dubbo.registry.RegistryService;
import com.alibaba.dubbo.registry.support.UrlUtils;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.InvokerListener;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.cluster.Cluster;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
/**
* AbstractDefaultConfig
diff --git a/dubbo-config/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java b/dubbo-config/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
index fbb11d2dce..d14604ad41 100644
--- a/dubbo-config/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
@@ -38,15 +38,15 @@ import com.alibaba.dubbo.common.utils.ReflectUtils;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.StaticContext;
import com.alibaba.dubbo.rpc.cluster.Cluster;
import com.alibaba.dubbo.rpc.cluster.directory.StaticDirectory;
import com.alibaba.dubbo.rpc.cluster.support.AvailableCluster;
import com.alibaba.dubbo.rpc.cluster.support.ClusterUtils;
-import com.alibaba.dubbo.rpc.injvm.InjvmProtocol;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.rpc.protocol.injvm.InjvmProtocol;
+import com.alibaba.dubbo.service.GenericService;
/**
* ReferenceConfig
diff --git a/dubbo-config/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java b/dubbo-config/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
index 08ed65c821..a4e00cd09e 100644
--- a/dubbo-config/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
@@ -39,10 +39,10 @@ import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcStatus;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.service.GenericService;
/**
* ServiceConfig
diff --git a/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java b/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java
index 18ffdd6cf3..a7e3be1aa5 100644
--- a/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java
+++ b/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java
@@ -31,7 +31,7 @@ import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
-import com.alibaba.dubbo.rpc.injvm.InjvmProtocol;
+import com.alibaba.dubbo.rpc.protocol.injvm.InjvmProtocol;
/**
* ReferenceFactoryBean
diff --git a/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Client.java b/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Client.java
index 1f557fc6ca..83f497c0da 100644
--- a/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Client.java
+++ b/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Client.java
@@ -19,7 +19,7 @@ import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
+import com.alibaba.dubbo.rpc.ProxyFactory;
public class Client {
private static ProxyFactory proxyFactory = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();
diff --git a/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Server.java b/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Server.java
index e42cdfbbac..7c032e281e 100644
--- a/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Server.java
+++ b/dubbo-config/src/test/java/com/alibaba/dubbo/callback/explicit/test/Server.java
@@ -20,8 +20,8 @@ import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
-import com.alibaba.dubbo.rpc.dubbo.DubboCodec;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
+import com.alibaba.dubbo.rpc.ProxyFactory;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec;
public class Server {
private static ProxyFactory proxyFactory = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();
diff --git a/dubbo-config/src/test/java/com/alibaba/dubbo/config/test/ExceptionTest.java b/dubbo-config/src/test/java/com/alibaba/dubbo/config/test/ExceptionTest.java
index 42cb94c3eb..c96f6d1cf9 100644
--- a/dubbo-config/src/test/java/com/alibaba/dubbo/config/test/ExceptionTest.java
+++ b/dubbo-config/src/test/java/com/alibaba/dubbo/config/test/ExceptionTest.java
@@ -28,7 +28,7 @@ import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.alibaba.dubbo.rpc.Protocol;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.util.MyException;
import com.alibaba.dubbo.rpc.util.MyService;
import com.alibaba.dubbo.rpc.util.MyServiceImpl;
diff --git a/dubbo-config/src/test/java/com/alibaba/dubbo/demo/consumer/GenericConsumer.java b/dubbo-config/src/test/java/com/alibaba/dubbo/demo/consumer/GenericConsumer.java
index 2b4fcc2a05..3b991638a0 100644
--- a/dubbo-config/src/test/java/com/alibaba/dubbo/demo/consumer/GenericConsumer.java
+++ b/dubbo-config/src/test/java/com/alibaba/dubbo/demo/consumer/GenericConsumer.java
@@ -20,7 +20,7 @@ import java.util.Map;
import org.springframework.context.support.ClassPathXmlApplicationContext;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.service.GenericService;
public class GenericConsumer {
diff --git a/dubbo-config/src/test/java/com/alibaba/dubbo/demo/provider/impl/DemoServiceGenericImpl.java b/dubbo-config/src/test/java/com/alibaba/dubbo/demo/provider/impl/DemoServiceGenericImpl.java
index 92e9c66f73..5cf167accd 100644
--- a/dubbo-config/src/test/java/com/alibaba/dubbo/demo/provider/impl/DemoServiceGenericImpl.java
+++ b/dubbo-config/src/test/java/com/alibaba/dubbo/demo/provider/impl/DemoServiceGenericImpl.java
@@ -19,8 +19,8 @@ import java.util.HashMap;
import java.util.Map;
import com.alibaba.dubbo.rpc.RpcContext;
-import com.alibaba.dubbo.rpc.service.GenericException;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.service.GenericException;
+import com.alibaba.dubbo.service.GenericService;
/**
* DemoServiceGenericeImpl
diff --git a/dubbo-monitor-default/pom.xml b/dubbo-monitor-default/pom.xml
new file mode 100644
index 0000000000..e374f8923f
--- /dev/null
+++ b/dubbo-monitor-default/pom.xml
@@ -0,0 +1,39 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-monitor-default
+ jar
+ Dubbo Default Monitor Module
+ The default monitor module of dubbo project
+
+
+ com.alibaba
+ dubbo-monitor
+ ${project.parent.version}
+
+
+
+
\ No newline at end of file
diff --git a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/DubboMonitor.java b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitor.java
similarity index 97%
rename from dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/DubboMonitor.java
rename to dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitor.java
index ed97a79ce3..d1b40c24cf 100644
--- a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/DubboMonitor.java
+++ b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitor.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.monitor.support.dubbo;
+package com.alibaba.dubbo.monitor.dubbo;
import java.util.Map;
import java.util.concurrent.ConcurrentMap;
diff --git a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/DubboMonitorFactroy.java b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorFactroy.java
similarity index 92%
rename from dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/DubboMonitorFactroy.java
rename to dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorFactroy.java
index 5371774bd5..04bd38d136 100644
--- a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/DubboMonitorFactroy.java
+++ b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorFactroy.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.monitor.support.dubbo;
+package com.alibaba.dubbo.monitor.dubbo;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.Extension;
@@ -23,7 +23,7 @@ import com.alibaba.dubbo.monitor.MonitorService;
import com.alibaba.dubbo.monitor.support.AbstractMonitorFactroy;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
+import com.alibaba.dubbo.rpc.ProxyFactory;
/**
* DefaultMonitorFactroy
diff --git a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/Statistics.java b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/Statistics.java
similarity index 95%
rename from dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/Statistics.java
rename to dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/Statistics.java
index 859172c553..2437a270e0 100644
--- a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/dubbo/Statistics.java
+++ b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/Statistics.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.monitor.support.dubbo;
+package com.alibaba.dubbo.monitor.dubbo;
import java.io.Serializable;
diff --git a/dubbo-monitor-default/src/main/resources/META-INF/services/com.alibaba.dubbo.monitor.MonitorFactory b/dubbo-monitor-default/src/main/resources/META-INF/services/com.alibaba.dubbo.monitor.MonitorFactory
new file mode 100644
index 0000000000..94cedc1fcd
--- /dev/null
+++ b/dubbo-monitor-default/src/main/resources/META-INF/services/com.alibaba.dubbo.monitor.MonitorFactory
@@ -0,0 +1 @@
+com.alibaba.dubbo.monitor.dubbo.DubboMonitorFactroy
\ No newline at end of file
diff --git a/dubbo-monitor/src/test/java/com/alibaba/dubbo/monitor/filter/support/dubbo/DubboMonitorTest.java b/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java
similarity index 93%
rename from dubbo-monitor/src/test/java/com/alibaba/dubbo/monitor/filter/support/dubbo/DubboMonitorTest.java
rename to dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java
index 5ac0fa647a..3ab38078c1 100644
--- a/dubbo-monitor/src/test/java/com/alibaba/dubbo/monitor/filter/support/dubbo/DubboMonitorTest.java
+++ b/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.monitor.filter.support.dubbo;
+package com.alibaba.dubbo.monitor.dubbo;
import junit.framework.Assert;
@@ -21,7 +21,6 @@ import org.junit.Test;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.monitor.MonitorService;
-import com.alibaba.dubbo.monitor.support.dubbo.DubboMonitor;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
diff --git a/dubbo-monitor-jmx/pom.xml b/dubbo-monitor-jmx/pom.xml
new file mode 100644
index 0000000000..7027e77d6e
--- /dev/null
+++ b/dubbo-monitor-jmx/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-monitor-jmx
+ jar
+ Dubbo JMX Monitor Module
+ The jmx monitor module of dubbo project
+
+
+ com.alibaba
+ dubbo-monitor
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/filter/MonitorFilter.java b/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/MonitorFilter.java
similarity index 97%
rename from dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/filter/MonitorFilter.java
rename to dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/MonitorFilter.java
index 98a0a427ba..3c894edaf3 100644
--- a/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/filter/MonitorFilter.java
+++ b/dubbo-monitor/src/main/java/com/alibaba/dubbo/monitor/support/MonitorFilter.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.monitor.filter;
+package com.alibaba.dubbo.monitor.support;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
diff --git a/dubbo-monitor/src/main/resources/META-INF/services/com.alibaba.dubbo.monitor.MonitorFactory b/dubbo-monitor/src/main/resources/META-INF/services/com.alibaba.dubbo.monitor.MonitorFactory
deleted file mode 100644
index d8223836e6..0000000000
--- a/dubbo-monitor/src/main/resources/META-INF/services/com.alibaba.dubbo.monitor.MonitorFactory
+++ /dev/null
@@ -1 +0,0 @@
-com.alibaba.dubbo.monitor.support.dubbo.DubboMonitorFactroy
\ No newline at end of file
diff --git a/dubbo-monitor/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter b/dubbo-monitor/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
index 1d4b7d3515..de66615e39 100644
--- a/dubbo-monitor/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
+++ b/dubbo-monitor/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
@@ -1 +1 @@
-com.alibaba.dubbo.monitor.filter.MonitorFilter
\ No newline at end of file
+com.alibaba.dubbo.monitor.support.MonitorFilter
\ No newline at end of file
diff --git a/dubbo-monitor/src/test/java/com/alibaba/dubbo/monitor/filter/MonitorFilterTest.java b/dubbo-monitor/src/test/java/com/alibaba/dubbo/monitor/filter/MonitorFilterTest.java
index 2c62c6bc94..671297f3f9 100644
--- a/dubbo-monitor/src/test/java/com/alibaba/dubbo/monitor/filter/MonitorFilterTest.java
+++ b/dubbo-monitor/src/test/java/com/alibaba/dubbo/monitor/filter/MonitorFilterTest.java
@@ -28,6 +28,7 @@ import com.alibaba.dubbo.common.utils.NetUtils;
import com.alibaba.dubbo.monitor.Monitor;
import com.alibaba.dubbo.monitor.MonitorFactory;
import com.alibaba.dubbo.monitor.MonitorService;
+import com.alibaba.dubbo.monitor.support.MonitorFilter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
diff --git a/dubbo-registry-default/pom.xml b/dubbo-registry-default/pom.xml
new file mode 100644
index 0000000000..51eed676cb
--- /dev/null
+++ b/dubbo-registry-default/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-registry-default
+ jar
+ Dubbo Default Registry Module
+ The default registry module of dubbo project
+
+
+ com.alibaba
+ dubbo-registry
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/dubbo/DubboRegistry.java b/dubbo-registry-default/src/main/java/com/alibaba/dubbo/registry/dubbo/DubboRegistry.java
similarity index 97%
rename from dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/dubbo/DubboRegistry.java
rename to dubbo-registry-default/src/main/java/com/alibaba/dubbo/registry/dubbo/DubboRegistry.java
index ca9f17bd04..94f7cf4ef0 100644
--- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/dubbo/DubboRegistry.java
+++ b/dubbo-registry-default/src/main/java/com/alibaba/dubbo/registry/dubbo/DubboRegistry.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.support.dubbo;
+package com.alibaba.dubbo.registry.dubbo;
import java.util.HashMap;
import java.util.HashSet;
diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/dubbo/DubboRegistryFactory.java b/dubbo-registry-default/src/main/java/com/alibaba/dubbo/registry/dubbo/DubboRegistryFactory.java
similarity index 94%
rename from dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/dubbo/DubboRegistryFactory.java
rename to dubbo-registry-default/src/main/java/com/alibaba/dubbo/registry/dubbo/DubboRegistryFactory.java
index cef37435d8..e7aa22ade2 100644
--- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/dubbo/DubboRegistryFactory.java
+++ b/dubbo-registry-default/src/main/java/com/alibaba/dubbo/registry/dubbo/DubboRegistryFactory.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.support.dubbo;
+package com.alibaba.dubbo.registry.dubbo;
import java.util.ArrayList;
import java.util.Arrays;
@@ -27,13 +27,13 @@ import com.alibaba.dubbo.common.bytecode.Wrapper;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.dubbo.registry.Registry;
import com.alibaba.dubbo.registry.RegistryService;
-import com.alibaba.dubbo.registry.directory.RegistryDirectory;
import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
+import com.alibaba.dubbo.registry.support.RegistryDirectory;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.cluster.Cluster;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
/**
* DubboRegistryFactory
diff --git a/dubbo-registry-default/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory b/dubbo-registry-default/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
new file mode 100644
index 0000000000..403c36f71c
--- /dev/null
+++ b/dubbo-registry-default/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
@@ -0,0 +1 @@
+com.alibaba.dubbo.registry.dubbo.DubboRegistryFactory
\ No newline at end of file
diff --git a/dubbo-registry-jndi/pom.xml b/dubbo-registry-jndi/pom.xml
new file mode 100644
index 0000000000..c1409f53e6
--- /dev/null
+++ b/dubbo-registry-jndi/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-registry-jndi
+ jar
+ Dubbo JNDI Registry Module
+ The jndi registry module of dubbo project
+
+
+ com.alibaba
+ dubbo-registry
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java
new file mode 100644
index 0000000000..a3e35a7b5c
--- /dev/null
+++ b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java
@@ -0,0 +1,160 @@
+/*
+ * 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.multicast;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.MulticastSocket;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+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.StringUtils;
+import com.alibaba.dubbo.registry.NotifyListener;
+import com.alibaba.dubbo.registry.support.AbstractRegistry;
+
+/**
+ * MulticastRegistry
+ *
+ * @author william.liangf
+ */
+public class MulticastRegistry extends AbstractRegistry {
+
+ // 日志输出
+ private static final Logger logger = LoggerFactory.getLogger(MulticastRegistry.class);
+
+ private InetAddress mutilcastAddress;
+
+ private MulticastSocket mutilcastSocket;
+
+ public MulticastRegistry(URL url) {
+ super(url);
+ if (! isMulticastAddress(url.getHost())) {
+ throw new IllegalArgumentException("Invalid multicast address " + url.getHost() + ", scope: 224.0.0.0 - 239.255.255.255");
+ }
+ try {
+ mutilcastAddress = InetAddress.getByName(url.getHost());
+ mutilcastSocket = new MulticastSocket(url.getPort());
+ mutilcastSocket.setLoopbackMode(false);
+ mutilcastSocket.joinGroup(mutilcastAddress);
+ Thread thread = new Thread(new Runnable() {
+ public void run() {
+ byte[] buf = new byte[1024];
+ DatagramPacket recv = new DatagramPacket(buf, buf.length);
+ while (true) {
+ try {
+ mutilcastSocket.receive(recv);
+ MulticastRegistry.this.receive(new String(recv.getData()).trim(), (InetSocketAddress) recv.getSocketAddress());
+ } catch (IOException e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+ }
+ }, "MulticastRegistry");
+ thread.setDaemon(true);
+ thread.start();
+ } catch (IOException e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ }
+
+ private static boolean isMulticastAddress(String ip) {
+ int i = ip.indexOf('.');
+ if (i > 0) {
+ String prefix = ip.substring(0, i);
+ if (StringUtils.isInteger(prefix)) {
+ int p = Integer.parseInt(prefix);
+ return p >= 224 && p <= 239;
+ }
+ }
+ return false;
+ }
+
+ private void receive(String msg, InetSocketAddress remoteAddress) {
+ if (msg.startsWith("register")) {
+ String[] parts = msg.split("\\s+");
+ String service = parts[1];
+ if (getSubscribed().containsKey(service)) {
+ URL url = URL.valueOf(parts[2]);
+ List urls = new ArrayList();
+ List notified = getNotified().get(service);
+ if (notified != null) {
+ urls.addAll(notified);
+ }
+ if (! urls.contains(url)) {
+ urls.add(url);
+ }
+ notify(service, urls);
+ }
+ } else if (msg.startsWith("subscribe")) {
+ String[] parts = msg.split("\\s+");
+ String service = parts[1];
+ if (getRegistered().containsKey(service)) {
+ for (URL url : getRegistered().get(service)) {
+ send("register " + service + " " + url.toString());
+ }
+ }
+ }
+ }
+
+ private void send(String msg) {
+ DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), mutilcastAddress, mutilcastSocket.getLocalPort());
+ try {
+ mutilcastSocket.send(hi);
+ } catch (IOException e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ }
+
+ public void register(String service, URL url) {
+ super.register(service, url);
+ send("register " + service + " " + url);
+ }
+
+ public void unregister(String service, URL url) {
+ send("unregister " + service + " " + url);
+ }
+
+ public void subscribe(String service, Map parameters, NotifyListener listener) {
+ super.subscribe(service, parameters, listener);
+ send("subscribe " + service + " " + StringUtils.toQueryString(parameters));
+ synchronized (this) {
+ try {
+ this.wait(5000);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+
+ public void unsubscribe(String service, Map query, NotifyListener listener) {
+ send("unsubscribe " + service + " " + StringUtils.toQueryString(query));
+ }
+
+ public boolean isAvailable() {
+ return mutilcastSocket.isConnected();
+ }
+
+ @Override
+ public void destroy() {
+ mutilcastSocket.close();
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryFactory.java b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryFactory.java
new file mode 100644
index 0000000000..6b9e588c45
--- /dev/null
+++ b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryFactory.java
@@ -0,0 +1,35 @@
+/*
+ * 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.multicast;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.registry.Registry;
+import com.alibaba.dubbo.registry.RegistryFactory;
+
+/**
+ * MulticastRegistryLocator
+ *
+ * @author william.liangf
+ */
+@Extension("multicast")
+public class MulticastRegistryFactory implements RegistryFactory {
+
+ public Registry getRegistry(URL url) {
+ return new MulticastRegistry(url);
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-registry-multicast/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory b/dubbo-registry-multicast/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
new file mode 100644
index 0000000000..e37727e195
--- /dev/null
+++ b/dubbo-registry-multicast/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
@@ -0,0 +1 @@
+com.alibaba.dubbo.registry.multicast.MulticastRegistryFactory
\ No newline at end of file
diff --git a/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistry.java b/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistry.java
new file mode 100644
index 0000000000..04ea98bdf3
--- /dev/null
+++ b/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistry.java
@@ -0,0 +1,167 @@
+/*
+ * 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.zookeeper;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.Watcher.Event.EventType;
+import org.apache.zookeeper.ZooDefs.Ids;
+import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.data.Stat;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.logger.Logger;
+import com.alibaba.dubbo.common.logger.LoggerFactory;
+import com.alibaba.dubbo.registry.NotifyListener;
+import com.alibaba.dubbo.registry.Registry;
+import com.alibaba.dubbo.rpc.RpcException;
+
+/**
+ * ZookeeperRegistry
+ *
+ * @author william.liangf
+ */
+public class ZookeeperRegistry implements Registry {
+
+ private final static Logger logger = LoggerFactory.getLogger(ZookeeperRegistry.class);
+
+ private final URL url;
+
+ private final ZooKeeper zookeeper;
+
+ public ZookeeperRegistry(URL url) {
+ this.url = url;
+ try {
+ this.zookeeper = new ZooKeeper(url.getAddress(), url.getPositiveIntParameter(
+ Constants.TIMEOUT_KEY, 5000), new Watcher() {
+ public void process(WatchedEvent event) {
+ }
+ });
+ } catch (IOException e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ }
+
+ public URL getUrl() {
+ return url;
+ }
+
+ public boolean isAvailable() {
+ return zookeeper.getState().isAlive();
+ }
+
+ public void destroy() {
+ try {
+ zookeeper.close();
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+
+ public void register(URL url) {
+ try {
+ String service = "/" + URL.encode(url.getServiceKey());
+ if (zookeeper.exists(service, false) == null) {
+ zookeeper.create(service, new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
+ }
+ String provider = service + "/" + URL.encode(url.toIdentityString());
+ if (zookeeper.exists(provider, false) == null) {
+ zookeeper.create(provider, url.toParameterString().getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
+ }
+ } catch (Exception e) {
+ throw new RpcException(e.getMessage(), e);
+ }
+ }
+
+ public void unregister(URL url) {
+ try {
+ String service = "/" + URL.encode(url.getServiceKey());
+ String provider = service + "/" + URL.encode(url.toIdentityString());
+ zookeeper.delete(provider, -1);
+ } catch (Exception e) {
+ throw new RpcException(e.getMessage(), e);
+ }
+ }
+
+ public void subscribe(URL url, NotifyListener listener) {
+ try {
+ String service = "/" + URL.encode(url.getServiceKey());
+ List providers = zookeeper.getChildren(service, new NotifyWatcher(url, listener));
+ listener.notify(toUrls(service, providers));
+ } catch (Exception e) {
+ throw new RpcException(e.getMessage(), e);
+ }
+ }
+
+ public void unsubscribe(URL url, NotifyListener listener) {
+ }
+
+ public List lookup(URL url) {
+ try {
+ String service = "/" + URL.encode(url.getServiceKey());
+ List providers = zookeeper.getChildren(service, false);
+ return toUrls(service, providers);
+ } catch (Exception e) {
+ throw new RpcException(e.getMessage(), e);
+ }
+ }
+
+ private List toUrls(String service, List providers) throws KeeperException, InterruptedException {
+ List urls = new ArrayList();
+ for (String provider : providers) {
+ String path = service + provider;
+ String query = "";
+ Stat stat = zookeeper.exists(path, false);
+ if (stat != null) {
+ byte[] data = zookeeper.getData(path, false, stat);
+ if (data != null && data.length > 0) {
+ query = "?" + new String(data);
+ }
+ }
+ urls.add(URL.valueOf(URL.decode(provider + query)));
+ }
+ return urls;
+ }
+
+ private class NotifyWatcher implements Watcher {
+
+ private final URL url;
+
+ private final NotifyListener listener;
+
+ public NotifyWatcher(URL url, NotifyListener listener) {
+ this.url = url;
+ this.listener = listener;
+ }
+
+ public void process(WatchedEvent event) {
+ if (event.getType() == EventType.NodeChildrenChanged) {
+ listener.notify(lookup(url));
+ } else if (event.getType() == EventType.NodeDataChanged) {
+ listener.notify(lookup(url));
+ }
+ }
+
+ }
+
+}
diff --git a/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistryFactory.java b/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistryFactory.java
new file mode 100644
index 0000000000..f85d44e14e
--- /dev/null
+++ b/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistryFactory.java
@@ -0,0 +1,35 @@
+/*
+ * 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.zookeeper;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.registry.Registry;
+import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
+
+/**
+ * ZookeeperRegistryFactory.
+ *
+ * @author william.liangf
+ */
+@Extension("zookeeper")
+public class ZookeeperRegistryFactory extends AbstractRegistryFactory {
+
+ public Registry createRegistry(URL url) {
+ return new ZookeeperRegistry(url);
+ }
+
+}
diff --git a/dubbo-registry-zookeeper/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory b/dubbo-registry-zookeeper/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
new file mode 100644
index 0000000000..b538326461
--- /dev/null
+++ b/dubbo-registry-zookeeper/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
@@ -0,0 +1 @@
+com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistryFactory
\ No newline at end of file
diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/directory/RegistryDirectory.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryDirectory.java
similarity index 97%
rename from dubbo-registry/src/main/java/com/alibaba/dubbo/registry/directory/RegistryDirectory.java
rename to dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryDirectory.java
index a12422e7b6..f586a921dc 100644
--- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/directory/RegistryDirectory.java
+++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryDirectory.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.directory;
+package com.alibaba.dubbo.registry.support;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/protocol/RegistryProtocol.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryProtocol.java
similarity index 94%
rename from dubbo-registry/src/main/java/com/alibaba/dubbo/registry/protocol/RegistryProtocol.java
rename to dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryProtocol.java
index 25e8e82114..2c1a6a7651 100644
--- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/protocol/RegistryProtocol.java
+++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryProtocol.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.protocol;
+package com.alibaba.dubbo.registry.support;
import java.util.ArrayList;
import java.util.List;
@@ -25,14 +25,13 @@ import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.registry.Registry;
import com.alibaba.dubbo.registry.RegistryFactory;
-import com.alibaba.dubbo.registry.directory.RegistryDirectory;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.cluster.Cluster;
-import com.alibaba.dubbo.rpc.support.InvokerWrapper;
+import com.alibaba.dubbo.rpc.protocol.InvokerWrapper;
/**
* RegistryProtocol
diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/status/RegistryStatusChecker.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryStatusChecker.java
similarity index 91%
rename from dubbo-registry/src/main/java/com/alibaba/dubbo/registry/status/RegistryStatusChecker.java
rename to dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryStatusChecker.java
index 846edda01a..b3577b8db2 100644
--- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/status/RegistryStatusChecker.java
+++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/RegistryStatusChecker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.status;
+package com.alibaba.dubbo.registry.support;
import java.util.Collection;
@@ -21,7 +21,6 @@ import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.status.Status;
import com.alibaba.dubbo.common.status.StatusChecker;
import com.alibaba.dubbo.registry.Registry;
-import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
/**
* RegistryStatusChecker
diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/SimpleRegistryExporter.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/SimpleRegistryExporter.java
index cef3cfe53e..c5246db13c 100644
--- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/SimpleRegistryExporter.java
+++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/support/SimpleRegistryExporter.java
@@ -25,8 +25,8 @@ import com.alibaba.dubbo.common.utils.NetUtils;
import com.alibaba.dubbo.registry.RegistryService;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcConstants;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
/**
* SimpleRegistryExporter
diff --git a/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.common.status.StatusChecker b/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.common.status.StatusChecker
index aa8a2a0988..58920c61f6 100644
--- a/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.common.status.StatusChecker
+++ b/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.common.status.StatusChecker
@@ -1 +1 @@
-com.alibaba.dubbo.registry.status.RegistryStatusChecker
\ No newline at end of file
+com.alibaba.dubbo.registry.support.RegistryStatusChecker
\ No newline at end of file
diff --git a/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory b/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
deleted file mode 100644
index f7cbccb8bb..0000000000
--- a/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
+++ /dev/null
@@ -1 +0,0 @@
-com.alibaba.dubbo.registry.support.dubbo.DubboRegistryFactory
\ No newline at end of file
diff --git a/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Protocol b/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Protocol
index bf0b13a669..c210ed749a 100644
--- a/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Protocol
+++ b/dubbo-registry/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Protocol
@@ -1 +1 @@
-com.alibaba.dubbo.registry.protocol.RegistryProtocol
\ No newline at end of file
+com.alibaba.dubbo.registry.support.RegistryProtocol
\ No newline at end of file
diff --git a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/protocol/DemoService.java b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/DemoService.java
similarity index 92%
rename from dubbo-registry/src/test/java/com/alibaba/dubbo/registry/protocol/DemoService.java
rename to dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/DemoService.java
index 28f7433a9b..76021d4d9f 100644
--- a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/protocol/DemoService.java
+++ b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/DemoService.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.protocol;
+package com.alibaba.dubbo.registry.support;
/**
* TestService
diff --git a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/directory/RegistryDirectoryTest.java b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryDirectoryTest.java
similarity index 99%
rename from dubbo-registry/src/test/java/com/alibaba/dubbo/registry/directory/RegistryDirectoryTest.java
rename to dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryDirectoryTest.java
index 5a0b3bc14f..4d694b313b 100644
--- a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/directory/RegistryDirectoryTest.java
+++ b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryDirectoryTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.directory;
+package com.alibaba.dubbo.registry.support;
import static org.junit.Assert.fail;
@@ -29,6 +29,7 @@ import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.registry.RegistryFactory;
+import com.alibaba.dubbo.registry.support.RegistryDirectory;
import com.alibaba.dubbo.registry.support.SimpleRegistryExporter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
diff --git a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/protocol/RegistryProtocolTest.java b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryProtocolTest.java
similarity index 91%
rename from dubbo-registry/src/test/java/com/alibaba/dubbo/registry/protocol/RegistryProtocolTest.java
rename to dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryProtocolTest.java
index e410aed56e..e8f8e2e778 100644
--- a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/protocol/RegistryProtocolTest.java
+++ b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryProtocolTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.protocol;
+package com.alibaba.dubbo.registry.support;
import static org.junit.Assert.assertEquals;
@@ -23,6 +23,7 @@ import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.registry.MockedClient;
import com.alibaba.dubbo.registry.RegistryFactory;
+import com.alibaba.dubbo.registry.support.RegistryProtocol;
import com.alibaba.dubbo.registry.support.SimpleRegistryExporter;
import com.alibaba.dubbo.remoting.exchange.ExchangeClient;
import com.alibaba.dubbo.rpc.Exporter;
@@ -30,8 +31,8 @@ import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.cluster.support.FailfastCluster;
-import com.alibaba.dubbo.rpc.dubbo.DubboInvoker;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* RegistryProtocolTest
diff --git a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/status/RegistryStatusCheckerTest.java b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryStatusCheckerTest.java
similarity index 92%
rename from dubbo-registry/src/test/java/com/alibaba/dubbo/registry/status/RegistryStatusCheckerTest.java
rename to dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryStatusCheckerTest.java
index 71eb9f74b5..4f2985fdcb 100644
--- a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/status/RegistryStatusCheckerTest.java
+++ b/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/support/RegistryStatusCheckerTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry.status;
+package com.alibaba.dubbo.registry.support;
import static org.junit.Assert.assertEquals;
@@ -25,6 +25,7 @@ import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.status.Status;
import com.alibaba.dubbo.registry.RegistryFactory;
import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
+import com.alibaba.dubbo.registry.support.RegistryStatusChecker;
import com.alibaba.dubbo.registry.support.SimpleRegistryExporter;
/**
diff --git a/dubbo-remoting-grizzly/pom.xml b/dubbo-remoting-grizzly/pom.xml
index 7c199ba5d5..a254c2bb98 100644
--- a/dubbo-remoting-grizzly/pom.xml
+++ b/dubbo-remoting-grizzly/pom.xml
@@ -31,5 +31,11 @@
dubbo-remoting
${project.parent.version}
+
+ org.glassfish.grizzly
+ grizzly-core
+ provided
+ true
+
\ No newline at end of file
diff --git a/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyChannel.java b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyChannel.java
new file mode 100644
index 0000000000..260a9597ca
--- /dev/null
+++ b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyChannel.java
@@ -0,0 +1,178 @@
+/*
+ * 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.remoting.transport.grizzly;
+
+import java.net.InetSocketAddress;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.glassfish.grizzly.Connection;
+import org.glassfish.grizzly.Grizzly;
+import org.glassfish.grizzly.GrizzlyFuture;
+import org.glassfish.grizzly.attributes.Attribute;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.logger.Logger;
+import com.alibaba.dubbo.common.logger.LoggerFactory;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.transport.support.AbstractChannel;
+
+/**
+ * GrizzlyChannel
+ *
+ * @author william.liangf
+ */
+final class GrizzlyChannel extends AbstractChannel {
+
+ private static final Logger logger = LoggerFactory.getLogger(GrizzlyChannel.class);
+
+ private static final String CHANNEL_KEY = GrizzlyChannel.class.getName() + ".CHANNEL";
+
+ private static final Attribute ATTRIBUTE = Grizzly.DEFAULT_ATTRIBUTE_BUILDER.createAttribute(CHANNEL_KEY);
+
+ private final Connection> connection;
+
+ /**
+ * @param connection
+ * @param url
+ * @param handler
+ */
+ private GrizzlyChannel(Connection> connection, URL url, ChannelHandler handler){
+ super(url, handler);
+ if (connection == null) {
+ throw new IllegalArgumentException("grizzly connection == null");
+ }
+ this.connection = connection;
+ }
+
+ static GrizzlyChannel getOrAddChannel(Connection> connection, URL url, ChannelHandler handler) {
+ if (connection == null) {
+ return null;
+ }
+ GrizzlyChannel ret = ATTRIBUTE.get(connection);
+ if (ret == null) {
+ ret = new GrizzlyChannel(connection, url, handler);
+ if (connection.isOpen()) {
+ ATTRIBUTE.set(connection, ret);
+ }
+ }
+ return ret;
+ }
+
+ static void removeChannelIfDisconnectd(Connection> connection) {
+ if (connection != null && ! connection.isOpen()) {
+ ATTRIBUTE.remove(connection);
+ }
+ }
+
+ public InetSocketAddress getRemoteAddress() {
+ return (InetSocketAddress) connection.getPeerAddress();
+ }
+
+ public boolean isConnected() {
+ return connection.isOpen();
+ }
+
+ public InetSocketAddress getLocalAddress() {
+ return (InetSocketAddress) connection.getLocalAddress();
+ }
+
+ @SuppressWarnings("rawtypes")
+ public void send(Object message, boolean sent) throws RemotingException {
+ super.send(message, sent);
+
+ int timeout = 0;
+ try {
+ GrizzlyFuture future = connection.write(message);
+ if (sent) {
+ timeout = getUrl().getPositiveIntParameter(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);
+ future.get(timeout, TimeUnit.MILLISECONDS);
+ }
+ }
+ catch (TimeoutException e) {
+ throw new RemotingException(this, "Failed to send message " + message + " to " + getRemoteAddress()
+ + "in timeout(" + timeout + "ms) limit", e);
+ }
+ catch (Throwable e) {
+ throw new RemotingException(this, "Failed to send message " + message + " to " + getRemoteAddress() + ", cause: " + e.getMessage(), e);
+ }
+ }
+
+ public void close() {
+ try {
+ super.close();
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ try {
+ removeChannelIfDisconnectd(connection);
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ try {
+ if (logger.isInfoEnabled()) {
+ logger.info("Close grizzly channel " + connection);
+ }
+ connection.close();
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+
+ public boolean hasAttribute(String key) {
+ return getAttribute(key) == null;
+ }
+
+ public Object getAttribute(String key) {
+ return Grizzly.DEFAULT_ATTRIBUTE_BUILDER.createAttribute(key).get(connection);
+ }
+
+ public void setAttribute(String key, Object value) {
+ Grizzly.DEFAULT_ATTRIBUTE_BUILDER.createAttribute(key).set(connection, value);
+ }
+
+ public void removeAttribute(String key) {
+ Grizzly.DEFAULT_ATTRIBUTE_BUILDER.createAttribute(key).remove(connection);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((connection == null) ? 0 : connection.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ GrizzlyChannel other = (GrizzlyChannel) obj;
+ if (connection == null) {
+ if (other.connection != null) return false;
+ } else if (!connection.equals(other.connection)) return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "GrizzlyChannel [connection=" + connection + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyClient.java b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyClient.java
new file mode 100644
index 0000000000..ebb65c6ff2
--- /dev/null
+++ b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyClient.java
@@ -0,0 +1,105 @@
+/*
+ * 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.remoting.transport.grizzly;
+
+import java.util.concurrent.TimeUnit;
+
+import org.glassfish.grizzly.Connection;
+import org.glassfish.grizzly.filterchain.FilterChainBuilder;
+import org.glassfish.grizzly.filterchain.TransportFilter;
+import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
+import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder;
+import org.glassfish.grizzly.strategies.SameThreadIOStrategy;
+import org.glassfish.grizzly.threadpool.ThreadPoolConfig;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.remoting.Channel;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.transport.support.AbstractClient;
+
+/**
+ * GrizzlyClient
+ *
+ * @author william.liangf
+ */
+public class GrizzlyClient extends AbstractClient {
+
+ private TCPNIOTransport transport;
+
+ private volatile Connection> connection; // volatile, please copy reference to use
+
+ public GrizzlyClient(URL url, ChannelHandler handler) throws RemotingException {
+ super(url, handler);
+ }
+
+ @Override
+ protected void doOpen() throws Throwable {
+ FilterChainBuilder filterChainBuilder = FilterChainBuilder.stateless();
+ filterChainBuilder.add(new TransportFilter());
+ filterChainBuilder.add(new GrizzlyCodecAdapter(getCodec(), getUrl(), this));
+ filterChainBuilder.add(new GrizzlyHandler(getUrl(), this));
+ TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
+ ThreadPoolConfig config = builder.getWorkerThreadPoolConfig();
+ config.setPoolName(CLIENT_THREAD_POOL_NAME)
+ .setQueueLimit(-1)
+ .setCorePoolSize(0)
+ .setMaxPoolSize(Integer.MAX_VALUE)
+ .setKeepAliveTime(60L, TimeUnit.SECONDS);
+ builder.setTcpNoDelay(true).setKeepAlive(true)
+ .setConnectionTimeout(getTimeout())
+ .setIOStrategy(SameThreadIOStrategy.getInstance());
+ transport = builder.build();
+ transport.setProcessor(filterChainBuilder.build());
+ transport.start();
+ }
+
+
+
+ @Override
+ protected void doConnect() throws Throwable {
+ connection = transport.connect(getConnectAddress())
+ .get(getUrl().getPositiveIntParameter(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS);
+ }
+
+ @Override
+ protected void doDisConnect() throws Throwable {
+ try {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ } catch (Throwable t) {
+ logger.warn(t.getMessage());
+ }
+ }
+
+ @Override
+ protected void doClose() throws Throwable {
+ try {
+ transport.stop();
+ } catch (Throwable e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ protected Channel getChannel() {
+ Connection> c = connection;
+ if (c == null || ! c.isOpen())
+ return null;
+ return GrizzlyChannel.getOrAddChannel(c, getUrl(), this);
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyCodecAdapter.java b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyCodecAdapter.java
new file mode 100644
index 0000000000..8379352908
--- /dev/null
+++ b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyCodecAdapter.java
@@ -0,0 +1,189 @@
+/*
+ * 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.remoting.transport.grizzly;
+
+import java.io.IOException;
+
+import org.glassfish.grizzly.Buffer;
+import org.glassfish.grizzly.Connection;
+import org.glassfish.grizzly.filterchain.BaseFilter;
+import org.glassfish.grizzly.filterchain.FilterChainContext;
+import org.glassfish.grizzly.filterchain.NextAction;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.io.Bytes;
+import com.alibaba.dubbo.common.io.UnsafeByteArrayInputStream;
+import com.alibaba.dubbo.common.io.UnsafeByteArrayOutputStream;
+import com.alibaba.dubbo.remoting.Channel;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.Codec;
+import com.alibaba.dubbo.remoting.exchange.Response;
+
+/**
+ * GrizzlyCodecAdapter
+ *
+ * @author william.liangf
+ */
+public class GrizzlyCodecAdapter extends BaseFilter {
+
+ private static final String BUFFER_KEY = GrizzlyCodecAdapter.class.getName() + ".BUFFER";
+
+ private final Codec upstreamCodec;
+ private final Codec downstreamCodec;
+
+ private final URL url;
+
+ private final ChannelHandler handler;
+
+ private final int bufferSize;
+
+ public GrizzlyCodecAdapter(Codec codec, URL url, ChannelHandler handler){
+ this(codec, codec, url, handler);
+ }
+ /**
+ * server 端如果有消息发送需要分开codec,默认的上行code是dubbo1兼容的
+ */
+ public GrizzlyCodecAdapter(Codec upstreamCodec, Codec downstreamCodec, URL url, ChannelHandler handler){
+ this.upstreamCodec = upstreamCodec;
+ this.downstreamCodec = downstreamCodec;
+ this.url = url;
+ this.handler = handler;
+ int b = url.getPositiveIntParameter(Constants.BUFFER_KEY, Constants.DEFAULT_BUFFER_SIZE);
+ this.bufferSize = b >= Constants.MIN_BUFFER_SIZE && b <= Constants.MAX_BUFFER_SIZE ? b : Constants.DEFAULT_BUFFER_SIZE;
+ }
+
+ @Override
+ public NextAction handleWrite(FilterChainContext context) throws IOException {
+ Connection> connection = context.getConnection();
+ GrizzlyChannel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler);
+ try {
+ UnsafeByteArrayOutputStream output = new UnsafeByteArrayOutputStream(1024); // 不需要关闭
+
+ if(!(context.getMessage() instanceof Response)){
+ downstreamCodec.encode(channel, output, context.getMessage());
+ }else{
+ upstreamCodec.encode(channel, output, context.getMessage());
+ }
+
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ byte[] bytes = output.toByteArray();
+ Buffer buffer = connection.getTransport().getMemoryManager().allocate(bytes.length);
+ buffer.put(bytes);
+ buffer.flip();
+ buffer.allowBufferDispose(true);
+ context.setMessage(buffer);
+ } finally {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ }
+ return context.getInvokeAction();
+ }
+
+ @Override
+ public NextAction handleRead(FilterChainContext context) throws IOException {
+ Object message = context.getMessage();
+ Connection> connection = context.getConnection();
+ Channel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler);
+ try {
+ if (message instanceof Buffer) { // 收到新的数据包
+ Buffer buffer = (Buffer) message; // 缓存
+ int readable = buffer.capacity(); // 本次可读取新数据的大小
+ if (readable == 0) {
+ return context.getStopAction();
+ }
+ byte[] bytes; // byte[]缓存区,将Buffer转成byte[],再转成UnsafeByteArrayInputStream
+ int offset; // 指向已用数据的偏移量,off之前的数据都是已用过的
+ int limit; // 有效长度,limit之后的长度是空白或无效数据,off到limit之间的数据是准备使用的有效数据
+ Object[] remainder = (Object[]) channel.getAttribute(BUFFER_KEY); // 上次序列化剩下的数据
+ channel.removeAttribute(BUFFER_KEY);
+ if (remainder == null) { // 如果没有,创建新的bytes缓存
+ bytes = new byte[bufferSize];
+ offset = 0;
+ limit = 0;
+ } else { // 如果有,使用剩下的bytes缓存
+ bytes = (byte[]) remainder[0];
+ offset = (Integer) remainder[1];
+ limit = (Integer) remainder[2];
+ }
+ return receive(context, channel, buffer, readable, bytes, offset, limit);
+ } else if (message instanceof Object[]) { // 同一Buffer多轮Filter,即:一个Buffer里有多个请求
+ Object[] remainder = (Object[]) message;
+ Buffer buffer = (Buffer) remainder[0];
+ int readable = (Integer) remainder[1];
+ byte[] bytes = (byte[]) remainder[2];
+ int offset = (Integer) remainder[3];
+ int limit = (Integer) remainder[4];
+ return receive(context, channel, buffer, readable, bytes, offset, limit);
+ } else { // 其它事件直接往下传
+ return context.getInvokeAction();
+ }
+ } finally {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ }
+ }
+
+ /*
+ * 接收
+ *
+ * @param context 上下文
+ * @param channel 通道
+ * @param buffer 缓存
+ * @param readable 缓存可读
+ * @param bytes 输入缓存
+ * @param offset 指向已读数据的偏移量,off之前的数据都是已用过的
+ * @param limit 有效长度,limit之后的长度是空白或无效数据,off到limit之间的数据是准备使用的数据
+ * @return 后续动作
+ * @throws IOException
+ */
+ private NextAction receive(FilterChainContext context, Channel channel, Buffer buffer, int readable, byte[] bytes, int offset, int limit) throws IOException {
+ for(;;) {
+ int read = Math.min(readable, bytes.length - limit); // 取bytes缓存空闲区,和可读取新数据,的最小值,即:此次最多读写数据的大小
+ buffer.get(bytes, limit, read); // 从可读取新数据中,读取数据,尽量填满bytes缓存空闲区
+ limit += read; // 有效数据变长
+ readable -= read; // 可读数据变少
+ UnsafeByteArrayInputStream input = new UnsafeByteArrayInputStream(bytes, offset, limit - offset); // 将bytes缓存转成InputStream,不需要关闭
+ Object msg = upstreamCodec.decode(channel, input); // 调用Codec接口,解码数据
+ if (msg == Codec.NEED_MORE_INPUT) { // 如果Codec觉得数据不够,不足以解码成一个对象
+ if (readable == 0) { // 如果没有更多可读数据
+ channel.setAttribute(BUFFER_KEY, new Object[] { bytes, offset, limit }); // 放入通道属性中,等待下一个Buffer的到来
+ return context.getStopAction();
+ } else { // 扩充或挪出空闲区,并循环,直到可读数据都加载到bytes缓存
+ if (offset == 0) { // 如果bytes缓存全部没有被使用,如果这时数据还不够
+ bytes = Bytes.copyOf(bytes, bytes.length << 1); // 将bytes缓存扩大一倍
+ } else { // 如果bytes缓存有一段数据已被使用
+ int len = limit - offset; // 计算有效数据长度
+ System.arraycopy(bytes, offset, bytes, 0, len); // 将数据向前移到,压缩到已使用的部分,这样limit后面就会多出一些空闲,可以放数据
+ offset = 0; // 移到后,bytes缓存没有数据被使用
+ limit = len; // 移到后,有效数据都在bytes缓存最前面
+ }
+ }
+ } else { // 如果解析出一个结果
+ int position = input.position(); // 记录InputStream用了多少
+ if (position == offset) { // 如果InputStream没有被读过,就返回了数据,直接报错,否则InputStream永远读不完,会死递归
+ throw new IOException("Decode without read data.");
+ }
+ offset = position; // 记录已读数据
+ context.setMessage(msg); // 将消息改为解码后的对象,以便被后面的Filter使用。
+ if (limit - offset > 0 || readable > 0) { // 如果有效数据没有被读完,或者Buffer区还有未读数据
+ return context.getInvokeAction(new Object[] { buffer, readable, bytes, offset, limit }); // 正常执行完Filter,并重新发起一轮Filter,继续读
+ } else { // 否则所有数据读完
+ return context.getInvokeAction(); // 正常执行完Filter
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyHandler.java b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyHandler.java
new file mode 100644
index 0000000000..f7196cd305
--- /dev/null
+++ b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyHandler.java
@@ -0,0 +1,119 @@
+/*
+ * 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.remoting.transport.grizzly;
+
+import java.io.IOException;
+
+import org.glassfish.grizzly.Connection;
+import org.glassfish.grizzly.filterchain.BaseFilter;
+import org.glassfish.grizzly.filterchain.FilterChainContext;
+import org.glassfish.grizzly.filterchain.NextAction;
+
+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.StringUtils;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.RemotingException;
+
+/**
+ * GrizzlyHandler
+ *
+ * @author william.liangf
+ */
+public class GrizzlyHandler extends BaseFilter {
+
+ private static final Logger logger = LoggerFactory.getLogger(GrizzlyHandler.class);
+
+ private final URL url;
+
+ private final ChannelHandler handler;
+
+ public GrizzlyHandler(URL url, ChannelHandler handler){
+ this.url = url;
+ this.handler = handler;
+ }
+
+ @Override
+ public NextAction handleConnect(FilterChainContext ctx) throws IOException {
+ Connection> connection = ctx.getConnection();
+ GrizzlyChannel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler);
+ try {
+ handler.connected(channel);
+ } catch (RemotingException e) {
+ throw new IOException(StringUtils.toString(e));
+ } finally {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ }
+ return ctx.getInvokeAction();
+ }
+
+ @Override
+ public NextAction handleClose(FilterChainContext ctx) throws IOException {
+ Connection> connection = ctx.getConnection();
+ GrizzlyChannel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler);
+ try {
+ handler.disconnected(channel);
+ } catch (RemotingException e) {
+ throw new IOException(StringUtils.toString(e));
+ } finally {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ }
+ return ctx.getInvokeAction();
+ }
+
+ @Override
+ public NextAction handleRead(FilterChainContext ctx) throws IOException {
+ Connection> connection = ctx.getConnection();
+ GrizzlyChannel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler);
+ try {
+ handler.received(channel, ctx.getMessage());
+ } catch (RemotingException e) {
+ throw new IOException(StringUtils.toString(e));
+ } finally {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ }
+ return ctx.getInvokeAction();
+ }
+
+ @Override
+ public NextAction handleWrite(FilterChainContext ctx) throws IOException {
+ Connection> connection = ctx.getConnection();
+ GrizzlyChannel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler);
+ try {
+ handler.sent(channel, ctx.getMessage());
+ } catch (RemotingException e) {
+ throw new IOException(StringUtils.toString(e));
+ } finally {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ }
+ return ctx.getInvokeAction();
+ }
+
+ @Override
+ public void exceptionOccurred(FilterChainContext ctx, Throwable error) {
+ Connection> connection = ctx.getConnection();
+ GrizzlyChannel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler);
+ try {
+ handler.caught(channel, error);
+ } catch (RemotingException e) {
+ logger.error("RemotingException on channel " + channel, e);
+ } finally {
+ GrizzlyChannel.removeChannelIfDisconnectd(connection);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyServer.java b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyServer.java
new file mode 100644
index 0000000000..6a2cfc6559
--- /dev/null
+++ b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyServer.java
@@ -0,0 +1,118 @@
+/*
+ * 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.remoting.transport.grizzly;
+
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+
+import org.glassfish.grizzly.filterchain.FilterChainBuilder;
+import org.glassfish.grizzly.filterchain.TransportFilter;
+import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
+import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder;
+import org.glassfish.grizzly.strategies.SameThreadIOStrategy;
+import org.glassfish.grizzly.threadpool.ThreadPoolConfig;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.utils.NetUtils;
+import com.alibaba.dubbo.remoting.Channel;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.transport.support.AbstractServer;
+import com.alibaba.dubbo.remoting.transport.support.handler.ChannelHandlers;
+
+/**
+ * GrizzlyServer
+ *
+ * @author william.liangf
+ */
+public class GrizzlyServer extends AbstractServer {
+
+ private final Map channels = new ConcurrentHashMap(); //
+
+ private TCPNIOTransport transport;
+
+ public GrizzlyServer(URL url, ChannelHandler handler) throws RemotingException {
+ super(url, ChannelHandlers.wrap(handler, url));
+ }
+
+ @Override
+ protected void doOpen() throws Throwable {
+ FilterChainBuilder filterChainBuilder = FilterChainBuilder.stateless();
+ filterChainBuilder.add(new TransportFilter());
+
+ filterChainBuilder.add(new GrizzlyCodecAdapter(getCodec(), getDownstreamCodec(), getUrl(), this));
+ filterChainBuilder.add(new GrizzlyHandler(getUrl(), this));
+ TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
+ ThreadPoolConfig config = builder.getWorkerThreadPoolConfig();
+ config.setPoolName(SERVER_THREAD_POOL_NAME).setQueueLimit(-1);
+ String threadpool = getUrl().getParameter(Constants.THREADPOOL_KEY, Constants.DEFAULT_THREADPOOL);
+ if (Constants.DEFAULT_THREADPOOL.equals(threadpool)) {
+ int threads = getUrl().getPositiveIntParameter(Constants.THREADS_KEY, Constants.DEFAULT_THREADS);
+ config.setCorePoolSize(threads).setMaxPoolSize(threads)
+ .setKeepAliveTime(0L, TimeUnit.SECONDS);
+ } else if ("cached".equals(threadpool)) {
+ int threads = getUrl().getPositiveIntParameter(Constants.THREADS_KEY, Integer.MAX_VALUE);
+ config.setCorePoolSize(0).setMaxPoolSize(threads)
+ .setKeepAliveTime(60L, TimeUnit.SECONDS);
+ } else {
+ throw new IllegalArgumentException("Unsupported threadpool type " + threadpool);
+ }
+ builder.setKeepAlive(true).setReuseAddress(false)
+ .setIOStrategy(SameThreadIOStrategy.getInstance());
+ transport = builder.build();
+ transport.setProcessor(filterChainBuilder.build());
+ transport.bind(getBindAddress());
+ transport.start();
+ }
+
+ @Override
+ protected void doClose() throws Throwable {
+ try {
+ transport.stop();
+ } catch (Throwable e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+
+ public boolean isBound() {
+ return ! transport.isStopped();
+ }
+
+ public Collection getChannels() {
+ return channels.values();
+ }
+
+ public Channel getChannel(InetSocketAddress remoteAddress) {
+ return channels.get(NetUtils.toAddressString(remoteAddress));
+ }
+
+ @Override
+ public void connected(Channel ch) throws RemotingException {
+ channels.put(NetUtils.toAddressString(ch.getRemoteAddress()), ch);
+ super.connected(ch);
+ }
+
+ @Override
+ public void disconnected(Channel ch) throws RemotingException {
+ channels.remove(NetUtils.toAddressString(ch.getRemoteAddress()));
+ super.disconnected(ch);
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyTransporter.java b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyTransporter.java
new file mode 100644
index 0000000000..1a3e37f6bd
--- /dev/null
+++ b/dubbo-remoting-grizzly/src/main/java/com/alibaba/dubbo/remoting/transport/grizzly/GrizzlyTransporter.java
@@ -0,0 +1,44 @@
+/*
+ * 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.remoting.transport.grizzly;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.Client;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.Server;
+import com.alibaba.dubbo.remoting.Transporter;
+
+/**
+ * GrizzlyTransporter
+ *
+ * @author william.liangf
+ */
+@Extension(GrizzlyTransporter.NAME)
+public class GrizzlyTransporter implements Transporter {
+
+ public static final String NAME = "grizzly";
+
+ public Server bind(URL url, ChannelHandler listener) throws RemotingException {
+ return new GrizzlyServer(url, listener);
+ }
+
+ public Client connect(URL url, ChannelHandler listener) throws RemotingException {
+ return new GrizzlyClient(url, listener);
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-grizzly/src/main/resources/META-INF/services/com.alibaba.dubbo.remoting.Transporter b/dubbo-remoting-grizzly/src/main/resources/META-INF/services/com.alibaba.dubbo.remoting.Transporter
new file mode 100644
index 0000000000..5ce7f6747b
--- /dev/null
+++ b/dubbo-remoting-grizzly/src/main/resources/META-INF/services/com.alibaba.dubbo.remoting.Transporter
@@ -0,0 +1 @@
+com.alibaba.dubbo.remoting.transport.grizzly.GrizzlyTransporter
\ No newline at end of file
diff --git a/dubbo-remoting-mina/pom.xml b/dubbo-remoting-mina/pom.xml
index ec58067c6e..be221a3c0b 100644
--- a/dubbo-remoting-mina/pom.xml
+++ b/dubbo-remoting-mina/pom.xml
@@ -31,5 +31,9 @@
dubbo-remoting
${project.parent.version}
+
+ org.apache.mina
+ mina-core
+
\ No newline at end of file
diff --git a/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaChannel.java b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaChannel.java
new file mode 100644
index 0000000000..52cef5f148
--- /dev/null
+++ b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaChannel.java
@@ -0,0 +1,172 @@
+/*
+ * 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.remoting.transport.mina;
+
+import java.net.InetSocketAddress;
+
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.WriteFuture;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.logger.Logger;
+import com.alibaba.dubbo.common.logger.LoggerFactory;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.transport.support.AbstractChannel;
+
+/**
+ * MinaChannel
+ *
+ * @author qian.lei
+ * @author william.liangf
+ */
+final class MinaChannel extends AbstractChannel {
+
+ private static final Logger logger = LoggerFactory.getLogger(MinaChannel.class);
+
+ private static final String CHANNEL_KEY = MinaChannel.class.getName() + ".CHANNEL";
+
+ private final IoSession session;
+
+ private MinaChannel(IoSession session, URL url, ChannelHandler handler){
+ super(url, handler);
+ if (session == null) {
+ throw new IllegalArgumentException("mina session == null");
+ }
+ this.session = session;
+ }
+
+ static MinaChannel getOrAddChannel(IoSession session, URL url, ChannelHandler handler) {
+ if (session == null) {
+ return null;
+ }
+ MinaChannel ret = (MinaChannel) session.getAttribute(CHANNEL_KEY);
+ if (ret == null) {
+ ret = new MinaChannel(session, url, handler);
+ if (session.isConnected()) {
+ MinaChannel old = (MinaChannel) session.setAttribute(CHANNEL_KEY, ret);
+ if (old != null) {
+ session.setAttribute(CHANNEL_KEY, old);
+ ret = old;
+ }
+ }
+ }
+ return ret;
+ }
+
+ static void removeChannelIfDisconnectd(IoSession session) {
+ if (session != null && ! session.isConnected()) {
+ session.removeAttribute(CHANNEL_KEY);
+ }
+ }
+
+ public InetSocketAddress getLocalAddress() {
+ return (InetSocketAddress) session.getLocalAddress();
+ }
+
+ public InetSocketAddress getRemoteAddress() {
+ return (InetSocketAddress) session.getRemoteAddress();
+ }
+
+ public boolean isConnected() {
+ return session.isConnected();
+ }
+
+ public void send(Object message, boolean sent) throws RemotingException {
+ super.send(message, sent);
+
+ boolean success = true;
+ int timeout = 0;
+ try {
+ WriteFuture future = session.write(message);
+ if (sent) {
+ timeout = getUrl().getPositiveIntParameter(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);
+ success = future.join(timeout);
+ }
+ } catch (Throwable e) {
+ throw new RemotingException(this, "Failed to send message " + message + " to " + getRemoteAddress() + ", cause: " + e.getMessage(), e);
+ }
+
+ if(!success) {
+ throw new RemotingException(this, "Failed to send message " + message + " to " + getRemoteAddress()
+ + "in timeout(" + timeout + "ms) limit");
+ }
+ }
+
+ public void close() {
+ try {
+ super.close();
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ try {
+ removeChannelIfDisconnectd(session);
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ try {
+ if (logger.isInfoEnabled()) {
+ logger.info("CLose mina channel " + session);
+ }
+ session.close();
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+
+ public boolean hasAttribute(String key) {
+ return session.containsAttribute(key);
+ }
+
+ public Object getAttribute(String key) {
+ return session.getAttribute(key);
+ }
+
+ public void setAttribute(String key, Object value) {
+ session.setAttribute(key, value);
+ }
+
+ public void removeAttribute(String key) {
+ session.removeAttribute(key);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((session == null) ? 0 : session.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ MinaChannel other = (MinaChannel) obj;
+ if (session == null) {
+ if (other.session != null) return false;
+ } else if (!session.equals(other.session)) return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "MinaChannel [session=" + session + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaClient.java b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaClient.java
new file mode 100644
index 0000000000..612264fa49
--- /dev/null
+++ b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaClient.java
@@ -0,0 +1,177 @@
+/*
+ * 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.remoting.transport.mina;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.IoFuture;
+import org.apache.mina.common.IoFutureListener;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.ThreadModel;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.transport.socket.nio.SocketConnector;
+import org.apache.mina.transport.socket.nio.SocketConnectorConfig;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.Version;
+import com.alibaba.dubbo.common.utils.NamedThreadFactory;
+import com.alibaba.dubbo.common.utils.NetUtils;
+import com.alibaba.dubbo.remoting.Channel;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.transport.support.AbstractClient;
+import com.alibaba.dubbo.remoting.transport.support.handler.ChannelHandlers;
+
+/**
+ * Mina client.
+ *
+ * @author qian.lei
+ * @author william.liangf
+ */
+public class MinaClient extends AbstractClient {
+
+ private static final Map connectors = new ConcurrentHashMap();
+
+ private String connectorKey;
+
+ private SocketConnector connector;
+
+ private volatile IoSession session; // volatile, please copy reference to use
+
+ public MinaClient(final URL url, final ChannelHandler handler) throws RemotingException {
+ super(url, wrapChannelHandler(url, handler));
+ }
+
+ protected static ChannelHandler wrapChannelHandler(URL url, ChannelHandler handler){
+ url = url.addParameter(Constants.THREAD_NAME_KEY, CLIENT_THREAD_POOL_NAME)
+ .addParameter(Constants.THREADPOOL_KEY, Constants.DEFAULT_CLIENT_THREADPOOL);
+ return ChannelHandlers.wrap(handler, url);
+ }
+
+ @Override
+ protected void doOpen() throws Throwable {
+ connectorKey = getUrl().toFullString();
+ SocketConnector c = connectors.get(connectorKey);
+ if (c != null) {
+ connector = c;
+ } else {
+ // set thread pool.
+ connector = new SocketConnector(Constants.DEFAULT_IO_THREADS,
+ Executors.newCachedThreadPool(new NamedThreadFactory("MinaClientWorker", true)));
+ // config
+ SocketConnectorConfig cfg = (SocketConnectorConfig) connector.getDefaultConfig();
+ cfg.setThreadModel(ThreadModel.MANUAL);
+ cfg.getSessionConfig().setTcpNoDelay(true);
+ cfg.getSessionConfig().setKeepAlive(true);
+ int timeout = getTimeout();
+ cfg.setConnectTimeout(timeout < 1000 ? 1 : timeout / 1000);
+ // set codec.
+ connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaCodecAdapter(getCodec(), getUrl(), this)));
+ connectors.put(connectorKey, connector);
+ }
+ }
+
+ @Override
+ protected void doConnect() throws Throwable {
+ ConnectFuture future = connector.connect(getConnectAddress(), new MinaHandler(getUrl(), this));
+ long start = System.currentTimeMillis();
+ final AtomicReference exception = new AtomicReference();
+ final CountDownLatch finish = new CountDownLatch(1); // resolve future.awaitUninterruptibly() dead lock
+ future.addListener(new IoFutureListener() {
+ public void operationComplete(IoFuture future) {
+ try {
+ if (future.isReady()) {
+ IoSession newSession = future.getSession();
+ try {
+ // 关闭旧的连接
+ IoSession oldSession = MinaClient.this.session; // copy reference
+ if (oldSession != null) {
+ try {
+ if (logger.isInfoEnabled()) {
+ logger.info("Close old mina channel " + oldSession + " on create new mina channel " + newSession);
+ }
+ oldSession.close();
+ } finally {
+ MinaChannel.removeChannelIfDisconnectd(oldSession);
+ }
+ }
+ } finally {
+ if (MinaClient.this.isClosed()) {
+ try {
+ if (logger.isInfoEnabled()) {
+ logger.info("Close new mina channel " + newSession + ", because the client closed.");
+ }
+ newSession.close();
+ } finally {
+ MinaClient.this.session = null;
+ MinaChannel.removeChannelIfDisconnectd(newSession);
+ }
+ } else {
+ MinaClient.this.session = newSession;
+ }
+ }
+ }
+ } catch (Exception e) {
+ exception.set(e);
+ } finally {
+ finish.countDown();
+ }
+ }
+ });
+ try {
+ finish.await(getTimeout(), TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ throw new RemotingException(this, "Failed to connect to server " + getRemoteAddress() + " client-side timeout "
+ + getTimeout() + "ms (elapsed: " + (System.currentTimeMillis() - start)
+ + "ms) from netty client " + NetUtils.getLocalHost() + " using dubbo version "
+ + Version.getVersion() + ", cause: " + e.getMessage(), e);
+ }
+ Throwable e = exception.get();
+ if (e != null) {
+ throw e;
+ }
+ }
+
+ @Override
+ protected void doDisConnect() throws Throwable {
+ try {
+ MinaChannel.removeChannelIfDisconnectd(session);
+ } catch (Throwable t) {
+ logger.warn(t.getMessage());
+ }
+ }
+
+ @Override
+ protected void doClose() throws Throwable {
+ //release mina resouces.
+ }
+
+ @Override
+ protected Channel getChannel() {
+ IoSession s = session;
+ if (s == null || ! s.isConnected())
+ return null;
+ return MinaChannel.getOrAddChannel(s, getUrl(), this);
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaCodecAdapter.java b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaCodecAdapter.java
new file mode 100644
index 0000000000..632acbb2ad
--- /dev/null
+++ b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaCodecAdapter.java
@@ -0,0 +1,193 @@
+/*
+ * 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.remoting.transport.mina;
+
+import java.io.IOException;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.io.Bytes;
+import com.alibaba.dubbo.common.io.UnsafeByteArrayInputStream;
+import com.alibaba.dubbo.common.io.UnsafeByteArrayOutputStream;
+import com.alibaba.dubbo.remoting.Channel;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.Codec;
+import com.alibaba.dubbo.remoting.exchange.Response;
+
+/**
+ * MinaCodecAdapter.
+ *
+ * @author qian.lei
+ */
+final class MinaCodecAdapter implements ProtocolCodecFactory {
+
+ private static final String BUFFER_KEY = MinaCodecAdapter.class.getName() + ".BUFFER";
+
+ private final ProtocolEncoder encoder = new InternalEncoder();
+
+ private final ProtocolDecoder decoder = new InternalDecoder();
+
+ private final Codec upstreamCodec;
+ private final Codec downstreamCodec;
+
+ private final URL url;
+
+ private final ChannelHandler handler;
+
+ private final int bufferSize;
+
+ public MinaCodecAdapter(Codec codec, URL url, ChannelHandler handler){
+ this(codec,codec,url,handler);
+ }
+
+ /**
+ * server 端如果有消息发送需要分开codec,默认的上行code是dubbo1兼容的
+ */
+ public MinaCodecAdapter(Codec upstreamCodec, Codec downstreamCodec, URL url, ChannelHandler handler){
+ this.upstreamCodec = upstreamCodec;
+ this.downstreamCodec = downstreamCodec;
+ this.url = url;
+ this.handler = handler;
+ int b = url.getPositiveIntParameter(Constants.BUFFER_KEY, Constants.DEFAULT_BUFFER_SIZE);
+ this.bufferSize = b >= Constants.MIN_BUFFER_SIZE && b <= Constants.MAX_BUFFER_SIZE ? b : Constants.DEFAULT_BUFFER_SIZE;
+ }
+
+ public ProtocolEncoder getEncoder() {
+ return encoder;
+ }
+
+ public ProtocolDecoder getDecoder() {
+ return decoder;
+ }
+
+ private class InternalEncoder implements ProtocolEncoder {
+
+ public void dispose(IoSession session) throws Exception {
+ }
+
+ public void encode(IoSession session, Object msg, ProtocolEncoderOutput out) throws Exception {
+ UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(1024); // 不需要关闭
+ MinaChannel channel = MinaChannel.getOrAddChannel(session, url, handler);
+ try {
+ if(!(msg instanceof Response)){
+ downstreamCodec.encode(channel, os, msg);
+ }else{
+ upstreamCodec.encode(channel, os, msg);
+ }
+
+ } finally {
+ MinaChannel.removeChannelIfDisconnectd(session);
+ }
+ out.write(ByteBuffer.wrap(os.toByteArray()));
+ out.flush();
+ }
+ }
+
+ private class InternalDecoder implements ProtocolDecoder {
+
+ public void decode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception {
+ int readable = in.limit();
+ if (readable <= 0) return;
+
+ int off, limit;
+ byte[] buf;
+ // load buffer from context.
+ Object[] tmp = (Object[]) session.getAttribute(BUFFER_KEY);
+ if (tmp == null) {
+ buf = new byte[bufferSize];
+ off = limit = 0;
+ } else {
+ buf = (byte[]) tmp[0];
+ off = (Integer) tmp[1];
+ limit = (Integer) tmp[2];
+ }
+
+ Channel channel = MinaChannel.getOrAddChannel(session, url, handler);
+ boolean remaining = true;
+ Object msg;
+ UnsafeByteArrayInputStream bis;
+ try {
+ do {
+ // read data into buffer.
+ int read = Math.min(readable, buf.length - limit);
+ in.get(buf, limit, read);
+ limit += read;
+ readable -= read;
+ bis = new UnsafeByteArrayInputStream(buf, off, limit - off); // 不需要关闭
+ // decode object.
+ do {
+ try {
+ msg = upstreamCodec.decode(channel, bis);
+ } catch (IOException e) {
+ remaining = false;
+ throw e;
+ }
+ if (msg == Codec.NEED_MORE_INPUT) {
+ if (off == 0) {
+ if (readable > 0) {
+ buf = Bytes.copyOf(buf, buf.length << 1);
+ }
+ } else {
+ int len = limit - off;
+ System.arraycopy(buf, off, buf, 0, len);
+ off = 0;
+ limit = len;
+ }
+ break;
+ } else {
+ int pos = bis.position();
+ if (pos == off) {
+ remaining = false;
+ throw new IOException("Decode without read data.");
+ }
+ if (msg != null) {
+ out.write(msg);
+ }
+ off = pos;
+ }
+ } while (bis.available() > 0);
+ } while (readable > 0);
+ } finally {
+ if (remaining) {
+ int len = limit - off;
+ if (len < buf.length / 2) {
+ System.arraycopy(buf, off, buf, 0, len);
+ off = 0;
+ limit = len;
+ }
+ session.setAttribute(BUFFER_KEY, new Object[] { buf, off, limit });
+ } else {
+ session.removeAttribute(BUFFER_KEY);
+ }
+ MinaChannel.removeChannelIfDisconnectd(session);
+ }
+ }
+
+ public void dispose(IoSession session) throws Exception {
+ }
+
+ public void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception {
+ }
+ }
+}
\ No newline at end of file
diff --git a/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaHandler.java b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaHandler.java
new file mode 100644
index 0000000000..a2074953fc
--- /dev/null
+++ b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaHandler.java
@@ -0,0 +1,96 @@
+/*
+ * 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.remoting.transport.mina;
+
+import org.apache.mina.common.IoHandlerAdapter;
+import org.apache.mina.common.IoSession;
+
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+
+/**
+ * MinaHandler
+ *
+ * @author william.liangf
+ */
+public class MinaHandler extends IoHandlerAdapter {
+
+ private final URL url;
+
+ private final ChannelHandler handler;
+
+ public MinaHandler(URL url, ChannelHandler handler) {
+ if (url == null) {
+ throw new IllegalArgumentException("url == null");
+ }
+ if (handler == null) {
+ throw new IllegalArgumentException("handler == null");
+ }
+ this.url = url;
+ this.handler = handler;
+ }
+
+ @Override
+ public void sessionOpened(IoSession session) throws Exception {
+ MinaChannel channel = MinaChannel.getOrAddChannel(session, url, handler);
+ try {
+ handler.connected(channel);
+ } finally {
+ MinaChannel.removeChannelIfDisconnectd(session);
+ }
+ }
+
+ @Override
+ public void sessionClosed(IoSession session) throws Exception {
+ MinaChannel channel = MinaChannel.getOrAddChannel(session, url, handler);
+ try {
+ handler.disconnected(channel);
+ } finally {
+ MinaChannel.removeChannelIfDisconnectd(session);
+ }
+ }
+
+ @Override
+ public void messageReceived(IoSession session, Object message) throws Exception {
+ MinaChannel channel = MinaChannel.getOrAddChannel(session, url, handler);
+ try {
+ handler.received(channel, message);
+ } finally {
+ MinaChannel.removeChannelIfDisconnectd(session);
+ }
+ }
+
+ @Override
+ public void messageSent(IoSession session, Object message) throws Exception {
+ MinaChannel channel = MinaChannel.getOrAddChannel(session, url, handler);
+ try {
+ handler.sent(channel, message);
+ } finally {
+ MinaChannel.removeChannelIfDisconnectd(session);
+ }
+ }
+
+ @Override
+ public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+ MinaChannel channel = MinaChannel.getOrAddChannel(session, url, handler);
+ try {
+ handler.caught(channel, cause);
+ } finally {
+ MinaChannel.removeChannelIfDisconnectd(session);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaServer.java b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaServer.java
new file mode 100644
index 0000000000..8794435323
--- /dev/null
+++ b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaServer.java
@@ -0,0 +1,105 @@
+/*
+ * 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.remoting.transport.mina;
+
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.Executors;
+
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.ThreadModel;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.transport.socket.nio.SocketAcceptor;
+import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.utils.NamedThreadFactory;
+import com.alibaba.dubbo.remoting.Channel;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.transport.support.AbstractServer;
+import com.alibaba.dubbo.remoting.transport.support.handler.ChannelHandlers;
+
+/**
+ * MinaServer
+ *
+ * @author qian.lei
+ * @author william.liangf
+ * @author ding.lid
+ */
+public class MinaServer extends AbstractServer {
+
+ private SocketAcceptor acceptor;
+
+ public MinaServer(URL url, ChannelHandler handler) throws RemotingException{
+ super(url, ChannelHandlers.wrap(handler, url.addParameter(Constants.THREAD_NAME_KEY, SERVER_THREAD_POOL_NAME)));
+ }
+
+ @Override
+ protected void doOpen() throws Throwable {
+ // set thread pool.
+ acceptor = new SocketAcceptor(getUrl().getPositiveIntParameter(Constants.IO_THREADS_KEY, Constants.DEFAULT_IO_THREADS),
+ Executors.newCachedThreadPool(new NamedThreadFactory("MinaServerWorker",
+ true)));
+ // config
+ SocketAcceptorConfig cfg = (SocketAcceptorConfig) acceptor.getDefaultConfig();
+ cfg.setThreadModel(ThreadModel.MANUAL);
+ // set codec.
+ acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaCodecAdapter(getCodec(), getDownstreamCodec(), getUrl(), this)));
+
+ acceptor.bind(getBindAddress(), new MinaHandler(getUrl(), this));
+ }
+
+ @Override
+ protected void doClose() throws Throwable {
+ try {
+ if (acceptor != null) {
+ acceptor.unbind(getBindAddress());
+ }
+ } catch (Throwable e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+
+ public Collection getChannels() {
+ Set sessions = acceptor.getManagedSessions(getBindAddress());
+ Collection channels = new HashSet();
+ for (IoSession session : sessions) {
+ if (session.isConnected()) {
+ channels.add(MinaChannel.getOrAddChannel(session, getUrl(), this));
+ }
+ }
+ return channels;
+ }
+
+ public Channel getChannel(InetSocketAddress remoteAddress) {
+ Set sessions = acceptor.getManagedSessions(getBindAddress());
+ for (IoSession session : sessions) {
+ if (session.getRemoteAddress().equals(remoteAddress)) {
+ return MinaChannel.getOrAddChannel(session, getUrl(), this);
+ }
+ }
+ return null;
+ }
+
+ public boolean isBound() {
+ return acceptor.isManaged(getBindAddress());
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaTransporter.java b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaTransporter.java
new file mode 100644
index 0000000000..71a5b5894f
--- /dev/null
+++ b/dubbo-remoting-mina/src/main/java/com/alibaba/remoting/transport/mina/MinaTransporter.java
@@ -0,0 +1,42 @@
+/*
+ * 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.remoting.transport.mina;
+
+import com.alibaba.dubbo.common.Extension;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.remoting.ChannelHandler;
+import com.alibaba.dubbo.remoting.Client;
+import com.alibaba.dubbo.remoting.RemotingException;
+import com.alibaba.dubbo.remoting.Server;
+import com.alibaba.dubbo.remoting.Transporter;
+
+/**
+ * @author ding.lid
+ */
+@Extension(MinaTransporter.NAME)
+public class MinaTransporter implements Transporter {
+
+ public static final String NAME = "mina";
+
+ public Server bind(URL url, ChannelHandler handler) throws RemotingException {
+ return new MinaServer(url, handler);
+ }
+
+ public Client connect(URL url, ChannelHandler handler) throws RemotingException {
+ return new MinaClient(url, handler);
+ }
+
+}
\ No newline at end of file
diff --git a/dubbo-remoting-mina/src/main/resources/META-INF/services/com.alibaba.dubbo.remoting.Transporter b/dubbo-remoting-mina/src/main/resources/META-INF/services/com.alibaba.dubbo.remoting.Transporter
new file mode 100644
index 0000000000..0e74d61a10
--- /dev/null
+++ b/dubbo-remoting-mina/src/main/resources/META-INF/services/com.alibaba.dubbo.remoting.Transporter
@@ -0,0 +1 @@
+com.alibaba.dubbo.remoting.transport.support.grizzly.GrizzlyTransporter
\ No newline at end of file
diff --git a/dubbo-remoting-netty/pom.xml b/dubbo-remoting-netty/pom.xml
new file mode 100644
index 0000000000..76e5e33676
--- /dev/null
+++ b/dubbo-remoting-netty/pom.xml
@@ -0,0 +1,39 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-remoting-netty
+ jar
+ Dubbo Netty Remoting Module
+ The netty remoting module of dubbo project
+
+
+ com.alibaba
+ dubbo-remoting
+ ${project.parent.version}
+
+
+ org.jboss.netty
+ netty
+
+
+
\ No newline at end of file
diff --git a/dubbo-rpc-default/pom.xml b/dubbo-rpc-default/pom.xml
new file mode 100644
index 0000000000..eb876fab57
--- /dev/null
+++ b/dubbo-rpc-default/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-rpc-default
+ jar
+ Dubbo Default RPC Module
+ The default rpc module of dubbo project
+
+
+ com.alibaba
+ dubbo-rpc
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/dubbo-rpc-injvm/pom.xml b/dubbo-rpc-injvm/pom.xml
new file mode 100644
index 0000000000..c96cbbf3c5
--- /dev/null
+++ b/dubbo-rpc-injvm/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-rpc-injvm
+ jar
+ Dubbo InJVM RPC Module
+ The injvm rpc module of dubbo project
+
+
+ com.alibaba
+ dubbo-rpc
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/dubbo-rpc-xfire/pom.xml b/dubbo-rpc-xfire/pom.xml
new file mode 100644
index 0000000000..0d26e55a57
--- /dev/null
+++ b/dubbo-rpc-xfire/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ com.alibaba
+ dubbo-parent
+ 2.0.8-SNAPSHOT
+
+ dubbo-rpc-xfire
+ jar
+ Dubbo Xfire RPC Module
+ The xfire rpc module of dubbo project
+
+
+ com.alibaba
+ dubbo-rpc
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Exporter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Exporter.java
index 52f759fd70..1494390a42 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Exporter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Exporter.java
@@ -20,7 +20,7 @@ package com.alibaba.dubbo.rpc;
*
* @see com.alibaba.dubbo.rpc.Protocol#export(Invoker)
* @see com.alibaba.dubbo.rpc.ExporterListener
- * @see com.alibaba.dubbo.rpc.support.AbstractExporter
+ * @see com.alibaba.dubbo.rpc.protocol.AbstractExporter
* @author william.liangf
*/
public interface Exporter {
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Invoker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Invoker.java
index d76ebc7397..f55b22370d 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Invoker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/Invoker.java
@@ -22,7 +22,7 @@ import com.alibaba.dubbo.common.URL;
*
* @see com.alibaba.dubbo.rpc.Protocol#refer(Class, URL)
* @see com.alibaba.dubbo.rpc.InvokerListener
- * @see com.alibaba.dubbo.rpc.support.AbstractInvoker
+ * @see com.alibaba.dubbo.rpc.protocol.AbstractInvoker
* @author william.liangf
*/
public interface Invoker {
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/ProxyFactory.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/ProxyFactory.java
similarity index 92%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/ProxyFactory.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/ProxyFactory.java
index c5f7dd3da8..6c38f29a9e 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/ProxyFactory.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/ProxyFactory.java
@@ -13,14 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy;
+package com.alibaba.dubbo.rpc;
import com.alibaba.dubbo.common.Adaptive;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.RpcException;
/**
* ProxyFactory. (SPI, Singleton, ThreadSafe)
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java
index 887072c752..1b73218db9 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcContext.java
@@ -27,7 +27,7 @@ import com.alibaba.dubbo.common.utils.NetUtils;
* Thread local context. (API, ThreadLocal, ThreadSafe)
*
* @see com.alibaba.dubbo.rpc.filter.ContextFilter
- * @see com.alibaba.dubbo.rpc.support.AbstractExporter#invoke(Invocation, InetSocketAddress)
+ * @see com.alibaba.dubbo.rpc.protocol.AbstractExporter#invoke(Invocation, InetSocketAddress)
* @author qian.lei
* @author william.liangf
*/
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java
index 8ce4f581d8..9051cee0f7 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java
@@ -33,7 +33,7 @@ import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.StaticContext;
-import com.alibaba.dubbo.rpc.support.FutureAdapter;
+import com.alibaba.dubbo.rpc.protocol.FutureAdapter;
/**
* EventFilter
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/ExceptionFilter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/ExceptionFilter.java
index 3a58d33ddd..db172a1463 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/ExceptionFilter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/ExceptionFilter.java
@@ -28,7 +28,7 @@ import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcResult;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.service.GenericService;
/**
* ExceptionInvokerFilter
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java
index ba71fffb7f..88160e9564 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java
@@ -28,7 +28,7 @@ import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcInvocation;
import com.alibaba.dubbo.rpc.RpcResult;
-import com.alibaba.dubbo.rpc.service.GenericException;
+import com.alibaba.dubbo.service.GenericException;
/**
* GenericInvokerFilter.
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractExporter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractExporter.java
similarity index 98%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractExporter.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractExporter.java
index 254dc7abaf..affd5030d7 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractExporter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractExporter.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.support;
+package com.alibaba.dubbo.rpc.protocol;
import java.net.InetSocketAddress;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractInvoker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractInvoker.java
similarity index 98%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractInvoker.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractInvoker.java
index 8f06e44638..0ac5b626ab 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractInvoker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractInvoker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.support;
+package com.alibaba.dubbo.rpc.protocol;
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractProtocol.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractProtocol.java
similarity index 98%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractProtocol.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractProtocol.java
index 5e80c879a6..2c482251e7 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/AbstractProtocol.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/AbstractProtocol.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.support;
+package com.alibaba.dubbo.rpc.protocol;
import java.util.ArrayList;
import java.util.Map;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/FutureAdapter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/FutureAdapter.java
similarity index 95%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/FutureAdapter.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/FutureAdapter.java
index 44d7f1d4af..0ef5937411 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/FutureAdapter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/FutureAdapter.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.support;
+package com.alibaba.dubbo.rpc.protocol;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/InvokerWrapper.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/InvokerWrapper.java
similarity index 93%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/InvokerWrapper.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/InvokerWrapper.java
index 3a0511c3c9..4f54dc66c6 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/InvokerWrapper.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/InvokerWrapper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.support;
+package com.alibaba.dubbo.rpc.protocol;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invocation;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/ProtocolFilterWrapper.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/ProtocolFilterWrapper.java
similarity index 96%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/ProtocolFilterWrapper.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/ProtocolFilterWrapper.java
index 7b3438f437..de915dcd77 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/ProtocolFilterWrapper.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/ProtocolFilterWrapper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.support;
+package com.alibaba.dubbo.rpc.protocol;
import java.util.ArrayList;
import java.util.List;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/ProtocolListenerWrapper.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/ProtocolListenerWrapper.java
similarity index 96%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/ProtocolListenerWrapper.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/ProtocolListenerWrapper.java
index c683e4c426..369af610b9 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/support/ProtocolListenerWrapper.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/ProtocolListenerWrapper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.support;
+package com.alibaba.dubbo.rpc.protocol;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/CallbackServiceCodec.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
similarity index 99%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/CallbackServiceCodec.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
index ff23dda0e0..212ab09cd9 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/CallbackServiceCodec.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
import java.io.IOException;
import java.util.HashMap;
@@ -32,9 +32,9 @@ import com.alibaba.dubbo.remoting.Channel;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcInvocation;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
/**
* callback 服务帮助类.
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/ChannelWrappedInvoker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/ChannelWrappedInvoker.java
similarity index 98%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/ChannelWrappedInvoker.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/ChannelWrappedInvoker.java
index a5d6f4329a..4b484be74e 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/ChannelWrappedInvoker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/ChannelWrappedInvoker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
import java.net.InetSocketAddress;
@@ -31,7 +31,7 @@ import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcInvocation;
-import com.alibaba.dubbo.rpc.support.AbstractInvoker;
+import com.alibaba.dubbo.rpc.protocol.AbstractInvoker;
/**
* 基于已有channel的invoker.
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboCodec.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
similarity index 96%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboCodec.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
index d5b76fc6dd..913bb6dcc0 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboCodec.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
-import static com.alibaba.dubbo.rpc.dubbo.CallbackServiceCodec.decodeInvocationArgument;
-import static com.alibaba.dubbo.rpc.dubbo.CallbackServiceCodec.encodeInvocationArgument;
+import static com.alibaba.dubbo.rpc.protocol.dubbo.CallbackServiceCodec.decodeInvocationArgument;
+import static com.alibaba.dubbo.rpc.protocol.dubbo.CallbackServiceCodec.encodeInvocationArgument;
import java.io.IOException;
import java.util.HashMap;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboExporter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboExporter.java
similarity index 89%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboExporter.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboExporter.java
index 38be6d769d..e965da9626 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboExporter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboExporter.java
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
import java.util.Map;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.support.AbstractExporter;
+import com.alibaba.dubbo.rpc.protocol.AbstractExporter;
/**
* DubboExporter
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboInvoker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java
similarity index 94%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboInvoker.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java
index f3520e31d3..b5a7e852c0 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboInvoker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
@@ -28,8 +28,8 @@ import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcInvocation;
-import com.alibaba.dubbo.rpc.support.AbstractInvoker;
-import com.alibaba.dubbo.rpc.support.FutureAdapter;
+import com.alibaba.dubbo.rpc.protocol.AbstractInvoker;
+import com.alibaba.dubbo.rpc.protocol.FutureAdapter;
/**
* DubboInvoker
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboProtocol.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboProtocol.java
similarity index 99%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboProtocol.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboProtocol.java
index a56ba650d5..d9b8f85e51 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/DubboProtocol.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboProtocol.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
import java.net.InetSocketAddress;
import java.util.ArrayList;
@@ -47,7 +47,7 @@ import com.alibaba.dubbo.rpc.Protocol;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcInvocation;
-import com.alibaba.dubbo.rpc.support.AbstractProtocol;
+import com.alibaba.dubbo.rpc.protocol.AbstractProtocol;
/**
* dubbo protocol support.
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/LazyConnectExchangeClient.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/LazyConnectExchangeClient.java
similarity index 94%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/LazyConnectExchangeClient.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/LazyConnectExchangeClient.java
index 7049aa5382..48e794f734 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/LazyConnectExchangeClient.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/LazyConnectExchangeClient.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
import java.net.InetSocketAddress;
import java.util.concurrent.locks.Lock;
@@ -29,6 +29,7 @@ import com.alibaba.dubbo.remoting.exchange.ExchangeClient;
import com.alibaba.dubbo.remoting.exchange.ExchangeHandler;
import com.alibaba.dubbo.remoting.exchange.Exchangers;
import com.alibaba.dubbo.remoting.exchange.ResponseFuture;
+import com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeClient;
import com.alibaba.dubbo.rpc.RpcConstants;
/**
@@ -42,7 +43,7 @@ final class LazyConnectExchangeClient implements ExchangeClient {
private final URL url;
private final ExchangeHandler requestHandler;
- private volatile ExchangeClient client;
+ private volatile HeaderExchangeClient client;
private final Lock connectLock = new ReentrantLock();
//lazy connect 如果没有初始化时的连接状态
private final boolean initialState ;
@@ -64,7 +65,8 @@ final class LazyConnectExchangeClient implements ExchangeClient {
try {
if (client != null)
return;
- this.client = Exchangers.connect(url, requestHandler);
+ this.client = new HeaderExchangeClient(Exchangers.connect(url, requestHandler));
+// if (client == )
} finally {
connectLock.unlock();
}
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/status/ServerStatusChecker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/status/ServerStatusChecker.java
similarity index 91%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/status/ServerStatusChecker.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/status/ServerStatusChecker.java
index 86074d1a73..b69ad3fd7e 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/status/ServerStatusChecker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/status/ServerStatusChecker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.status;
+package com.alibaba.dubbo.rpc.protocol.dubbo.status;
import java.util.Collection;
@@ -21,7 +21,7 @@ import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.status.Status;
import com.alibaba.dubbo.common.status.StatusChecker;
import com.alibaba.dubbo.remoting.exchange.ExchangeServer;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* ServerStatusChecker
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/status/ThreadPoolStatusChecker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/status/ThreadPoolStatusChecker.java
similarity index 93%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/status/ThreadPoolStatusChecker.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/status/ThreadPoolStatusChecker.java
index 7529d998ba..61c7672a80 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/status/ThreadPoolStatusChecker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/status/ThreadPoolStatusChecker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.status;
+package com.alibaba.dubbo.rpc.protocol.dubbo.status;
import java.util.Collection;
import java.util.concurrent.Executor;
@@ -27,7 +27,7 @@ import com.alibaba.dubbo.remoting.Server;
import com.alibaba.dubbo.remoting.exchange.ExchangeServer;
import com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeServer;
import com.alibaba.dubbo.remoting.transport.support.handler.WrappedChannelHandler;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* ThreadPoolStatusChecker
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/ChangeTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/ChangeTelnetHandler.java
similarity index 93%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/ChangeTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/ChangeTelnetHandler.java
index 20aac2bea7..0394f2c4b7 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/ChangeTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/ChangeTelnetHandler.java
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.remoting.Channel;
import com.alibaba.dubbo.remoting.telnet.TelnetHandler;
import com.alibaba.dubbo.remoting.telnet.support.Help;
import com.alibaba.dubbo.rpc.Exporter;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* ChangeServiceTelnetHandler
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/CountTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/CountTelnetHandler.java
similarity index 96%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/CountTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/CountTelnetHandler.java
index cc8b73e92d..27d8a46ee9 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/CountTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/CountTelnetHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -30,7 +30,7 @@ import com.alibaba.dubbo.remoting.telnet.support.TelnetUtils;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.RpcStatus;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* CountTelnetHandler
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/CurrentTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/CurrentTelnetHandler.java
similarity index 94%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/CurrentTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/CurrentTelnetHandler.java
index 398bc50ed4..b81b82c9c1 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/CurrentTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/CurrentTelnetHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.remoting.Channel;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/InvokeTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java
similarity index 95%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/InvokeTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java
index 4c0f1f439d..fddb054270 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/InvokeTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import java.lang.reflect.Method;
import java.util.List;
@@ -29,7 +29,7 @@ import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcInvocation;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* InvokeTelnetHandler
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/ListTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/ListTelnetHandler.java
similarity index 94%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/ListTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/ListTelnetHandler.java
index bd8bae8607..28c0ada8e4 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/ListTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/ListTelnetHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import java.lang.reflect.Method;
@@ -24,7 +24,7 @@ import com.alibaba.dubbo.remoting.telnet.TelnetHandler;
import com.alibaba.dubbo.remoting.telnet.support.Help;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* ListTelnetHandler
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/LogTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/LogTelnetHandler.java
similarity index 98%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/LogTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/LogTelnetHandler.java
index d9670a6e7e..25be1a8ad0 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/LogTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/LogTelnetHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import java.io.File;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/PortTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/PortTelnetHandler.java
similarity index 94%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/PortTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/PortTelnetHandler.java
index d5ada09462..745362778e 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/PortTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/PortTelnetHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import java.util.Collection;
@@ -24,7 +24,7 @@ import com.alibaba.dubbo.remoting.exchange.ExchangeChannel;
import com.alibaba.dubbo.remoting.exchange.ExchangeServer;
import com.alibaba.dubbo.remoting.telnet.TelnetHandler;
import com.alibaba.dubbo.remoting.telnet.support.Help;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* ServerTelnetHandler
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/TraceTelnetHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java
similarity index 94%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/TraceTelnetHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java
index 46155c71b7..69de1b5c71 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/dubbo/telnet/TraceTelnetHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.dubbo.telnet;
+package com.alibaba.dubbo.rpc.protocol.dubbo.telnet;
import java.lang.reflect.Method;
@@ -24,8 +24,8 @@ import com.alibaba.dubbo.remoting.telnet.TelnetHandler;
import com.alibaba.dubbo.remoting.telnet.support.Help;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.dubbo.DubboProtocol;
import com.alibaba.dubbo.rpc.filter.TraceFilter;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
/**
* TraceTelnetHandler
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmExporter.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmExporter.java
similarity index 89%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmExporter.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmExporter.java
index e7183d3fab..bc234e7e55 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmExporter.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmExporter.java
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.injvm;
+package com.alibaba.dubbo.rpc.protocol.injvm;
import java.util.Map;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.support.AbstractExporter;
+import com.alibaba.dubbo.rpc.protocol.AbstractExporter;
/**
* InjvmExporter
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmInvoker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmInvoker.java
similarity index 91%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmInvoker.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmInvoker.java
index 3766afc29c..296593ea48 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmInvoker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmInvoker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.injvm;
+package com.alibaba.dubbo.rpc.protocol.injvm;
import java.util.Map;
@@ -23,7 +23,7 @@ import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Result;
-import com.alibaba.dubbo.rpc.support.AbstractInvoker;
+import com.alibaba.dubbo.rpc.protocol.AbstractInvoker;
/**
* InjvmInvoker
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmProtocol.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmProtocol.java
similarity index 92%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmProtocol.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmProtocol.java
index 3f79117e13..c03353a1d5 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/injvm/InjvmProtocol.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/injvm/InjvmProtocol.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.injvm;
+package com.alibaba.dubbo.rpc.protocol.injvm;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
@@ -21,7 +21,7 @@ import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
import com.alibaba.dubbo.rpc.RpcException;
-import com.alibaba.dubbo.rpc.support.AbstractProtocol;
+import com.alibaba.dubbo.rpc.protocol.AbstractProtocol;
/**
* InjvmProtocol
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/EchoProxyFactoryWrapper.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/EchoProxyFactoryWrapper.java
similarity index 89%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/EchoProxyFactoryWrapper.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/EchoProxyFactoryWrapper.java
index 8bc6664dad..a7af922669 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/EchoProxyFactoryWrapper.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/EchoProxyFactoryWrapper.java
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.wrapper;
+package com.alibaba.dubbo.rpc.proxy;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcException;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.service.EchoService;
+import com.alibaba.dubbo.service.EchoService;
/**
* EchoProxyFactoryWrapper
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/InvokerHandler.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/InvokerHandler.java
similarity index 97%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/InvokerHandler.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/InvokerHandler.java
index 2a1a42cab0..d2c10e2f4c 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/InvokerHandler.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/InvokerHandler.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.support;
+package com.alibaba.dubbo.rpc.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/InvokerWrapper.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/InvokerWrapper.java
similarity index 98%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/InvokerWrapper.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/InvokerWrapper.java
index 05c4988d70..17299bf26e 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/InvokerWrapper.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/InvokerWrapper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.support;
+package com.alibaba.dubbo.rpc.proxy;
import java.lang.reflect.InvocationTargetException;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/MockInvoker.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/MockInvoker.java
similarity index 94%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/MockInvoker.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/MockInvoker.java
index c512e2cfc6..da1f786ade 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/MockInvoker.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/MockInvoker.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.wrapper;
+package com.alibaba.dubbo.rpc.proxy;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invocation;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/MockProxyFactoryWrapper.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/MockProxyFactoryWrapper.java
similarity index 93%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/MockProxyFactoryWrapper.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/MockProxyFactoryWrapper.java
index 39ca2299e7..832c96298b 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/MockProxyFactoryWrapper.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/MockProxyFactoryWrapper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.wrapper;
+package com.alibaba.dubbo.rpc.proxy;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
@@ -24,9 +24,9 @@ import com.alibaba.dubbo.common.utils.ConfigUtils;
import com.alibaba.dubbo.common.utils.NetUtils;
import com.alibaba.dubbo.common.utils.ReflectUtils;
import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcException;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.service.GenericService;
/**
* MockProxyFactoryWrapper
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/StubProxyFactoryWrapper.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/StubProxyFactoryWrapper.java
similarity index 95%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/StubProxyFactoryWrapper.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/StubProxyFactoryWrapper.java
index 0cafb2c9b7..e59c6237f7 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/wrapper/StubProxyFactoryWrapper.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/StubProxyFactoryWrapper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.wrapper;
+package com.alibaba.dubbo.rpc.proxy;
import java.lang.reflect.Constructor;
@@ -30,10 +30,10 @@ import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.RpcConstants;
import com.alibaba.dubbo.rpc.RpcException;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.service.GenericService;
/**
* StubProxyFactoryWrapper
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/javassist/JavassistProxyFactory.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java
similarity index 90%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/javassist/JavassistProxyFactory.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java
index b4cafc683d..fa769f1b99 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/javassist/JavassistProxyFactory.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java
@@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.support.javassist;
+package com.alibaba.dubbo.rpc.proxy.javassist;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.bytecode.Proxy;
import com.alibaba.dubbo.common.bytecode.Wrapper;
import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.proxy.support.InvokerHandler;
-import com.alibaba.dubbo.rpc.proxy.support.InvokerWrapper;
+import com.alibaba.dubbo.rpc.ProxyFactory;
+import com.alibaba.dubbo.rpc.proxy.InvokerHandler;
+import com.alibaba.dubbo.rpc.proxy.InvokerWrapper;
/**
* JavaassistRpcProxyFactory
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/jdk/JdkProxyFactory.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/jdk/JdkProxyFactory.java
similarity index 90%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/jdk/JdkProxyFactory.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/jdk/JdkProxyFactory.java
index f1f1e31dc1..bb389aa3bd 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/support/jdk/JdkProxyFactory.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/proxy/jdk/JdkProxyFactory.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.proxy.support.jdk;
+package com.alibaba.dubbo.rpc.proxy.jdk;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@@ -21,9 +21,9 @@ import java.lang.reflect.Proxy;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.proxy.support.InvokerHandler;
-import com.alibaba.dubbo.rpc.proxy.support.InvokerWrapper;
+import com.alibaba.dubbo.rpc.ProxyFactory;
+import com.alibaba.dubbo.rpc.proxy.InvokerHandler;
+import com.alibaba.dubbo.rpc.proxy.InvokerWrapper;
/**
* JavaassistRpcProxyFactory
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/service/EchoService.java
similarity index 93%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/service/EchoService.java
index c09fcd9e90..b4e5eb6b59 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/EchoService.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/service/EchoService.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.service;
+package com.alibaba.dubbo.service;
/**
* Echo service.
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/service/GenericException.java
similarity index 93%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/service/GenericException.java
index 81be78fa33..1c8c829f06 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/GenericException.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/service/GenericException.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.service;
+package com.alibaba.dubbo.service;
import com.alibaba.dubbo.common.utils.StringUtils;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/service/GenericService.java
similarity index 96%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java
rename to dubbo-rpc/src/main/java/com/alibaba/dubbo/service/GenericService.java
index e8a0e3f3dc..d73a22e34d 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/service/GenericService.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/service/GenericService.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.service;
+package com.alibaba.dubbo.service;
/**
* 通用服务接口
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolTest.java b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolTest.java
index 5ddff56602..60faed1811 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolTest.java
+++ b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolTest.java
@@ -23,7 +23,6 @@ import org.junit.Test;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
import com.alibaba.dubbo.rpc.support.IEcho;
/**
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolUtils.java b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolUtils.java
index 8861c24ec8..46e59403c8 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolUtils.java
+++ b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/ProtocolUtils.java
@@ -17,7 +17,6 @@ package com.alibaba.dubbo.rpc;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
/**
* TODO Comment of ProtocolUtils
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/generic/EnumBak.java b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/generic/EnumBak.java
index cf797e0df0..b2b80a8efa 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/generic/EnumBak.java
+++ b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/generic/EnumBak.java
@@ -29,11 +29,11 @@ import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.utils.NetUtils;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
-import com.alibaba.dubbo.rpc.proxy.ProxyFactory;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.support.DemoService;
import com.alibaba.dubbo.rpc.support.DemoServiceImpl;
import com.alibaba.dubbo.rpc.support.Type;
+import com.alibaba.dubbo.service.GenericService;
public class EnumBak {
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/DemoRpcProtocol.java b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/DemoRpcProtocol.java
index cf7db4f636..53e5cf9729 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/DemoRpcProtocol.java
+++ b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/DemoRpcProtocol.java
@@ -31,9 +31,9 @@ import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcInvocation;
-import com.alibaba.dubbo.rpc.support.AbstractExporter;
-import com.alibaba.dubbo.rpc.support.AbstractInvoker;
-import com.alibaba.dubbo.rpc.support.AbstractProtocol;
+import com.alibaba.dubbo.rpc.protocol.AbstractExporter;
+import com.alibaba.dubbo.rpc.protocol.AbstractInvoker;
+import com.alibaba.dubbo.rpc.protocol.AbstractProtocol;
/**
* TestProtocolSupport.
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/MultiThreadTest.java b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/MultiThreadTest.java
index 5f7bb22cee..45c16c3caa 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/MultiThreadTest.java
+++ b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/MultiThreadTest.java
@@ -26,6 +26,7 @@ import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Exporter;
import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.ProxyFactory;
public class MultiThreadTest extends TestCase
{
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/ProtocolsTest.java b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/ProtocolsTest.java
index 2fef144b7a..981cc84cdb 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/ProtocolsTest.java
+++ b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/ProtocolsTest.java
@@ -23,7 +23,8 @@ import org.junit.Test;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Protocol;
-import com.alibaba.dubbo.rpc.service.EchoService;
+import com.alibaba.dubbo.rpc.ProxyFactory;
+import com.alibaba.dubbo.service.EchoService;
/**
* ProxiesTest
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/RpcFilterTest.java b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/RpcFilterTest.java
index 5941363779..bb19e7fbcc 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/RpcFilterTest.java
+++ b/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/RpcFilterTest.java
@@ -20,7 +20,8 @@ import junit.framework.TestCase;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Protocol;
-import com.alibaba.dubbo.rpc.service.EchoService;
+import com.alibaba.dubbo.rpc.ProxyFactory;
+import com.alibaba.dubbo.service.EchoService;
public class RpcFilterTest extends TestCase
{
diff --git a/pom.xml b/pom.xml
index cf18fec4d6..29f241d408 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,16 +29,24 @@
dubbo-common
dubbo-remoting
+ dubbo-remoting-netty
dubbo-remoting-mina
dubbo-remoting-grizzly
dubbo-rpc
+ dubbo-rpc-default
+ dubbo-rpc-injvm
dubbo-rpc-rmi
dubbo-rpc-hessian
+ dubbo-rpc-xfire
dubbo-cluster
dubbo-registry
+ dubbo-registry-default
+ dubbo-registry-jndi
dubbo-registry-multicast
dubbo-registry-zookeeper
dubbo-monitor
+ dubbo-monitor-default
+ dubbo-monitor-jmx
dubbo-config
dubbo-container
dubbo
@@ -55,6 +63,7 @@
1.1.6
3.1
3.3.3
+ 1.0.13
1.2.16
1.6.2
@@ -124,6 +133,11 @@
zookeeper
${zookeeper_version}
+
+ jfree
+ jfreechart
+ ${jfreechart_version}
+
log4j