diff --git a/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/router/ScriptRouter.java b/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/router/ScriptRouter.java
index 8156b80604..4f887ba2cc 100644
--- a/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/router/ScriptRouter.java
+++ b/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/router/ScriptRouter.java
@@ -19,6 +19,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import javax.script.Bindings;
import javax.script.Compilable;
@@ -27,8 +28,6 @@ import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
-import org.jboss.netty.util.internal.ConcurrentHashMap;
-
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
diff --git a/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/loadbalance/LoadBalanceTest.java b/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/loadbalance/LoadBalanceTest.java
index 7ca6ec1e9d..d6c5b49378 100644
--- a/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/loadbalance/LoadBalanceTest.java
+++ b/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/loadbalance/LoadBalanceTest.java
@@ -18,12 +18,12 @@ package com.alibaba.dubbo.rpc.cluster.loadbalance;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import junit.framework.Assert;
import org.easymock.EasyMock;
-import org.jboss.netty.util.internal.ConcurrentHashMap;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java b/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
index 94bb1906dc..25d8755873 100644
--- a/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
+++ b/dubbo-cluster/src/test/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
@@ -18,12 +18,12 @@ package com.alibaba.dubbo.rpc.cluster.support;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import junit.framework.Assert;
import org.easymock.EasyMock;
-import org.jboss.netty.util.internal.ConcurrentHashMap;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/dubbo-config/pom.xml b/dubbo-config/pom.xml
index f8c689012a..77c985ff1c 100644
--- a/dubbo-config/pom.xml
+++ b/dubbo-config/pom.xml
@@ -36,6 +36,11 @@
dubbo-monitor
${project.parent.version}
+
+ com.alibaba
+ dubbo-remoting
+ ${project.parent.version}
+
org.springframework
spring
diff --git a/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitor.java b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitor.java
index d1b40c24cf..dc95fc4de3 100644
--- a/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitor.java
+++ b/dubbo-monitor-default/src/main/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitor.java
@@ -16,6 +16,7 @@
package com.alibaba.dubbo.monitor.dubbo;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -23,8 +24,6 @@ import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
-import org.jboss.netty.util.internal.ConcurrentHashMap;
-
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
diff --git a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/MockChannel.java b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/MockChannel.java
similarity index 98%
rename from dubbo-registry/src/test/java/com/alibaba/dubbo/registry/MockChannel.java
rename to dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/MockChannel.java
index 6b3271c742..bf4c2e626f 100644
--- a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/MockChannel.java
+++ b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/MockChannel.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry;
+package com.alibaba.dubbo.registry.dubbo;
import java.net.InetSocketAddress;
diff --git a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/MockedClient.java b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/MockedClient.java
similarity index 99%
rename from dubbo-registry/src/test/java/com/alibaba/dubbo/registry/MockedClient.java
rename to dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/MockedClient.java
index 72bddacdaf..72064d2486 100644
--- a/dubbo-registry/src/test/java/com/alibaba/dubbo/registry/MockedClient.java
+++ b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/MockedClient.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.registry;
+package com.alibaba.dubbo.registry.dubbo;
import java.net.InetSocketAddress;
import java.util.Map;
diff --git a/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryProtocolTest.java b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryProtocolTest.java
index 5c7d7feb35..17af7034c4 100644
--- a/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryProtocolTest.java
+++ b/dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo/RegistryProtocolTest.java
@@ -21,7 +21,6 @@ import org.junit.Test;
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;
diff --git a/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/exchange/support/AbstractExchangeGroup.java b/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/exchange/support/AbstractExchangeGroup.java
index 1a138ecace..d79ecd01e3 100644
--- a/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/exchange/support/AbstractExchangeGroup.java
+++ b/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/exchange/support/AbstractExchangeGroup.java
@@ -17,8 +17,7 @@ package com.alibaba.dubbo.remoting.p2p.exchange.support;
import java.util.ArrayList;
import java.util.Map;
-
-import org.jboss.netty.util.internal.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.logger.Logger;
diff --git a/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/support/AbstractGroup.java b/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/support/AbstractGroup.java
index 8e6f69269b..2fff7bac35 100644
--- a/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/support/AbstractGroup.java
+++ b/dubbo-remoting/src/main/java/com/alibaba/dubbo/remoting/p2p/support/AbstractGroup.java
@@ -17,8 +17,7 @@ package com.alibaba.dubbo.remoting.p2p.support;
import java.util.ArrayList;
import java.util.Map;
-
-import org.jboss.netty.util.internal.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.logger.Logger;
diff --git a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java
index b5a7e852c0..fd057dba81 100644
--- a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java
+++ b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboInvoker.java
@@ -29,7 +29,6 @@ import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcInvocation;
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/protocol/FutureAdapter.java b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/FutureAdapter.java
similarity index 95%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/FutureAdapter.java
rename to dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/FutureAdapter.java
index 0ef5937411..c213116a9f 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol/FutureAdapter.java
+++ b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/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.protocol;
+package com.alibaba.dubbo.rpc.protocol.dubbo;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
similarity index 95%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java
rename to dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
index 9051cee0f7..29df0a52f8 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java
+++ b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.filter;
+package com.alibaba.dubbo.rpc.protocol.dubbo.filter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -33,17 +33,17 @@ 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.protocol.FutureAdapter;
+import com.alibaba.dubbo.rpc.protocol.dubbo.FutureAdapter;
/**
* EventFilter
* @author chao.liuc
* @author william.liangf
*/
-@Extension("event")
-public class EventFilter implements Filter {
+@Extension("future")
+public class FutureFilter implements Filter {
- protected static final Logger logger = LoggerFactory.getLogger(EventFilter.class);
+ protected static final Logger logger = LoggerFactory.getLogger(FutureFilter.class);
public Result invoke(final Invoker> invoker, final Invocation invocation) throws RpcException {
fireInvokeCallback(invoker, invocation);
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/TraceFilter.java b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/TraceFilter.java
similarity index 96%
rename from dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/TraceFilter.java
rename to dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/TraceFilter.java
index 63b82876cf..c0a9748026 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/TraceFilter.java
+++ b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/TraceFilter.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.filter;
+package com.alibaba.dubbo.rpc.protocol.dubbo.filter;
import java.util.ArrayList;
import java.util.Set;
diff --git a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java
index 69de1b5c71..af6a291ae1 100644
--- a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java
+++ b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java
@@ -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.filter.TraceFilter;
import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
+import com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter;
/**
* TraceTelnetHandler
diff --git a/dubbo-rpc-default/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter b/dubbo-rpc-default/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
new file mode 100644
index 0000000000..89488e526e
--- /dev/null
+++ b/dubbo-rpc-default/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
@@ -0,0 +1,2 @@
+com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter
+com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter
\ No newline at end of file
diff --git a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/filter/EventFilterTest.java b/dubbo-rpc-default/src/test/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilterTest.java
similarity index 93%
rename from dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/filter/EventFilterTest.java
rename to dubbo-rpc-default/src/test/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilterTest.java
index e64a9fa1a8..4b8298ee7b 100644
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/filter/EventFilterTest.java
+++ b/dubbo-rpc-default/src/test/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilterTest.java
@@ -13,10 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.alibaba.dubbo.rpc.filter;
+package com.alibaba.dubbo.rpc.protocol.dubbo.filter;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
import org.easymock.EasyMock;
import org.junit.BeforeClass;
@@ -38,8 +37,8 @@ import com.alibaba.dubbo.rpc.support.DemoService;
* @author tony.chenl
* TODO 暂时依赖callback集成测试,后续补充
*/
-public class EventFilterTest {
- Filter eventFilter = new EventFilter();
+public class FutureFilterTest {
+ Filter eventFilter = new FutureFilter();
private static Invocation invocation;
@BeforeClass
diff --git a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcConstants.java b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcConstants.java
index d7e320f91b..4c6bd9bbe7 100644
--- a/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcConstants.java
+++ b/dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/RpcConstants.java
@@ -27,7 +27,7 @@ import java.util.List;
public final class RpcConstants {
public static final List DEFAULT_REFERENCE_FILTERS = Collections.unmodifiableList(Arrays.asList(new String[] {
- "consumercontext", "compatible", "deprecated", "collect", "genericimpl", "activelimit", "monitor", "event" }));
+ "consumercontext", "compatible", "deprecated", "collect", "genericimpl", "activelimit", "monitor", "future" }));
public static final List DEFAULT_SERVICE_FILTERS = Collections.unmodifiableList(Arrays.asList(new String[] {
"ready", "context", "token", "exception", "echo", "generic", "accesslog", "trace", "classloader", "executelimit", "monitor" ,"timeout"}));
diff --git a/dubbo-rpc/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter b/dubbo-rpc/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
index 8bfa66eab0..4ee246b291 100644
--- a/dubbo-rpc/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
+++ b/dubbo-rpc/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
@@ -10,8 +10,6 @@ com.alibaba.dubbo.rpc.filter.ConsumerContextFilter
com.alibaba.dubbo.rpc.filter.ExceptionFilter
com.alibaba.dubbo.rpc.filter.ExecuteLimitFilter
com.alibaba.dubbo.rpc.filter.DeprecatedFilter
-com.alibaba.dubbo.rpc.filter.TraceFilter
com.alibaba.dubbo.rpc.filter.CompatibleFilter
com.alibaba.dubbo.rpc.filter.ReadyFilter
-com.alibaba.dubbo.rpc.filter.TimeoutFilter
-com.alibaba.dubbo.rpc.filter.EventFilter
\ No newline at end of file
+com.alibaba.dubbo.rpc.filter.TimeoutFilter
\ No newline at end of file
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
deleted file mode 100644
index 53e5cf9729..0000000000
--- a/dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/DemoRpcProtocol.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * 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.rpc.proxy;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.alibaba.dubbo.common.Extension;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.remoting.RemotingException;
-import com.alibaba.dubbo.remoting.exchange.ExchangeChannel;
-import com.alibaba.dubbo.remoting.exchange.ExchangeServer;
-import com.alibaba.dubbo.remoting.exchange.Exchangers;
-import com.alibaba.dubbo.remoting.exchange.support.Replier;
-import com.alibaba.dubbo.rpc.Exporter;
-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.protocol.AbstractExporter;
-import com.alibaba.dubbo.rpc.protocol.AbstractInvoker;
-import com.alibaba.dubbo.rpc.protocol.AbstractProtocol;
-
-/**
- * TestProtocolSupport.
- *
- * @author qian.lei
- */
-@Extension("demo")
-public class DemoRpcProtocol extends AbstractProtocol {
-
- private final Map mClientMap = new HashMap(); //
-
- private final Map mServerMap = new HashMap(); //
-
- private final Map> mServiceMap = new HashMap>(); //
-
- private final Replier mHandler = new InternalHandler();
-
- public int getDefaultPort() {
- return 123456;
- }
-
- public Invoker refer(Class serviceType, URL url) throws RpcException
- {
- ExchangeChannel client = mClientMap.get(url.getHost() + ':' + url.getPort());
- if( client == null )
- {
- // create client.
- try {
- client = Exchangers.connect(url);
- } catch (RemotingException e) {
- throw new RpcException(e.getMessage(), e);
- }
- mClientMap.put(url.getHost() + ':' + url.getPort(),client);
- }
- final ExchangeChannel fc = client;
- return new AbstractInvoker(serviceType, url){
- public Object doInvoke(Invocation invocation) throws Throwable
- {
- DemoRequest req = new DemoRequest(getUrl().getPath(), invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments());
- int timeout = getUrl().getMethodIntParameter(invocation.getMethodName(), "timeout");
- if( timeout > 0 )
- return fc.request(req, timeout).get();
- return fc.request(req).get();
- }
- };
- }
-
- public Exporter export(Invoker invoker) throws RpcException {
- URL url = invoker.getUrl();
- if( !mServerMap.containsKey(url.getPort()) )
- {
- ExchangeServer server;
- try {
- server = Exchangers.bind(url, mHandler);
- } catch (RemotingException e) {
- throw new RpcException(e.getMessage(), e);
- }
- mServerMap.put(url.getPort(),server);
- }
- InternalExporter exporter = new InternalExporter(invoker);
- mServiceMap.put(url.getPath()+'@'+url.getPort(), exporter);
- return exporter;
- }
-
- public void destroy()
- {
- for (String key : new ArrayList(mServiceMap.keySet())) {
- InternalExporter> exporter = mServiceMap.remove(key);
- if (exporter != null) {
- try {
- exporter.unexport();
- } catch (Throwable t) {
- logger.warn(t.getMessage(), t);
- }
- }
- }
- for (Integer key : new ArrayList(mServerMap.keySet())) {
- ExchangeServer server = mServerMap.remove(key);
- if (server != null) {
- try {
- server.close();
- } catch (Throwable t) {
- logger.warn(t.getMessage(), t);
- }
- }
- }
- for (String key : new ArrayList(mClientMap.keySet())) {
- ExchangeChannel client = mClientMap.remove(key);
- if (client != null) {
- try {
- client.close();
- } catch (Throwable t) {
- logger.warn(t.getMessage(), t);
- }
- }
- }
- }
-
- private static class InternalExporter extends AbstractExporter
- {
- public InternalExporter(Invoker invoker)
- {
- super(invoker);
- }
- }
-
- private class InternalHandler implements Replier {
- public Object reply(ExchangeChannel channel, DemoRequest msg) throws RemotingException {
- // find service instance.
- int port = channel.getLocalAddress().getPort();
- String serviceName = msg.getServiceName();
- InternalExporter> exporter = mServiceMap.get(serviceName+'@'+port);
- if( exporter == null )
- throw new RemotingException(channel, "Service " + serviceName + " not found.");
- try {
- return exporter.invoke(new RpcInvocation(msg.getMethodName(), msg.getParameterTypes(), msg.getArguments()), channel.getRemoteAddress()).recreate();
- } catch (RpcException e) {
- throw new RemotingException(channel, e.getMessage(), e);
- } catch (Throwable e) {
- throw new RemotingException(channel, e.getMessage(), e);
- }
- }
- }
-}
\ No newline at end of file