This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch master-hsf in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 6261f36a96e3e0f1a3a260f861f3817ef5e76969 Author: Ian Luo <[email protected]> AuthorDate: Fri Nov 1 11:00:04 2019 +0800 can fetch classloader from ConsumerModel, also support group in ConfigChangeEvent --- .../org/apache/dubbo/config/ReferenceConfig.java | 50 ++++++++-------------- .../dubbo/configcenter/ConfigChangeEvent.java | 16 ++++++- .../org/apache/dubbo/rpc/model/ConsumerModel.java | 20 ++++++--- 3 files changed, 47 insertions(+), 39 deletions(-) diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java index 0b26e11..d082bbe 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java @@ -48,7 +48,6 @@ import org.apache.dubbo.rpc.support.ProtocolUtils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -244,6 +243,17 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig { } checkInterfaceAndMethods(interfaceClass, methods); } + + //init serivceMetadata + serviceMetadata.setVersion(version); + serviceMetadata.setGroup(group); + serviceMetadata.setDefaultGroup(group); + serviceMetadata.setServiceKey(URL.buildKey(interfaceName, group, version)); + serviceMetadata.setServiceType(getActualInterface()); + serviceMetadata.setServiceInterfaceName(interfaceName); + ConsumerModel consumerModel = new ConsumerModel(serviceMetadata); + ApplicationModel.initConsumerModel(URL.buildKey(interfaceName, group, version), consumerModel); + resolveFile(); checkApplication(); checkMetadataReport(); @@ -257,8 +267,6 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig { } public synchronized T get() { - checkAndUpdateSubConfigs(); - if (destroyed) { throw new IllegalStateException("The invoker of ReferenceConfig(" + url + ") has already destroyed!"); } @@ -289,17 +297,11 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig { if (initialized) { return; } + + checkAndUpdateSubConfigs(); checkStubAndLocal(interfaceClass); checkMock(interfaceClass); - //init serivceMetadata - serviceMetadata.setVersion(version); - serviceMetadata.setGroup(group); - serviceMetadata.setDefaultGroup(group); - serviceMetadata.setServiceType(getActualInterface()); - serviceMetadata.setServiceInterfaceName(interfaceName); - serviceMetadata.setServiceKey(URL.buildKey(interfaceName, group, version)); - Map<String, String> map = new HashMap<String, String>(); map.put(SIDE_KEY, CONSUMER_SIDE); appendRuntimeParameters(map); @@ -344,25 +346,25 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig { attributes.put(methodConfig.getName(), asyncMethodInfo); } } + + ApplicationModel.getConsumerModel(URL.buildKey(interfaceName, group, version)).init(attributes); } + String hostToRegistry = ConfigUtils.getSystemProperty(DUBBO_IP_TO_REGISTRY); if (StringUtils.isEmpty(hostToRegistry)) { hostToRegistry = NetUtils.getLocalHost(); } else if (isInvalidLocalHost(hostToRegistry)) { throw new IllegalArgumentException("Specified invalid registry ip from property:" + DUBBO_IP_TO_REGISTRY + ", value:" + hostToRegistry); } - map.put(REGISTER_IP_KEY, hostToRegistry); - serviceMetadata.getAttachments().putAll(map); - - ApplicationModel.initConsumerModel(URL.buildKey(interfaceName, group, version), buildConsumerModel(attributes, serviceMetadata)); + map.put(REGISTER_IP_KEY, hostToRegistry); ref = createProxy(map); - - serviceMetadata.setTarget(ref); serviceMetadata.addAttribute(PROXY_CLASS_REF, ref); + serviceMetadata.getAttachments().putAll(map); + initialized = true; } @@ -378,20 +380,6 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig { return actualInterface; } - private ConsumerModel buildConsumerModel(Map<String, Object> attributes, ServiceMetadata metadata) { - Method[] methods = interfaceClass.getMethods(); - Class serviceInterface = interfaceClass; - if (interfaceClass == GenericService.class) { - try { - serviceInterface = Class.forName(interfaceName); - methods = serviceInterface.getMethods(); - } catch (ClassNotFoundException e) { - methods = interfaceClass.getMethods(); - } - } - return new ConsumerModel(attributes, metadata); - } - @SuppressWarnings({"unchecked", "rawtypes", "deprecation"}) private T createProxy(Map<String, String> map) { if (shouldJvmRefer(map)) { diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java index cdedd15..bfd99c4 100644 --- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java +++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java @@ -23,7 +23,7 @@ package org.apache.dubbo.configcenter; */ public class ConfigChangeEvent { private final String key; - + private final String group; private final String value; private final ConfigChangeType changeType; @@ -31,8 +31,17 @@ public class ConfigChangeEvent { this(key, value, ConfigChangeType.MODIFIED); } + public ConfigChangeEvent(String key, String group, String value) { + this(key, group, value, ConfigChangeType.MODIFIED); + } + public ConfigChangeEvent(String key, String value, ConfigChangeType changeType) { + this(key, null, value, changeType); + } + + public ConfigChangeEvent(String key, String group, String value, ConfigChangeType changeType) { this.key = key; + this.group = group; this.value = value; this.changeType = changeType; } @@ -41,6 +50,10 @@ public class ConfigChangeEvent { return key; } + public String getGroup() { + return group; + } + public String getValue() { return value; } @@ -53,6 +66,7 @@ public class ConfigChangeEvent { public String toString() { return "ConfigChangeEvent{" + "key='" + key + '\'' + + ", group='" + group + '\'' + ", value='" + value + '\'' + ", changeType=" + changeType + '}'; diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java index 0e4d4c2..c778ca8 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java @@ -28,24 +28,30 @@ import java.util.Optional; * Consumer Model which is about subscribed services. */ public class ConsumerModel { - private final ServiceMetadata serviceMetadata; - private final Map<Method, ConsumerMethodModel> methodModels = new IdentityHashMap<Method, ConsumerMethodModel>(); + private ServiceMetadata serviceMetadata; + private Map<Method, ConsumerMethodModel> methodModels = new IdentityHashMap<Method, ConsumerMethodModel>(); /** * This constructor create an instance of ConsumerModel and passed objects should not be null. * If service name, service instance, proxy object,methods should not be null. If these are null * then this constructor will throw {@link IllegalArgumentException} * - * @param attributes Attributes of methods. - * @param metadata + * @param serviceMetadata */ - public ConsumerModel(Map<String, Object> attributes, ServiceMetadata metadata) { - this.serviceMetadata = metadata; - for (Method method : metadata.getServiceType().getMethods()) { + public ConsumerModel(ServiceMetadata serviceMetadata) { + this.serviceMetadata = serviceMetadata; + } + + public void init(Map<String, Object> attributes) { + for (Method method : serviceMetadata.getServiceType().getMethods()) { methodModels.put(method, new ConsumerMethodModel(method, attributes)); } } + public ClassLoader getClassLoader() { + return serviceMetadata.getServiceType().getClassLoader(); + } + /** * @return serviceMetadata */
