This is an automated email from the ASF dual-hosted git repository. albumenj pushed a commit to branch 3.0-multi-instances in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 221b7a4150bcaf292b683e9177aed275c93c3c9c Author: Albumen Kevin <[email protected]> AuthorDate: Sat Aug 28 22:58:34 2021 +0800 exact ServiceModel from ProviderModel and ConsumerModel --- .../org/apache/dubbo/rpc/model/ConsumerModel.java | 106 +++--------------- .../org/apache/dubbo/rpc/model/ProviderModel.java | 80 +++----------- .../org/apache/dubbo/rpc/model/ServiceModel.java | 122 +++++++++++++++++++++ 3 files changed, 152 insertions(+), 156 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java index 81b1a88..f6df44d 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java @@ -16,9 +16,7 @@ */ package org.apache.dubbo.rpc.model; -import org.apache.dubbo.common.BaseServiceMetadata; import org.apache.dubbo.common.utils.Assert; -import org.apache.dubbo.common.utils.ClassUtils; import org.apache.dubbo.config.ReferenceConfigBase; import java.lang.reflect.Method; @@ -34,15 +32,11 @@ import java.util.TreeSet; /** * This model is bound to your reference's configuration, for example, group, version or method level configuration. */ -public class ConsumerModel { - private String serviceKey; - private final ServiceDescriptor serviceModel; - private final ReferenceConfigBase<?> referenceConfig; +public class ConsumerModel extends ServiceModel { private final Set<String> apps = new TreeSet<>(); - private Object proxyObject; - private final Map<String, AsyncMethodInfo> methodConfigs; + private Map<Method, ConsumerMethodModel> methodModels = new HashMap<>(); /** * This constructor create an instance of ConsumerModel and passed objects should not be null. @@ -58,57 +52,29 @@ public class ConsumerModel { ReferenceConfigBase<?> referenceConfig, Map<String, AsyncMethodInfo> methodConfigs) { + super(proxyObject, serviceKey, serviceModel, referenceConfig); Assert.notEmptyString(serviceKey, "Service name can't be null or blank"); - this.serviceKey = serviceKey; - this.proxyObject = proxyObject; - this.serviceModel = serviceModel; - this.referenceConfig = referenceConfig; this.methodConfigs = methodConfigs == null ? new HashMap<>() : methodConfigs; } - /** - * Return the proxy object used by called while creating instance of ConsumerModel - * - * @return - */ - public Object getProxyObject() { - return proxyObject; - } - - public void setProxyObject(Object proxyObject) { - this.proxyObject = proxyObject; - } - - /** - * Return all method models for the current service - * - * @return method model list - */ - public Set<MethodDescriptor> getAllMethods() { - return serviceModel.getAllMethods(); - } + public ConsumerModel(String serviceKey, + Object proxyObject, + ServiceDescriptor serviceModel, + ReferenceConfigBase<?> referenceConfig, + ServiceMetadata metadata, + Map<String, AsyncMethodInfo> methodConfigs) { - public Class<?> getServiceInterfaceClass() { - return serviceModel.getServiceInterfaceClass(); - } + super(proxyObject, serviceKey, serviceModel, referenceConfig, metadata); + Assert.notEmptyString(serviceKey, "Service name can't be null or blank"); - public String getServiceKey() { - return serviceKey; + this.methodConfigs = methodConfigs == null ? new HashMap<>() : methodConfigs; } public AsyncMethodInfo getMethodConfig(String methodName) { return methodConfigs.get(methodName); } - public ServiceDescriptor getServiceModel() { - return serviceModel; - } - - public ReferenceConfigBase getReferenceConfig() { - return referenceConfig; - } - public Set<String> getApps() { return apps; } @@ -117,41 +83,17 @@ public class ConsumerModel { return methodConfigs.get(methodName); } - /* *************** Start, metadata compatible **************** */ - - private ServiceMetadata serviceMetadata; - private Map<Method, ConsumerMethodModel> methodModels = new HashMap<>(); - - public ConsumerModel(String serviceKey, - Object proxyObject, - ServiceDescriptor serviceModel, - ReferenceConfigBase<?> referenceConfig, - ServiceMetadata metadata, - Map<String, AsyncMethodInfo> methodConfigs) { - - this(serviceKey, proxyObject, serviceModel, referenceConfig, methodConfigs); - this.serviceMetadata = metadata; - } - - public void setServiceKey(String serviceKey) { - this.serviceKey = serviceKey; - if (serviceMetadata != null) { - serviceMetadata.setServiceKey(serviceKey); - serviceMetadata.setGroup(BaseServiceMetadata.groupFromServiceKey(serviceKey)); - } - } - public void initMethodModels() { Class<?>[] interfaceList; - if (proxyObject == null) { - Class<?> serviceInterfaceClass = referenceConfig.getServiceInterfaceClass(); + if (getProxyObject() == null) { + Class<?> serviceInterfaceClass = getReferenceConfig().getServiceInterfaceClass(); if (serviceInterfaceClass != null) { interfaceList = new Class[]{serviceInterfaceClass}; } else { interfaceList = new Class[0]; } } else { - interfaceList = proxyObject.getClass().getInterfaces(); + interfaceList = getProxyObject().getClass().getInterfaces(); } for (Class<?> interfaceClass : interfaceList) { for (Method method : interfaceClass.getMethods()) { @@ -160,18 +102,6 @@ public class ConsumerModel { } } - public ClassLoader getClassLoader() { - Class<?> serviceType = serviceMetadata.getServiceType(); - return serviceType != null ? serviceType.getClassLoader() : ClassUtils.getClassLoader(); - } - - /** - * @return serviceMetadata - */ - public ServiceMetadata getServiceMetadata() { - return serviceMetadata; - } - /** * Return method model for the given method on consumer side * @@ -214,10 +144,4 @@ public class ConsumerModel { public List<ConsumerMethodModel> getAllMethodModels() { return new ArrayList<>(methodModels.values()); } - - public String getServiceName() { - return this.serviceMetadata.getServiceKey(); - } - - } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java index a640204..2aab894 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java @@ -16,7 +16,6 @@ */ package org.apache.dubbo.rpc.model; -import org.apache.dubbo.common.BaseServiceMetadata; import org.apache.dubbo.common.URL; import org.apache.dubbo.config.ServiceConfigBase; @@ -27,56 +26,42 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; /** * ProviderModel is about published services */ -public class ProviderModel { - private String serviceKey; - private final Object serviceInstance; - private final ServiceDescriptor serviceModel; - private final ServiceConfigBase<?> serviceConfig; +public class ProviderModel extends ServiceModel { private final List<RegisterStatedURL> urls; + private final Map<String, List<ProviderMethodModel>> methods = new HashMap<String, List<ProviderMethodModel>>(); public ProviderModel(String serviceKey, Object serviceInstance, ServiceDescriptor serviceModel, ServiceConfigBase<?> serviceConfig) { + super(serviceInstance, serviceKey, serviceModel, serviceConfig); if (null == serviceInstance) { throw new IllegalArgumentException("Service[" + serviceKey + "]Target is NULL."); } - this.serviceKey = serviceKey; - this.serviceInstance = serviceInstance; - this.serviceModel = serviceModel; - this.serviceConfig = serviceConfig; this.urls = new ArrayList<>(1); } - public String getServiceKey() { - return serviceKey; - } - + public ProviderModel(String serviceKey, + Object serviceInstance, + ServiceDescriptor serviceModel, + ServiceConfigBase<?> serviceConfig, + ServiceMetadata serviceMetadata) { + super(serviceInstance, serviceKey, serviceModel, serviceConfig, serviceMetadata); + if (null == serviceInstance) { + throw new IllegalArgumentException("Service[" + serviceKey + "]Target is NULL."); + } - public Class<?> getServiceInterfaceClass() { - return serviceModel.getServiceInterfaceClass(); + initMethod(serviceModel.getServiceInterfaceClass()); + this.urls = new ArrayList<>(1); } public Object getServiceInstance() { - return serviceInstance; - } - - public Set<MethodDescriptor> getAllMethods() { - return serviceModel.getAllMethods(); - } - - public ServiceDescriptor getServiceModel() { - return serviceModel; - } - - public ServiceConfigBase getServiceConfig() { - return serviceConfig; + return getProxyObject(); } public List<RegisterStatedURL> getStatedUrl() { @@ -125,35 +110,6 @@ public class ProviderModel { } } - /* *************** Start, metadata compatible **************** */ - - private ServiceMetadata serviceMetadata; - private final Map<String, List<ProviderMethodModel>> methods = new HashMap<String, List<ProviderMethodModel>>(); - - public ProviderModel(String serviceKey, - Object serviceInstance, - ServiceDescriptor serviceModel, - ServiceConfigBase<?> serviceConfig, - ServiceMetadata serviceMetadata) { - this(serviceKey, serviceInstance, serviceModel, serviceConfig); - - this.serviceMetadata = serviceMetadata; - initMethod(serviceModel.getServiceInterfaceClass()); - } - - - public void setServiceKey(String serviceKey) { - this.serviceKey = serviceKey; - if (serviceMetadata != null) { - serviceMetadata.setServiceKey(serviceKey); - serviceMetadata.setGroup(BaseServiceMetadata.groupFromServiceKey(serviceKey)); - } - } - - public String getServiceName() { - return this.serviceMetadata.getServiceKey(); - } - public List<ProviderMethodModel> getAllMethodModels() { List<ProviderMethodModel> result = new ArrayList<ProviderMethodModel>(); for (List<ProviderMethodModel> models : methods.values()) { @@ -195,10 +151,4 @@ public class ProviderModel { } } - /** - * @return serviceMetadata - */ - public ServiceMetadata getServiceMetadata() { - return serviceMetadata; - } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java new file mode 100644 index 0000000..3bba258 --- /dev/null +++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.dubbo.rpc.model; + +import org.apache.dubbo.common.BaseServiceMetadata; +import org.apache.dubbo.common.utils.ClassUtils; +import org.apache.dubbo.config.AbstractInterfaceConfig; +import org.apache.dubbo.config.ReferenceConfigBase; +import org.apache.dubbo.config.ServiceConfigBase; + +import java.util.Set; + +public class ServiceModel { + private String serviceKey; + private Object proxyObject; + private final ServiceDescriptor serviceModel; + private final AbstractInterfaceConfig config; + + private ServiceMetadata serviceMetadata; + + public ServiceModel(Object proxyObject, String serviceKey, ServiceDescriptor serviceModel, AbstractInterfaceConfig config) { + this.proxyObject = proxyObject; + this.serviceKey = serviceKey; + this.serviceModel = serviceModel; + this.config = config; + } + + public ServiceModel(Object proxyObject, String serviceKey, ServiceDescriptor serviceModel, AbstractInterfaceConfig config, ServiceMetadata serviceMetadata) { + this.proxyObject = proxyObject; + this.serviceKey = serviceKey; + this.serviceModel = serviceModel; + this.config = config; + this.serviceMetadata = serviceMetadata; + } + + public String getServiceKey() { + return serviceKey; + } + + public void setProxyObject(Object proxyObject) { + this.proxyObject = proxyObject; + } + + public Object getProxyObject() { + return proxyObject; + } + + public ServiceDescriptor getServiceModel() { + return serviceModel; + } + + public ClassLoader getClassLoader() { + Class<?> serviceType = serviceMetadata.getServiceType(); + return serviceType != null ? serviceType.getClassLoader() : ClassUtils.getClassLoader(); + } + + /** + * Return all method models for the current service + * + * @return method model list + */ + public Set<MethodDescriptor> getAllMethods() { + return serviceModel.getAllMethods(); + } + + public Class<?> getServiceInterfaceClass() { + return serviceModel.getServiceInterfaceClass(); + } + + public AbstractInterfaceConfig getConfig() { + return config; + } + + public ReferenceConfigBase<?> getReferenceConfig() { + if(config instanceof ReferenceConfigBase) { + return (ReferenceConfigBase<?>) config; + } else { + throw new IllegalArgumentException("Current ServiceModel is not a ConsumerModel"); + } + } + + public ServiceConfigBase<?> getServiceConfig() { + if(config instanceof ServiceConfigBase) { + return (ServiceConfigBase<?>) config; + } else { + throw new IllegalArgumentException("Current ServiceModel is not a ProviderModel"); + } + } + + public void setServiceKey(String serviceKey) { + this.serviceKey = serviceKey; + if (serviceMetadata != null) { + serviceMetadata.setServiceKey(serviceKey); + serviceMetadata.setGroup(BaseServiceMetadata.groupFromServiceKey(serviceKey)); + } + } + + public String getServiceName() { + return this.serviceMetadata.getServiceKey(); + } + + /** + * @return serviceMetadata + */ + public ServiceMetadata getServiceMetadata() { + return serviceMetadata; + } +}
