From 6728fc12a1c74091be2f34942ff8028a5129449a Mon Sep 17 00:00:00 2001 From: "william.liangf" Date: Wed, 7 Dec 2011 06:38:07 +0000 Subject: [PATCH] =?UTF-8?q?DUBBO-121=20=E5=A2=9E=E5=8A=A0@Parameter(append?= =?UTF-8?q?=20=3D=20true)=E6=B5=8B=E8=AF=95?= 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@563 1a56cb94-b969-4eaa-88fa-be21384802f2 --- .../alibaba/dubbo/config/AbstractConfig.java | 8 ++-- .../alibaba/dubbo/config/ReferenceConfig.java | 9 +++- .../alibaba/dubbo/config/ServiceConfig.java | 13 +++--- .../com/alibaba/dubbo/config/ConfigTest.java | 42 +++++++++++++++++++ 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractConfig.java b/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractConfig.java index 6e292cfa5..ba9e06c1c 100644 --- a/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractConfig.java +++ b/dubbo-config/src/main/java/com/alibaba/dubbo/config/AbstractConfig.java @@ -124,18 +124,18 @@ public abstract class AbstractConfig implements Serializable { } else { String str = String.valueOf(value).trim(); if (value != null && str.length() > 0) { - if (prefix != null && prefix.length() > 0) { - key = prefix + "." + key; - } if (parameter != null && parameter.escaped()) { str = URL.encode(str); } if (parameter != null && parameter.append()) { - String pre = (String)parameters.get(key); + String pre = (String)parameters.get(Constants.DEFAULT_KEY + "." + key); if (pre != null && pre.length() > 0) { str = pre + "," + str; } } + if (prefix != null && prefix.length() > 0) { + key = prefix + "." + key; + } parameters.put(key, str); } else if (parameter != null && parameter.required()) { throw new IllegalStateException(config.getClass().getSimpleName() + "." + key + " == null"); 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 55925b98f..5c896dd1f 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 @@ -93,7 +93,13 @@ public class ReferenceConfig extends AbstractConsumerConfig { private transient boolean initialized; private transient boolean destroyed; + + private final List urls = new ArrayList(); + public List toUrls() { + return urls; + } + public synchronized T get() { if (destroyed){ throw new IllegalStateException("Already destroyed!"); @@ -106,7 +112,7 @@ public class ReferenceConfig extends AbstractConsumerConfig { public synchronized void destroy() { if (ref == null) { - throw new IllegalStateException("Uninitialized."); + return; } if (destroyed){ return; @@ -276,7 +282,6 @@ public class ReferenceConfig extends AbstractConsumerConfig { logger.info("Using injvm service " + interfaceClass.getName()); } } else { - List urls = new ArrayList(); if (url != null && url.length() > 0) { // 用户指定URL,指定的URL可能是对点对直连地址,也可能是注册中心URL String[] us = Constants.SEMICOLON_SPLIT_PATTERN.split(url); if (us != null && us.length > 0) { 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 8c1c11e74..485c5097b 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 @@ -85,11 +85,10 @@ public class ServiceConfig extends AbstractServiceConfig { private transient boolean generic; - @Parameter(excluded = true) - public boolean isExported() { - return exported; + public List toUrls() { + return urls; } - + public synchronized void export() { if (delay != null && delay > 0) { Thread thread = new Thread(new Runnable() { @@ -251,8 +250,8 @@ public class ServiceConfig extends AbstractServiceConfig { } public synchronized void unexport() { - if (!exported) { - throw new IllegalStateException("No exported!"); + if (! exported) { + return; } if (unexported) { return; @@ -328,7 +327,7 @@ public class ServiceConfig extends AbstractServiceConfig { } map.put("dubbo", Version.getVersion()); appendParameters(map, application); - appendParameters(map, provider); + appendParameters(map, provider, Constants.DEFAULT_KEY); appendParameters(map, protocolConfig); appendParameters(map, this); map.put("prompt", "dubbo"); diff --git a/dubbo-config/src/test/java/com/alibaba/dubbo/config/ConfigTest.java b/dubbo-config/src/test/java/com/alibaba/dubbo/config/ConfigTest.java index 0d7e285a1..768936ca9 100644 --- a/dubbo-config/src/test/java/com/alibaba/dubbo/config/ConfigTest.java +++ b/dubbo-config/src/test/java/com/alibaba/dubbo/config/ConfigTest.java @@ -26,6 +26,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.utils.NetUtils; import com.alibaba.dubbo.config.api.DemoService; +import com.alibaba.dubbo.config.provider.impl.DemoServiceImpl; import com.alibaba.dubbo.registry.RegistryService; import com.alibaba.dubbo.registry.support.SimpleRegistryExporter; import com.alibaba.dubbo.registry.support.SimpleRegistryService; @@ -174,5 +175,46 @@ public class ConfigTest { consumer.setTimeout(2000); Assert.assertEquals("1000", System.getProperty("sun.rmi.transport.tcp.responseTimeout")); } + + @Test + public void testAppendFilter() throws Exception { + ProviderConfig provider = new ProviderConfig(); + provider.setFilter("classloader,monitor"); + ServiceConfig service = new ServiceConfig(); + service.setFilter("accesslog,trace"); + service.setProvider(provider); + service.setApplication(new ApplicationConfig("provider")); + service.setRegistry(new RegistryConfig(RegistryConfig.NO_AVAILABLE)); + service.setInterface(DemoService.class); + service.setRef(new DemoServiceImpl()); + try { + service.export(); + List urls = service.toUrls(); + Assert.assertNotNull(urls); + Assert.assertEquals(1, urls.size()); + Assert.assertEquals("classloader,monitor,accesslog,trace", urls.get(0).getParameter("service.filter")); + + ConsumerConfig consumer = new ConsumerConfig(); + consumer.setFilter("classloader,monitor"); + ReferenceConfig reference = new ReferenceConfig(); + reference.setFilter("accesslog,trace"); + reference.setConsumer(consumer); + reference.setApplication(new ApplicationConfig("consumer")); + reference.setRegistry(new RegistryConfig(RegistryConfig.NO_AVAILABLE)); + reference.setInterface(DemoService.class); + reference.setUrl("dubbo://" + NetUtils.getLocalHost() + ":20880?" + DemoService.class.getName() + "?check=false"); + try { + reference.get(); + urls = reference.toUrls(); + Assert.assertNotNull(urls); + Assert.assertEquals(1, urls.size()); + Assert.assertEquals("classloader,monitor,accesslog,trace", urls.get(0).getParameter("reference.filter")); + } finally { + reference.destroy(); + } + } finally { + service.unexport(); + } + } } \ No newline at end of file -- GitLab