This is an automated email from the ASF dual-hosted git repository.
crazyhzm pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new f7e87c1445 Add some test cases and optimizations (#10481)
f7e87c1445 is described below
commit f7e87c144589af470d432ceb13ffd184edf68bf7
Author: 灼华 <[email protected]>
AuthorDate: Wed Aug 24 10:34:16 2022 +0800
Add some test cases and optimizations (#10481)
* Add some test cases and optimizations
* Rollback
* Update ClassGenerator.java
---
.../cluster/configurator/AbstractConfigurator.java | 2 +-
.../configurator/absent/AbsentConfigurator.java | 1 -
.../override/OverrideConfigurator.java | 1 -
.../DefaultGovernanceRuleRepositoryImpl.java | 3 +-
.../apache/dubbo/rpc/cluster/ConfiguratorTest.java | 53 +++++++++
.../dubbo/common/bytecode/ClassGenerator.java | 26 ++--
.../org/apache/dubbo/common/bytecode/Proxy.java | 1 -
.../org/apache/dubbo/common/bytecode/Wrapper.java | 1 +
.../common/concurrent/CallableSafeInitializer.java | 5 +-
.../apache/dubbo/common/config/Configuration.java | 4 +-
.../apache/dubbo/common/config/Environment.java | 2 +-
.../dubbo/common/config/ModuleEnvironment.java | 6 -
.../config/OrderedPropertiesConfiguration.java | 2 +-
.../dubbo/common/config/SystemConfiguration.java | 5 +-
.../dubbo/common/lang/ShutdownHookCallbacks.java | 5 +-
.../common/resource/GlobalResourceInitializer.java | 5 +-
.../common/resource/GlobalResourcesRepository.java | 36 ++++--
.../dubbo/config/AbstractInterfaceConfig.java | 12 +-
.../org/apache/dubbo/config/ProtocolConfig.java | 15 ---
.../apache/dubbo/config/ReferenceConfigBase.java | 8 +-
.../org/apache/dubbo/config/ServiceConfigBase.java | 82 -------------
.../org/apache/dubbo/rpc/model/ProviderModel.java | 2 +-
.../rpc/model/ReflectionServiceDescriptor.java | 3 -
.../apache/dubbo/rpc/model/ServiceDescriptor.java | 2 +-
.../org/apache/dubbo/rpc/model/ServiceModel.java | 15 ++-
.../dubbo/common/bytecode/ClassGeneratorTest.java | 132 +++++++++++++++++++--
.../apache/dubbo/common/bytecode/WrapperTest.java | 51 +++++++-
.../common/lang/ShutdownHookCallbacksTest.java | 2 +-
.../org/apache/dubbo/common/bytecode/TestClass | 59 +++++++++
.../org/apache/dubbo/config/DubboShutdownHook.java | 10 +-
.../org/apache/dubbo/config/ReferenceConfig.java | 14 +--
.../org/apache/dubbo/config/ServiceConfig.java | 24 ++--
.../dubbo/config/deploy/DefaultModuleDeployer.java | 8 +-
.../org/apache/dubbo/config/ServiceConfigTest.java | 16 ---
.../dubbo/config/utils/ReferenceCacheTest.java | 34 +++---
.../dubbo/auth/filter/ProviderAuthFilter.java | 2 +-
.../registry/client/metadata/MetadataUtils.java | 1 +
.../apache/dubbo/rpc/proxy/AbstractProxyTest.java | 2 +-
38 files changed, 396 insertions(+), 256 deletions(-)
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
index a61288983f..89b3798c40 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
@@ -43,7 +43,7 @@ import static
org.apache.dubbo.rpc.cluster.Constants.CONFIG_VERSION_KEY;
import static org.apache.dubbo.rpc.cluster.Constants.OVERRIDE_PROVIDERS_KEY;
/**
- * AbstractOverrideConfigurator
+ * AbstractConfigurator
*/
public abstract class AbstractConfigurator implements Configurator {
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/absent/AbsentConfigurator.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/absent/AbsentConfigurator.java
index cb83b8b854..bd8a325463 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/absent/AbsentConfigurator.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/absent/AbsentConfigurator.java
@@ -21,7 +21,6 @@ import
org.apache.dubbo.rpc.cluster.configurator.AbstractConfigurator;
/**
* AbsentConfigurator
- *
*/
public class AbsentConfigurator extends AbstractConfigurator {
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/override/OverrideConfigurator.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/override/OverrideConfigurator.java
index 23f0a8d8c3..ab44dc497a 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/override/OverrideConfigurator.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/override/OverrideConfigurator.java
@@ -21,7 +21,6 @@ import
org.apache.dubbo.rpc.cluster.configurator.AbstractConfigurator;
/**
* OverrideConfigurator
- *
*/
public class OverrideConfigurator extends AbstractConfigurator {
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
index 04950779da..a5f4a3e0b1 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/governance/DefaultGovernanceRuleRepositoryImpl.java
@@ -19,9 +19,8 @@ package org.apache.dubbo.rpc.cluster.governance;
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
import org.apache.dubbo.rpc.model.ModuleModel;
-import org.apache.dubbo.rpc.model.ScopeModelAware;
-public class DefaultGovernanceRuleRepositoryImpl implements
GovernanceRuleRepository, ScopeModelAware {
+public class DefaultGovernanceRuleRepositoryImpl implements
GovernanceRuleRepository {
private ModuleModel moduleModel;
diff --git
a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/ConfiguratorTest.java
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/ConfiguratorTest.java
new file mode 100644
index 0000000000..4db2ddf6cf
--- /dev/null
+++
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/ConfiguratorTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.cluster;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.rpc.cluster.configurator.absent.AbsentConfigurator;
+import org.apache.dubbo.rpc.cluster.configurator.override.OverrideConfigurator;
+import org.apache.dubbo.rpc.cluster.configurator.parser.ConfigParser;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * {@link Configurator}
+ */
+public class ConfiguratorTest {
+
+ @Test
+ public void test() throws Exception {
+
+ Optional<List<Configurator>> emptyOptional =
Configurator.toConfigurators(Collections.emptyList());
+ Assertions.assertEquals(Optional.empty(), emptyOptional);
+
+ String configData =
"[\"override://0.0.0.0/com.xx.Service?category=configurators&timeout=6666&disabled=true&dynamic=false&enabled=true&group=dubbo&priority=2&version=1.0\""
+
+ ",
\"absent://0.0.0.0/com.xx.Service?category=configurators&timeout=6666&disabled=true&dynamic=false&enabled=true&group=dubbo&priority=1&version=1.0\"
]";
+ List<URL> urls = ConfigParser.parseConfigurators(configData);
+ Optional<List<Configurator>> optionalList =
Configurator.toConfigurators(urls);
+ Assertions.assertTrue(optionalList.isPresent());
+ List<Configurator> configurators = optionalList.get();
+ Assertions.assertEquals(configurators.size(), 2);
+ // The hosts of AbsentConfigurator and OverrideConfigurator are equal,
but the priority of OverrideConfigurator is higher
+ Assertions.assertTrue(configurators.get(0) instanceof
AbsentConfigurator);
+ Assertions.assertTrue(configurators.get(1) instanceof
OverrideConfigurator);
+ }
+
+}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/ClassGenerator.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/ClassGenerator.java
index aa8b742d5c..b665c57075 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/ClassGenerator.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/ClassGenerator.java
@@ -51,7 +51,7 @@ public final class ClassGenerator {
private static final AtomicLong CLASS_NAME_COUNTER = new AtomicLong(0);
private static final String SIMPLE_NAME_TAG = "<init>";
- private static final Map<ClassLoader, ClassPool> POOL_MAP = new
ConcurrentHashMap<ClassLoader, ClassPool>(); //ClassLoader - ClassPool
+ private static final Map<ClassLoader, ClassPool> POOL_MAP = new
ConcurrentHashMap<>(); //ClassLoader - ClassPool
private ClassPool mPool;
private CtClass mCtc;
private String mClassName;
@@ -131,7 +131,7 @@ public final class ClassGenerator {
public ClassGenerator addInterface(String cn) {
if (mInterfaces == null) {
- mInterfaces = new HashSet<String>();
+ mInterfaces = new HashSet<>();
}
mInterfaces.add(cn);
return this;
@@ -153,7 +153,7 @@ public final class ClassGenerator {
public ClassGenerator addField(String code) {
if (mFields == null) {
- mFields = new ArrayList<String>();
+ mFields = new ArrayList<>();
}
mFields.add(code);
return this;
@@ -177,7 +177,7 @@ public final class ClassGenerator {
public ClassGenerator addMethod(String code) {
if (mMethods == null) {
- mMethods = new ArrayList<String>();
+ mMethods = new ArrayList<>();
}
mMethods.add(code);
return this;
@@ -192,12 +192,14 @@ public final class ClassGenerator {
StringBuilder sb = new StringBuilder();
sb.append(modifier(mod)).append('
').append(ReflectUtils.getName(rt)).append(' ').append(name);
sb.append('(');
- for (int i = 0; i < pts.length; i++) {
- if (i > 0) {
- sb.append(',');
+ if (ArrayUtils.isNotEmpty(pts)) {
+ for (int i = 0; i < pts.length; i++) {
+ if (i > 0) {
+ sb.append(',');
+ }
+ sb.append(ReflectUtils.getName(pts[i]));
+ sb.append(" arg").append(i);
}
- sb.append(ReflectUtils.getName(pts[i]));
- sb.append(" arg").append(i);
}
sb.append(')');
if (ArrayUtils.isNotEmpty(ets)) {
@@ -222,7 +224,7 @@ public final class ClassGenerator {
String desc = name + ReflectUtils.getDescWithoutMethodName(m);
addMethod(':' + desc);
if (mCopyMethods == null) {
- mCopyMethods = new ConcurrentHashMap<String, Method>(8);
+ mCopyMethods = new ConcurrentHashMap<>(8);
}
mCopyMethods.put(desc, m);
return this;
@@ -230,7 +232,7 @@ public final class ClassGenerator {
public ClassGenerator addConstructor(String code) {
if (mConstructors == null) {
- mConstructors = new LinkedList<String>();
+ mConstructors = new LinkedList<>();
}
mConstructors.add(code);
return this;
@@ -269,7 +271,7 @@ public final class ClassGenerator {
String desc = ReflectUtils.getDesc(c);
addConstructor(":" + desc);
if (mCopyConstructors == null) {
- mCopyConstructors = new ConcurrentHashMap<String,
Constructor<?>>(4);
+ mCopyConstructors = new ConcurrentHashMap<>(4);
}
mCopyConstructors.put(desc, c);
return this;
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java
index c3f14bee12..256eb63e95 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java
@@ -37,7 +37,6 @@ import static
org.apache.dubbo.common.constants.CommonConstants.MAX_PROXY_COUNT;
/**
* Proxy.
*/
-
public class Proxy {
public static final InvocationHandler THROW_UNSUPPORTED_INVOKER = new
InvocationHandler() {
@Override
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
index 64373fc290..c1b6699574 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
@@ -293,6 +293,7 @@ public abstract class Wrapper {
throw new RuntimeException(e.getMessage(), e);
} finally {
cc.release();
+ pts.clear();
ms.clear();
mns.clear();
dmns.clear();
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/concurrent/CallableSafeInitializer.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/concurrent/CallableSafeInitializer.java
index 092ec41a87..3b41942fca 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/concurrent/CallableSafeInitializer.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/concurrent/CallableSafeInitializer.java
@@ -88,10 +88,11 @@ public class CallableSafeInitializer<T> {
public T remove(Consumer<? super T> action) {
// release
T value = reference.getAndSet(null);
- if (value != null && action != null) {
+ if (value != null) {
if (action != null) {
action.accept(value);
- } else if (value instanceof Disposable) {
+ }
+ if (value instanceof Disposable) {
((Disposable) value).destroy();
}
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
index f7f5bc8492..5b8531baa3 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
@@ -49,7 +49,7 @@ public interface Configuration {
}
default int getInt(String key) {
- Integer i = this.getInteger(key, (Integer) null);
+ Integer i = this.getInteger(key, null);
if (i != null) {
return i;
} else {
@@ -58,7 +58,7 @@ public interface Configuration {
}
default int getInt(String key, int defaultValue) {
- Integer i = this.getInteger(key, (Integer) null);
+ Integer i = this.getInteger(key, null);
return i == null ? defaultValue : i;
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
index c7c22df0a9..103094051d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
@@ -171,7 +171,7 @@ public class Environment extends LifecycleAdapter
implements ApplicationExt {
* All configurations will be converged into a data bus - URL, and then
drive the subsequent process.
* <p>
* At present, there are many configuration sources, including
AbstractConfig (API, XML, annotation), - D, config center, etc.
- * This methood helps us t filter out the most priority values from
various configuration sources.
+ * This method helps us t filter out the most priority values from various
configuration sources.
*
* @param config
* @param prefix
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ModuleEnvironment.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ModuleEnvironment.java
index f98765962c..dbf2ba2794 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ModuleEnvironment.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ModuleEnvironment.java
@@ -126,9 +126,6 @@ public class ModuleEnvironment extends Environment
implements ModuleExt {
public void destroy() throws IllegalStateException {
super.destroy();
this.orderedPropertiesConfiguration = null;
- this.globalConfiguration = null;
- this.dynamicGlobalConfiguration = null;
- this.dynamicConfiguration = null;
}
@Override
@@ -224,8 +221,5 @@ public class ModuleEnvironment extends Environment
implements ModuleExt {
public void refreshClassLoaders() {
orderedPropertiesConfiguration.refresh();
applicationDelegate.refreshClassLoaders();
- this.globalConfiguration = null;
- this.globalConfigurationMaps = null;
- this.dynamicGlobalConfiguration = null;
}
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
index f16fa7b35b..191320ed7f 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
@@ -26,7 +26,7 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
-public class OrderedPropertiesConfiguration implements Configuration{
+public class OrderedPropertiesConfiguration implements Configuration {
private Properties properties;
private ModuleModel moduleModel;
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
index f763cab664..8341fd4e15 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java
@@ -20,10 +20,7 @@ package org.apache.dubbo.common.config;
import java.util.Map;
/**
- * FIXME: is this really necessary? PropertiesConfiguration should have
already covered this:
- *
- * @See ConfigUtils#getProperty(String)
- * @see PropertiesConfiguration
+ * Configuration from system properties
*/
public class SystemConfiguration implements Configuration {
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallbacks.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallbacks.java
index 8665e9b60b..5f0c7b4089 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallbacks.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallbacks.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.common.lang;
import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.resource.Disposable;
import org.apache.dubbo.rpc.model.ApplicationModel;
import java.util.Collection;
@@ -31,7 +32,7 @@ import static
org.apache.dubbo.common.function.ThrowableAction.execute;
*
* @since 2.7.5
*/
-public class ShutdownHookCallbacks {
+public class ShutdownHookCallbacks implements Disposable {
private final List<ShutdownHookCallback> callbacks = new LinkedList<>();
@@ -56,7 +57,7 @@ public class ShutdownHookCallbacks {
}
}
- public void clear() {
+ public void destroy() {
synchronized (this) {
callbacks.clear();
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourceInitializer.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourceInitializer.java
index 80c467eee6..11b8a4556b 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourceInitializer.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourceInitializer.java
@@ -37,7 +37,7 @@ public class GlobalResourceInitializer<T> extends
CallableSafeInitializer<T> {
super(initializer);
}
- public GlobalResourceInitializer(Callable initializer, Consumer<T>
disposeAction) {
+ public GlobalResourceInitializer(Callable<T> initializer, Consumer<T>
disposeAction) {
super(initializer);
this.disposeAction = disposeAction;
}
@@ -59,7 +59,4 @@ public class GlobalResourceInitializer<T> extends
CallableSafeInitializer<T> {
return value;
}
- public interface DestroyHandler<T> {
- void dispose(GlobalResourceInitializer<T> initializer);
- }
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java
index 7a309e680b..3f34a3e374 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java
@@ -27,7 +27,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
- * Global resources repository between all framework models.
+ * Global resource repository between all framework models.
* It will be destroyed only after all framework model is destroyed.
*/
public class GlobalResourcesRepository {
@@ -59,16 +59,22 @@ public class GlobalResourcesRepository {
* @param disposable
*/
public static void registerGlobalDisposable(Disposable disposable) {
- synchronized (GlobalResourcesRepository.class) {
- if (!globalReusedDisposables.contains(disposable)) {
- globalReusedDisposables.add(disposable);
+ if (!globalReusedDisposables.contains(disposable)) {
+ synchronized (GlobalResourcesRepository.class) {
+ if (!globalReusedDisposables.contains(disposable)) {
+ globalReusedDisposables.add(disposable);
+ }
}
}
}
public void removeGlobalDisposable(Disposable disposable) {
- synchronized (GlobalResourcesRepository.class) {
- this.globalReusedDisposables.remove(disposable);
+ if (globalReusedDisposables.contains(disposable)) {
+ synchronized (GlobalResourcesRepository.class) {
+ if (globalReusedDisposables.contains(disposable)) {
+ this.globalReusedDisposables.remove(disposable);
+ }
+ }
}
}
@@ -125,14 +131,24 @@ public class GlobalResourcesRepository {
* Register a one-off disposable, the disposable is removed automatically
on first shutdown.
* @param disposable
*/
- public synchronized void registerDisposable(Disposable disposable) {
+ public void registerDisposable(Disposable disposable) {
if (!oneoffDisposables.contains(disposable)) {
- oneoffDisposables.add(disposable);
+ synchronized (this) {
+ if (!oneoffDisposables.contains(disposable)) {
+ oneoffDisposables.add(disposable);
+ }
+ }
}
}
- public synchronized void removeDisposable(Disposable disposable) {
- this.oneoffDisposables.remove(disposable);
+ public void removeDisposable(Disposable disposable) {
+ if (oneoffDisposables.contains(disposable)) {
+ synchronized (this) {
+ if (oneoffDisposables.contains(disposable)) {
+ oneoffDisposables.remove(disposable);
+ }
+ }
+ }
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 5e9b8b05f8..049132866c 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -174,7 +174,7 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
protected String ondisconnect;
/**
- * The metrics configuration
+ * The metadata report configuration
*/
protected MetadataReportConfig metadataReportConfig;
@@ -224,11 +224,6 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
@Override
protected void postProcessAfterScopeModelChanged(ScopeModel oldScopeModel,
ScopeModel newScopeModel) {
super.postProcessAfterScopeModelChanged(oldScopeModel, newScopeModel);
- // remove this config from old ConfigManager
-// if (oldScopeModel != null && oldScopeModel instanceof ModuleModel) {
-//
((ModuleModel)oldScopeModel).getConfigManager().removeConfig(this);
-// }
-
// change referenced config's scope model
ApplicationModel applicationModel =
ScopeModelUtil.getApplicationModel(scopeModel);
if (this.configCenter != null && this.configCenter.getScopeModel() !=
applicationModel) {
@@ -292,7 +287,7 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
}
/**
- * To obtain the method list in the port, use reflection when in native
mode and javaassist otherwise.
+ * To obtain the method list in the port, use reflection when in native
mode and javassist otherwise.
* @param interfaceClass
* @return
*/
@@ -460,7 +455,7 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
}
try {
- //Check if the localClass a constructor with parameter who's type
is interfaceClass
+ //Check if the localClass a constructor with parameter whose type
is interfaceClass
ReflectUtils.findConstructor(localClass, interfaceClass);
} catch (NoSuchMethodException e) {
throw new IllegalStateException("No such constructor \"public " +
localClass.getSimpleName() +
@@ -600,7 +595,6 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
}
public void setProxy(String proxy) {
-
this.proxy = proxy;
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
index 799d018fb4..f235f44d4c 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
@@ -235,21 +235,6 @@ public class ProtocolConfig extends AbstractConfig {
}
}
-// @Override
-// public List<String> getPrefixes() {
-// List<String> prefixes = new ArrayList<>();
-// if (StringUtils.hasText(this.getId())) {
-// // dubbo.protocols.{protocol-id}
-// prefixes.add(CommonConstants.DUBBO + "." +
getPluralTagName(this.getClass()) + "." + this.getId());
-// } else if (StringUtils.hasText(this.getName()) &&
!StringUtils.isEquals(this.getId(), this.getName())) {
-// // dubbo.protocols.{protocol-name}
-// prefixes.add(CommonConstants.DUBBO + "." +
getPluralTagName(this.getClass()) + "." + this.getName());
-// }
-// // dubbo.protocol
-// prefixes.add(getTypePrefix());
-// return prefixes;
-// }
-
@Parameter(excluded = true)
public String getName() {
return name;
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java
index 73a668a834..3d16ce4d6f 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java
@@ -165,7 +165,7 @@ public abstract class ReferenceConfigBase<T> extends
AbstractReferenceConfig {
Class<?> actualInterface = interfaceClass;
if (interfaceClass == GenericService.class) {
try {
- if(getInterfaceClassLoader() != null) {
+ if (getInterfaceClassLoader() != null) {
actualInterface = Class.forName(interfaceName, false,
getInterfaceClassLoader());
} else {
actualInterface = Class.forName(interfaceName);
@@ -191,7 +191,7 @@ public abstract class ReferenceConfigBase<T> extends
AbstractReferenceConfig {
if (StringUtils.isBlank(generic) && getConsumer() != null) {
generic = getConsumer().getGeneric();
}
- if(getInterfaceClassLoader() != null) {
+ if (getInterfaceClassLoader() != null) {
interfaceClass = determineInterfaceClass(generic, interfaceName,
getInterfaceClassLoader());
} else {
interfaceClass = determineInterfaceClass(generic, interfaceName);
@@ -274,7 +274,7 @@ public abstract class ReferenceConfigBase<T> extends
AbstractReferenceConfig {
}
if (resolveFile != null && resolveFile.length() > 0) {
Properties properties = new RegexProperties();
- try (FileInputStream fis = new FileInputStream(new
File(resolveFile))) {
+ try (FileInputStream fis = new FileInputStream(resolveFile)) {
properties.load(fis);
} catch (IOException e) {
throw new IllegalStateException("Failed to load " +
resolveFile + ", cause: " + e.getMessage(), e);
@@ -283,7 +283,7 @@ public abstract class ReferenceConfigBase<T> extends
AbstractReferenceConfig {
resolve = properties.getProperty(interfaceName);
}
}
- if (resolve != null && resolve.length() > 0) {
+ if (StringUtils.isNotEmpty(resolve)) {
url = resolve;
if (logger.isWarnEnabled()) {
if (resolveFile != null) {
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
index 84a6076351..35a930baf2 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
@@ -107,18 +107,6 @@ public abstract class ServiceConfigBase<T> extends
AbstractServiceConfig {
setMethods(MethodConfig.constructMethodConfig(service.methods()));
}
- @Deprecated
- private static List<ProtocolConfig>
convertProviderToProtocol(List<ProviderConfig> providers) {
- if (CollectionUtils.isEmpty(providers)) {
- return null;
- }
- List<ProtocolConfig> protocols = new
ArrayList<ProtocolConfig>(providers.size());
- for (ProviderConfig provider : providers) {
- protocols.add(convertProviderToProtocol(provider));
- }
- return protocols;
- }
-
@Override
protected void postProcessAfterScopeModelChanged(ScopeModel oldScopeModel,
ScopeModel newScopeModel) {
super.postProcessAfterScopeModelChanged(oldScopeModel, newScopeModel);
@@ -127,50 +115,6 @@ public abstract class ServiceConfigBase<T> extends
AbstractServiceConfig {
}
}
- @Deprecated
- private static List<ProviderConfig>
convertProtocolToProvider(List<ProtocolConfig> protocols) {
- if (CollectionUtils.isEmpty(protocols)) {
- return null;
- }
- List<ProviderConfig> providers = new
ArrayList<ProviderConfig>(protocols.size());
- for (ProtocolConfig provider : protocols) {
- providers.add(convertProtocolToProvider(provider));
- }
- return providers;
- }
-
- @Deprecated
- private static ProtocolConfig convertProviderToProtocol(ProviderConfig
provider) {
- ProtocolConfig protocol = new ProtocolConfig();
- protocol.setName(provider.getProtocol().getName());
- protocol.setServer(provider.getServer());
- protocol.setClient(provider.getClient());
- protocol.setCodec(provider.getCodec());
- protocol.setHost(provider.getHost());
- protocol.setPort(provider.getPort());
- protocol.setPath(provider.getPath());
- protocol.setPayload(provider.getPayload());
- protocol.setThreads(provider.getThreads());
- protocol.setParameters(provider.getParameters());
- return protocol;
- }
-
- @Deprecated
- private static ProviderConfig convertProtocolToProvider(ProtocolConfig
protocol) {
- ProviderConfig provider = new ProviderConfig();
- provider.setProtocol(protocol);
- provider.setServer(protocol.getServer());
- provider.setClient(protocol.getClient());
- provider.setCodec(protocol.getCodec());
- provider.setHost(protocol.getHost());
- provider.setPort(protocol.getPort());
- provider.setPath(protocol.getPath());
- provider.setPayload(protocol.getPayload());
- provider.setThreads(protocol.getThreads());
- provider.setParameters(protocol.getParameters());
- return provider;
- }
-
public boolean shouldExport() {
Boolean export = getExport();
// default value is true
@@ -399,36 +343,10 @@ public abstract class ServiceConfigBase<T> extends
AbstractServiceConfig {
}
}
-// @Override
-// public void setMock(String mock) {
-// throw new IllegalArgumentException("mock doesn't support on provider
side");
-// }
-//
-// @Override
-// public void setMock(Object mock) {
-// throw new IllegalArgumentException("mock doesn't support on provider
side");
-// }
-
public ServiceMetadata getServiceMetadata() {
return serviceMetadata;
}
-// /**
-// * @deprecated Replace to getProtocols()
-// */
-// @Deprecated
-// public List<ProviderConfig> getProviders() {
-// return convertProtocolToProvider(protocols);
-// }
-//
-// /**
-// * @deprecated Replace to setProtocols()
-// */
-// @Deprecated
-// public void setProviders(List<ProviderConfig> providers) {
-// this.protocols = convertProviderToProtocol(providers);
-// }
-
@Override
@Parameter(excluded = true, attribute = false)
public List<String> getPrefixes() {
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 b30a30826e..775d5c93c6 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
@@ -38,7 +38,7 @@ public class ProviderModel extends ServiceModel {
/**
* The url of the reference service
*/
- private List<URL> serviceUrls = new ArrayList<URL>();
+ private List<URL> serviceUrls = new ArrayList<>();
public ProviderModel(String serviceKey,
Object serviceInstance,
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptor.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptor.java
index 52e43187d8..629d6c0385 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptor.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptor.java
@@ -76,9 +76,6 @@ public class ReflectionServiceDescriptor implements
ServiceDescriptor {
methods.forEach((methodName, methodList) -> {
Map<String, MethodDescriptor> descMap =
descToMethods.computeIfAbsent(methodName, k -> new HashMap<>());
methodList.forEach(methodModel ->
descMap.put(methodModel.getParamDesc(), methodModel));
-
-// Map<Class<?>[], MethodModel> typesMap =
typeToMethods.computeIfAbsent(methodName, k -> new HashMap<>());
-// methodList.forEach(methodModel ->
typesMap.put(methodModel.getParameterClasses(), methodModel));
});
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
index 8609b5d9c7..2c00989c20 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
@@ -22,7 +22,7 @@ import java.util.List;
import java.util.Set;
/**
- * ServiceModel and ServiceMetadata are to some extend duplicated with each
other. We should merge them in the future.
+ * ServiceModel and ServiceMetadata are to some extent duplicated with each
other. We should merge them in the future.
*/
public interface ServiceDescriptor {
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
index 16b1c8ca54..afbc946abb 100644
--- 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
@@ -23,12 +23,11 @@ import org.apache.dubbo.config.ServiceConfigBase;
import java.util.Objects;
import java.util.Set;
-import java.util.concurrent.Callable;
public class ServiceModel {
private String serviceKey;
private Object proxyObject;
- private Callable<Void> destroyCaller;
+ private Runnable destroyRunner;
private ClassLoader classLoader;
private final ClassLoader interfaceClassLoader;
@@ -165,12 +164,12 @@ public class ServiceModel {
return moduleModel;
}
- public Callable<Void> getDestroyCaller() {
- return destroyCaller;
+ public Runnable getDestroyRunner() {
+ return destroyRunner;
}
- public void setDestroyCaller(Callable<Void> destroyCaller) {
- this.destroyCaller = destroyCaller;
+ public void setDestroyRunner(Runnable destroyRunner) {
+ this.destroyRunner = destroyRunner;
}
public ClassLoader getInterfaceClassLoader() {
@@ -186,11 +185,11 @@ public class ServiceModel {
return false;
}
ServiceModel that = (ServiceModel) o;
- return Objects.equals(serviceKey, that.serviceKey) &&
Objects.equals(proxyObject, that.proxyObject) && Objects.equals(destroyCaller,
that.destroyCaller) && Objects.equals(classLoader, that.classLoader) &&
Objects.equals(interfaceClassLoader, that.interfaceClassLoader) &&
Objects.equals(moduleModel, that.moduleModel) && Objects.equals(serviceModel,
that.serviceModel) && Objects.equals(serviceMetadata, that.serviceMetadata);
+ return Objects.equals(serviceKey, that.serviceKey) &&
Objects.equals(proxyObject, that.proxyObject) && Objects.equals(destroyRunner,
that.destroyRunner) && Objects.equals(classLoader, that.classLoader) &&
Objects.equals(interfaceClassLoader, that.interfaceClassLoader) &&
Objects.equals(moduleModel, that.moduleModel) && Objects.equals(serviceModel,
that.serviceModel) && Objects.equals(serviceMetadata, that.serviceMetadata);
}
@Override
public int hashCode() {
- return Objects.hash(serviceKey, proxyObject, destroyCaller,
classLoader, interfaceClassLoader, moduleModel, serviceModel, serviceMetadata);
+ return Objects.hash(serviceKey, proxyObject, destroyRunner,
classLoader, interfaceClassLoader, moduleModel, serviceModel, serviceMetadata);
}
}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ClassGeneratorTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ClassGeneratorTest.java
index 605ce83d78..94837548f2 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ClassGeneratorTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ClassGeneratorTest.java
@@ -16,9 +16,12 @@
*/
package org.apache.dubbo.common.bytecode;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
interface Builder<T> {
@@ -27,18 +30,127 @@ interface Builder<T> {
void setName(Bean bean, T name);
}
+class BaseClass {
+
+ public BaseClass() {
+
+ }
+
+ public BaseClass(StringBuilder sb) {
+ sb.append("constructor comes from BaseClass");
+ }
+
+ public String baseClassMethod() {
+ return "method comes from BaseClass";
+ }
+}
+
+interface BaseInterface {
+
+}
public class ClassGeneratorTest {
+ @Test
+ public void test() throws Exception {
+ ClassGenerator cg = ClassGenerator.newInstance();
+
+ // add className, interface, superClass
+ String className = BaseClass.class.getPackage().getName() +
".TestClass";
+ cg.setClassName(className);
+ cg.addInterface(BaseInterface.class);
+ cg.setSuperClass(BaseClass.class);
+
+ // add constructor
+ cg.addDefaultConstructor();
+ cg.addConstructor(Modifier.PUBLIC, new Class[]{String.class,
int.class}, new Class[]{Throwable.class, RuntimeException.class}, "this.strAttr
= arg0;this.intAttr = arg1;");
+ cg.addConstructor(BaseClass.class.getConstructor(StringBuilder.class));
+
+ // add field
+ cg.addField("staticAttr", Modifier.PUBLIC | Modifier.STATIC |
Modifier.VOLATILE, String.class, "\"defaultVal\"");
+ cg.addField("strAttr", Modifier.PROTECTED | Modifier.VOLATILE,
String.class);
+ cg.addField("intAttr", Modifier.PRIVATE | Modifier.VOLATILE,
int.class);
+
+ // add method
+ cg.addMethod("setStrAttr", Modifier.PUBLIC, void.class, new
Class[]{String.class, int.class}, new Class[]{Throwable.class,
RuntimeException.class}, "this.strAttr = arg0;");
+ cg.addMethod("setIntAttr", Modifier.PUBLIC, void.class, new
Class[]{String.class, int.class}, new Class[]{Throwable.class,
RuntimeException.class}, "this.intAttr = arg1;");
+ cg.addMethod("getStrAttr", Modifier.PUBLIC, String.class, new
Class[]{}, new Class[]{Throwable.class, RuntimeException.class}, "return
this.strAttr;");
+ cg.addMethod("getIntAttr", Modifier.PUBLIC, int.class, new Class[]{},
new Class[]{Throwable.class, RuntimeException.class}, "return this.intAttr;");
+ cg.addMethod(BaseClass.class.getMethod("baseClassMethod"));
+
+ // cg.toClass
+ Class<?> clz = cg.toClass(Bean.class);
+ // after cg.toClass, the TestClass.class generated by javassist is
like the following file content
+ getClass().getResource("/org/apache/dubbo/common/bytecode/TestClass");
+
+ // verify class, superClass, interfaces
+ Assertions.assertTrue(ClassGenerator.isDynamicClass(clz));
+ Assertions.assertEquals(clz.getName(), className);
+ Assertions.assertEquals(clz.getSuperclass(), BaseClass.class);
+ Assertions.assertArrayEquals(clz.getInterfaces(), new
Class[]{ClassGenerator.DC.class, BaseInterface.class});
+
+ // get constructors
+ Constructor<?>[] constructors = clz.getConstructors();
+ Assertions.assertEquals(constructors.length, 3);
+ Constructor<?> constructor0 = clz.getConstructor();
+ Constructor<?> constructor1 = clz.getConstructor(new
Class[]{String.class, int.class});
+ Constructor<?> constructor2 = clz.getConstructor(new
Class[]{StringBuilder.class});
+ Assertions.assertEquals(constructor1.getModifiers(), Modifier.PUBLIC);
+ Assertions.assertArrayEquals(constructor1.getExceptionTypes(), new
Class[]{Throwable.class, RuntimeException.class});
+
+ // get fields
+ Field staticAttrField = clz.getDeclaredField("staticAttr");
+ Field strAttrField = clz.getDeclaredField("strAttr");
+ Field intAttrField = clz.getDeclaredField("intAttr");
+ Assertions.assertNotNull(staticAttrField);
+ Assertions.assertNotNull(strAttrField);
+ Assertions.assertNotNull(intAttrField);
+ Assertions.assertEquals(staticAttrField.get(null), "defaultVal");
+
+ // get methods
+ Method setStrAttrMethod = clz.getMethod("setStrAttr", new
Class[]{String.class, int.class});
+ Method setIntAttrMethod = clz.getMethod("setIntAttr", new
Class[]{String.class, int.class});
+ Method getStrAttrMethod = clz.getMethod("getStrAttr");
+ Method getIntAttrMethod = clz.getMethod("getIntAttr");
+ Method baseClassMethod = clz.getMethod("baseClassMethod");
+ Assertions.assertNotNull(setStrAttrMethod);
+ Assertions.assertNotNull(setIntAttrMethod);
+ Assertions.assertNotNull(getStrAttrMethod);
+ Assertions.assertNotNull(getIntAttrMethod);
+ Assertions.assertNotNull(baseClassMethod);
+
+ // verify constructor0
+ Object objByConstructor0 = constructor0.newInstance();
+ Assertions.assertEquals(getStrAttrMethod.invoke(objByConstructor0),
null);
+ Assertions.assertEquals(getIntAttrMethod.invoke(objByConstructor0), 0);
+
+ // verify constructor1
+ Object objByConstructor1 = constructor1.newInstance("v1", 1);
+ Assertions.assertEquals(getStrAttrMethod.invoke(objByConstructor1),
"v1");
+ Assertions.assertEquals(getIntAttrMethod.invoke(objByConstructor1), 1);
+
+ // verify getter setter method
+ setStrAttrMethod.invoke(objByConstructor0, "v2", 2);
+ setIntAttrMethod.invoke(objByConstructor0, "v3", 3);
+ Assertions.assertEquals(getStrAttrMethod.invoke(objByConstructor0),
"v2");
+ Assertions.assertEquals(getIntAttrMethod.invoke(objByConstructor0), 3);
+
+ // verify constructor and method witch comes from baseClass
+ StringBuilder sb = new StringBuilder();
+ Object objByConstructor2 = constructor2.newInstance(sb);
+ Assertions.assertEquals(sb.toString(),"constructor comes from
BaseClass");
+
+ Object res = baseClassMethod.invoke(objByConstructor2);
+ Assertions.assertEquals(res,"method comes from BaseClass");
+
+ cg.release();
+ }
+
@SuppressWarnings("unchecked")
@Test
public void testMain() throws Exception {
Bean b = new Bean();
- Field fname = null, fs[] = Bean.class.getDeclaredFields();
- for (Field f : fs) {
- f.setAccessible(true);
- if (f.getName().equals("name"))
- fname = f;
- }
+ Field fname = Bean.class.getDeclaredField("name");
+ fname.setAccessible(true);
ClassGenerator cg = ClassGenerator.newInstance();
cg.setClassName(Bean.class.getName() + "$Builder");
@@ -63,12 +175,8 @@ public class ClassGeneratorTest {
@Test
public void testMain0() throws Exception {
Bean b = new Bean();
- Field fname = null, fs[] = Bean.class.getDeclaredFields();
- for (Field f : fs) {
- f.setAccessible(true);
- if (f.getName().equals("name"))
- fname = f;
- }
+ Field fname = Bean.class.getDeclaredField("name");
+ fname.setAccessible(true);
ClassGenerator cg = ClassGenerator.newInstance();
cg.setClassName(Bean.class.getName() + "$Builder2");
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/WrapperTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/WrapperTest.java
index dfff19037b..39fa87172a 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/WrapperTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/WrapperTest.java
@@ -42,6 +42,12 @@ public class WrapperTest {
assertEquals(w.getPropertyValue(obj, "name"), "changed");
w.invokeMethod(obj, "hello", new Class<?>[]{String.class}, new
Object[]{"qianlei"});
+
+ w.setPropertyValues(obj, new String[]{"name", "float"}, new
Object[]{"mrh", 1.0f});
+ Object[] propertyValues = w.getPropertyValues(obj, new
String[]{"name", "float"});
+ Assertions.assertEquals(propertyValues.length, 2);
+ Assertions.assertEquals(propertyValues[0], "mrh");
+ Assertions.assertEquals(propertyValues[1], 1.0f);
}
// bug: DUBBO-132
@@ -78,8 +84,10 @@ public class WrapperTest {
public void testWrapperObject() throws Exception {
Wrapper w = Wrapper.getWrapper(Object.class);
Assertions.assertEquals(4, w.getMethodNames().length);
+ Assertions.assertEquals(4, w.getDeclaredMethodNames().length);
Assertions.assertEquals(0, w.getPropertyNames().length);
Assertions.assertNull(w.getPropertyType(null));
+ Assertions.assertFalse(w.hasProperty(null));
}
@Test
@@ -98,14 +106,23 @@ public class WrapperTest {
});
}
+ @Test
+ public void testWrapPrimitive() throws Exception {
+ Assertions.assertThrows(IllegalArgumentException.class, () -> {
+ Wrapper.getWrapper(Byte.TYPE);
+ });
+ }
+
@Test
public void testInvokeWrapperObject() throws Exception {
Wrapper w = Wrapper.getWrapper(Object.class);
Object instance = new Object();
- Assertions.assertEquals(instance.getClass(), (Class<?>)
w.invokeMethod(instance, "getClass", null, null));
+ Assertions.assertEquals(instance.getClass(), w.invokeMethod(instance,
"getClass", null, null));
Assertions.assertEquals(instance.hashCode(), (int)
w.invokeMethod(instance, "hashCode", null, null));
- Assertions.assertEquals(instance.toString(), (String)
w.invokeMethod(instance, "toString", null, null));
- Assertions.assertTrue((boolean)w.invokeMethod(instance, "equals",
null, new Object[] {instance}));
+ Assertions.assertEquals(instance.toString(), w.invokeMethod(instance,
"toString", null, null));
+ Assertions.assertTrue((boolean) w.invokeMethod(instance, "equals", new
Class[]{instance.getClass()}, new Object[]{instance}));
+ Assertions.assertThrows(IllegalArgumentException.class,
+ () -> w.invokeMethod(instance, "equals", new
Class[]{instance.getClass()}, new Object[]{instance, instance}));
}
@Test
@@ -151,6 +168,23 @@ public class WrapperTest {
assertArrayEquals(new String[]{"hello", "world"},
ClassUtils.getMethodNames(Son.class));
}
+ @Test
+ public void testWrapImplClass(){
+ Wrapper w = Wrapper.getWrapper(Impl0.class);
+
+ String[] propertyNames = w.getPropertyNames();
+ Assertions.assertArrayEquals(propertyNames, new String[]{"a", "b",
"c"});
+ // fields that do not contain the static|final|transient modifier
+ Assertions.assertFalse(w.hasProperty("f"));
+ Assertions.assertFalse(w.hasProperty("l"));
+ Assertions.assertFalse(w.hasProperty("ch"));
+
+ // only has public methods, do not contain the private or comes from
object methods
+ Assertions.assertTrue(w.hasMethod("publicMethod"));
+ Assertions.assertFalse(w.hasMethod("privateMethod"));
+ Assertions.assertFalse(w.hasMethod("hashcode"));
+ }
+
public interface I0 {
String getName();
}
@@ -191,6 +225,17 @@ public class WrapperTest {
public static class Impl0 {
public float a, b, c;
+ public transient boolean f;
+ public static long l = 1;
+ public final char ch = 'c';
+
+ private void privateMethod() {
+
+ }
+
+ public void publicMethod() {
+
+ }
}
public static class Impl1 implements I1 {
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/lang/ShutdownHookCallbacksTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/lang/ShutdownHookCallbacksTest.java
index faedb769fc..19906258f6 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/lang/ShutdownHookCallbacksTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/lang/ShutdownHookCallbacksTest.java
@@ -53,7 +53,7 @@ public class ShutdownHookCallbacksTest {
@AfterEach
public void destroy() {
- callbacks.clear();
+ callbacks.destroy();
assertTrue(callbacks.getCallbacks().isEmpty());
}
}
diff --git
a/dubbo-common/src/test/resources/org/apache/dubbo/common/bytecode/TestClass
b/dubbo-common/src/test/resources/org/apache/dubbo/common/bytecode/TestClass
new file mode 100644
index 0000000000..270d3781ed
--- /dev/null
+++ b/dubbo-common/src/test/resources/org/apache/dubbo/common/bytecode/TestClass
@@ -0,0 +1,59 @@
+/*
+ * 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.common.bytecode;
+
+import org.apache.dubbo.common.bytecode.ClassGenerator.DC;
+
+public class TestClass extends BaseClass implements DC, BaseInterface {
+ public static volatile String staticAttr = "defaultVal";
+ protected volatile String strAttr;
+ private volatile int intAttr;
+
+ public void setStrAttr(String var1, int var2) throws Throwable,
RuntimeException {
+ this.strAttr = var1;
+ }
+
+ public void setIntAttr(String var1, int var2) throws Throwable,
RuntimeException {
+ this.intAttr = var2;
+ }
+
+ public String getStrAttr() throws Throwable, RuntimeException {
+ return this.strAttr;
+ }
+
+ public int getIntAttr() throws Throwable, RuntimeException {
+ return this.intAttr;
+ }
+
+ public String baseClassMethod() {
+ return "method comes from BaseClass";
+ }
+
+ public TestClass() {
+ }
+
+ public TestClass(String var1, int var2) throws Throwable, RuntimeException
{
+ this.strAttr = var1;
+ this.intAttr = var2;
+ }
+
+ public TestClass(StringBuilder sb) {
+ sb.append("constructor comes from BaseClass");
+ }
+}
+
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
index 8989d882a2..ffdd3faf20 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
@@ -26,7 +26,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
import java.util.concurrent.atomic.AtomicBoolean;
/**
- * The shutdown hook thread to do the clean up stuff.
+ * The shutdown hook thread to do the cleanup stuff.
* This is a singleton in order to ensure there is only one shutdown hook
registered.
* Because {@link ApplicationShutdownHooks} use {@link
java.util.IdentityHashMap}
* to store the shutdown hooks.
@@ -58,14 +58,14 @@ public class DubboShutdownHook extends Thread {
Assert.notNull(this.applicationModel, "ApplicationModel is null");
ignoreListenShutdownHook =
Boolean.parseBoolean(ConfigurationUtils.getProperty(applicationModel,
CommonConstants.IGNORE_LISTEN_SHUTDOWN_HOOK));
if (ignoreListenShutdownHook) {
- logger.info("dubbo.shutdownHook.listenIgnore configured, will
ignore add shutdown hook to jvm.");
+ logger.info(CommonConstants.IGNORE_LISTEN_SHUTDOWN_HOOK + "
configured, will ignore add shutdown hook to jvm.");
}
}
@Override
public void run() {
- if (destroyed.compareAndSet(false, true) && !ignoreListenShutdownHook)
{
+ if (!ignoreListenShutdownHook && destroyed.compareAndSet(false, true))
{
if (logger.isInfoEnabled()) {
logger.info("Run shutdown hook now.");
}
@@ -82,7 +82,7 @@ public class DubboShutdownHook extends Thread {
* Register the ShutdownHook
*/
public void register() {
- if (registered.compareAndSet(false, true) &&
!ignoreListenShutdownHook) {
+ if (!ignoreListenShutdownHook && registered.compareAndSet(false,
true)) {
try {
Runtime.getRuntime().addShutdownHook(this);
} catch (IllegalStateException e) {
@@ -97,7 +97,7 @@ public class DubboShutdownHook extends Thread {
* Unregister the ShutdownHook
*/
public void unregister() {
- if (registered.compareAndSet(true, false) &&
!ignoreListenShutdownHook) {
+ if (!ignoreListenShutdownHook && registered.compareAndSet(true,
false)) {
if (this.isAlive()) {
// DubboShutdownHook thread is running
return;
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 0c57145d0f..6d5e3163a8 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
@@ -60,7 +60,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.Callable;
import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;
import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
@@ -261,7 +260,7 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
serviceMetadata.setServiceType(getServiceInterfaceClass());
// TODO, uncomment this line once service key is unified
- serviceMetadata.setServiceKey(URL.buildKey(interfaceName, group,
version));
+ serviceMetadata.generateServiceKey();
Map<String, String> referenceParameters = appendConfig();
// init service-application mapping
@@ -290,7 +289,7 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
serviceMetadata.setTarget(ref);
serviceMetadata.addAttribute(PROXY_CLASS_REF, ref);
- consumerModel.setDestroyCaller(getDestroyRunner());
+ consumerModel.setDestroyRunner(getDestroyRunner());
consumerModel.setProxyObject(ref);
consumerModel.initMethodModels();
@@ -644,7 +643,6 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
* call, which is the default behavior
*/
protected boolean shouldJvmRefer(Map<String, String> map) {
- URL tmpUrl = new ServiceConfigURL("temp", "localhost", 0, map);
boolean isJvmRefer;
if (isInjvm() == null) {
// if an url is specified, don't do local reference
@@ -652,6 +650,7 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
isJvmRefer = false;
} else {
// by default, reference local service if there is
+ URL tmpUrl = new ServiceConfigURL("temp", "localhost", 0, map);
isJvmRefer =
InjvmProtocol.getInjvmProtocol(getScopeModel()).isInjvmRefer(tmpUrl);
}
} else {
@@ -676,10 +675,7 @@ public class ReferenceConfig<T> extends
ReferenceConfigBase<T> {
return invoker;
}
- public Callable<Void> getDestroyRunner() {
- return () -> {
- this.destroy();
- return null;
- };
+ public Runnable getDestroyRunner() {
+ return this::destroy;
}
}
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 2238b868f4..af2f4cc8d6 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -56,7 +56,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.UUID;
-import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -374,7 +373,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
} else {
serviceDescriptor =
repository.registerService(getInterfaceClass());
}
- providerModel = new ProviderModel(getUniqueServiceName(),
+ providerModel = new ProviderModel(serviceMetadata.getServiceKey(),
ref,
serviceDescriptor,
getScopeModel(),
@@ -383,7 +382,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
// Compatible with dependencies on ServiceModel#getServiceConfig(),
and will be removed in a future version
providerModel.setConfig(this);
- providerModel.setDestroyCaller(getDestroyRunner());
+ providerModel.setDestroyRunner(getDestroyRunner());
repository.registerProvider(providerModel);
List<URL> registryURLs = ConfigValidationUtils.loadRegistries(this,
true);
@@ -407,7 +406,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
Map<String, String> map = buildAttributes(protocolConfig);
// remove null key and null value
- map.keySet().removeIf(key -> key == null || map.get(key) == null);
+ map.keySet().removeIf(key -> StringUtils.isEmpty(key) ||
StringUtils.isEmpty(map.get(key)));
// init serviceMetadata attachments
serviceMetadata.getAttachments().putAll(map);
@@ -442,7 +441,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
map.put(METHODS_KEY, ANY_VALUE);
} else {
String revision = Version.getVersion(interfaceClass, version);
- if (revision != null && revision.length() > 0) {
+ if (StringUtils.isNotEmpty(revision)) {
map.put(REVISION_KEY, revision);
}
@@ -711,7 +710,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
boolean anyhost = false;
String hostToBind = getValueFromConfig(protocolConfig,
DUBBO_IP_TO_BIND);
- if (hostToBind != null && hostToBind.length() > 0 &&
isInvalidLocalHost(hostToBind)) {
+ if (StringUtils.isNotEmpty(hostToBind) &&
isInvalidLocalHost(hostToBind)) {
throw new IllegalArgumentException("Specified invalid bind ip from
property:" + DUBBO_IP_TO_BIND + ", value:" + hostToBind);
}
@@ -724,7 +723,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
if (isInvalidLocalHost(hostToBind)) {
anyhost = true;
if (logger.isDebugEnabled()) {
- logger.info("No valid ip found from environment, try to
get local host.");
+ logger.debug("No valid ip found from environment, try to
get local host.");
}
hostToBind = getLocalHost();
}
@@ -732,7 +731,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
map.put(BIND_IP_KEY, hostToBind);
- // registry ip is not used for bind ip by default
+ // bind ip is not used for registry ip by default
String hostToRegistry = getValueFromConfig(protocolConfig,
DUBBO_IP_TO_REGISTRY);
if (StringUtils.isNotEmpty(hostToRegistry) &&
isInvalidLocalHost(hostToRegistry)) {
throw new IllegalArgumentException("Specified invalid registry ip
from property:" + DUBBO_IP_TO_REGISTRY + ", value:" + hostToRegistry);
@@ -788,7 +787,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
// save bind port, used as url's key later
map.put(BIND_PORT_KEY, String.valueOf(portToBind));
- // registry port, not used as bind port by default
+ // bind port is not used as registry port by default
String portToRegistryStr = getValueFromConfig(protocolConfig,
DUBBO_PORT_TO_REGISTRY);
Integer portToRegistry = parsePort(portToRegistryStr);
if (portToRegistry == null) {
@@ -836,10 +835,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T>
{
}
}
- public Callable<Void> getDestroyRunner() {
- return () -> {
- this.unexport();
- return null;
- };
+ public Runnable getDestroyRunner() {
+ return this::unexport;
}
}
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
index d81e5b34cb..a609e88080 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
@@ -213,8 +213,8 @@ public class DefaultModuleDeployer extends
AbstractDeployer<ModuleModel> impleme
for (ConsumerModel consumerModel : consumerModels) {
try {
- if (consumerModel.getDestroyCaller() != null) {
- consumerModel.getDestroyCaller().call();
+ if (consumerModel.getDestroyRunner() != null) {
+ consumerModel.getDestroyRunner().run();
}
} catch (Throwable t) {
logger.error("Unable to destroy consumerModel.", t);
@@ -224,8 +224,8 @@ public class DefaultModuleDeployer extends
AbstractDeployer<ModuleModel> impleme
List<ProviderModel> exportedServices =
serviceRepository.getExportedServices();
for (ProviderModel providerModel : exportedServices) {
try {
- if (providerModel.getDestroyCaller() != null) {
- providerModel.getDestroyCaller().call();
+ if (providerModel.getDestroyRunner() != null) {
+ providerModel.getDestroyRunner().run();
}
} catch (Throwable t) {
logger.error("Unable to destroy providerModel.", t);
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
index 771d8d435b..fef5ed0497 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
@@ -291,22 +291,6 @@ public class ServiceConfigTest {
});
}
-// @Test
-// public void testMock() throws Exception {
-// Assertions.assertThrows(IllegalArgumentException.class, () -> {
-// ServiceConfig service = new ServiceConfig();
-// service.setMock("true");
-// });
-// }
-//
-// @Test
-// public void testMock2() throws Exception {
-// Assertions.assertThrows(IllegalArgumentException.class, () -> {
-// ServiceConfig service = new ServiceConfig();
-// service.setMock(true);
-// });
-// }
-
@Test
public void testApplicationInUrl() {
service.export();
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceCacheTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceCacheTest.java
index e0174dec39..8b9bac95e5 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceCacheTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceCacheTest.java
@@ -83,23 +83,23 @@ public class ReferenceCacheTest {
assertEquals(value,
cache.get("group1/org.apache.dubbo.config.utils.service.FooService:1.0.0",
FooService.class));
}
-// @Test
-// public void testGetCacheDiffName() throws Exception {
-// ReferenceCache cache = ReferenceCache.getCache();
-// MockReferenceConfig config =
buildMockReferenceConfig("org.apache.dubbo.config.utils.service.FooService",
"group1", "1.0.0");
-// assertEquals(0L, config.getCounter());
-// cache.get(config);
-// assertTrue(config.isGetMethodRun());
-// assertEquals(1L, config.getCounter());
-//
-// cache = ReferenceCache.getCache("foo");
-// config =
buildMockReferenceConfig("org.apache.dubbo.config.utils.service.FooService",
"group1", "1.0.0");
-// assertEquals(1L, config.getCounter());
-// cache.get(config);
-// // still init for the same ReferenceConfig if the cache is different
-// assertTrue(config.isGetMethodRun());
-// assertEquals(2L, config.getCounter());
-// }
+ @Test
+ public void testGetCacheDiffName() throws Exception {
+ SimpleReferenceCache cache = SimpleReferenceCache.getCache();
+ MockReferenceConfig config =
buildMockReferenceConfig("org.apache.dubbo.config.utils.service.FooService",
"group1", "1.0.0");
+ assertEquals(0L, config.getCounter());
+ cache.get(config);
+ assertTrue(config.isGetMethodRun());
+ assertEquals(1L, config.getCounter());
+
+ cache = SimpleReferenceCache.getCache("foo");
+ config =
buildMockReferenceConfig("org.apache.dubbo.config.utils.service.FooService",
"group1", "1.0.0");
+ assertEquals(1L, config.getCounter());
+ cache.get(config);
+ // still init for the same ReferenceConfig if the cache is different
+ assertTrue(config.isGetMethodRun());
+ assertEquals(2L, config.getCounter());
+ }
@Test
public void testDestroy() throws Exception {
diff --git
a/dubbo-plugin/dubbo-auth/src/main/java/org/apache/dubbo/auth/filter/ProviderAuthFilter.java
b/dubbo-plugin/dubbo-auth/src/main/java/org/apache/dubbo/auth/filter/ProviderAuthFilter.java
index 3b1008d2ce..ba5c3bd643 100644
---
a/dubbo-plugin/dubbo-auth/src/main/java/org/apache/dubbo/auth/filter/ProviderAuthFilter.java
+++
b/dubbo-plugin/dubbo-auth/src/main/java/org/apache/dubbo/auth/filter/ProviderAuthFilter.java
@@ -29,7 +29,7 @@ import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.model.ApplicationModel;
-@Activate(group = CommonConstants.PROVIDER, order = -10000)
+@Activate(group = CommonConstants.PROVIDER, value = Constants.SERVICE_AUTH,
order = -10000)
public class ProviderAuthFilter implements Filter {
private ApplicationModel applicationModel;
diff --git
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
index 48fe0deea3..1007cec8c6 100644
---
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
+++
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
@@ -58,6 +58,7 @@ public class MetadataUtils {
if (getMetadataReports(applicationModel).size() == 0) {
String msg = "Remote Metadata Report Server is not provided or
unavailable, will stop registering service definition to remote center!";
logger.warn(msg);
+ return;
}
try {
diff --git
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/proxy/AbstractProxyTest.java
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/proxy/AbstractProxyTest.java
index aece1d6f8d..3e95da20f8 100644
---
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/proxy/AbstractProxyTest.java
+++
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/proxy/AbstractProxyTest.java
@@ -64,7 +64,7 @@ public abstract class AbstractProxyTest {
public void testGetInvoker() throws Exception {
URL url = URL.valueOf("test://test:11/test?group=dubbo&version=1.1");
- DemoService origin = new
org.apache.dubbo.rpc.support.DemoServiceImpl();
+ DemoService origin = new DemoServiceImpl();
Invoker<DemoService> invoker = factory.getInvoker(new
DemoServiceImpl(), DemoService.class, url);