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);