From 6501a548605ef9b1307bf2218e6ace58d4a59d07 Mon Sep 17 00:00:00 2001 From: "william.liangf" Date: Wed, 26 Oct 2011 04:47:37 +0000 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@64 1a56cb94-b969-4eaa-88fa-be21384802f2 --- .../rpc/cluster/router/ScriptRouter.java | 3 +- .../cluster/loadbalance/LoadBalanceTest.java | 2 +- .../support/AbstractClusterInvokerTest.java | 2 +- dubbo-config/pom.xml | 5 + .../dubbo/monitor/dubbo/DubboMonitor.java | 3 +- .../dubbo/registry/dubbo}/MockChannel.java | 2 +- .../dubbo/registry/dubbo}/MockedClient.java | 2 +- .../registry/dubbo/RegistryProtocolTest.java | 1 - .../support/AbstractExchangeGroup.java | 3 +- .../remoting/p2p/support/AbstractGroup.java | 3 +- .../rpc/protocol/dubbo/DubboInvoker.java | 1 - .../rpc/protocol/dubbo}/FutureAdapter.java | 2 +- .../protocol/dubbo/filter/FutureFilter.java | 10 +- .../protocol/dubbo}/filter/TraceFilter.java | 2 +- .../dubbo/telnet/TraceTelnetHandler.java | 2 +- .../services/com.alibaba.dubbo.rpc.Filter | 2 + .../dubbo/filter/FutureFilterTest.java | 7 +- .../com/alibaba/dubbo/rpc/RpcConstants.java | 2 +- .../services/com.alibaba.dubbo.rpc.Filter | 4 +- .../dubbo/rpc/proxy/DemoRpcProtocol.java | 160 ------------------ 20 files changed, 28 insertions(+), 190 deletions(-) rename {dubbo-registry/src/test/java/com/alibaba/dubbo/registry => dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo}/MockChannel.java (98%) rename {dubbo-registry/src/test/java/com/alibaba/dubbo/registry => dubbo-registry-default/src/test/java/com/alibaba/dubbo/registry/dubbo}/MockedClient.java (99%) rename {dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/protocol => dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo}/FutureAdapter.java (95%) rename dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc/filter/EventFilter.java => dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java (95%) rename {dubbo-rpc/src/main/java/com/alibaba/dubbo/rpc => dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo}/filter/TraceFilter.java (96%) create mode 100644 dubbo-rpc-default/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter rename dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/filter/EventFilterTest.java => dubbo-rpc-default/src/test/java/com/alibaba/dubbo/rpc/protocol/dubbo/filter/FutureFilterTest.java (93%) delete mode 100644 dubbo-rpc/src/test/java/com/alibaba/dubbo/rpc/proxy/DemoRpcProtocol.java 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