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

liujun pushed a commit to branch 2.7-native_image
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/2.7-native_image by this push:
     new f00e95d  optimize grallvm support (#8062)
f00e95d is described below

commit f00e95d31bfd59202100ddf416e15e4ade5c268d
Author: 张志勇 <[email protected]>
AuthorDate: Wed Jun 16 15:37:51 2021 +0800

    optimize grallvm support (#8062)
---
 .../common/compiler/support/JavassistCompiler.java |   7 -
 .../dubbo/common/compiler/support/JdkCompiler.java |   7 -
 .../dubbo/common/constants/CommonConstants.java    |   2 +
 .../dubbo/common/extension/ExtensionLoader.java    |  13 +-
 .../dubbo/config/AbstractInterfaceConfig.java      |  10 ++
 .../org/apache/dubbo/config/ReferenceConfig.java   |   6 +-
 .../org/apache/dubbo/config/ServiceConfig.java     |   9 +-
 .../dubbo-demo-native-consumer/pom.xml             | 178 +++++++++++---------
 .../dubbo/demo/graalvm/consumer/Application.java   |   3 +-
 .../dubbo-demo-native-interface/pom.xml            |   8 +-
 .../dubbo-demo-native-provider/pom.xml             | 184 ++++++++++++---------
 .../dubbo/demo/graalvm/provider/Application.java   |   1 +
 .../demo/graalvm/provider/DemoServiceImpl.java     |   2 +-
 dubbo-demo/dubbo-demo-native/pom.xml               |   8 +-
 dubbo-graalvm/pom.xml                              |  10 +-
 .../store/InMemoryWritableMetadataService.java     |   4 +-
 .../dubbo/rpc/proxy/AbstractProxyFactory.java      |   6 +-
 17 files changed, 252 insertions(+), 206 deletions(-)

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 9278aac..0a77d5c 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
@@ -42,13 +42,6 @@ public class JavassistCompiler extends AbstractCompiler {
 
     @Override
     public Class<?> doCompile(String name, String source) throws Throwable {
-        try {
-            Class<?> res = Class.forName(name);
-            return res;
-        } catch (Throwable ex) {
-            //ignore
-        }
-
         CtClassBuilder builder = new CtClassBuilder();
         builder.setClassName(name);
 
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 6110d42..24703d1 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
@@ -115,13 +115,6 @@ public class JdkCompiler extends AbstractCompiler {
 
     @Override
     public Class<?> doCompile(String name, String sourceCode) throws Throwable 
{
-        try {
-            Class<?> res = Class.forName(name);
-            return res;
-        } catch (Throwable ex) {
-            //ignore
-        }
-
         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/constants/CommonConstants.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
index 95787be..68c65d3 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
@@ -414,4 +414,6 @@ public interface CommonConstants {
 
     String DISPATHER = "dispather";
 
+    String NATIVE = "native";
+
 }
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 6e96462..386b963 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
@@ -1067,26 +1067,19 @@ public class ExtensionLoader<T> {
     }
 
     private Class<?> createAdaptiveExtensionClass() {
+        ClassLoader classLoader = findClassLoader();
         try {
-            Class c = Class.forName(generatePackageInfo() + "." + 
type.getSimpleName() + "$Adaptive");
-            return c;
-        } catch (Throwable e) {
+            return classLoader.loadClass(type.getName() + "$Adaptive");
+        } catch (ClassNotFoundException e) {
             //ignore
         }
         String code = new AdaptiveClassCodeGenerator(type, 
cachedDefaultName).generate();
-        ClassLoader classLoader = findClassLoader();
         org.apache.dubbo.common.compiler.Compiler compiler =
                 
ExtensionLoader.getExtensionLoader(org.apache.dubbo.common.compiler.Compiler.class).getAdaptiveExtension();
         return compiler.compile(code, classLoader);
     }
 
 
-    private static final String CODE_PACKAGE = "%s";
-
-    private String generatePackageInfo() {
-        return String.format(CODE_PACKAGE, type.getPackage().getName());
-    }
-
     @Override
     public String toString() {
         return this.getClass().getName() + "[" + type.getName() + "]";
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 536286c..d045121 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
@@ -18,6 +18,7 @@ package org.apache.dubbo.config;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.Version;
+import org.apache.dubbo.common.bytecode.Wrapper;
 import org.apache.dubbo.common.utils.Assert;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.ConfigUtils;
@@ -38,6 +39,7 @@ import java.util.Optional;
 import static 
org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
 import static 
org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.NATIVE;
 import static org.apache.dubbo.common.constants.CommonConstants.PID_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_KEY;
@@ -486,6 +488,14 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
         return globalApplication;
     }
 
+    protected String[] methods(Class<?> interfaceClass) {
+        if (getApplication().getParameters().getOrDefault(NATIVE, 
"false").equals("true")) {
+            return Arrays.stream(interfaceClass.getMethods()).map(it -> 
it.getName()).toArray(String[]::new);
+        } else {
+            return Wrapper.getWrapper(interfaceClass).getMethodNames();
+        }
+    }
+
     @Deprecated
     public void setApplication(ApplicationConfig application) {
         this.application = application;
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index b96cbbb..e7e31e6 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -18,7 +18,6 @@ package org.apache.dubbo.config;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.Version;
-import org.apache.dubbo.common.bytecode.Wrapper;
 import org.apache.dubbo.common.constants.RegistryConstants;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
@@ -258,10 +257,7 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
             if (revision != null && revision.length() > 0) {
                 map.put(REVISION_KEY, revision);
             }
-
-//            String[] methods = 
Wrapper.getWrapper(interfaceClass).getMethodNames();
-            String[] methods = 
Arrays.stream(interfaceClass.getMethods()).map(it->it.getName()).toArray(String[]::new);
-
+            String[] methods = methods(interfaceClass);
             if (methods.length == 0) {
                 logger.warn("No method found in service interface " + 
interfaceClass.getName());
                 map.put(METHODS_KEY, ANY_VALUE);
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index d5c4a95..4be3202 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -19,7 +19,6 @@ package org.apache.dubbo.config;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.URLBuilder;
 import org.apache.dubbo.common.Version;
-import org.apache.dubbo.common.bytecode.Wrapper;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -464,11 +463,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> 
{
             if (revision != null && revision.length() > 0) {
                 map.put(REVISION_KEY, revision);
             }
-
-//            String[] methods = 
Wrapper.getWrapper(interfaceClass).getMethodNames();
-
-            String[] methods = 
Arrays.stream(interfaceClass.getMethods()).map(it->it.getName()).toArray(String[]::new);
-
+            String[] methods = methods(this.interfaceClass);
             if (methods.length == 0) {
                 logger.warn("No method found in service interface " + 
interfaceClass.getName());
                 map.put(METHODS_KEY, ANY_VALUE);
@@ -570,6 +565,8 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
         this.urls.add(url);
     }
 
+
+
     @SuppressWarnings({"unchecked", "rawtypes"})
     /**
      * always export injvm
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
index 3612ed7..935ba780 100644
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
@@ -2,11 +2,14 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0";
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
     <parent>
-        <artifactId>dubbo-demo-native</artifactId>
         <groupId>org.apache.dubbo</groupId>
-        <version>2.7.12-SNAPSHOT</version>
+        <artifactId>dubbo-demo-native</artifactId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
+
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-demo-native-consumer</artifactId>
@@ -58,81 +61,104 @@
     </dependencies>
 
 
+    <profiles>
+
+        <profile>
+            <id>dev</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <properties>
+                <profileActive>dev</profileActive>
+            </properties>
+        </profile>
+
+        <profile>
+            <id>native</id>
+            <properties>
+                <profileActive>native</profileActive>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <version>3.7.0</version>
+                        <configuration>
+                            <source>1.8</source>
+                            <target>1.8</target>
+                            <fork>true</fork>
+                            <verbose>true</verbose>
+                            <encoding>UTF-8</encoding>
+                            <compilerArguments>
+                                <sourcepath>
+                                    ${project.basedir}/src/main/java
+                                </sourcepath>
+                            </compilerArguments>
+                        </configuration>
+                    </plugin>
+
+                    <plugin>
+                        <groupId>org.graalvm.nativeimage</groupId>
+                        <artifactId>native-image-maven-plugin</artifactId>
+                        <version>21.0.0.2</version>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>native-image</goal>
+                                </goals>
+                                <phase>package</phase>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <skip>false</skip>
+                            <imageName>demo-native-consumer</imageName>
+                            
<mainClass>com.apache.dubbo.demo.graalvm.consumer.Application</mainClass>
+                            <buildArgs>
+                                --no-fallback
+
+                                --initialize-at-build-time=org.slf4j.MDC
+                                
--initialize-at-build-time=org.slf4j.LoggerFactory
+                                
--initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
+                                
--initialize-at-build-time=org.apache.log4j.helpers.Loader
+                                
--initialize-at-build-time=org.apache.log4j.Logger
+                                
--initialize-at-build-time=org.apache.log4j.helpers.LogLog
+                                
--initialize-at-build-time=org.apache.log4j.LogManager
+                                
--initialize-at-build-time=org.apache.log4j.spi.LoggingEvent
+                                
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerFactory
+                                
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerAdapter
+
+
+                                
--initialize-at-run-time=io.netty.channel.epoll.Epoll
+                                
--initialize-at-run-time=io.netty.channel.epoll.Native
+                                
--initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop
+                                
--initialize-at-run-time=io.netty.channel.epoll.EpollEventArray
+                                
--initialize-at-run-time=io.netty.channel.DefaultFileRegion
+                                
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray
+                                
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop
+                                
--initialize-at-run-time=io.netty.channel.kqueue.Native
+                                
--initialize-at-run-time=io.netty.channel.unix.Errors
+                                
--initialize-at-run-time=io.netty.channel.unix.IovArray
+                                
--initialize-at-run-time=io.netty.channel.unix.Limits
+                                
--initialize-at-run-time=io.netty.util.internal.logging.Log4JLogger
+                                
--initialize-at-run-time=io.netty.channel.unix.Socket
+                                
--initialize-at-run-time=io.netty.channel.ChannelHandlerMask
+
+                                --report-unsupported-elements-at-runtime
+                                --allow-incomplete-classpath
+                                --enable-url-protocols=http
+                                -H:+ReportExceptionStackTraces
+                            </buildArgs>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+    </profiles>
+
     <build>
-        <plugins>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.7.0</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <fork>true</fork>
-                    <verbose>true</verbose>
-                    <encoding>UTF-8</encoding>
-                    <compilerArguments>
-                        <sourcepath>
-                            ${project.basedir}/src/main/java
-                        </sourcepath>
-                    </compilerArguments>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.graalvm.nativeimage</groupId>
-                <artifactId>native-image-maven-plugin</artifactId>
-                <version>21.0.0.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>native-image</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <skip>false</skip>
-                    <imageName>demo-native-consumer</imageName>
-                    
<mainClass>com.apache.dubbo.demo.graalvm.consumer.Application</mainClass>
-                    <buildArgs>
-                        --no-fallback
-
-                        --initialize-at-build-time=org.slf4j.MDC
-                        --initialize-at-build-time=org.slf4j.LoggerFactory
-                        
--initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
-                        
--initialize-at-build-time=org.apache.log4j.helpers.Loader
-                        --initialize-at-build-time=org.apache.log4j.Logger
-                        
--initialize-at-build-time=org.apache.log4j.helpers.LogLog
-                        --initialize-at-build-time=org.apache.log4j.LogManager
-                        
--initialize-at-build-time=org.apache.log4j.spi.LoggingEvent
-                        
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerFactory
-                        
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerAdapter
-
-
-
-                        --initialize-at-run-time=io.netty.channel.epoll.Epoll
-                        --initialize-at-run-time=io.netty.channel.epoll.Native
-                        
--initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop
-                        
--initialize-at-run-time=io.netty.channel.epoll.EpollEventArray
-                        
--initialize-at-run-time=io.netty.channel.DefaultFileRegion
-                        
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray
-                        
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop
-                        --initialize-at-run-time=io.netty.channel.kqueue.Native
-                        --initialize-at-run-time=io.netty.channel.unix.Errors
-                        --initialize-at-run-time=io.netty.channel.unix.IovArray
-                        --initialize-at-run-time=io.netty.channel.unix.Limits
-                        
--initialize-at-run-time=io.netty.util.internal.logging.Log4JLogger
-                        --initialize-at-run-time=io.netty.channel.unix.Socket
-                        
--initialize-at-run-time=io.netty.channel.ChannelHandlerMask
-
-                        --report-unsupported-elements-at-runtime
-                        --allow-incomplete-classpath
-                        --enable-url-protocols=http
-                        -H:+ReportExceptionStackTraces
-                    </buildArgs>
-                </configuration>
-            </plugin>
-        </plugins>
+
     </build>
 
 
diff --git 
a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/java/com/apache/dubbo/demo/graalvm/consumer/Application.java
 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/java/com/apache/dubbo/demo/graalvm/consumer/Application.java
index 32609eb..7c6ee55 100644
--- 
a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/java/com/apache/dubbo/demo/graalvm/consumer/Application.java
+++ 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/java/com/apache/dubbo/demo/graalvm/consumer/Application.java
@@ -53,6 +53,7 @@ public class Application {
         applicationConfig.setCompiler("jdk");
         Map<String,String> m = new HashMap<>(1);
         m.put("proxy","jdk");
+        m.put("native","true");
         applicationConfig.setParameters(m);
 
         bootstrap.application(applicationConfig)
@@ -61,7 +62,7 @@ public class Application {
                 .start();
 
         DemoService demoService = 
ReferenceConfigCache.getCache().get(reference);
-        String message = demoService.sayHello("dubbo");
+        String message = demoService.sayHello("Native");
         System.out.println(message);
     }
 
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/pom.xml 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/pom.xml
index f1e2eec..0d703e4 100644
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/pom.xml
@@ -2,11 +2,15 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0";
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
     <parent>
-        <artifactId>dubbo-demo-native</artifactId>
         <groupId>org.apache.dubbo</groupId>
-        <version>2.7.12-SNAPSHOT</version>
+        <artifactId>dubbo-demo-native</artifactId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
+
+
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-demo-native-interface</artifactId>
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
index 96ae2dd..202f5e1 100644
--- a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
@@ -2,11 +2,14 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0";
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
     <parent>
-        <artifactId>dubbo-demo-native</artifactId>
         <groupId>org.apache.dubbo</groupId>
-        <version>2.7.12-SNAPSHOT</version>
+        <artifactId>dubbo-demo-native</artifactId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
+
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-demo-native-provider</artifactId>
@@ -51,84 +54,107 @@
 
     </dependencies>
 
+    <profiles>
+
+        <profile>
+            <id>dev</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <properties>
+                <profileActive>dev</profileActive>
+            </properties>
+        </profile>
+
+        <profile>
+            <id>native</id>
+            <properties>
+                <profileActive>native</profileActive>
+            </properties>
+
+            <build>
+                <plugins>
+
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <version>3.7.0</version>
+                        <configuration>
+                            <source>1.8</source>
+                            <target>1.8</target>
+                            <fork>true</fork>
+                            <verbose>true</verbose>
+                            <encoding>UTF-8</encoding>
+                            <compilerArguments>
+                                <sourcepath>
+                                    ${project.basedir}/src/main/java
+                                </sourcepath>
+                            </compilerArguments>
+                        </configuration>
+                    </plugin>
+
+                    <plugin>
+                        <groupId>org.graalvm.nativeimage</groupId>
+                        <artifactId>native-image-maven-plugin</artifactId>
+                        <version>21.0.0.2</version>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>native-image</goal>
+                                </goals>
+                                <phase>package</phase>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <skip>false</skip>
+                            <imageName>demo-native-provider</imageName>
+                            
<mainClass>org.apache.dubbo.demo.graalvm.provider.Application</mainClass>
+                            <buildArgs>
+                                --no-fallback
+
+                                --initialize-at-build-time=org.slf4j.MDC
+                                
--initialize-at-build-time=org.slf4j.LoggerFactory
+                                
--initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
+                                
--initialize-at-build-time=org.apache.log4j.helpers.Loader
+                                
--initialize-at-build-time=org.apache.log4j.Logger
+                                
--initialize-at-build-time=org.apache.log4j.helpers.LogLog
+                                
--initialize-at-build-time=org.apache.log4j.LogManager
+                                
--initialize-at-build-time=org.apache.log4j.spi.LoggingEvent
+                                
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerFactory
+                                
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerAdapter
+
+
+
+                                
--initialize-at-run-time=io.netty.channel.epoll.Epoll
+                                
--initialize-at-run-time=io.netty.channel.epoll.Native
+                                
--initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop
+                                
--initialize-at-run-time=io.netty.channel.epoll.EpollEventArray
+                                
--initialize-at-run-time=io.netty.channel.DefaultFileRegion
+                                
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray
+                                
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop
+                                
--initialize-at-run-time=io.netty.channel.kqueue.Native
+                                
--initialize-at-run-time=io.netty.channel.unix.Errors
+                                
--initialize-at-run-time=io.netty.channel.unix.IovArray
+                                
--initialize-at-run-time=io.netty.channel.unix.Limits
+                                
--initialize-at-run-time=io.netty.util.internal.logging.Log4JLogger
+                                
--initialize-at-run-time=io.netty.channel.unix.Socket
+                                
--initialize-at-run-time=io.netty.channel.ChannelHandlerMask
+
+                                --report-unsupported-elements-at-runtime
+                                --allow-incomplete-classpath
+                                --enable-url-protocols=http
+                                -H:+ReportExceptionStackTraces
+                            </buildArgs>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+
+        </profile>
+
+    </profiles>
+
 
-    <build>
-        <plugins>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.7.0</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <fork>true</fork>
-                    <verbose>true</verbose>
-                    <encoding>UTF-8</encoding>
-                    <compilerArguments>
-                        <sourcepath>
-                            ${project.basedir}/src/main/java
-                        </sourcepath>
-                    </compilerArguments>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.graalvm.nativeimage</groupId>
-                <artifactId>native-image-maven-plugin</artifactId>
-                <version>21.0.0.2</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>native-image</goal>
-                        </goals>
-                        <phase>package</phase>
-                    </execution>
-                </executions>
-                <configuration>
-                    <skip>false</skip>
-                    <imageName>demo-native-provider</imageName>
-                    
<mainClass>org.apache.dubbo.demo.graalvm.provider.Application</mainClass>
-                    <buildArgs>
-                        --no-fallback
-
-                        --initialize-at-build-time=org.slf4j.MDC
-                        --initialize-at-build-time=org.slf4j.LoggerFactory
-                        
--initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
-                        
--initialize-at-build-time=org.apache.log4j.helpers.Loader
-                        --initialize-at-build-time=org.apache.log4j.Logger
-                        
--initialize-at-build-time=org.apache.log4j.helpers.LogLog
-                        --initialize-at-build-time=org.apache.log4j.LogManager
-                        
--initialize-at-build-time=org.apache.log4j.spi.LoggingEvent
-                        
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerFactory
-                        
--initialize-at-build-time=org.slf4j.impl.Log4jLoggerAdapter
-
-
-
-                        --initialize-at-run-time=io.netty.channel.epoll.Epoll
-                        --initialize-at-run-time=io.netty.channel.epoll.Native
-                        
--initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop
-                        
--initialize-at-run-time=io.netty.channel.epoll.EpollEventArray
-                        
--initialize-at-run-time=io.netty.channel.DefaultFileRegion
-                        
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventArray
-                        
--initialize-at-run-time=io.netty.channel.kqueue.KQueueEventLoop
-                        --initialize-at-run-time=io.netty.channel.kqueue.Native
-                        --initialize-at-run-time=io.netty.channel.unix.Errors
-                        --initialize-at-run-time=io.netty.channel.unix.IovArray
-                        --initialize-at-run-time=io.netty.channel.unix.Limits
-                        
--initialize-at-run-time=io.netty.util.internal.logging.Log4JLogger
-                        --initialize-at-run-time=io.netty.channel.unix.Socket
-                        
--initialize-at-run-time=io.netty.channel.ChannelHandlerMask
-
-                        --report-unsupported-elements-at-runtime
-                        --allow-incomplete-classpath
-                        --enable-url-protocols=http
-                        -H:+ReportExceptionStackTraces
-                    </buildArgs>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 
 
 </project>
\ No newline at end of file
diff --git 
a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/Application.java
 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/Application.java
index 5346ea1..2540d36 100644
--- 
a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/Application.java
+++ 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/Application.java
@@ -54,6 +54,7 @@ public class Application {
         applicationConfig.setCompiler("jdk");
         Map<String,String> m = new HashMap<>(1);
         m.put("proxy","jdk");
+        m.put("native","true");
         applicationConfig.setParameters(m);
 
         bootstrap.application(applicationConfig)
diff --git 
a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/DemoServiceImpl.java
 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/DemoServiceImpl.java
index b900308..38a0348 100644
--- 
a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/DemoServiceImpl.java
+++ 
b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/DemoServiceImpl.java
@@ -26,7 +26,7 @@ public class DemoServiceImpl implements DemoService {
     @Override
     public String sayHello(String name) {
         System.out.println("Hello " + name + ", request from consumer: " + 
RpcContext.getContext().getRemoteAddress());
-        return "Hello " + name + ", response from provider: " + 
RpcContext.getContext().getLocalAddress();
+        return "Hello " + name ;
     }
 
 
diff --git a/dubbo-demo/dubbo-demo-native/pom.xml 
b/dubbo-demo/dubbo-demo-native/pom.xml
index 844dfa0..af04be2 100644
--- a/dubbo-demo/dubbo-demo-native/pom.xml
+++ b/dubbo-demo/dubbo-demo-native/pom.xml
@@ -2,11 +2,15 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0";
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
     <parent>
-        <artifactId>dubbo-demo</artifactId>
         <groupId>org.apache.dubbo</groupId>
-        <version>2.7.12-SNAPSHOT</version>
+        <artifactId>dubbo-demo</artifactId>
+        <version>${revision}</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
+
+
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-demo-native</artifactId>
diff --git a/dubbo-graalvm/pom.xml b/dubbo-graalvm/pom.xml
index 91ba85d..12714c2 100644
--- a/dubbo-graalvm/pom.xml
+++ b/dubbo-graalvm/pom.xml
@@ -23,7 +23,7 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-common</artifactId>
-            <version>2.7.12-SNAPSHOT</version>
+            <version>${project.parent.version}</version>
             <scope>provided</scope>
         </dependency>
 
@@ -31,7 +31,7 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-metadata-api</artifactId>
-            <version>2.7.12-SNAPSHOT</version>
+            <version>${project.parent.version}</version>
             <scope>provided</scope>
         </dependency>
 
@@ -39,14 +39,14 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-monitor-api</artifactId>
-            <version>2.7.12-SNAPSHOT</version>
+            <version>${project.parent.version}</version>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-registry-api</artifactId>
-            <version>2.7.12-SNAPSHOT</version>
+            <version>${project.parent.version}</version>
             <scope>provided</scope>
         </dependency>
 
@@ -54,7 +54,7 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-remoting-zookeeper</artifactId>
-            <version>2.7.12-SNAPSHOT</version>
+            <version>${project.parent.version}</version>
             <scope>provided</scope>
         </dependency>
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
index 3f84cf8..f2c9651 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
@@ -32,6 +32,7 @@ import org.apache.dubbo.rpc.support.ProtocolUtils;
 
 import com.alibaba.fastjson.JSON;
 import com.google.gson.Gson;
+import static org.apache.dubbo.common.constants.CommonConstants.NATIVE;
 
 import java.util.Comparator;
 import java.util.Map;
@@ -173,7 +174,8 @@ public class InMemoryWritableMetadataService implements 
WritableMetadataService
                 if (StringUtils.isNotEmpty(interfaceName)) {
                     Class interfaceClass = Class.forName(interfaceName);
                     ServiceDefinition serviceDefinition = 
ServiceDefinitionBuilder.build(interfaceClass);
-                    String data = new Gson().toJson(serviceDefinition);
+                    boolean isNative = 
providerUrl.getParameter(NATIVE,"false").equals("true");
+                    String data = isNative ? new 
Gson().toJson(serviceDefinition) : JSON.toJSONString(serviceDefinition);
                     serviceDefinitions.put(providerUrl.getServiceKey(), data);
                     return;
                 }
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java
index 3d12608..f9d998f 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java
@@ -25,9 +25,8 @@ import org.apache.dubbo.rpc.service.Destroyable;
 import org.apache.dubbo.rpc.service.EchoService;
 import org.apache.dubbo.rpc.service.GenericService;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
+import java.util.LinkedHashSet;
 
 import static 
org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
 import static org.apache.dubbo.rpc.Constants.INTERFACES;
@@ -47,8 +46,7 @@ public abstract class AbstractProxyFactory implements 
ProxyFactory {
 
     @Override
     public <T> T getProxy(Invoker<T> invoker, boolean generic) throws 
RpcException {
-        List<Class<?>> interfaces = new ArrayList<>();
-
+        LinkedHashSet<Class<?>> interfaces = new LinkedHashSet<>();
         String config = invoker.getUrl().getParameter(INTERFACES);
         if (config != null && config.length() > 0) {
             String[] types = COMMA_SPLIT_PATTERN.split(config);

Reply via email to