This is an automated email from the ASF dual-hosted git repository.

crazyhzm pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3 by this push:
     new 1e59ab524a In native scenarios, Compiler and Proxy are set to jdk by 
default  (#12530)
1e59ab524a is described below

commit 1e59ab524a211d5c95c6e2bb55cf2f1990407945
Author: huazhongming <[email protected]>
AuthorDate: Thu Jun 15 10:11:44 2023 +0800

    In native scenarios, Compiler and Proxy are set to jdk by default  (#12530)
    
    * In native scenarios, Compiler and Proxy are set to jdk by default
    
    Signed-off-by: crazyhzm <[email protected]>
    
    * Fix UT
    
    Signed-off-by: crazyhzm <[email protected]>
    
    ---------
    
    Signed-off-by: crazyhzm <[email protected]>
---
 .../dubbo/config/AbstractInterfaceConfig.java      | 33 ++++++++++++++-------
 .../org/apache/dubbo/config/ApplicationConfig.java | 34 +++++++++++++++-------
 .../java/org/apache/dubbo/config/Constants.java    |  4 +++
 3 files changed, 49 insertions(+), 22 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index d1ac15bc0e..dec489ac9a 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.config;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.Version;
 import org.apache.dubbo.common.aot.NativeDetector;
+import org.apache.dubbo.common.compiler.support.AdaptiveCompiler;
 import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.config.Environment;
 import org.apache.dubbo.common.config.InmemoryConfiguration;
@@ -55,6 +56,7 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.TAG_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.TIMESTAMP_KEY;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_NO_METHOD_FOUND;
 import static 
org.apache.dubbo.common.constants.MetricsConstants.PROTOCOL_PROMETHEUS;
+import static org.apache.dubbo.config.Constants.DEFAULT_NATIVE_PROXY;
 
 
 /**
@@ -255,7 +257,7 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
         for (RegistryConfig registryConfig : registries) {
             if (!registryConfig.isValid()) {
                 throw new IllegalStateException("No registry config found or 
it's not a valid config! " +
-                    "The registry config is: " + registryConfig);
+                        "The registry config is: " + registryConfig);
             }
         }
     }
@@ -343,7 +345,7 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
                     java.lang.reflect.Parameter[] arguments = 
method.getParameters();
                     for (int i = 0; i < arguments.length; i++) {
                         if (getArgumentByIndex(methodConfig, i) == null &&
-                            hasArgumentConfigProps(configProperties, 
methodConfig.getName(), i)) {
+                                hasArgumentConfigProps(configProperties, 
methodConfig.getName(), i)) {
 
                             ArgumentConfig argumentConfig = new 
ArgumentConfig();
                             argumentConfig.setIndex(i);
@@ -358,7 +360,7 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
             if (methodConfigs != null && methodConfigs.size() > 0) {
                 // whether ignore invalid method config
                 Object ignoreInvalidMethodConfigVal = 
getEnvironment().getConfiguration()
-                    
.getProperty(ConfigKeys.DUBBO_CONFIG_IGNORE_INVALID_METHOD_CONFIG, "false");
+                        
.getProperty(ConfigKeys.DUBBO_CONFIG_IGNORE_INVALID_METHOD_CONFIG, "false");
                 boolean ignoreInvalidMethodConfig = 
Boolean.parseBoolean(ignoreInvalidMethodConfigVal.toString());
 
                 Class<?> finalInterfaceClass = interfaceClass;
@@ -389,8 +391,8 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
         String methodName = methodConfig.getName();
         if (StringUtils.isEmpty(methodName)) {
             String msg = "<dubbo:method> name attribute is required! Please 
check: " +
-                "<dubbo:service interface=\"" + interfaceName + "\" ... >" +
-                "<dubbo:method name=\"\" ... /></<dubbo:reference>";
+                    "<dubbo:service interface=\"" + interfaceName + "\" ... >" 
+
+                    "<dubbo:method name=\"\" ... /></<dubbo:reference>";
             if (ignoreInvalidMethodConfig) {
                 logger.warn(CONFIG_NO_METHOD_FOUND, "", "", msg);
                 return false;
@@ -402,7 +404,7 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
         boolean hasMethod = 
Arrays.stream(interfaceClass.getMethods()).anyMatch(method -> 
method.getName().equals(methodName));
         if (!hasMethod) {
             String msg = "Found invalid method config, the interface " + 
interfaceClass.getName() + " not found method \""
-                + methodName + "\" : [" + methodConfig + "]";
+                    + methodName + "\" : [" + methodConfig + "]";
             if (ignoreInvalidMethodConfig) {
                 logger.warn(CONFIG_NO_METHOD_FOUND, "", "", msg);
                 return false;
@@ -464,7 +466,7 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
     private void verifyStubAndLocal(String className, String label, Class<?> 
interfaceClass) {
         if (ConfigUtils.isNotEmpty(className)) {
             Class<?> localClass = ConfigUtils.isDefault(className) ?
-                ReflectUtils.forName(interfaceClass.getName() + label) : 
ReflectUtils.forName(className);
+                    ReflectUtils.forName(interfaceClass.getName() + label) : 
ReflectUtils.forName(className);
             verify(interfaceClass, localClass);
         }
     }
@@ -472,7 +474,7 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
     private void verify(Class<?> interfaceClass, Class<?> localClass) {
         if (!interfaceClass.isAssignableFrom(localClass)) {
             throw new IllegalStateException("The local implementation class " 
+ localClass.getName() +
-                " not implement interface " + interfaceClass.getName());
+                    " not implement interface " + interfaceClass.getName());
         }
 
         try {
@@ -480,7 +482,7 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
             ReflectUtils.findConstructor(localClass, interfaceClass);
         } catch (NoSuchMethodException e) {
             throw new IllegalStateException("No such constructor \"public " + 
localClass.getSimpleName() +
-                "(" + interfaceClass.getName() + ")\" in local implementation 
class " + localClass.getName());
+                    "(" + interfaceClass.getName() + ")\" in local 
implementation class " + localClass.getName());
         }
     }
 
@@ -612,11 +614,20 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
     }
 
     public String getProxy() {
-        return proxy;
+        if (NativeDetector.inNativeImage()) {
+            return DEFAULT_NATIVE_PROXY;
+        } else {
+            return this.proxy;
+        }
     }
 
     public void setProxy(String proxy) {
-        this.proxy = proxy;
+        if (NativeDetector.inNativeImage()) {
+            this.proxy = DEFAULT_NATIVE_PROXY;
+            AdaptiveCompiler.setDefaultCompiler(DEFAULT_NATIVE_PROXY);
+        } else {
+            this.proxy = proxy;
+        }
     }
 
     public Integer getConnections() {
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/ApplicationConfig.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
index 7336c6d144..de4cc47a5e 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.config;
 
+import org.apache.dubbo.common.aot.NativeDetector;
 import org.apache.dubbo.common.compiler.support.AdaptiveCompiler;
 import org.apache.dubbo.common.infra.InfraAdapter;
 import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
@@ -66,6 +67,7 @@ import static 
org.apache.dubbo.common.constants.QosConstants.QOS_PORT;
 import static 
org.apache.dubbo.common.constants.QosConstants.QOS_PORT_COMPATIBLE;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.ENABLE_EMPTY_PROTECTION_KEY;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTER_MODE_KEY;
+import static org.apache.dubbo.config.Constants.DEFAULT_NATIVE_COMPILER;
 import static org.apache.dubbo.config.Constants.DEVELOPMENT_ENVIRONMENT;
 import static org.apache.dubbo.config.Constants.PRODUCTION_ENVIRONMENT;
 import static org.apache.dubbo.config.Constants.TEST_ENVIRONMENT;
@@ -275,7 +277,7 @@ public class ApplicationConfig extends AbstractConfig {
             try {
                 hostname = InetAddress.getLocalHost().getHostName();
             } catch (UnknownHostException e) {
-                LOGGER.warn(COMMON_UNEXPECTED_EXCEPTION,"","","Failed to get 
the hostname of current instance.", e);
+                LOGGER.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", "Failed to 
get the hostname of current instance.", e);
                 hostname = "UNKNOWN";
             }
         }
@@ -335,15 +337,15 @@ public class ApplicationConfig extends AbstractConfig {
 
     public void setEnvironment(String environment) {
         if (environment != null && 
!(DEVELOPMENT_ENVIRONMENT.equals(environment)
-            || TEST_ENVIRONMENT.equals(environment)
-            || PRODUCTION_ENVIRONMENT.equals(environment))) {
+                || TEST_ENVIRONMENT.equals(environment)
+                || PRODUCTION_ENVIRONMENT.equals(environment))) {
 
             throw new IllegalStateException(String.format("Unsupported 
environment: %s, only support %s/%s/%s, default is %s.",
-                environment,
-                DEVELOPMENT_ENVIRONMENT,
-                TEST_ENVIRONMENT,
-                PRODUCTION_ENVIRONMENT,
-                PRODUCTION_ENVIRONMENT));
+                    environment,
+                    DEVELOPMENT_ENVIRONMENT,
+                    TEST_ENVIRONMENT,
+                    PRODUCTION_ENVIRONMENT,
+                    PRODUCTION_ENVIRONMENT));
         }
         this.environment = environment;
     }
@@ -389,12 +391,22 @@ public class ApplicationConfig extends AbstractConfig {
     }
 
     public String getCompiler() {
-        return compiler;
+        if (NativeDetector.inNativeImage()) {
+            return DEFAULT_NATIVE_COMPILER;
+        } else {
+            return compiler;
+        }
     }
 
     public void setCompiler(String compiler) {
-        this.compiler = compiler;
-        AdaptiveCompiler.setDefaultCompiler(compiler);
+
+        if (NativeDetector.inNativeImage()) {
+            this.compiler = DEFAULT_NATIVE_COMPILER;
+            AdaptiveCompiler.setDefaultCompiler(DEFAULT_NATIVE_COMPILER);
+        } else {
+            this.compiler = compiler;
+            AdaptiveCompiler.setDefaultCompiler(compiler);
+        }
     }
 
     public String getLogger() {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java
index ed2e821368..d07ff02b79 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java
@@ -152,4 +152,8 @@ public interface Constants {
     String CLIENT_THREAD_POOL_NAME = "DubboClientHandler";
 
     String REST_PROTOCOL="rest";
+
+    String DEFAULT_NATIVE_COMPILER="jdk";
+
+    String DEFAULT_NATIVE_PROXY="jdk";
 }

Reply via email to