From ef73ba245ca46fc38cd53a85292cb2db147e0bbe Mon Sep 17 00:00:00 2001 From: kimi Date: Tue, 17 Jul 2012 19:30:15 +0800 Subject: [PATCH] =?UTF-8?q?=20DUBBO-498=20reference=E4=B8=AD=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=BA=86injvm=E4=B8=BAfalse=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E6=9C=AC=E5=9C=B0=E6=9C=89=E6=9A=B4=E9=9C=B2=E8=AF=A5?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=EF=BC=8C=E8=BF=98=E6=98=AF=E4=BC=9A=E8=B5=B0?= =?UTF-8?q?injvm=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dubbo-config/dubbo-config-api/pom.xml | 6 ++ .../alibaba/dubbo/config/ReferenceConfig.java | 20 +++--- .../dubbo/config/ReferenceConfigTest.java | 66 +++++++++++++++++++ 3 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ReferenceConfigTest.java diff --git a/dubbo-config/dubbo-config-api/pom.xml b/dubbo-config/dubbo-config-api/pom.xml index 3d96b6ac0..8d6afff73 100644 --- a/dubbo-config/dubbo-config-api/pom.xml +++ b/dubbo-config/dubbo-config-api/pom.xml @@ -99,5 +99,11 @@ hibernate-validator test + + com.alibaba + dubbo-registry-multicast + ${project.parent.version} + test + \ No newline at end of file diff --git a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java index 5ef3fd04d..d5171c85e 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java @@ -328,14 +328,18 @@ public class ReferenceConfig extends AbstractReferenceConfig { private T createProxy(Map map) { URL tmpUrl = new URL("temp", "localhost", 0, map); final boolean isJvmRefer; - if (url != null && url.length() > 0) { //指定URL的情况下,不做本地引用 - isJvmRefer = false; - } else if (InjvmProtocol.getInjvmProtocol().isInjvmRefer(tmpUrl)) { - //默认情况下如果本地有服务暴露,则引用本地服务. - isJvmRefer = true; - } else { - isJvmRefer = false; - } + if (isInjvm() == null) { + if (url != null && url.length() > 0) { //指定URL的情况下,不做本地引用 + isJvmRefer = false; + } else if (InjvmProtocol.getInjvmProtocol().isInjvmRefer(tmpUrl)) { + //默认情况下如果本地有服务暴露,则引用本地服务. + isJvmRefer = true; + } else { + isJvmRefer = false; + } + } else { + isJvmRefer = isInjvm().booleanValue(); + } if (isJvmRefer) { URL url = new URL(Constants.LOCAL_PROTOCOL, NetUtils.LOCALHOST, 0, interfaceClass.getName()).addParameters(map); diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ReferenceConfigTest.java new file mode 100644 index 000000000..7908a4251 --- /dev/null +++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ReferenceConfigTest.java @@ -0,0 +1,66 @@ +/* + * Copyright 1999-2012 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.config; + +import org.junit.Test; + +import com.alibaba.dubbo.common.Constants; +import com.alibaba.dubbo.config.api.DemoService; +import com.alibaba.dubbo.config.provider.impl.DemoServiceImpl; + +import junit.framework.Assert; + +/** + * @author kimi + */ +public class ReferenceConfigTest { + + @Test + public void testInjvm() throws Exception { + ApplicationConfig application = new ApplicationConfig(); + application.setName("test-protocol-random-port"); + + RegistryConfig registry = new RegistryConfig(); + registry.setAddress("multicast://224.5.6.7:1234"); + + ProtocolConfig protocol = new ProtocolConfig(); + protocol.setName("dubbo"); + + ServiceConfig demoService; + demoService = new ServiceConfig(); + demoService.setInterface(DemoService.class); + demoService.setRef(new DemoServiceImpl()); + demoService.setApplication(application); + demoService.setRegistry(registry); + demoService.setProtocol(protocol); + + ReferenceConfig rc = new ReferenceConfig(); + rc.setApplication(application); + rc.setRegistry(registry); + rc.setInterface(DemoService.class.getName()); + rc.setInjvm(false); + + try { + demoService.export(); + rc.get(); + Assert.assertTrue(!Constants.LOCAL_PROTOCOL.equalsIgnoreCase( + rc.getInvoker().getUrl().getProtocol())); + } finally { + demoService.unexport(); + } + } + +} \ No newline at end of file -- GitLab