From f33398f857b5dc63ab60798adb68fef4024fb657 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Mon, 27 Dec 2021 13:18:15 +0800 Subject: [PATCH] JDK17 Support for Dubbo (#9062) * Add JDK17 Support for Javaassist * compact javaassist * compact javaassist * opt code * fix compile * fix classpath * add ant * tmp fix * fix ut * change name * Refactor get class * remove reflect get stackTrace * Fix support jdk 17 * Add jdk 17 to ut * Add jdk 17 to ut * update mockito version * update jacoco * ignore java compile * add open * fix ut * fix ut * fix jupiter api * fix pom * disable zk 3.4 * disable script router in jdk 17 * remove curator5 * fix ut * fix ut * fix ut * fix ut * fix ut * fix ut * fix ut * fix ut * fix zk * remove test scope * fix ut * add open * fix ut * add curator * fix pom * fix pom * enable debug * remove add open * add open profile * auto activate open * disable test in zk * refactor zk dependency * remove curator test * add zookeeper dependency * fix compile * change zk default wait time * change zk default wait time * fix ut * set throwable message by constructor * Add unit prepare jdk 17 support * fix zk dependency * remove jackson-databind --- .github/workflows/build-and-test-3.yml | 4 +- .../router/script/ScriptStateRouterTest.java | 37 ++-- .../dubbo/common/bytecode/ClassGenerator.java | 25 ++- .../common/bytecode/DubboLoaderClassPath.java | 48 +++++ .../apache/dubbo/common/bytecode/Mixin.java | 7 +- .../apache/dubbo/common/bytecode/Proxy.java | 197 +++++++----------- .../apache/dubbo/common/bytecode/Wrapper.java | 16 +- .../dubbo/common/compiler/Compiler.java | 19 +- .../compiler/support/AbstractCompiler.java | 6 +- .../compiler/support/AdaptiveCompiler.java | 4 +- .../compiler/support/CtClassBuilder.java | 3 + .../compiler/support/JavassistCompiler.java | 23 +- .../common/compiler/support/JdkCompiler.java | 2 +- .../common/extension/ExtensionLoader.java | 2 +- .../apache/dubbo/common/utils/PojoUtils.java | 87 ++++---- .../dubbo/config/ConfigCenterConfig.java | 4 +- .../common/bytecode/ClassGeneratorTest.java | 4 +- .../dubbo/common/bytecode/MixinTest.java | 10 +- .../dubbo/common/bytecode/ProxyTest.java | 3 + .../support/AdaptiveCompilerTest.java | 3 +- .../common/compiler/support/JavaCodeTest.java | 9 + .../support/JavassistCompilerTest.java | 25 ++- .../compiler/support/JdkCompilerTest.java | 12 +- dubbo-config/dubbo-config-api/pom.xml | 16 ++ .../dubbo/config/AbstractConfigTest.java | 1 + .../dubbo/config/ConfigCenterConfigTest.java | 3 +- .../dubbo/config/ReferenceConfigTest.java | 4 + dubbo-config/dubbo-config-spring/pom.xml | 5 - ...erenceAnnotationBeanPostProcessorTest.java | 10 +- .../consumer/PropertyConfigurerTest.java | 5 +- .../PropertySourcesConfigurerTest.java | 5 +- .../PropertySourcesInJavaConfigTest.java | 6 +- .../JavaConfigReferenceBeanTest.java | 27 +-- .../reference/localcall/LocalCallTest.java | 5 +- .../reference/localcall/LocalCallTest2.java | 5 +- .../LocalCallReferenceAnnotationTest.java | 5 +- ...lCallMultipleReferenceAnnotationsTest.java | 6 +- .../LocalCallReferenceMixTest.java | 5 +- .../dubbo-configcenter-zookeeper/pom.xml | 21 ++ .../ZookeeperDynamicConfiguration.java | 8 +- .../ZookeeperDynamicConfigurationTest.java | 2 +- dubbo-dependencies-bom/pom.xml | 6 +- .../dubbo-dependencies-zookeeper/pom.xml | 59 ++++++ .../ServiceDefinitionBuilderTest.java | 14 +- .../annotation/processing/util/TypeUtils.java | 7 +- .../processing/util/MethodUtilsTest.java | 3 +- .../dubbo-metadata-report-zookeeper/pom.xml | 21 ++ .../ZookeeperMetadataReportTest.java | 14 +- .../support/CacheableFailbackRegistry.java | 4 +- .../dubbo-registry-kubernetes/pom.xml | 16 +- .../dubbo-registry-multiple/pom.xml | 21 ++ .../multiple/MultipleRegistry2S2RTest.java | 4 +- .../ZookeeperServiceDiscoveryFactoryTest.java | 4 + .../ZookeeperServiceDiscoveryTest.java | 3 + .../zookeeper/AbstractZookeeperClient.java | 3 +- .../dubbo-remoting-zookeeper-curator5/pom.xml | 5 - .../dubbo-remoting-zookeeper/pom.xml | 14 ++ .../curator/CuratorZookeeperClientTest.java | 9 +- .../CuratorZookeeperTransporterTest.java | 3 + .../AbstractZookeeperTransporterTest.java | 12 +- .../org/apache/dubbo/rpc/AppResponse.java | 4 +- .../rpc/proxy/InvokerInvocationHandler.java | 12 -- .../protocol/dubbo/ArgumentCallbackTest.java | 1 + .../dubbo/status/ServerStatusCheckerTest.java | 9 +- .../rpc/protocol/injvm/InjvmDeepCopyTest.java | 2 +- ...ctRegistryCenterTestExecutionListener.java | 1 + dubbo-test/dubbo-test-spring/pom.xml | 22 ++ dubbo-test/dubbo-test-spring3.2/pom.xml | 16 ++ dubbo-test/dubbo-test-spring4.1/pom.xml | 15 ++ dubbo-test/dubbo-test-spring4.2/pom.xml | 15 ++ pom.xml | 39 +++- 71 files changed, 697 insertions(+), 350 deletions(-) create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/DubboLoaderClassPath.java diff --git a/.github/workflows/build-and-test-3.yml b/.github/workflows/build-and-test-3.yml index 4f7b52618d..d3ebd7b4b0 100644 --- a/.github/workflows/build-and-test-3.yml +++ b/.github/workflows/build-and-test-3.yml @@ -72,7 +72,7 @@ jobs: fail-fast: false matrix: os: [ ubuntu-18.04, windows-2019 ] - jdk: [ 8, 11 ] + jdk: [ 8, 11, 17 ] env: DISABLE_FILE_SYSTEM_TEST: true ZOOKEEPER_VERSION: 3.6.3 @@ -124,7 +124,7 @@ jobs: fail-fast: false matrix: os: [ ubuntu-18.04, windows-2019 ] - jdk: [ 8, 11 ] + jdk: [ 8, 11, 17 ] env: DISABLE_FILE_SYSTEM_TEST: true steps: diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/script/ScriptStateRouterTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/script/ScriptStateRouterTest.java index ba4a3021e7..4fe6dc5067 100644 --- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/script/ScriptStateRouterTest.java +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/script/ScriptStateRouterTest.java @@ -28,12 +28,15 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import java.util.ArrayList; import java.util.List; import static org.apache.dubbo.rpc.cluster.Constants.RULE_KEY; +@DisabledForJreRange(min = JRE.JAVA_16) public class ScriptStateRouterTest { private URL SCRIPT_URL = URL.valueOf("script://javascript?type=javascript"); @@ -66,12 +69,12 @@ public class ScriptStateRouterTest { @Test public void testRoutePickInvokers() { String rule = "var result = new java.util.ArrayList(invokers.size());" + - "for (i=0;i> invokers = new BitList<>(originInvokers); String script = "function route(invokers, invocation, context){ " + - " var result = new java.util.ArrayList(invokers.size()); " + - " var targetHost = new java.util.ArrayList(); " + - " targetHost.add(\"10.134.108.2\"); " + - " for (var i = 0; i < invokers.length; i++) { " + - " if(targetHost.contains(invokers[i].getUrl().getHost())){ " + - " result.add(invokers[i]); " + - " } " + - " } " + - " return result; " + - "} " + - "route(invokers, invocation, context) "; + " var result = new java.util.ArrayList(invokers.size()); " + + " var targetHost = new java.util.ArrayList(); " + + " targetHost.add(\"10.134.108.2\"); " + + " for (var i = 0; i < invokers.length; i++) { " + + " if(targetHost.contains(invokers[i].getUrl().getHost())){ " + + " result.add(invokers[i]); " + + " } " + + " } " + + " return result; " + + "} " + + "route(invokers, invocation, context) "; StateRouter router = new ScriptStateRouterFactory().getRouter(String.class, getRouteUrl(script)); List> routeResult = router.route(invokers, invokers.get(0).getUrl(), new RpcInvocation(), false).getResult(); 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 67cc002c03..aa8b742d5c 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 @@ -94,7 +94,7 @@ public final class ClassGenerator { if (pool == null) { pool = new ClassPool(true); pool.insertClassPath(new LoaderClassPath(loader)); - pool.insertClassPath(new LoaderClassPath(ClassGenerator.class.getClassLoader())); + pool.insertClassPath(new DubboLoaderClassPath()); POOL_MAP.put(loader, pool); } return pool; @@ -284,12 +284,17 @@ public final class ClassGenerator { return mPool; } - public Class toClass() { - return toClass(mClassLoader, - getClass().getProtectionDomain()); + /** + * @param neighbor A class belonging to the same package that this + * class belongs to. It is used to load the class. + */ + public Class toClass(Class neighbor) { + return toClass(neighbor, + mClassLoader, + getClass().getProtectionDomain()); } - public Class toClass(ClassLoader loader, ProtectionDomain pd) { + public Class toClass(Class neighborClass, ClassLoader loader, ProtectionDomain pd) { if (mCtc != null) { mCtc.detach(); } @@ -340,7 +345,15 @@ public final class ClassGenerator { } } } - return mCtc.toClass(loader, pd); + + try { + return mPool.toClass(mCtc, neighborClass, loader, pd); + } catch (Throwable t) { + if (!(t instanceof CannotCompileException)) { + return mPool.toClass(mCtc, loader, pd); + } + throw t; + } } catch (RuntimeException e) { throw e; } catch (NotFoundException | CannotCompileException e) { diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/DubboLoaderClassPath.java b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/DubboLoaderClassPath.java new file mode 100644 index 0000000000..1e47997707 --- /dev/null +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/DubboLoaderClassPath.java @@ -0,0 +1,48 @@ +/* + * 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 javassist.LoaderClassPath; +import javassist.NotFoundException; + +import java.io.InputStream; +import java.net.URL; + +/** + * Ensure javassist will load Dubbo's class from Dubbo's classLoader + */ +public class DubboLoaderClassPath extends LoaderClassPath { + public DubboLoaderClassPath() { + super(DubboLoaderClassPath.class.getClassLoader()); + } + + @Override + public InputStream openClassfile(String classname) throws NotFoundException { + if (!classname.startsWith("org.apache.dubbo")) { + return null; + } + return super.openClassfile(classname); + } + + @Override + public URL find(String classname) { + if (!classname.startsWith("org.apache.dubbo")) { + return null; + } + return super.find(classname); + } +} diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java index f8a7e1f8fc..88f23be03e 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java @@ -113,6 +113,7 @@ public abstract class Mixin { } ccp.addConstructor(Modifier.PUBLIC, new Class[]{Object[].class}, code.toString()); + Class neighbor = null; // impl methods. Set worked = new HashSet(); for (int i = 0; i < ics.length; i++) { @@ -120,6 +121,7 @@ public abstract class Mixin { String npkg = ics[i].getPackage().getName(); if (pkg == null) { pkg = npkg; + neighbor = ics[i]; } else { if (!pkg.equals(npkg)) { throw new IllegalArgumentException("non-public delegate class from different packages"); @@ -159,12 +161,13 @@ public abstract class Mixin { if (pkg == null) { pkg = PACKAGE_NAME; + neighbor = Mixin.class; } // create MixinInstance class. String micn = pkg + ".mixin" + id; ccp.setClassName(micn); - ccp.toClass(); + ccp.toClass(neighbor); // create Mixin class. String fcn = Mixin.class.getName() + id; @@ -173,7 +176,7 @@ public abstract class Mixin { ccm.addDefaultConstructor(); ccm.setSuperClass(Mixin.class.getName()); ccm.addMethod("public Object newInstance(Object[] delegates){ return new " + micn + "($1); }"); - Class mixin = ccm.toClass(); + Class mixin = ccm.toClass(Mixin.class); return (Mixin) mixin.getDeclaredConstructor().newInstance(); } catch (RuntimeException e) { throw e; 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 2d9b5ca6c5..30617a2226 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 @@ -18,19 +18,18 @@ package org.apache.dubbo.common.bytecode; import org.apache.dubbo.common.utils.ReflectUtils; -import java.lang.ref.Reference; -import java.lang.ref.SoftReference; +import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.security.ProtectionDomain; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.WeakHashMap; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import static org.apache.dubbo.common.constants.CommonConstants.MAX_PROXY_COUNT; @@ -39,29 +38,26 @@ import static org.apache.dubbo.common.constants.CommonConstants.MAX_PROXY_COUNT; * Proxy. */ -public abstract class Proxy { - public static final InvocationHandler RETURN_NULL_INVOKER = (proxy, method, args) -> null; +public class Proxy { public static final InvocationHandler THROW_UNSUPPORTED_INVOKER = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) { throw new UnsupportedOperationException("Method [" + ReflectUtils.getName(method) + "] unimplemented."); } }; + private static final AtomicLong PROXY_CLASS_COUNTER = new AtomicLong(0); - private static final String PACKAGE_NAME = Proxy.class.getPackage().getName(); - private static final Map> PROXY_CACHE_MAP = new WeakHashMap>(); - // cache class, avoid PermGen OOM. - private static final Map> PROXY_CLASS_MAP = new WeakHashMap>(); + private static final Map> PROXY_CACHE_MAP = new WeakHashMap<>(); - private static final Object PENDING_GENERATION_MARKER = new Object(); + private final Class classToCreate; - protected Proxy() { + protected Proxy(Class classToCreate) { + this.classToCreate = classToCreate; } /** * Get proxy. * - * @param cl class loader. * @param ics interface class array. * @return Proxy instance. */ @@ -72,112 +68,76 @@ public abstract class Proxy { // ClassLoader from App Interface should support load some class from Dubbo ClassLoader cl = ics[0].getClassLoader(); - ClassLoader appClassLoader = ics[0].getClassLoader(); ProtectionDomain domain = ics[0].getProtectionDomain(); + // use interface class name list as key. + String key = buildInterfacesKey(cl, ics); + + // get cache by class loader. + final Map cache; + synchronized (PROXY_CACHE_MAP) { + cache = PROXY_CACHE_MAP.computeIfAbsent(cl, k -> new ConcurrentHashMap<>()); + } + + Proxy proxy = cache.get(key); + if (proxy == null) { + synchronized (ics[0]) { + proxy = cache.get(key); + if (proxy == null) { + // create Proxy class. + proxy = new Proxy(buildProxyClass(cl, ics, domain)); + cache.put(key, proxy); + } + } + } + return proxy; + } + + private static String buildInterfacesKey(ClassLoader cl, Class[] ics) { StringBuilder sb = new StringBuilder(); - for (int i = 0; i < ics.length; i++) { - String itf = ics[i].getName(); - if (!ics[i].isInterface()) { + for (Class ic : ics) { + String itf = ic.getName(); + if (!ic.isInterface()) { throw new RuntimeException(itf + " is not a interface."); } Class tmp = null; try { tmp = Class.forName(itf, false, cl); - } catch (ClassNotFoundException e) { + } catch (ClassNotFoundException ignore) { } - if (tmp != ics[i]) { - throw new IllegalArgumentException(ics[i] + " is not visible from class loader"); + if (tmp != ic) { + throw new IllegalArgumentException(ic + " is not visible from class loader"); } sb.append(itf).append(';'); } + return sb.toString(); + } - // use interface class name list as key. - String key = sb.toString(); - - // get cache by class loader. - final Map cache; - // cache class - final Map classCache; - synchronized (PROXY_CACHE_MAP) { - cache = PROXY_CACHE_MAP.computeIfAbsent(cl, k -> new HashMap<>()); - classCache = PROXY_CLASS_MAP.computeIfAbsent(cl, k -> new HashMap<>()); - } - - Proxy proxy = null; - synchronized (cache) { - do { - Object value = cache.get(key); - if (value instanceof Reference) { - proxy = (Proxy) ((Reference) value).get(); - if (proxy != null) { - return proxy; - } - } - - // get Class by key. - Object clazzObj = classCache.get(key); - if (null == clazzObj || clazzObj instanceof Reference) { - Class clazz = null; - if (clazzObj instanceof Reference) { - clazz = (Class) ((Reference) clazzObj).get(); - } - - if (null == clazz) { - if (value == PENDING_GENERATION_MARKER) { - try { - cache.wait(); - } catch (InterruptedException e) { - } - } else { - cache.put(key, PENDING_GENERATION_MARKER); - break; - } - } else { - try { - proxy = (Proxy) clazz.newInstance(); - return proxy; - } catch (InstantiationException | IllegalAccessException e) { - throw new RuntimeException(e); - } finally { - if (null == proxy) { - cache.remove(key); - } else { - cache.put(key, new SoftReference<>(proxy)); - } - } - } - } - } - while (true); - } - - long id = PROXY_CLASS_COUNTER.getAndIncrement(); - String pkg = null; - ClassGenerator ccp = null, ccm = null; + private static Class buildProxyClass(ClassLoader cl, Class[] ics, ProtectionDomain domain) { + ClassGenerator ccp = null; try { ccp = ClassGenerator.newInstance(cl); Set worked = new HashSet<>(); List methods = new ArrayList<>(); - for (int i = 0; i < ics.length; i++) { - if (!Modifier.isPublic(ics[i].getModifiers())) { - String npkg = ics[i].getPackage().getName(); - if (pkg == null) { - pkg = npkg; - } else { - if (!pkg.equals(npkg)) { - throw new IllegalArgumentException("non-public interfaces from different packages"); - } + String pkg = ics[0].getPackage().getName(); + Class neighbor = ics[0]; + + for (Class ic : ics) { + String npkg = ic.getPackage().getName(); + if (!Modifier.isPublic(ic.getModifiers())) { + if (!pkg.equals(npkg)) { + throw new IllegalArgumentException("non-public interfaces from different packages"); } } - ccp.addInterface(ics[i]); - for (Method method : ics[i].getMethods()) { + ccp.addInterface(ic); + + for (Method method : ic.getMethods()) { String desc = ReflectUtils.getDesc(method); if (worked.contains(desc) || Modifier.isStatic(method.getModifiers())) { continue; @@ -202,33 +162,16 @@ public abstract class Proxy { } } - if (pkg == null) { - pkg = PACKAGE_NAME; - } - // create ProxyInstance class. - String pcn = pkg + ".proxy" + id; + String pcn = neighbor.getName() + "DubboProxy" + PROXY_CLASS_COUNTER.getAndIncrement(); ccp.setClassName(pcn); ccp.addField("public static java.lang.reflect.Method[] methods;"); ccp.addField("private " + InvocationHandler.class.getName() + " handler;"); - ccp.addConstructor(Modifier.PUBLIC, new Class[] {InvocationHandler.class}, new Class[0], "handler=$1;"); + ccp.addConstructor(Modifier.PUBLIC, new Class[]{InvocationHandler.class}, new Class[0], "handler=$1;"); ccp.addDefaultConstructor(); - Class clazz = ccp.toClass(appClassLoader, domain); + Class clazz = ccp.toClass(neighbor, cl, domain); clazz.getField("methods").set(null, methods.toArray(new Method[0])); - - // create Proxy class. - String fcn = Proxy.class.getName() + id; - ccm = ClassGenerator.newInstance(cl); - ccm.setClassName(fcn); - ccm.addDefaultConstructor(); - ccm.setSuperClass(Proxy.class); - ccm.addMethod("public Object newInstance(" + InvocationHandler.class.getName() + " h){ return new " + pcn + "($1); }"); - Class pc = ccm.toClass(appClassLoader, domain); - proxy = (Proxy) pc.newInstance(); - - synchronized (classCache) { - classCache.put(key, new SoftReference>(pc)); - } + return clazz; } catch (RuntimeException e) { throw e; } catch (Exception e) { @@ -238,19 +181,7 @@ public abstract class Proxy { if (ccp != null) { ccp.release(); } - if (ccm != null) { - ccm.release(); - } - synchronized (cache) { - if (proxy == null) { - cache.remove(key); - } else { - cache.put(key, new SoftReference(proxy)); - } - cache.notifyAll(); - } } - return proxy; } private static String asArgument(Class cl, String name) { @@ -298,5 +229,17 @@ public abstract class Proxy { * * @return instance. */ - abstract public Object newInstance(InvocationHandler handler); + public Object newInstance(InvocationHandler handler) { + Constructor constructor; + try { + constructor = classToCreate.getDeclaredConstructor(InvocationHandler.class); + return constructor.newInstance(handler); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + + public Class getClassToCreate() { + return classToCreate; + } } 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 e5040e4bcc..64373fc290 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 @@ -151,14 +151,14 @@ public abstract class Wrapper { continue; } - c1.append(" if( $2.equals(\"").append(fn).append("\") ){ ((" + f.getDeclaringClass().getName() + ")w).").append(fn).append('=').append(arg(ft, "$3")).append("; return; }"); - c2.append(" if( $2.equals(\"").append(fn).append("\") ){ return ($w)((" + f.getDeclaringClass().getName() + ")w).").append(fn).append("; }"); + c1.append(" if( $2.equals(\"").append(fn).append("\") ){ ((").append(f.getDeclaringClass().getName()).append(")w).").append(fn).append('=').append(arg(ft, "$3")).append("; return; }"); + c2.append(" if( $2.equals(\"").append(fn).append("\") ){ return ($w)((").append(f.getDeclaringClass().getName()).append(")w).").append(fn).append("; }"); pts.put(fn, ft); } final ClassPool classPool = new ClassPool(ClassPool.getDefault()); classPool.insertClassPath(new LoaderClassPath(cl)); - classPool.insertClassPath(new LoaderClassPath(ClassGenerator.class.getClassLoader())); + classPool.insertClassPath(new DubboLoaderClassPath()); List allMethod = new ArrayList<>(); try { @@ -226,7 +226,7 @@ public abstract class Wrapper { c3.append(" }"); } - c3.append(" throw new " + NoSuchMethodException.class.getName() + "(\"Not found method \\\"\"+$2+\"\\\" in class " + c.getName() + ".\"); }"); + c3.append(" throw new ").append(NoSuchMethodException.class.getName()).append("(\"Not found method \\\"\"+$2+\"\\\" in class ").append(c.getName()).append(".\"); }"); // deal with get/set method. Matcher matcher; @@ -248,13 +248,13 @@ public abstract class Wrapper { pts.put(pn, pt); } } - c1.append(" throw new " + NoSuchPropertyException.class.getName() + "(\"Not found property \\\"\"+$2+\"\\\" field or setter method in class " + c.getName() + ".\"); }"); - c2.append(" throw new " + NoSuchPropertyException.class.getName() + "(\"Not found property \\\"\"+$2+\"\\\" field or getter method in class " + c.getName() + ".\"); }"); + c1.append(" throw new ").append(NoSuchPropertyException.class.getName()).append("(\"Not found property \\\"\"+$2+\"\\\" field or setter method in class ").append(c.getName()).append(".\"); }"); + c2.append(" throw new ").append(NoSuchPropertyException.class.getName()).append("(\"Not found property \\\"\"+$2+\"\\\" field or getter method in class ").append(c.getName()).append(".\"); }"); // make class long id = WRAPPER_CLASS_COUNTER.getAndIncrement(); ClassGenerator cc = ClassGenerator.newInstance(cl); - cc.setClassName((Modifier.isPublic(c.getModifiers()) ? Wrapper.class.getName() : c.getName() + "$sw") + id); + cc.setClassName(c.getName() + "DubboWrap" + id); cc.setSuperClass(Wrapper.class); cc.addDefaultConstructor(); @@ -276,7 +276,7 @@ public abstract class Wrapper { cc.addMethod(c3.toString()); try { - Class wc = cc.toClass(); + Class wc = cc.toClass(c); // setup static field. wc.getField("pts").set(null, pts); wc.getField("pns").set(null, pts.keySet().toArray(new String[0])); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java index ecf6f14528..dca8ec5eb2 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java @@ -31,7 +31,24 @@ public interface Compiler { * @param code Java source code * @param classLoader classloader * @return Compiled class + * @deprecated use {@link Compiler#compile(Class, String, ClassLoader)} to support JDK 16 */ - Class compile(String code, ClassLoader classLoader); + @Deprecated + default Class compile(String code, ClassLoader classLoader) { + return compile(null, code, classLoader); + } + + /** + * Compile java source code. + * + * @param neighbor A class belonging to the same package that this + * class belongs to. It is used to load the class. (For JDK 16 and above) + * @param code Java source code + * @param classLoader classloader + * @return Compiled class + */ + default Class compile(Class neighbor, String code, ClassLoader classLoader) { + return compile(code, classLoader); + } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AbstractCompiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AbstractCompiler.java index 053ee1f9d9..69f59ec261 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AbstractCompiler.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AbstractCompiler.java @@ -37,7 +37,7 @@ public abstract class AbstractCompiler implements Compiler { private static final Map CLASS_IN_CREATION_MAP = new ConcurrentHashMap<>(); @Override - public Class compile(String code, ClassLoader classLoader) { + public Class compile(Class neighbor, String code, ClassLoader classLoader) { code = code.trim(); Matcher matcher = PACKAGE_PATTERN.matcher(code); String pkg; @@ -67,7 +67,7 @@ public abstract class AbstractCompiler implements Compiler { throw new IllegalStateException("The java code not endsWith \"}\", code: \n" + code + "\n"); } try { - return doCompile(classLoader, className, code); + return doCompile(neighbor, classLoader, className, code); } catch (RuntimeException t) { throw t; } catch (Throwable t) { @@ -78,6 +78,6 @@ public abstract class AbstractCompiler implements Compiler { } } - protected abstract Class doCompile(ClassLoader classLoader, String name, String source) throws Throwable; + protected abstract Class doCompile(Class neighbor,ClassLoader classLoader, String name, String source) throws Throwable; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AdaptiveCompiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AdaptiveCompiler.java index 9e6771d033..2518c22789 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AdaptiveCompiler.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/AdaptiveCompiler.java @@ -41,7 +41,7 @@ public class AdaptiveCompiler implements Compiler, ScopeModelAware { } @Override - public Class compile(String code, ClassLoader classLoader) { + public Class compile(Class neighbor, String code, ClassLoader classLoader) { Compiler compiler; ExtensionLoader loader = frameworkModel.getExtensionLoader(Compiler.class); String name = DEFAULT_COMPILER; // copy reference @@ -50,7 +50,7 @@ public class AdaptiveCompiler implements Compiler, ScopeModelAware { } else { compiler = loader.getDefaultExtension(); } - return compiler.compile(code, classLoader); + return compiler.compile(neighbor, code, classLoader); } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/CtClassBuilder.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/CtClassBuilder.java index 2ebe8b5dc9..9029d6d2cd 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/CtClassBuilder.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/CtClassBuilder.java @@ -16,6 +16,8 @@ */ package org.apache.dubbo.common.compiler.support; +import org.apache.dubbo.common.bytecode.DubboLoaderClassPath; + import javassist.CannotCompileException; import javassist.ClassPool; import javassist.CtClass; @@ -141,6 +143,7 @@ public class CtClassBuilder { public CtClass build(ClassLoader classLoader) throws NotFoundException, CannotCompileException { ClassPool pool = new ClassPool(true); pool.insertClassPath(new LoaderClassPath(classLoader)); + pool.insertClassPath(new DubboLoaderClassPath()); // create class CtClass ctClass = pool.makeClass(className, pool.get(superClassName)); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JavassistCompiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JavassistCompiler.java index 2f52ec9931..177a766d3a 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JavassistCompiler.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JavassistCompiler.java @@ -16,8 +16,12 @@ */ package org.apache.dubbo.common.compiler.support; +import org.apache.dubbo.common.bytecode.DubboLoaderClassPath; +import javassist.CannotCompileException; +import javassist.ClassPool; import javassist.CtClass; +import javassist.LoaderClassPath; import java.util.Arrays; import java.util.regex.Matcher; @@ -39,7 +43,7 @@ public class JavassistCompiler extends AbstractCompiler { private static final Pattern FIELD_PATTERN = Pattern.compile("[^\n]+=[^\n]+;"); @Override - public Class doCompile(ClassLoader classLoader, String name, String source) throws Throwable { + public Class doCompile(Class neighbor, ClassLoader classLoader, String name, String source) throws Throwable { CtClassBuilder builder = new CtClassBuilder(); builder.setClassName(name); @@ -78,7 +82,22 @@ public class JavassistCompiler extends AbstractCompiler { // compile CtClass cls = builder.build(classLoader); - return cls.toClass(classLoader, JavassistCompiler.class.getProtectionDomain()); + + ClassPool cp = cls.getClassPool(); + if (classLoader == null) { + classLoader = cp.getClassLoader(); + } + cp.insertClassPath(new LoaderClassPath(classLoader)); + cp.insertClassPath(new DubboLoaderClassPath()); + + try { + return cp.toClass(cls, neighbor, classLoader, JavassistCompiler.class.getProtectionDomain()); + } catch (Throwable t) { + if (!(t instanceof CannotCompileException)) { + return cp.toClass(cls, classLoader, JavassistCompiler.class.getProtectionDomain()); + } + throw t; + } } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java index 443690bca3..d5e576670a 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java @@ -110,7 +110,7 @@ public class JdkCompiler extends AbstractCompiler { } @Override - public Class doCompile(ClassLoader ignored, String name, String sourceCode) throws Throwable { + public Class doCompile(Class neighbor, ClassLoader ignored, String name, String sourceCode) throws Throwable { int i = name.lastIndexOf('.'); String packageName = i < 0 ? "" : name.substring(0, i); String className = i < 0 ? name : name.substring(i + 1); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java index b6ada68917..245a35ee3a 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java @@ -1244,7 +1244,7 @@ public class ExtensionLoader { String code = new AdaptiveClassCodeGenerator(type, cachedDefaultName).generate(); org.apache.dubbo.common.compiler.Compiler compiler = extensionDirector.getExtensionLoader( org.apache.dubbo.common.compiler.Compiler.class).getAdaptiveExtension(); - return compiler.compile(code, classLoader); + return compiler.compile(type, code, classLoader); } private Environment getEnvironment() { diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/PojoUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/PojoUtils.java index cd307371b4..d3d9a85f27 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/PojoUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/PojoUtils.java @@ -26,7 +26,6 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.GenericArrayType; import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; @@ -38,6 +37,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; @@ -478,7 +478,18 @@ public class PojoUtils { history.put(pojo, dest); return dest; } else { - Object dest = newInstance(type); + Object dest; + if (Throwable.class.isAssignableFrom(type)) { + Object message = map.get("message"); + if (message instanceof String) { + dest = newThrowableInstance(type, (String) message); + } else { + dest = newInstance(type); + } + } else { + dest = newInstance(type); + } + history.put(pojo, dest); for (Map.Entry entry : map.entrySet()) { Object key = entry.getKey(); @@ -513,19 +524,6 @@ public class PojoUtils { } } } - if (dest instanceof Throwable) { - Object message = map.get("message"); - if (message instanceof String) { - try { - Field field = Throwable.class.getDeclaredField("detailMessage"); - if (!field.isAccessible()) { - field.setAccessible(true); - } - field.set(dest, message); - } catch (Exception e) { - } - } - } return dest; } } @@ -572,39 +570,42 @@ public class PojoUtils { return clazz; } + private static Object newThrowableInstance(Class cls, String message) { + try { + Constructor messagedConstructor = cls.getDeclaredConstructor(String.class); + return messagedConstructor.newInstance(message); + } catch (Throwable t) { + return newInstance(cls); + } + } + private static Object newInstance(Class cls) { try { return cls.newInstance(); } catch (Throwable t) { - try { - Constructor[] constructors = cls.getDeclaredConstructors(); - /** - * From Javadoc java.lang.Class#getDeclaredConstructors - * This method returns an array of Constructor objects reflecting all the constructors - * declared by the class represented by this Class object. - * This method returns an array of length 0, - * if this Class object represents an interface, a primitive type, an array class, or void. - */ - if (constructors.length == 0) { - throw new RuntimeException("Illegal constructor: " + cls.getName()); - } - Constructor constructor = constructors[0]; - if (constructor.getParameterTypes().length > 0) { - for (Constructor c : constructors) { - if (c.getParameterTypes().length < constructor.getParameterTypes().length) { - constructor = c; - if (constructor.getParameterTypes().length == 0) { - break; - } - } - } - } - constructor.setAccessible(true); - Object[] parameters = Arrays.stream(constructor.getParameterTypes()).map(PojoUtils::getDefaultValue).toArray(); - return constructor.newInstance(parameters); - } catch (InstantiationException | InvocationTargetException | IllegalAccessException e) { - throw new RuntimeException(e.getMessage(), e); + Constructor[] constructors = cls.getDeclaredConstructors(); + /* + From Javadoc java.lang.Class#getDeclaredConstructors + This method returns an array of Constructor objects reflecting all the constructors + declared by the class represented by this Class object. + This method returns an array of length 0, + if this Class object represents an interface, a primitive type, an array class, or void. + */ + if (constructors.length == 0) { + throw new RuntimeException("Illegal constructor: " + cls.getName()); } + Throwable lastError = null; + Arrays.sort(constructors, Comparator.comparingInt(a -> a.getParameterTypes().length)); + for (Constructor constructor : constructors) { + try { + constructor.setAccessible(true); + Object[] parameters = Arrays.stream(constructor.getParameterTypes()).map(PojoUtils::getDefaultValue).toArray(); + return constructor.newInstance(parameters); + } catch (Throwable e) { + lastError = e; + } + } + throw new RuntimeException(lastError.getMessage(), lastError); } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java index d5634ee37f..d3cac745c5 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java @@ -70,7 +70,7 @@ public class ConfigCenterConfig extends AbstractConfig { private String password; /** - * The default value is 3000L; + * The default value is 30000L; */ private Long timeout; @@ -130,7 +130,7 @@ public class ConfigCenterConfig extends AbstractConfig { group = CommonConstants.DUBBO; } if (timeout == null) { - timeout = 3000L; + timeout = 30000L; } // if (highestPriority == null) { // highestPriority = true; 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 dc1cbdf2d7..605ce83d78 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 @@ -50,7 +50,7 @@ public class ClassGeneratorTest { cg.addMethod("public void setName(" + Bean.class.getName() + " o, Object name){ FNAME.set($1, $2); }"); cg.addDefaultConstructor(); - Class cl = cg.toClass(); + Class cl = cg.toClass(Bean.class); cl.getField("FNAME").set(null, fname); System.out.println(cl.getName()); @@ -80,7 +80,7 @@ public class ClassGeneratorTest { cg.addMethod("public void setName(" + Bean.class.getName() + " o, Object name){ FNAME.set($1, $2); }"); cg.addDefaultConstructor(); - Class cl = cg.toClass(); + Class cl = cg.toClass(Bean.class); cl.getField("FNAME").set(null, fname); System.out.println(cl.getName()); diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/MixinTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/MixinTest.java index fa96d2e2ec..b6a825e235 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/MixinTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/MixinTest.java @@ -34,19 +34,19 @@ public class MixinTest { ((I3) o).m3(); } - interface I1 { + public interface I1 { void m1(); } - interface I2 { + public interface I2 { void m2(); } - interface I3 { + public interface I3 { void m3(); } - class C1 implements Mixin.MixinAware { + public class C1 implements Mixin.MixinAware { public void m1() { System.out.println("c1.m1();"); } @@ -60,7 +60,7 @@ public class MixinTest { } } - class C2 implements Mixin.MixinAware { + public class C2 implements Mixin.MixinAware { public void m3() { System.out.println("c2.m3();"); } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ProxyTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ProxyTest.java index 423260a593..f607f69f38 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ProxyTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/bytecode/ProxyTest.java @@ -20,10 +20,13 @@ import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +@DisabledForJreRange(min = JRE.JAVA_16) public class ProxyTest { @Test diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/AdaptiveCompilerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/AdaptiveCompilerTest.java index 4192c36f19..7e2110ca1e 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/AdaptiveCompilerTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/AdaptiveCompilerTest.java @@ -17,6 +17,7 @@ package org.apache.dubbo.common.compiler.support; import org.apache.dubbo.rpc.model.FrameworkModel; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -27,7 +28,7 @@ public class AdaptiveCompilerTest extends JavaCodeTest { AdaptiveCompiler.setDefaultCompiler("jdk"); AdaptiveCompiler compiler = new AdaptiveCompiler(); compiler.setFrameworkModel(FrameworkModel.defaultModel()); - Class clazz = compiler.compile(getSimpleCode(), AdaptiveCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCode(), AdaptiveCompiler.class.getClassLoader()); HelloService helloService = (HelloService) clazz.newInstance(); Assertions.assertEquals("Hello world!", helloService.sayHello()); } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java index 3caa38e07d..a812a2b8c4 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java @@ -22,6 +22,15 @@ public class JavaCodeTest { public final static AtomicInteger SUBFIX = new AtomicInteger(8); + boolean shouldIgnoreWithoutPackage() { + String jdkVersion = System.getProperty("java.specification.version"); + try { + return Integer.parseInt(jdkVersion) > 15; + } catch (Throwable t) { + return false; + } + } + String getSimpleCode() { StringBuilder code = new StringBuilder(); code.append("package org.apache.dubbo.common.compiler.support;"); diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavassistCompilerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavassistCompilerTest.java index adbfbb878d..66b2e00944 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavassistCompilerTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavassistCompilerTest.java @@ -18,6 +18,8 @@ package org.apache.dubbo.common.compiler.support; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import java.lang.reflect.Method; @@ -25,7 +27,7 @@ public class JavassistCompilerTest extends JavaCodeTest { @Test public void testCompileJavaClass() throws Exception { JavassistCompiler compiler = new JavassistCompiler(); - Class clazz = compiler.compile(getSimpleCode(), JavassistCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCode(), JavassistCompiler.class.getClassLoader()); // Because javassist compiles using the caller class loader, we should't use HelloService directly Object instance = clazz.newInstance(); @@ -37,19 +39,26 @@ public class JavassistCompilerTest extends JavaCodeTest { * javassist compile will find HelloService in classpath */ @Test + @DisabledForJreRange(min = JRE.JAVA_16) public void testCompileJavaClass0() throws Exception { + boolean ignoreWithoutPackage = shouldIgnoreWithoutPackage(); JavassistCompiler compiler = new JavassistCompiler(); - Class clazz = compiler.compile(getSimpleCodeWithoutPackage(), JavassistCompiler.class.getClassLoader()); - Object instance = clazz.newInstance(); - Method sayHello = instance.getClass().getMethod("sayHello"); - Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); + + if (ignoreWithoutPackage) { + Assertions.assertThrows(RuntimeException.class, () -> compiler.compile(null, getSimpleCodeWithoutPackage(), JavassistCompiler.class.getClassLoader())); + } else { + Class clazz = compiler.compile(null, getSimpleCodeWithoutPackage(), JavassistCompiler.class.getClassLoader()); + Object instance = clazz.newInstance(); + Method sayHello = instance.getClass().getMethod("sayHello"); + Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); + } } @Test public void testCompileJavaClass1() throws Exception { Assertions.assertThrows(IllegalStateException.class, () -> { JavassistCompiler compiler = new JavassistCompiler(); - Class clazz = compiler.compile(getSimpleCodeWithSyntax0(), JavassistCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCodeWithSyntax0(), JavassistCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); @@ -59,7 +68,7 @@ public class JavassistCompilerTest extends JavaCodeTest { @Test public void testCompileJavaClassWithImport() throws Exception { JavassistCompiler compiler = new JavassistCompiler(); - Class clazz = compiler.compile(getSimpleCodeWithImports(), JavassistCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCodeWithImports(), JavassistCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); @@ -68,7 +77,7 @@ public class JavassistCompilerTest extends JavaCodeTest { @Test public void testCompileJavaClassWithExtends() throws Exception { JavassistCompiler compiler = new JavassistCompiler(); - Class clazz = compiler.compile(getSimpleCodeWithWithExtends(), JavassistCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCodeWithWithExtends(), JavassistCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world3!", sayHello.invoke(instance)); diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java index e0bc3a9820..baa63b2f71 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java @@ -26,7 +26,7 @@ public class JdkCompilerTest extends JavaCodeTest { @Test public void test_compileJavaClass() throws Exception { JdkCompiler compiler = new JdkCompiler(); - Class clazz = compiler.compile(getSimpleCode(), JdkCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCode(), JdkCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); @@ -36,7 +36,7 @@ public class JdkCompilerTest extends JavaCodeTest { public void test_compileJavaClass0() throws Exception { Assertions.assertThrows(IllegalStateException.class, () -> { JdkCompiler compiler = new JdkCompiler(); - Class clazz = compiler.compile(getSimpleCodeWithoutPackage(), JdkCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCodeWithoutPackage(), JdkCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); @@ -47,7 +47,7 @@ public class JdkCompilerTest extends JavaCodeTest { public void test_compileJavaClass1() throws Exception { Assertions.assertThrows(IllegalStateException.class, () -> { JdkCompiler compiler = new JdkCompiler(); - Class clazz = compiler.compile(getSimpleCodeWithSyntax(), JdkCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCodeWithSyntax(), JdkCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); @@ -57,7 +57,7 @@ public class JdkCompilerTest extends JavaCodeTest { @Test public void test_compileJavaClass_java8() throws Exception { JdkCompiler compiler = new JdkCompiler("1.8"); - Class clazz = compiler.compile(getSimpleCode(), JdkCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCode(), JdkCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); @@ -67,7 +67,7 @@ public class JdkCompilerTest extends JavaCodeTest { public void test_compileJavaClass0_java8() throws Exception { Assertions.assertThrows(IllegalStateException.class, () -> { JdkCompiler compiler = new JdkCompiler("1.8"); - Class clazz = compiler.compile(getSimpleCodeWithoutPackage(), JdkCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCodeWithoutPackage(), JdkCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); @@ -78,7 +78,7 @@ public class JdkCompilerTest extends JavaCodeTest { public void test_compileJavaClass1_java8() throws Exception { Assertions.assertThrows(IllegalStateException.class, () -> { JdkCompiler compiler = new JdkCompiler("1.8"); - Class clazz = compiler.compile(getSimpleCodeWithSyntax(), JdkCompiler.class.getClassLoader()); + Class clazz = compiler.compile(JavaCodeTest.class, getSimpleCodeWithSyntax(), JdkCompiler.class.getClassLoader()); Object instance = clazz.newInstance(); Method sayHello = instance.getClass().getMethod("sayHello"); Assertions.assertEquals("Hello world!", sayHello.invoke(instance)); diff --git a/dubbo-config/dubbo-config-api/pom.xml b/dubbo-config/dubbo-config-api/pom.xml index b77dd5d8bc..45de7cb04a 100644 --- a/dubbo-config/dubbo-config-api/pom.xml +++ b/dubbo-config/dubbo-config-api/pom.xml @@ -110,6 +110,22 @@ test + + org.apache.curator + curator-framework + test + + + org.apache.curator + curator-recipes + test + + + org.apache.zookeeper + zookeeper + test + + org.apache.dubbo dubbo-registry-nacos diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java index 483be84832..f9e87663f1 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java @@ -23,6 +23,7 @@ import org.apache.dubbo.config.support.Nested; import org.apache.dubbo.config.support.Parameter; import org.apache.dubbo.config.utils.ConfigValidationUtils; import org.apache.dubbo.rpc.model.ApplicationModel; + import org.hamcrest.Matchers; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java index f36ecb35ce..b83d68f312 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigCenterConfigTest.java @@ -22,6 +22,7 @@ import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -67,7 +68,7 @@ public class ConfigCenterConfigTest { Assertions.assertEquals(ZookeeperRegistryCenterConfig.getConnectionAddress()+"/ConfigCenterConfig?check=true&" + "config-file=dubbo.properties&group=group&" + - "namespace=namespace&timeout=3000", + "namespace=namespace&timeout=30000", config.toUrl().toFullString() ); } diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java index c279eeea1e..29e1352f44 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java @@ -58,6 +58,8 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import org.mockito.Mockito; import java.io.File; @@ -1017,6 +1019,7 @@ public class ReferenceConfigTest { } @Test + @DisabledForJreRange(min = JRE.JAVA_16) public void testDifferentClassLoaderRequest() throws Exception { String basePath = DemoService.class.getProtectionDomain().getCodeSource().getLocation().getFile(); basePath = java.net.URLDecoder.decode(basePath, "UTF-8"); @@ -1083,6 +1086,7 @@ public class ReferenceConfigTest { builder.setClassName(MultiClassLoaderServiceRequest.class.getName() + "A"); builder.setSuperClassName(MultiClassLoaderServiceRequest.class.getName()); CtClass cls = builder.build(classLoader); + // FIXME support JDK 17 return cls.toClass(classLoader, JavassistCompiler.class.getProtectionDomain()); } diff --git a/dubbo-config/dubbo-config-spring/pom.xml b/dubbo-config/dubbo-config-spring/pom.xml index 1baf323926..4c7656a9c2 100644 --- a/dubbo-config/dubbo-config-spring/pom.xml +++ b/dubbo-config/dubbo-config-spring/pom.xml @@ -30,8 +30,6 @@ 2.3.1.RELEASE - 5.1.0 - 3.6.0 @@ -200,19 +198,16 @@ org.apache.curator curator-recipes - ${curator5_version} test org.apache.curator curator-x-discovery - ${curator5_version} test org.apache.zookeeper zookeeper - ${zookeeper_version} test diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java index 8a040af4b6..cde4e2a599 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java @@ -23,12 +23,13 @@ import org.apache.dubbo.config.annotation.Method; import org.apache.dubbo.config.annotation.Reference; import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.ReferenceBean; -import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; -import org.apache.dubbo.config.spring.reference.ReferenceBeanManager; import org.apache.dubbo.config.spring.api.DemoService; import org.apache.dubbo.config.spring.api.HelloService; +import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; +import org.apache.dubbo.config.spring.reference.ReferenceBeanManager; import org.apache.dubbo.config.spring.util.DubboBeanUtils; import org.apache.dubbo.rpc.RpcContext; + import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @@ -50,6 +51,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.net.InetSocketAddress; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -147,8 +149,8 @@ public class ReferenceAnnotationBeanPostProcessorTest { Assertions.assertNotNull(context.getBean("demoService")); Assertions.assertNotNull(context.getBean("demoServiceFromParent")); - String callSuffix = AOP_SUFFIX + " from "+ NetUtils.getLocalHost() +":12345"; - String localCallSuffix = AOP_SUFFIX + " from 127.0.0.1:0"; + String callSuffix = AOP_SUFFIX + " from "+ InetSocketAddress.createUnresolved(NetUtils.getLocalHost(), 12345); + String localCallSuffix = AOP_SUFFIX + " from " + InetSocketAddress.createUnresolved("127.0.0.1", 0); String directInvokeSuffix = AOP_SUFFIX + " from null"; String defaultHelloServiceResult = "Greeting, Mercy"; diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer/PropertyConfigurerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer/PropertyConfigurerTest.java index 4191be8ca7..a10435539b 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer/PropertyConfigurerTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer/PropertyConfigurerTest.java @@ -19,6 +19,7 @@ package org.apache.dubbo.config.spring.propertyconfigurer.consumer; import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.api.HelloService; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -30,6 +31,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.context.support.ClassPathXmlApplicationContext; +import java.net.InetSocketAddress; + public class PropertyConfigurerTest { @BeforeAll @@ -56,7 +59,7 @@ public class PropertyConfigurerTest { HelloService service = (HelloService) context.getBean("demoService"); String result = service.sayHello("world"); System.out.println("result: " + result); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); context.close(); diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer2/PropertySourcesConfigurerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer2/PropertySourcesConfigurerTest.java index a75d319f55..89e56a7d10 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer2/PropertySourcesConfigurerTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer2/PropertySourcesConfigurerTest.java @@ -20,6 +20,7 @@ import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.api.HelloService; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.apache.dubbo.config.spring.propertyconfigurer.consumer.DemoBeanFactoryPostProcessor; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -31,6 +32,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.context.support.ClassPathXmlApplicationContext; +import java.net.InetSocketAddress; + public class PropertySourcesConfigurerTest { @BeforeAll @@ -58,7 +61,7 @@ public class PropertySourcesConfigurerTest { HelloService service = (HelloService) context.getBean("demoService"); String result = service.sayHello("world"); System.out.println("result: " + result); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); } finally { context.close(); } diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer3/PropertySourcesInJavaConfigTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer3/PropertySourcesInJavaConfigTest.java index f209fdd7c8..776d731661 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer3/PropertySourcesInJavaConfigTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/propertyconfigurer/consumer3/PropertySourcesInJavaConfigTest.java @@ -20,6 +20,7 @@ import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.api.HelloService; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.apache.dubbo.config.spring.propertyconfigurer.consumer.DemoBeanFactoryPostProcessor; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -35,6 +36,7 @@ import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource; import java.io.IOException; +import java.net.InetSocketAddress; public class PropertySourcesInJavaConfigTest { @@ -75,7 +77,7 @@ public class PropertySourcesInJavaConfigTest { HelloService service = (HelloService) context.getBean("demoService"); String result = service.sayHello("world"); System.out.println("result: " + result); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); } finally { context.close(); } @@ -103,7 +105,7 @@ public class PropertySourcesInJavaConfigTest { HelloService service = (HelloService) context.getBean("demoService"); String result = service.sayHello("world"); System.out.println("result: " + result); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); } finally { context.close(); } diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java index 494fdc336e..474fad6590 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java @@ -16,7 +16,6 @@ */ package org.apache.dubbo.config.spring.reference.javaconfig; -import com.sun.management.HotSpotDiagnosticMXBean; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.Reference; @@ -29,10 +28,9 @@ import org.apache.dubbo.config.spring.impl.HelloServiceImpl; import org.apache.dubbo.config.spring.reference.ReferenceBeanBuilder; import org.apache.dubbo.rpc.service.GenericException; import org.apache.dubbo.rpc.service.GenericService; -import org.junit.jupiter.api.AfterAll; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -41,37 +39,14 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; -import javax.management.MBeanServer; import java.io.PrintWriter; import java.io.StringWriter; -import java.lang.management.ManagementFactory; import java.util.Arrays; import java.util.List; import java.util.Map; public class JavaConfigReferenceBeanTest { - public static void dumpHeap(String dirpath, boolean live) throws Exception { - - java.lang.management.RuntimeMXBean runtime = - java.lang.management.ManagementFactory.getRuntimeMXBean(); - java.lang.reflect.Field jvm = runtime.getClass().getDeclaredField("jvm"); - jvm.setAccessible(true); - sun.management.VMManagement mgmt = - (sun.management.VMManagement) jvm.get(runtime); - java.lang.reflect.Method pid_method = - mgmt.getClass().getDeclaredMethod("getProcessId"); - pid_method.setAccessible(true); - int pid = (Integer) pid_method.invoke(mgmt); - - MBeanServer server = ManagementFactory.getPlatformMBeanServer(); - HotSpotDiagnosticMXBean mxBean = ManagementFactory.newPlatformMXBeanProxy( - server, "com.sun.management:type=HotSpotDiagnostic", HotSpotDiagnosticMXBean.class); - String filepath = dirpath + pid + ".hprof"; - mxBean.dumpHeap(filepath, live); - System.out.println("Dump heap to file: " + filepath); - } - @BeforeEach public void setUp() { DubboBootstrap.reset(); diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest.java index 8283a973e2..eb5a8e5690 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest.java @@ -18,6 +18,7 @@ package org.apache.dubbo.config.spring.reference.localcall; import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.api.HelloService; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -28,6 +29,8 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.net.InetSocketAddress; + import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD; @ExtendWith(SpringExtension.class) @@ -58,7 +61,7 @@ public class LocalCallTest { // see also: org.apache.dubbo.rpc.protocol.injvm.InjvmInvoker.doInvoke // InjvmInvoker set remote address to 127.0.0.1:0 String result = helloService.sayHello("world"); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); // direct call local service, the remote address is null String originResult = localHelloService.sayHello("world"); diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest2.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest2.java index a443519ee6..4b76ad623c 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest2.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcall/LocalCallTest2.java @@ -19,6 +19,7 @@ package org.apache.dubbo.config.spring.reference.localcall; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.api.HelloService; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -30,6 +31,8 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.net.InetSocketAddress; + import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD; @ExtendWith(SpringExtension.class) @@ -58,7 +61,7 @@ public class LocalCallTest2 { // see also: org.apache.dubbo.rpc.protocol.injvm.InjvmInvoker.doInvoke // InjvmInvoker set remote address to 127.0.0.1:0 String result = helloService.sayHello("world"); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); } } diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcalla/LocalCallReferenceAnnotationTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcalla/LocalCallReferenceAnnotationTest.java index cf3e41aa30..a4e9466b98 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcalla/LocalCallReferenceAnnotationTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcalla/LocalCallReferenceAnnotationTest.java @@ -22,6 +22,7 @@ import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.api.HelloService; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.apache.dubbo.rpc.RpcContext; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -35,6 +36,8 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.net.InetSocketAddress; + import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD; @EnableDubbo @@ -65,7 +68,7 @@ public class LocalCallReferenceAnnotationTest { // see also: org.apache.dubbo.rpc.protocol.injvm.InjvmInvoker.doInvoke // InjvmInvoker set remote address to 127.0.0.1:0 String result = helloService.sayHello("world"); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); } @Configuration diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallam/LocalCallMultipleReferenceAnnotationsTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallam/LocalCallMultipleReferenceAnnotationsTest.java index 763251a7fa..718b7514e2 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallam/LocalCallMultipleReferenceAnnotationsTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallam/LocalCallMultipleReferenceAnnotationsTest.java @@ -23,6 +23,7 @@ import org.apache.dubbo.config.spring.ReferenceBean; import org.apache.dubbo.config.spring.api.HelloService; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.apache.dubbo.rpc.RpcContext; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -35,6 +36,7 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.net.InetSocketAddress; import java.util.Map; import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD; @@ -65,10 +67,10 @@ public class LocalCallMultipleReferenceAnnotationsTest { // see also: org.apache.dubbo.rpc.protocol.injvm.InjvmInvoker.doInvoke // InjvmInvoker set remote address to 127.0.0.1:0 String result = helloService.sayHello("world"); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); String demoResult = demoHelloService.sayHello("world"); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", demoResult); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), demoResult); Map referenceBeanMap = applicationContext.getBeansOfType(ReferenceBean.class); Assertions.assertEquals(2, referenceBeanMap.size()); diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallmix/LocalCallReferenceMixTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallmix/LocalCallReferenceMixTest.java index 155eb58aa9..be3b274ac4 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallmix/LocalCallReferenceMixTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/localcallmix/LocalCallReferenceMixTest.java @@ -22,6 +22,7 @@ import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.spring.api.HelloService; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.apache.dubbo.rpc.RpcContext; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -36,6 +37,8 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.net.InetSocketAddress; + import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD; @EnableDubbo @@ -67,7 +70,7 @@ public class LocalCallReferenceMixTest { // see also: org.apache.dubbo.rpc.protocol.injvm.InjvmInvoker.doInvoke // InjvmInvoker set remote address to 127.0.0.1:0 String result = helloService.sayHello("world"); - Assertions.assertEquals("Hello world, response from provider: 127.0.0.1:0", result); + Assertions.assertEquals("Hello world, response from provider: " + InetSocketAddress.createUnresolved("127.0.0.1", 0), result); } @Configuration diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml b/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml index 8e51bba649..d826309d5c 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml @@ -43,5 +43,26 @@ dubbo-remoting-zookeeper-curator5 ${project.parent.version} + + + org.apache.dubbo + dubbo-test-common + ${project.parent.version} + + + + org.apache.curator + curator-framework + test + + + org.apache.curator + curator-recipes + test + + + org.apache.zookeeper + zookeeper + diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java index f2370e140a..cb867d70da 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java @@ -54,10 +54,10 @@ public class ZookeeperDynamicConfiguration extends TreePathDynamicConfiguration final String threadName = this.getClass().getSimpleName(); this.executor = new ThreadPoolExecutor(DEFAULT_ZK_EXECUTOR_THREADS_NUM, DEFAULT_ZK_EXECUTOR_THREADS_NUM, - THREAD_KEEP_ALIVE_TIME, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue<>(DEFAULT_QUEUE), - new NamedThreadFactory(threadName, true), - new AbortPolicyWithReport(threadName, url)); + THREAD_KEEP_ALIVE_TIME, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>(DEFAULT_QUEUE), + new NamedThreadFactory(threadName, true), + new AbortPolicyWithReport(threadName, url)); zkClient = zookeeperTransporter.connect(url); boolean isConnected = zkClient.isConnected(); diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java index 2275e46185..23c5ca4d98 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java @@ -62,7 +62,7 @@ public class ZookeeperDynamicConfigurationTest { zookeeperServerPort1 = Integer.parseInt(zookeeperConnectionAddress1.substring(zookeeperConnectionAddress1.lastIndexOf(":") + 1)); client = CuratorFrameworkFactory.newClient("127.0.0.1:" + zookeeperServerPort1, 60 * 1000, 60 * 1000, - new ExponentialBackoffRetry(1000, 3)); + new ExponentialBackoffRetry(1000, 3)); client.start(); try { diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index a8c4d5296e..f5ed76dcd1 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -91,7 +91,7 @@ 5.2.8.RELEASE - 3.23.1-GA + 3.28.0-GA 3.2.5.Final 4.1.56.Final 1.1.7 @@ -99,8 +99,8 @@ 4.5.13 4.4.6 1.2.70 - 3.4.13 - 4.2.0 + 3.7.0 + 5.1.0 2.12.0 3.6.0 1.4.2 diff --git a/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml b/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml index afa6b81419..eea6d0e737 100644 --- a/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml +++ b/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml @@ -34,6 +34,7 @@ 3.0.6-SNAPSHOT 1.1.0 + 3.7.0 @@ -45,6 +46,13 @@ pom import + + org.apache.zookeeper + parent + ${zookeeper_version} + pom + import + @@ -56,6 +64,57 @@ org.apache.zookeeper zookeeper + + + io.netty + netty-handler + + + io.netty + netty-transport-native-epoll + + + + + + com.github.spotbugs + spotbugs-annotations + true + + + + commons-cli + commons-cli + + + + org.eclipse.jetty + jetty-server + + + + org.eclipse.jetty + jetty-servlet + + + + org.eclipse.jetty + jetty-client + + + + jline + jline + + + + io.dropwizard.metrics + metrics-core + + + + org.xerial.snappy + snappy-java diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java index 91d65bf857..afdead8f56 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java @@ -21,6 +21,7 @@ import org.apache.dubbo.metadata.definition.model.MethodDefinition; import org.apache.dubbo.metadata.definition.model.TypeDefinition; import org.apache.dubbo.metadata.definition.service.ComplexObject; import org.apache.dubbo.metadata.definition.service.DemoService; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -40,8 +41,9 @@ public class ServiceDefinitionBuilderTest { void checkComplexObjectAsParam(FullServiceDefinition fullServiceDefinition) { - Assertions.assertEquals(fullServiceDefinition.getAnnotations(), - Arrays.asList("@org.apache.dubbo.metadata.definition.service.annotation.MockTypeAnnotation(value=666)")); + Assertions.assertTrue(fullServiceDefinition.getAnnotations().contains("@org.apache.dubbo.metadata.definition.service.annotation.MockTypeAnnotation(value=666)") + // JDK 17 style + || fullServiceDefinition.getAnnotations().contains("@org.apache.dubbo.metadata.definition.service.annotation.MockTypeAnnotation(666)")); List methodDefinitions = fullServiceDefinition.getMethods(); MethodDefinition complexCompute = null; @@ -63,9 +65,13 @@ public class ServiceDefinitionBuilderTest { String[].class.getCanonicalName(), "java.util.List", ComplexObject.TestEnum.class.getCanonicalName()})); Assertions.assertEquals(findComplexObject.getReturnType(), ComplexObject.class.getCanonicalName()); - Assertions.assertEquals(testAnnotation.getAnnotations(), Arrays.asList( + Assertions.assertTrue(testAnnotation.getAnnotations().equals(Arrays.asList( "@org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation(value=777)", - "@org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation2(value=888)")); + "@org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation2(value=888)")) + // JDK 17 style + || testAnnotation.getAnnotations().equals(Arrays.asList( + "@org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation(777)", + "@org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation2(888)"))); Assertions.assertEquals(testAnnotation.getReturnType(), "void"); diff --git a/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java b/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java index 25d0bf13a7..2f877e6bc5 100644 --- a/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java +++ b/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java @@ -382,7 +382,12 @@ public interface TypeUtils { if (element != null) { List typeParameterElements = element.getTypeParameters(); if (!typeParameterElements.isEmpty()) { - List typeMirrors = invokeMethod(type, "getTypeArguments"); + List typeMirrors; + if (type instanceof DeclaredType) { + typeMirrors = ((DeclaredType) type).getTypeArguments(); + } else { + typeMirrors = invokeMethod(type, "getTypeArguments"); + } StringBuilder typeBuilder = new StringBuilder(element.toString()); typeBuilder.append('<'); for (int i = 0; i < typeMirrors.size(); i++) { diff --git a/dubbo-metadata/dubbo-metadata-processor/src/test/java/org/apache/dubbo/metadata/annotation/processing/util/MethodUtilsTest.java b/dubbo-metadata/dubbo-metadata-processor/src/test/java/org/apache/dubbo/metadata/annotation/processing/util/MethodUtilsTest.java index 2e9c07c5da..db36f40957 100644 --- a/dubbo-metadata/dubbo-metadata-processor/src/test/java/org/apache/dubbo/metadata/annotation/processing/util/MethodUtilsTest.java +++ b/dubbo-metadata/dubbo-metadata-processor/src/test/java/org/apache/dubbo/metadata/annotation/processing/util/MethodUtilsTest.java @@ -67,7 +67,8 @@ public class MethodUtilsTest extends AbstractAnnotationProcessingTest { assertEquals(12, methods.size()); methods = getAllDeclaredMethods(type); - assertEquals(34, methods.size()); + // registerNatives() no provided in JDK 17 + assertTrue(methods.size() >= 33); assertTrue(getAllDeclaredMethods((TypeElement) null).isEmpty()); assertTrue(getAllDeclaredMethods((TypeMirror) null).isEmpty()); diff --git a/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml b/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml index ab146ae866..6db2a83bf6 100644 --- a/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml +++ b/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml @@ -37,5 +37,26 @@ dubbo-configcenter-zookeeper ${project.parent.version} + + + org.apache.dubbo + dubbo-test-common + ${project.parent.version} + + + + org.apache.curator + curator-framework + test + + + org.apache.curator + curator-recipes + test + + + org.apache.zookeeper + zookeeper + diff --git a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java index 86732aaea6..c004cc58da 100644 --- a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java +++ b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java @@ -137,7 +137,7 @@ public class ZookeeperMetadataReportTest { String protocol = "xxx"; URL url = generateURL(interfaceName, version, group, application); ServiceMetadataIdentifier serviceMetadataIdentifier = new ServiceMetadataIdentifier(interfaceName, version, - group, "provider", revision, protocol); + group, "provider", revision, protocol); zookeeperMetadataReport.doSaveMetadata(serviceMetadataIdentifier, url); String fileContent = zookeeperMetadataReport.zkClient.getContent(zookeeperMetadataReport.getNodePath(serviceMetadataIdentifier)); @@ -156,7 +156,7 @@ public class ZookeeperMetadataReportTest { String protocol = "xxx"; URL url = generateURL(interfaceName, version, group, application); ServiceMetadataIdentifier serviceMetadataIdentifier = new ServiceMetadataIdentifier(interfaceName, version, - group, "provider", revision, protocol); + group, "provider", revision, protocol); zookeeperMetadataReport.doSaveMetadata(serviceMetadataIdentifier, url); String fileContent = zookeeperMetadataReport.zkClient.getContent(zookeeperMetadataReport.getNodePath(serviceMetadataIdentifier)); @@ -179,7 +179,7 @@ public class ZookeeperMetadataReportTest { String protocol = "xxx"; URL url = generateURL(interfaceName, version, group, application); ServiceMetadataIdentifier serviceMetadataIdentifier = new ServiceMetadataIdentifier(interfaceName, version, - group, "provider", revision, protocol); + group, "provider", revision, protocol); zookeeperMetadataReport.doSaveMetadata(serviceMetadataIdentifier, url); List r = zookeeperMetadataReport.doGetExportedURLs(serviceMetadataIdentifier); @@ -236,7 +236,7 @@ public class ZookeeperMetadataReportTest { private MetadataIdentifier storePrivider(MetadataReport zookeeperMetadataReport, String interfaceName, String version, String group, String application) throws ClassNotFoundException, InterruptedException { URL url = URL.valueOf("xxx://" + NetUtils.getLocalAddress().getHostName() + ":4444/" + interfaceName + "?paramTest=zkTest&version=" + version + "&application=" - + application + (group == null ? "" : "&group=" + group)); + + application + (group == null ? "" : "&group=" + group)); MetadataIdentifier providerMetadataIdentifier = new MetadataIdentifier(interfaceName, version, group, PROVIDER_SIDE, application); Class interfaceClass = Class.forName(interfaceName); @@ -249,7 +249,7 @@ public class ZookeeperMetadataReportTest { private MetadataIdentifier storeConsumer(MetadataReport zookeeperMetadataReport, String interfaceName, String version, String group, String application) throws ClassNotFoundException, InterruptedException { URL url = URL.valueOf("xxx://" + NetUtils.getLocalAddress().getHostName() + ":4444/" + interfaceName + "?version=" + version + "&application=" - + application + (group == null ? "" : "&group=" + group)); + + application + (group == null ? "" : "&group=" + group)); MetadataIdentifier consumerMetadataIdentifier = new MetadataIdentifier(interfaceName, version, group, CONSUMER_SIDE, application); Class interfaceClass = Class.forName(interfaceName); @@ -272,8 +272,8 @@ public class ZookeeperMetadataReportTest { private URL generateURL(String interfaceName, String version, String group, String application) { URL url = URL.valueOf("xxx://" + NetUtils.getLocalAddress().getHostName() + ":8989/" + interfaceName + - "?paramTest=etcdTest&version=" + version + "&application=" - + application + (group == null ? "" : "&group=" + group)); + "?paramTest=etcdTest&version=" + version + "&application=" + + application + (group == null ? "" : "&group=" + group)); return url; } diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java index d4d94b8ea0..936e804c28 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/CacheableFailbackRegistry.java @@ -134,7 +134,7 @@ public abstract class CacheableFailbackRegistry extends FailbackRegistry { Map newURLs; URL copyOfConsumer = removeParamsFromConsumer(consumer); if (oldURLs == null) { - newURLs = new HashMap<>(); + newURLs = new HashMap<>((int) (providers.size() / 0.75f + 1)); for (String rawProvider : providers) { rawProvider = stripOffVariableKeys(rawProvider); ServiceAddressURL cachedURL = createURL(rawProvider, copyOfConsumer, getExtraParameters()); @@ -145,7 +145,7 @@ public abstract class CacheableFailbackRegistry extends FailbackRegistry { newURLs.put(rawProvider, cachedURL); } } else { - newURLs = new HashMap<>((int) (oldURLs.size() / .75 + 1)); + newURLs = new HashMap<>((int) (providers.size() / 0.75f + 1)); // maybe only default , or "env" + default for (String rawProvider : providers) { rawProvider = stripOffVariableKeys(rawProvider); diff --git a/dubbo-registry/dubbo-registry-kubernetes/pom.xml b/dubbo-registry/dubbo-registry-kubernetes/pom.xml index 799e45e5cd..0add9e4abe 100644 --- a/dubbo-registry/dubbo-registry-kubernetes/pom.xml +++ b/dubbo-registry/dubbo-registry-kubernetes/pom.xml @@ -55,19 +55,19 @@ test - - org.mockito - mockito-core - 3.4.6 - test - org.mockito mockito-junit-jupiter - 3.4.6 + ${mockito_version} test + + + org.junit.jupiter + junit-jupiter-api + + - \ No newline at end of file + diff --git a/dubbo-registry/dubbo-registry-multiple/pom.xml b/dubbo-registry/dubbo-registry-multiple/pom.xml index c3df6a387c..9f727f01ff 100644 --- a/dubbo-registry/dubbo-registry-multiple/pom.xml +++ b/dubbo-registry/dubbo-registry-multiple/pom.xml @@ -46,5 +46,26 @@ commons-lang3 test + + org.apache.dubbo + dubbo-test-common + ${project.parent.version} + + + + org.apache.curator + curator-framework + test + + + org.apache.curator + curator-recipes + test + + + org.apache.zookeeper + zookeeper + test + diff --git a/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java b/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java index f16502e2e8..0f82a29390 100644 --- a/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java +++ b/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java @@ -95,10 +95,10 @@ public class MultipleRegistry2S2RTest { Assertions.assertNotNull(MultipleRegistryTestUtil.getZookeeperRegistry(multipleRegistry.getReferenceRegistries().values())); Assertions.assertEquals(MultipleRegistryTestUtil.getZookeeperRegistry(multipleRegistry.getServiceRegistries().values()), - MultipleRegistryTestUtil.getZookeeperRegistry(multipleRegistry.getReferenceRegistries().values())); + MultipleRegistryTestUtil.getZookeeperRegistry(multipleRegistry.getReferenceRegistries().values())); Assertions.assertEquals(MultipleRegistryTestUtil.getZookeeperRegistry(multipleRegistry.getServiceRegistries().values()), - MultipleRegistryTestUtil.getZookeeperRegistry(multipleRegistry.getReferenceRegistries().values())); + MultipleRegistryTestUtil.getZookeeperRegistry(multipleRegistry.getReferenceRegistries().values())); Assertions.assertEquals(multipleRegistry.getApplicationName(), "vic"); diff --git a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryFactoryTest.java b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryFactoryTest.java index bae8ac7b38..e66731c2fc 100644 --- a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryFactoryTest.java +++ b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryFactoryTest.java @@ -18,9 +18,13 @@ package org.apache.dubbo.registry.zookeeper; import org.apache.dubbo.common.URL; import org.apache.dubbo.registry.client.ServiceDiscovery; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; +@DisabledForJreRange(min = JRE.JAVA_16) public class ZookeeperServiceDiscoveryFactoryTest { @Test diff --git a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java index aa54bd95a4..ce84c9e09e 100644 --- a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java +++ b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java @@ -30,6 +30,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import org.mockito.internal.util.collections.Sets; import java.util.HashMap; @@ -49,6 +51,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; * * @since 2.7.5 */ +@DisabledForJreRange(min = JRE.JAVA_16) public class ZookeeperServiceDiscoveryTest { private static final String SERVICE_NAME = "A"; diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/zookeeper/AbstractZookeeperClient.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/zookeeper/AbstractZookeeperClient.java index 309a85b646..92ee3c81bc 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/zookeeper/AbstractZookeeperClient.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/zookeeper/AbstractZookeeperClient.java @@ -33,7 +33,8 @@ public abstract class AbstractZookeeperClientThe zookeeper curator5 remoting module of dubbo project false - 5.1.0 - 3.6.0 @@ -47,17 +45,14 @@ org.apache.curator curator-framework - ${curator5_version} org.apache.curator curator-recipes - ${curator5_version} org.apache.zookeeper zookeeper - ${zookeeper_version} diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/pom.xml b/dubbo-remoting/dubbo-remoting-zookeeper/pom.xml index 796971968f..cc6d9c512c 100644 --- a/dubbo-remoting/dubbo-remoting-zookeeper/pom.xml +++ b/dubbo-remoting/dubbo-remoting-zookeeper/pom.xml @@ -28,6 +28,8 @@ The zookeeper remoting module of dubbo project false + 3.4.13 + 4.2.0 @@ -43,10 +45,22 @@ org.apache.curator curator-recipes + ${curator_version} + + + org.apache.curator + curator-framework + ${curator_version} + + + org.apache.curator + curator-x-discovery + ${curator_version} org.apache.zookeeper zookeeper + ${zookeeper_version} org.slf4j diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClientTest.java b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClientTest.java index 297602ace1..c647957c24 100644 --- a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClientTest.java +++ b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperClientTest.java @@ -25,20 +25,25 @@ import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.zookeeper.WatchedEvent; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; + import java.io.IOException; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.Mockito.mock; +@DisabledForJreRange(min = JRE.JAVA_16) public class CuratorZookeeperClientTest { private CuratorZookeeperClient curatorClient; CuratorFramework client = null; diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperTransporterTest.java b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperTransporterTest.java index 0c5986fdce..6c7bd3df3f 100644 --- a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperTransporterTest.java +++ b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/CuratorZookeeperTransporterTest.java @@ -21,11 +21,14 @@ import org.apache.dubbo.remoting.zookeeper.ZookeeperClient; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsNot.not; import static org.hamcrest.core.IsNull.nullValue; +@DisabledForJreRange(min = JRE.JAVA_16) public class CuratorZookeeperTransporterTest { private ZookeeperClient zookeeperClient; private CuratorZookeeperTransporter curatorZookeeperTransporter; diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/support/AbstractZookeeperTransporterTest.java b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/support/AbstractZookeeperTransporterTest.java index d2bc36e8aa..a23f4ca6a3 100644 --- a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/support/AbstractZookeeperTransporterTest.java +++ b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator/support/AbstractZookeeperTransporterTest.java @@ -20,11 +20,16 @@ import org.apache.dubbo.common.URL; import org.apache.dubbo.remoting.zookeeper.AbstractZookeeperTransporter; import org.apache.dubbo.remoting.zookeeper.ZookeeperClient; import org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.BeforeEach; + import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; + import java.util.List; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsNot.not; import static org.hamcrest.core.IsNull.nullValue; @@ -32,6 +37,7 @@ import static org.hamcrest.core.IsNull.nullValue; /** * AbstractZookeeperTransporterTest */ +@DisabledForJreRange(min = JRE.JAVA_16) public class AbstractZookeeperTransporterTest { private ZookeeperClient zookeeperClient; private AbstractZookeeperTransporter abstractZookeeperTransporter; diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java index 3eb5f17f6d..4f148ee02b 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java @@ -16,8 +16,6 @@ */ package org.apache.dubbo.rpc; -import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler; - import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -80,7 +78,7 @@ public class AppResponse implements Result { if (exception != null) { // fix issue#619 try { - Object stackTrace = InvokerInvocationHandler.stackTraceField.get(exception); + Object stackTrace = exception.getStackTrace(); if (stackTrace == null) { exception.setStackTrace(new StackTraceElement[0]); } diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java index 70e8b83294..42125ee625 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java @@ -26,7 +26,6 @@ import org.apache.dubbo.rpc.RpcServiceContext; import org.apache.dubbo.rpc.model.ConsumerModel; import org.apache.dubbo.rpc.model.ServiceModel; -import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; @@ -40,17 +39,6 @@ public class InvokerInvocationHandler implements InvocationHandler { private URL url; private String protocolServiceKey; - public static Field stackTraceField; - - static { - try { - stackTraceField = Throwable.class.getDeclaredField("stackTrace"); - stackTraceField.setAccessible(true); - } catch (NoSuchFieldException e) { - // ignore - } - } - public InvokerInvocationHandler(Invoker handler) { this.invoker = handler; this.url = invoker.getUrl(); diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java index 70637621ef..ff7dd83242 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java @@ -26,6 +26,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ConsumerModel; import org.apache.dubbo.rpc.model.ModuleServiceRepository; import org.apache.dubbo.rpc.protocol.dubbo.support.ProtocolUtils; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/status/ServerStatusCheckerTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/status/ServerStatusCheckerTest.java index 36184a056b..c3fb10aa10 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/status/ServerStatusCheckerTest.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/status/ServerStatusCheckerTest.java @@ -21,6 +21,7 @@ import org.apache.dubbo.remoting.RemotingServer; import org.apache.dubbo.rpc.ProtocolServer; import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol; import org.apache.dubbo.rpc.protocol.dubbo.decode.MockChannel; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; @@ -56,12 +57,16 @@ public class ServerStatusCheckerTest { mockDubboProtocol.when(() -> DubboProtocol.getDubboProtocol()).thenReturn(dubboProtocol); status = serverStatusChecker.check(); Assertions.assertEquals(status.getLevel(), Status.Level.OK); - Assertions.assertEquals(status.getMessage(), "127.0.0.1:9999(clients:1)"); + // In JDK 17 : 127.0.0.1/:9999(clients:1) + Assertions.assertTrue(status.getMessage().contains("127.0.0.1")); + Assertions.assertTrue(status.getMessage().contains("9999(clients:1)")); Mockito.when(remotingServer.isBound()).thenReturn(false); status = serverStatusChecker.check(); Assertions.assertEquals(status.getLevel(), Status.Level.ERROR); - Assertions.assertEquals(status.getMessage(), "127.0.0.1:9999"); + // In JDK 17 : 127.0.0.1/:9999 + Assertions.assertTrue(status.getMessage().contains("127.0.0.1")); + Assertions.assertTrue(status.getMessage().contains("9999")); } } } diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java index d445712ed7..b8ea63c9bd 100644 --- a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java +++ b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java @@ -89,7 +89,7 @@ public class InjvmDeepCopyTest { applicationModel.destroy(); } - private interface DemoInterface { + interface DemoInterface { Data call(Data obj); } diff --git a/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/AbstractRegistryCenterTestExecutionListener.java b/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/AbstractRegistryCenterTestExecutionListener.java index e6922215e1..c5c607c88f 100644 --- a/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/AbstractRegistryCenterTestExecutionListener.java +++ b/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/AbstractRegistryCenterTestExecutionListener.java @@ -21,6 +21,7 @@ import org.junit.platform.engine.support.descriptor.ClassSource; import org.junit.platform.launcher.TestExecutionListener; import org.junit.platform.launcher.TestIdentifier; import org.junit.platform.launcher.TestPlan; + import java.util.HashSet; import java.util.Set; diff --git a/dubbo-test/dubbo-test-spring/pom.xml b/dubbo-test/dubbo-test-spring/pom.xml index 3e417d36e6..c496d16133 100644 --- a/dubbo-test/dubbo-test-spring/pom.xml +++ b/dubbo-test/dubbo-test-spring/pom.xml @@ -147,6 +147,12 @@ ${hamcrest_version} + + org.junit.jupiter + junit-jupiter-api + ${junit_jupiter_version} + + org.mockito mockito-core @@ -165,6 +171,22 @@ ${cglib_version} + + + org.apache.curator + curator-framework + + + + org.apache.curator + curator-recipes + + + + org.apache.zookeeper + zookeeper + + diff --git a/dubbo-test/dubbo-test-spring3.2/pom.xml b/dubbo-test/dubbo-test-spring3.2/pom.xml index c349bdd833..991d7e44b2 100644 --- a/dubbo-test/dubbo-test-spring3.2/pom.xml +++ b/dubbo-test/dubbo-test-spring3.2/pom.xml @@ -52,6 +52,22 @@ ${project.parent.version} test + + org.apache.curator + curator-framework + + + + org.apache.curator + curator-recipes + + + + org.apache.zookeeper + zookeeper + + + diff --git a/dubbo-test/dubbo-test-spring4.1/pom.xml b/dubbo-test/dubbo-test-spring4.1/pom.xml index 942e0551a0..0198483923 100644 --- a/dubbo-test/dubbo-test-spring4.1/pom.xml +++ b/dubbo-test/dubbo-test-spring4.1/pom.xml @@ -51,7 +51,22 @@ dubbo-test-spring ${project.parent.version} test + + org.apache.curator + curator-framework + + + + org.apache.curator + curator-recipes + + + org.apache.zookeeper + zookeeper + + + diff --git a/dubbo-test/dubbo-test-spring4.2/pom.xml b/dubbo-test/dubbo-test-spring4.2/pom.xml index e53c596996..e9745ce2da 100644 --- a/dubbo-test/dubbo-test-spring4.2/pom.xml +++ b/dubbo-test/dubbo-test-spring4.2/pom.xml @@ -51,7 +51,22 @@ dubbo-test-spring ${project.parent.version} test + + org.apache.curator + curator-framework + + + + org.apache.curator + curator-recipes + + + org.apache.zookeeper + zookeeper + + + diff --git a/pom.xml b/pom.xml index a09f9eb18b..bd384c2341 100644 --- a/pom.xml +++ b/pom.xml @@ -88,14 +88,14 @@ - 5.6.0 + 5.8.1 3.11.1 2.2 5.2.4.Final 2.2.4 2.2.7 2.2 - 3.8.0 + 3.12.4 -server -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m @@ -120,7 +120,7 @@ 3.2.0 9.4.38.v20210224 3.1.2 - 0.8.6 + 0.8.7 1.2.5 3.0.0-M3 0.13 @@ -179,6 +179,12 @@ ${junit_jupiter_version} test + + org.junit.jupiter + junit-jupiter-api + ${junit_jupiter_version} + test + org.junit.jupiter junit-jupiter-params @@ -488,6 +494,33 @@ + + jdk15ge + + [15, + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + once + ${argline} ${jacocoArgLine} + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + + + + + + + + + + +