You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/06/15 02:33:48 UTC
[dubbo] branch 2.7-native_image updated: support native image
(#8047)
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 baa2fe3 support native image (#8047)
baa2fe3 is described below
commit baa2fe3f524d2a58c3515fe73a3699a7342fb0ae
Author: 张志勇 <go...@163.com>
AuthorDate: Tue Jun 15 10:32:56 2021 +0800
support native image (#8047)
---
.../common/compiler/support/JavassistCompiler.java | 7 +
.../dubbo/common/compiler/support/JdkCompiler.java | 9 +
.../dubbo/common/extension/ExtensionLoader.java | 13 +
.../org/apache/dubbo/config/ReferenceConfig.java | 4 +-
.../org/apache/dubbo/config/ServiceConfig.java | 5 +-
.../dubbo-demo-native-consumer/pom.xml | 139 +++
.../dubbo/demo/graalvm/consumer/Application.java | 77 ++
.../src/main/resources/Log4j.properties | 5 +
.../META-INF/native-image/jni-config.json | 2 +
.../META-INF/native-image/proxy-config.json | 3 +
.../META-INF/native-image/reflect-config.json | 1036 ++++++++++++++++++++
.../META-INF/native-image/resource-config.json | 47 +
.../native-image/serialization-config.json | 2 +
.../dubbo-demo-native-interface/pom.xml | 15 +
.../org/apace/dubbo/graalvm/demo/DemoService.java | 23 +
.../dubbo-demo-native-provider/pom.xml | 134 +++
.../dubbo/demo/graalvm/provider/Application.java | 77 ++
.../demo/graalvm/provider/DemoServiceImpl.java | 33 +
.../META-INF/native-image/jni-config.json | 2 +
.../META-INF/native-image/proxy-config.json | 2 +
.../META-INF/native-image/reflect-config.json | 981 ++++++++++++++++++
.../META-INF/native-image/resource-config.json | 52 +
.../native-image/serialization-config.json | 2 +
dubbo-demo/dubbo-demo-native/pom.xml | 21 +
dubbo-demo/pom.xml | 1 +
dubbo-graalvm/pom.xml | 64 ++
.../common/threadpool/ThreadPool$Adaptive.java | 15 +
.../report/MetadataReportFactory$Adaptive.java | 15 +
.../dubbo/monitor/MonitorFactory$Adaptive.java | 12 +
.../dubbo/registry/RegistryFactory$Adaptive.java | 12 +
.../apache/dubbo/remoting/Dispatcher$Adaptive.java | 12 +
.../dubbo/remoting/Transporter$Adaptive.java | 25 +
.../zookeeper/ZookeeperTransporter$Adaptive.java | 15 +
.../org/apache/dubbo/rpc/Protocol$Adaptive.java | 39 +
.../apache/dubbo/rpc/ProxyFactory$Adaptive.java | 39 +
.../apache/dubbo/rpc/cluster/Cluster$Adaptive.java | 19 +
.../rpc/cluster/ConfiguratorFactory$Adaptive.java | 15 +
.../dubbo/rpc/cluster/RouterFactory$Adaptive.java | 15 +
.../store/InMemoryWritableMetadataService.java | 3 +-
.../dubbo/rpc/proxy/AbstractProxyFactory.java | 6 +-
pom.xml | 1 +
41 files changed, 2993 insertions(+), 6 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 0a77d5c..9278aac 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,6 +42,13 @@ 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 e5d5b22..6110d42 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
@@ -37,6 +37,8 @@ import java.io.OutputStream;
import java.net.URI;
import java.net.URL;
import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
@@ -113,6 +115,13 @@ 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/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index d85a34c..6e96462 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,6 +1067,12 @@ public class ExtensionLoader<T> {
}
private Class<?> createAdaptiveExtensionClass() {
+ try {
+ Class c = Class.forName(generatePackageInfo() + "." + type.getSimpleName() + "$Adaptive");
+ return c;
+ } catch (Throwable e) {
+ //ignore
+ }
String code = new AdaptiveClassCodeGenerator(type, cachedDefaultName).generate();
ClassLoader classLoader = findClassLoader();
org.apache.dubbo.common.compiler.Compiler compiler =
@@ -1074,6 +1080,13 @@ public class ExtensionLoader<T> {
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-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 e699000..b96cbbb 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
@@ -259,7 +259,9 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
map.put(REVISION_KEY, revision);
}
- String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames();
+// String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames();
+ String[] methods = Arrays.stream(interfaceClass.getMethods()).map(it->it.getName()).toArray(String[]::new);
+
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 0afbf18..d5c4a95 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
@@ -465,7 +465,10 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
map.put(REVISION_KEY, revision);
}
- String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames();
+// String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames();
+
+ String[] methods = Arrays.stream(interfaceClass.getMethods()).map(it->it.getName()).toArray(String[]::new);
+
if (methods.length == 0) {
logger.warn("No method found in service interface " + interfaceClass.getName());
map.put(METHODS_KEY, ANY_VALUE);
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
new file mode 100644
index 0000000..3612ed7
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/pom.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>dubbo-demo-native-consumer</artifactId>
+
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-demo-native-interface</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-config-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-registry-multicast</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-registry-zookeeper</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-configcenter-zookeeper</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-rpc-dubbo</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-remoting-netty4</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-serialization-hessian2</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-graalvm</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ </dependency>
+
+
+ </dependencies>
+
+
+ <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>
+
+
+</project>
\ No newline at end of file
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
new file mode 100644
index 0000000..32609eb
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/java/com/apache/dubbo/demo/graalvm/consumer/Application.java
@@ -0,0 +1,77 @@
+/*
+ * 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 com.apache.dubbo.demo.graalvm.consumer;
+
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ReferenceConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.utils.ReferenceConfigCache;
+
+import org.apace.dubbo.graalvm.demo.DemoService;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Application {
+
+ public static void main(String[] args) {
+ System.setProperty("dubbo.application.logger", "log4j");
+ if (isClassic(args)) {
+ runWithRefer();
+ } else {
+ runWithBootstrap();
+ }
+ }
+
+ private static boolean isClassic(String[] args) {
+ return args.length > 0 && "classic".equalsIgnoreCase(args[0]);
+ }
+
+ private static void runWithBootstrap() {
+ ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
+ reference.setInterface(DemoService.class);
+ reference.setGeneric("false");
+
+ DubboBootstrap bootstrap = DubboBootstrap.getInstance();
+ ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-demo-api-consumer");
+ applicationConfig.setQosEnable(false);
+ applicationConfig.setCompiler("jdk");
+ Map<String,String> m = new HashMap<>(1);
+ m.put("proxy","jdk");
+ applicationConfig.setParameters(m);
+
+ bootstrap.application(applicationConfig)
+ .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
+ .reference(reference)
+ .start();
+
+ DemoService demoService = ReferenceConfigCache.getCache().get(reference);
+ String message = demoService.sayHello("dubbo");
+ System.out.println(message);
+ }
+
+ private static void runWithRefer() {
+ ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
+ reference.setApplication(new ApplicationConfig("dubbo-demo-api-consumer"));
+ reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
+ reference.setInterface(DemoService.class);
+ DemoService service = reference.get();
+ String message = service.sayHello("dubbo");
+ System.out.println(message);
+ }
+}
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/Log4j.properties b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/Log4j.properties
new file mode 100644
index 0000000..32fc0e5
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/Log4j.properties
@@ -0,0 +1,5 @@
+log4j.rootLogger=error, console
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=[%-12d{HH\:mm\:ss.SS}] [%p] %l %m%n
\ No newline at end of file
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/jni-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/proxy-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..572a0c8
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,3 @@
+[
+ ["org.apace.dubbo.graalvm.demo.DemoService","org.apache.dubbo.rpc.service.EchoService","org.apache.dubbo.rpc.service.Destroyable"]
+]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/reflect-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000..1596d30
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,1036 @@
+[
+{
+ "name":"com.alibaba.dubbo.rpc.service.GenericService",
+ "allPublicMethods":true
+},
+{
+ "name":"com.intellij.rt.execution.application.AppMainV2$Agent",
+ "methods":[{"name":"premain","parameterTypes":["java.lang.String","java.lang.instrument.Instrumentation"] }]
+},
+{
+ "name":"io.netty.buffer.AbstractByteBufAllocator",
+ "allDeclaredMethods":true
+},
+{
+ "name":"io.netty.buffer.AbstractReferenceCountedByteBuf",
+ "fields":[{"name":"refCnt", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.channel.ChannelDuplexHandler",
+ "methods":[
+ {"name":"bind","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"close","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"connect","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"deregister","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"disconnect","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"flush","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"read","parameterTypes":["io.netty.channel.ChannelHandlerContext"] }
+ ]
+},
+{
+ "name":"io.netty.channel.ChannelHandlerAdapter",
+ "methods":[{"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] }]
+},
+{
+ "name":"io.netty.channel.ChannelInboundHandlerAdapter",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelUnregistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelWritabilityChanged","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }
+ ]
+},
+{
+ "name":"io.netty.channel.ChannelInitializer",
+ "methods":[
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] }
+ ]
+},
+{
+ "name":"io.netty.channel.ChannelOutboundHandlerAdapter",
+ "methods":[
+ {"name":"bind","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"close","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"connect","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"deregister","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"disconnect","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"flush","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"read","parameterTypes":["io.netty.channel.ChannelHandlerContext"] }
+ ]
+},
+{
+ "name":"io.netty.channel.DefaultChannelPipeline$HeadContext",
+ "methods":[
+ {"name":"bind","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelUnregistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelWritabilityChanged","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"close","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"connect","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"deregister","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"disconnect","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"flush","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"read","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }
+ ]
+},
+{
+ "name":"io.netty.channel.DefaultChannelPipeline$TailContext",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelUnregistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelWritabilityChanged","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }
+ ]
+},
+{
+ "name":"io.netty.channel.socket.nio.NioSocketChannel",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"io.netty.handler.codec.ByteToMessageDecoder",
+ "methods":[
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }
+ ]
+},
+{
+ "name":"io.netty.handler.codec.MessageToByteEncoder",
+ "methods":[{"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }]
+},
+{
+ "name":"io.netty.handler.timeout.IdleStateHandler",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }
+ ]
+},
+{
+ "name":"io.netty.util.ReferenceCountUtil",
+ "allDeclaredMethods":true
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueColdProducerFields",
+ "fields":[{"name":"producerLimit", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueConsumerFields",
+ "fields":[{"name":"consumerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueProducerFields",
+ "fields":[{"name":"producerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueConsumerIndexField",
+ "fields":[{"name":"consumerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerIndexField",
+ "fields":[{"name":"producerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerLimitField",
+ "fields":[{"name":"producerLimit", "allowUnsafeAccess":true}]
+},
+{
+ "name":"java.io.File",
+ "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"java.lang.Number",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true
+},
+{
+ "name":"java.lang.Object",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true
+},
+{
+ "name":"java.lang.StackTraceElement",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+},
+{
+ "name":"java.lang.Thread",
+ "methods":[{"name":"getContextClassLoader","parameterTypes":[] }]
+},
+{
+ "name":"java.lang.Throwable",
+ "fields":[
+ {"name":"detailMessage"},
+ {"name":"stackTrace"}
+ ]
+},
+{
+ "name":"java.lang.management.ManagementFactory",
+ "methods":[{"name":"getRuntimeMXBean","parameterTypes":[] }]
+},
+{
+ "name":"java.lang.management.RuntimeMXBean",
+ "methods":[{"name":"getName","parameterTypes":[] }]
+},
+{
+ "name":"java.math.BigDecimal",
+ "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"java.math.BigInteger",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+},
+{
+ "name":"java.nio.Bits",
+ "methods":[{"name":"unaligned","parameterTypes":[] }]
+},
+{
+ "name":"java.nio.Buffer",
+ "fields":[{"name":"address", "allowUnsafeAccess":true}]
+},
+{
+ "name":"java.nio.DirectByteBuffer",
+ "fields":[{"name":"cleaner", "allowUnsafeAccess":true}],
+ "methods":[{"name":"<init>","parameterTypes":["long","int"] }]
+},
+{
+ "name":"java.sql.Date",
+ "methods":[{"name":"<init>","parameterTypes":["long"] }]
+},
+{
+ "name":"java.sql.Time",
+ "methods":[{"name":"<init>","parameterTypes":["long"] }]
+},
+{
+ "name":"java.sql.Timestamp",
+ "methods":[{"name":"<init>","parameterTypes":["long"] }]
+},
+{
+ "name":"java.time.Duration"
+},
+{
+ "name":"java.time.Instant"
+},
+{
+ "name":"java.time.LocalDate"
+},
+{
+ "name":"java.time.LocalDateTime"
+},
+{
+ "name":"java.time.LocalTime"
+},
+{
+ "name":"java.time.MonthDay"
+},
+{
+ "name":"java.time.OffsetDateTime"
+},
+{
+ "name":"java.time.OffsetTime"
+},
+{
+ "name":"java.time.Period"
+},
+{
+ "name":"java.time.Year"
+},
+{
+ "name":"java.time.YearMonth"
+},
+{
+ "name":"java.time.ZoneId"
+},
+{
+ "name":"java.time.ZoneOffset"
+},
+{
+ "name":"java.time.ZonedDateTime"
+},
+{
+ "name":"java.util.AbstractMap",
+ "allDeclaredMethods":true
+},
+{
+ "name":"java.util.HashMap",
+ "allDeclaredMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"java.util.Map",
+ "allPublicConstructors":true
+},
+{
+ "name":"java.util.concurrent.ConcurrentNavigableMap"
+},
+{
+ "name":"java.util.concurrent.ConcurrentSkipListMap"
+},
+{
+ "name":"javax.management.ObjectName",
+ "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"org.apace.dubbo.graalvm.demo.DemoService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.common.config.Environment",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfigurationFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.config.configcenter.nop.NopDynamicConfigurationFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.extension.factory.AdaptiveExtensionFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.extension.factory.SpiExtensionFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.infra.support.EnvironmentAdapter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.jcl.JclLoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.jdk.JdkLoggerAdapter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.log4j.Log4jLoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.log4j2.Log4j2LoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.serialize.hessian2.Hessian2Serialization",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.serialize.hessian2.dubbo.DefaultHessian2FactoryInitializer",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.serialize.hessian2.dubbo.WhitelistHessian2FactoryInitializer",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.ThreadPool$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.manager.DefaultExecutorRepository",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.cached.CachedThreadPool",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.eager.EagerThreadPool",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.fixed.FixedThreadPool",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.limited.LimitedThreadPool",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.config.AbstractConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractInterfaceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractMethodConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractReferenceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractServiceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ApplicationConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ConfigCenterConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ConsumerConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.MetadataReportConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.MetricsConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ModuleConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.MonitorConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ProviderConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ReferenceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ReferenceConfigBase",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.RegistryConfig",
+ "allPublicMethods":true,
+ "fields":[
+ {"name":"accepts"},
+ {"name":"address"},
+ {"name":"check"},
+ {"name":"client"},
+ {"name":"cluster"},
+ {"name":"dynamic"},
+ {"name":"extraKeys"},
+ {"name":"file"},
+ {"name":"group"},
+ {"name":"password"},
+ {"name":"port"},
+ {"name":"preferred"},
+ {"name":"protocol"},
+ {"name":"register"},
+ {"name":"server"},
+ {"name":"session"},
+ {"name":"simplified"},
+ {"name":"subscribe"},
+ {"name":"timeout"},
+ {"name":"transporter"},
+ {"name":"useAsConfigCenter"},
+ {"name":"useAsMetadataCenter"},
+ {"name":"username"},
+ {"name":"version"},
+ {"name":"wait"},
+ {"name":"weight"},
+ {"name":"zone"}
+ ]
+},
+{
+ "name":"org.apache.dubbo.config.SslConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.context.ConfigManager",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.config.event.listener.LoggingEventListener",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.event.DirectEventDispatcher",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.event.GenericEventListener",
+ "methods":[{"name":"onEvent","parameterTypes":["org.apache.dubbo.event.Event"] }]
+},
+{
+ "name":"org.apache.dubbo.event.ParallelEventDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.monitor.MetricsService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.monitor.MonitorService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.monitor.support.MetricsServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.monitor.support.MonitorFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.monitor.support.MonitorServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.RegistryFactory$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.RegistryFactoryWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.registry.RegistryFactory"] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.DefaultServiceDiscoveryFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.ServiceDiscoveryRegistryFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.event.listener.LoggingEventListener",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.metadata.MetadataServiceNameMapping",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.migration.DefaultMigrationAddressComparator",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.migration.MigrationRuleListener",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.integration.RegistryProtocol",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.multicast.MulticastRegistryFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.zookeeper.ZookeeperRegistryFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscoveryFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.Dispatcher$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.Transporter$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.exchange.codec.ExchangeCodec",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.exchange.support.header.HeaderExchanger",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.telnet.codec.TelnetCodec",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.codec.TransportCodec",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.all.AllDispatcher",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.all2.AllDispatcher2",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyClient$1"
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyClientHandler",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }
+ ]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalDecoder"
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalEncoder"
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyTransporter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.Protocol$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.ProxyFactory$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.Cluster$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.ConfiguratorFactory$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.RouterFactory$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.configurator.absent.AbsentConfiguratorFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.configurator.override.OverrideConfiguratorFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.governance.DefaultGovernanceRuleRepositoryImpl",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.interceptor.ConsumerContextClusterInterceptor",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.interceptor.ZoneAwareClusterInterceptor",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.loadbalance.RandomLoadBalance",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.loadbalance.ShortestResponseLoadBalance",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.router.address.AddressRouterFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.router.condition.ConditionRouterFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.router.condition.config.AppRouterFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.router.condition.config.ServiceRouterFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.router.file.FileRouterFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.router.mock.MockRouterFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.router.tag.TagRouterFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.AvailableCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.BroadcastCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.BroadcastCluster2",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.FailbackCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.FailfastCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.FailoverCluster",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.FailsafeCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.ForkingCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.MergeableCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.merger.DefaultProviderURLMergeProcessor",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.registry.ZoneAwareCluster",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.rpc.cluster.Cluster"] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.AccessLogFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ActiveLimitFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ClassLoaderFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.CompatibleFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ConsumerContextFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ContextFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.DeprecatedFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.EchoFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ExceptionFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ExecuteLimitFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.GenericFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.GenericImplFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.TimeoutFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.TokenFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.TpsLimitFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.listener.DeprecatedInvokerListener",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.model.ServiceRepository",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.rpc.Protocol"] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.rpc.Protocol"] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.filter.FutureFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.proxy.javassist.JavassistProxyFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.proxy.jdk.JdkProxyFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.proxy.wrapper.StubProxyFactoryWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.rpc.ProxyFactory"] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.service.Destroyable",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.rpc.service.EchoService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.rpc.service.EchoServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.service.GenericService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.rpc.service.GenericServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.support.MockProtocol",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.log4j.Category"
+},
+{
+ "name":"org.apache.log4j.CategoryKey"
+},
+{
+ "name":"org.apache.log4j.Logger"
+},
+{
+ "name":"org.apache.log4j.helpers.Loader"
+},
+{
+ "name":"org.apache.zookeeper.ClientCnxnSocketNIO",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"sun.misc.Cleaner",
+ "methods":[{"name":"clean","parameterTypes":[] }]
+},
+{
+ "name":"sun.misc.Unsafe",
+ "fields":[{"name":"theUnsafe"}],
+ "methods":[
+ {"name":"copyMemory","parameterTypes":["java.lang.Object","long","java.lang.Object","long","long"] },
+ {"name":"getAndAddLong","parameterTypes":["java.lang.Object","long","long"] },
+ {"name":"getAndSetObject","parameterTypes":["java.lang.Object","long","java.lang.Object"] }
+ ]
+},
+{
+ "name":"sun.misc.VM",
+ "methods":[{"name":"maxDirectMemory","parameterTypes":[] }]
+},
+{
+ "name":"sun.nio.ch.SelectorImpl",
+ "fields":[
+ {"name":"publicSelectedKeys"},
+ {"name":"selectedKeys"}
+ ]
+},
+{
+ "name":"sun.security.provider.ConfigFile",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+}
+]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/resource-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..c1245cc
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,47 @@
+{
+ "resources":{
+ "includes":[
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.FrameworkExt\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.infra.InfraAdapter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.logger.LoggerAdapter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.Serialization\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.hessian2.dubbo.Hessian2FactoryInitializer\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.ThreadPool\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.manager.ExecutorRepository\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.event.EventListener\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.client.migration.MigrationAddressComparator\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Codec2\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Dispatcher\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Transporter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.exchange.Exchanger\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Filter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.InvokerListener\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.ProxyFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.Cluster\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ConfiguratorFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.LoadBalance\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ProviderURLMergeProcessor\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.RouterFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.governance.GovernanceRuleRepository\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector\\E"},
+ {"pattern":"\\QMETA-INF/services/org.apache.dubbo.common.extension.LoadingStrategy\\E"},
+ {"pattern":"\\Qlog4j.properties\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/common/Version.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/remoting/RemotingException.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/remoting/Transporters.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/remoting/exchange/Exchangers.class\\E"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ]},
+ "bundles":[]
+}
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/serialization-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-consumer/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,2 @@
+[
+]
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
new file mode 100644
index 0000000..f1e2eec
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>dubbo-demo-native-interface</artifactId>
+
+
+</project>
\ No newline at end of file
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/src/main/java/org/apace/dubbo/graalvm/demo/DemoService.java b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/src/main/java/org/apace/dubbo/graalvm/demo/DemoService.java
new file mode 100644
index 0000000..1f53e9c
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-interface/src/main/java/org/apace/dubbo/graalvm/demo/DemoService.java
@@ -0,0 +1,23 @@
+/*
+ * 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.apace.dubbo.graalvm.demo;
+
+public interface DemoService {
+
+ String sayHello(String name);
+
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..96ae2dd
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/pom.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>dubbo-demo-native-provider</artifactId>
+
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-demo-native-interface</artifactId>
+ <version>${project.parent.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-config-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-registry-multicast</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-registry-zookeeper</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-rpc-dubbo</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-remoting-netty4</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-serialization-hessian2</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-graalvm</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ </dependency>
+
+ </dependencies>
+
+
+ <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
new file mode 100644
index 0000000..5346ea1
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/Application.java
@@ -0,0 +1,77 @@
+/*
+ * 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.demo.graalvm.provider;
+
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.ServiceConfig;
+import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+
+import org.apace.dubbo.graalvm.demo.DemoService;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+
+public class Application {
+
+ public static void main(String[] args) throws Exception {
+ System.setProperty("dubbo.application.logger", "jdk");
+ if (isClassic(args)) {
+ startWithExport();
+ } else {
+ startWithBootstrap();
+ }
+ }
+
+ private static boolean isClassic(String[] args) {
+ return args.length > 0 && "classic".equalsIgnoreCase(args[0]);
+ }
+
+ private static void startWithBootstrap() {
+ ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>();
+ service.setInterface(DemoService.class);
+ service.setRef(new DemoServiceImpl());
+
+ DubboBootstrap bootstrap = DubboBootstrap.getInstance();
+
+ ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-demo-api-provider");
+ applicationConfig.setQosEnable(false);
+ applicationConfig.setCompiler("jdk");
+ Map<String,String> m = new HashMap<>(1);
+ m.put("proxy","jdk");
+ applicationConfig.setParameters(m);
+
+ bootstrap.application(applicationConfig)
+ .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
+ .service(service)
+ .start()
+ .await();
+ }
+
+ private static void startWithExport() throws InterruptedException {
+ ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>();
+ service.setInterface(DemoService.class);
+ service.setRef(new DemoServiceImpl());
+ service.setApplication(new ApplicationConfig("dubbo-demo-api-provider"));
+ service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
+ service.export();
+
+ System.out.println("dubbo service started");
+ new CountDownLatch(1).await();
+ }
+}
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
new file mode 100644
index 0000000..b900308
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/java/org/apache/dubbo/demo/graalvm/provider/DemoServiceImpl.java
@@ -0,0 +1,33 @@
+/*
+ * 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.demo.graalvm.provider;
+
+import org.apache.dubbo.rpc.RpcContext;
+
+import org.apace.dubbo.graalvm.demo.DemoService;
+
+
+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();
+ }
+
+
+}
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/jni-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/proxy-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/reflect-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000..a73b30f
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,981 @@
+[
+{
+ "name":"com.alibaba.fastjson.serializer.ASMSerializer_1_ServiceDefinition",
+ "methods":[{"name":"<init>","parameterTypes":["com.alibaba.fastjson.serializer.SerializeBeanInfo"] }]
+},
+{
+ "name":"com.alibaba.fastjson.serializer.ASMSerializer_2_MethodDefinition",
+ "methods":[{"name":"<init>","parameterTypes":["com.alibaba.fastjson.serializer.SerializeBeanInfo"] }]
+},
+{
+ "name":"com.alibaba.fastjson.serializer.ASMSerializer_3_TypeDefinition",
+ "methods":[{"name":"<init>","parameterTypes":["com.alibaba.fastjson.serializer.SerializeBeanInfo"] }]
+},
+{
+ "name":"com.intellij.rt.execution.application.AppMainV2$Agent",
+ "methods":[{"name":"premain","parameterTypes":["java.lang.String","java.lang.instrument.Instrumentation"] }]
+},
+{
+ "name":"io.netty.bootstrap.ServerBootstrap$1"
+},
+{
+ "name":"io.netty.bootstrap.ServerBootstrap$ServerBootstrapAcceptor",
+ "methods":[
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] }
+ ]
+},
+{
+ "name":"io.netty.buffer.AbstractByteBufAllocator",
+ "allDeclaredMethods":true
+},
+{
+ "name":"io.netty.buffer.AbstractReferenceCountedByteBuf",
+ "fields":[{"name":"refCnt", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.channel.ChannelDuplexHandler",
+ "methods":[
+ {"name":"bind","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"close","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"connect","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"deregister","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"disconnect","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"flush","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"read","parameterTypes":["io.netty.channel.ChannelHandlerContext"] }
+ ]
+},
+{
+ "name":"io.netty.channel.ChannelHandlerAdapter",
+ "methods":[{"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] }]
+},
+{
+ "name":"io.netty.channel.ChannelInboundHandlerAdapter",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelUnregistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelWritabilityChanged","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }
+ ]
+},
+{
+ "name":"io.netty.channel.ChannelInitializer",
+ "methods":[
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] }
+ ]
+},
+{
+ "name":"io.netty.channel.ChannelOutboundHandlerAdapter",
+ "methods":[
+ {"name":"bind","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"close","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"connect","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"deregister","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"disconnect","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"flush","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"read","parameterTypes":["io.netty.channel.ChannelHandlerContext"] }
+ ]
+},
+{
+ "name":"io.netty.channel.DefaultChannelPipeline$HeadContext",
+ "methods":[
+ {"name":"bind","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelUnregistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelWritabilityChanged","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"close","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"connect","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.net.SocketAddress","java.net.SocketAddress","io.netty.channel.ChannelPromise"] },
+ {"name":"deregister","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"disconnect","parameterTypes":["io.netty.channel.ChannelHandlerContext","io.netty.channel.ChannelPromise"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"flush","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"read","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }
+ ]
+},
+{
+ "name":"io.netty.channel.DefaultChannelPipeline$TailContext",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelUnregistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelWritabilityChanged","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }
+ ]
+},
+{
+ "name":"io.netty.channel.socket.nio.NioServerSocketChannel",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"io.netty.handler.codec.ByteToMessageDecoder",
+ "methods":[
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }
+ ]
+},
+{
+ "name":"io.netty.handler.codec.MessageToByteEncoder",
+ "methods":[{"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }]
+},
+{
+ "name":"io.netty.handler.timeout.IdleStateHandler",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"channelReadComplete","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRegistered","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }
+ ]
+},
+{
+ "name":"io.netty.util.ReferenceCountUtil",
+ "allDeclaredMethods":true
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueColdProducerFields",
+ "fields":[{"name":"producerLimit", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueConsumerFields",
+ "fields":[{"name":"consumerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueProducerFields",
+ "fields":[{"name":"producerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueConsumerIndexField",
+ "fields":[{"name":"consumerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerIndexField",
+ "fields":[{"name":"producerIndex", "allowUnsafeAccess":true}]
+},
+{
+ "name":"io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerLimitField",
+ "fields":[{"name":"producerLimit", "allowUnsafeAccess":true}]
+},
+{
+ "name":"java.beans.Transient"
+},
+{
+ "name":"java.io.File",
+ "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"java.io.Serializable",
+ "allPublicMethods":true
+},
+{
+ "name":"java.lang.AutoCloseable"
+},
+{
+ "name":"java.lang.ClassLoader",
+ "methods":[{"name":"defineClass","parameterTypes":["java.lang.String","byte[]","int","int","java.security.ProtectionDomain"] }]
+},
+{
+ "name":"java.lang.Number",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true
+},
+{
+ "name":"java.lang.Object",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true
+},
+{
+ "name":"java.lang.StackTraceElement",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+},
+{
+ "name":"java.lang.StringBuilder"
+},
+{
+ "name":"java.lang.Thread",
+ "methods":[{"name":"getContextClassLoader","parameterTypes":[] }]
+},
+{
+ "name":"java.lang.Throwable",
+ "fields":[{"name":"detailMessage"}]
+},
+{
+ "name":"java.lang.invoke.CallSite"
+},
+{
+ "name":"java.lang.management.ManagementFactory",
+ "methods":[{"name":"getRuntimeMXBean","parameterTypes":[] }]
+},
+{
+ "name":"java.lang.management.RuntimeMXBean",
+ "methods":[{"name":"getName","parameterTypes":[] }]
+},
+{
+ "name":"java.math.BigDecimal",
+ "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"java.math.BigInteger",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+},
+{
+ "name":"java.nio.Bits",
+ "methods":[{"name":"unaligned","parameterTypes":[] }]
+},
+{
+ "name":"java.nio.Buffer",
+ "fields":[{"name":"address", "allowUnsafeAccess":true}]
+},
+{
+ "name":"java.nio.DirectByteBuffer",
+ "fields":[{"name":"cleaner", "allowUnsafeAccess":true}],
+ "methods":[{"name":"<init>","parameterTypes":["long","int"] }]
+},
+{
+ "name":"java.nio.file.Path"
+},
+{
+ "name":"java.sql.Clob"
+},
+{
+ "name":"java.sql.Date",
+ "methods":[{"name":"<init>","parameterTypes":["long"] }]
+},
+{
+ "name":"java.sql.Time",
+ "methods":[{"name":"<init>","parameterTypes":["long"] }]
+},
+{
+ "name":"java.sql.Timestamp",
+ "methods":[{"name":"<init>","parameterTypes":["long"] }]
+},
+{
+ "name":"java.time.Duration"
+},
+{
+ "name":"java.time.Instant"
+},
+{
+ "name":"java.time.LocalDate"
+},
+{
+ "name":"java.time.LocalDateTime"
+},
+{
+ "name":"java.time.LocalTime"
+},
+{
+ "name":"java.time.MonthDay"
+},
+{
+ "name":"java.time.OffsetDateTime"
+},
+{
+ "name":"java.time.OffsetTime"
+},
+{
+ "name":"java.time.Period"
+},
+{
+ "name":"java.time.Year"
+},
+{
+ "name":"java.time.YearMonth"
+},
+{
+ "name":"java.time.ZoneId"
+},
+{
+ "name":"java.time.ZoneOffset"
+},
+{
+ "name":"java.time.ZonedDateTime"
+},
+{
+ "name":"java.util.AbstractMap",
+ "allDeclaredMethods":true
+},
+{
+ "name":"java.util.HashMap",
+ "allDeclaredMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"java.util.Map",
+ "allPublicConstructors":true
+},
+{
+ "name":"java.util.function.Function"
+},
+{
+ "name":"java.util.zip.DeflaterInputStream"
+},
+{
+ "name":"javax.management.ObjectName",
+ "methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"org.apace.dubbo.graalvm.demo.DemoService",
+ "allPublicFields":true,
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.common.bytecode.Wrapper0",
+ "fields":[
+ {"name":"dmns"},
+ {"name":"mns"},
+ {"name":"mts0"},
+ {"name":"pns"},
+ {"name":"pts"}
+ ],
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.config.Environment",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfigurationFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.config.configcenter.nop.NopDynamicConfigurationFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.extension.factory.AdaptiveExtensionFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.extension.factory.SpiExtensionFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.infra.support.EnvironmentAdapter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.jcl.JclLoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.jdk.JdkLoggerAdapter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.log4j.Log4jLoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.log4j2.Log4j2LoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.serialize.hessian2.Hessian2Serialization",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.serialize.hessian2.dubbo.DefaultHessian2FactoryInitializer",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.serialize.hessian2.dubbo.WhitelistHessian2FactoryInitializer",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.ThreadPool$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.manager.DefaultExecutorRepository",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.cached.CachedThreadPool",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.eager.EagerThreadPool",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.fixed.FixedThreadPool",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.common.threadpool.support.limited.LimitedThreadPool",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.config.AbstractConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractInterfaceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractMethodConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractReferenceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.AbstractServiceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ApplicationConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ConfigCenterConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ConsumerConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.MetadataReportConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.MetricsConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ModuleConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.MonitorConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ProtocolConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ProviderConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.RegistryConfig",
+ "allPublicMethods":true,
+ "fields":[
+ {"name":"accepts"},
+ {"name":"address"},
+ {"name":"check"},
+ {"name":"client"},
+ {"name":"cluster"},
+ {"name":"dynamic"},
+ {"name":"extraKeys"},
+ {"name":"file"},
+ {"name":"group"},
+ {"name":"password"},
+ {"name":"port"},
+ {"name":"preferred"},
+ {"name":"protocol"},
+ {"name":"register"},
+ {"name":"server"},
+ {"name":"session"},
+ {"name":"simplified"},
+ {"name":"subscribe"},
+ {"name":"timeout"},
+ {"name":"transporter"},
+ {"name":"useAsConfigCenter"},
+ {"name":"useAsMetadataCenter"},
+ {"name":"username"},
+ {"name":"version"},
+ {"name":"wait"},
+ {"name":"weight"},
+ {"name":"zone"}
+ ]
+},
+{
+ "name":"org.apache.dubbo.config.ServiceConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.ServiceConfigBase",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.SslConfig",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.config.context.ConfigManager",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.config.event.listener.LoggingEventListener",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.demo.graalvm.provider.DemoServiceImpl",
+ "methods":[{"name":"sayHello","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"org.apache.dubbo.event.DirectEventDispatcher",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.event.GenericEventListener",
+ "methods":[{"name":"onEvent","parameterTypes":["org.apache.dubbo.event.Event"] }]
+},
+{
+ "name":"org.apache.dubbo.event.ParallelEventDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.metadata.definition.builder.EnumTypeBuilder",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.metadata.definition.builder.MapTypeBuilder",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.metadata.definition.model.MethodDefinition",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.metadata.definition.model.ServiceDefinition",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.metadata.definition.model.TypeDefinition",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.monitor.MetricsService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.monitor.MonitorService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.monitor.support.MetricsServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.monitor.support.MonitorFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.monitor.support.MonitorServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.RegistryFactory$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.RegistryFactoryWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.registry.RegistryFactory"] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.ServiceDiscoveryRegistryFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.event.listener.LoggingEventListener",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.client.migration.MigrationRuleListener",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.integration.RegistryProtocol",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.multicast.MulticastRegistryFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.registry.zookeeper.ZookeeperRegistryFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.Dispatcher$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.Transporter$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.exchange.codec.ExchangeCodec",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.exchange.support.header.HeaderExchanger",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.telnet.codec.TelnetCodec",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.codec.TransportCodec",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.all.AllDispatcher",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.all2.AllDispatcher2",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalDecoder"
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalEncoder"
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyServer$1"
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyServerHandler",
+ "methods":[
+ {"name":"channelActive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelInactive","parameterTypes":["io.netty.channel.ChannelHandlerContext"] },
+ {"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] },
+ {"name":"userEventTriggered","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] },
+ {"name":"write","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object","io.netty.channel.ChannelPromise"] }
+ ]
+},
+{
+ "name":"org.apache.dubbo.remoting.transport.netty4.NettyTransporter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.Protocol$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.ProxyFactory$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.ConfiguratorFactory$Adaptive",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.configurator.absent.AbsentConfiguratorFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.configurator.override.OverrideConfiguratorFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.cluster.governance.DefaultGovernanceRuleRepositoryImpl",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.AccessLogFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ActiveLimitFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ClassLoaderFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.CompatibleFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ConsumerContextFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ContextFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.DeprecatedFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.EchoFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ExceptionFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.ExecuteLimitFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.GenericFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.GenericImplFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.TimeoutFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.TokenFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.filter.TpsLimitFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.model.ServiceRepository",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.rpc.Protocol"] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.rpc.Protocol"] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.filter.FutureFilter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.proxy.javassist.JavassistProxyFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.proxy.jdk.JdkProxyFactory",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.proxy.wrapper.StubProxyFactoryWrapper",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":["org.apache.dubbo.rpc.ProxyFactory"] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.service.EchoService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.rpc.service.EchoServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.service.GenericService",
+ "allPublicMethods":true
+},
+{
+ "name":"org.apache.dubbo.rpc.service.GenericServiceDetector",
+ "allPublicMethods":true,
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.dubbo.rpc.support.MockProtocol",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.log4j.Category"
+},
+{
+ "name":"org.apache.log4j.CategoryKey"
+},
+{
+ "name":"org.apache.log4j.Logger"
+},
+{
+ "name":"org.apache.log4j.helpers.Loader"
+},
+{
+ "name":"org.apache.zookeeper.ClientCnxnSocketNIO",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"sun.misc.Cleaner",
+ "methods":[{"name":"clean","parameterTypes":[] }]
+},
+{
+ "name":"sun.misc.Unsafe",
+ "allDeclaredMethods":true,
+ "fields":[{"name":"theUnsafe"}],
+ "methods":[
+ {"name":"getAndAddLong","parameterTypes":["java.lang.Object","long","long"] },
+ {"name":"getAndSetObject","parameterTypes":["java.lang.Object","long","java.lang.Object"] }
+ ]
+},
+{
+ "name":"sun.misc.VM",
+ "methods":[{"name":"maxDirectMemory","parameterTypes":[] }]
+},
+{
+ "name":"sun.nio.ch.SelectorImpl",
+ "fields":[
+ {"name":"publicSelectedKeys"},
+ {"name":"selectedKeys"}
+ ]
+},
+{
+ "name":"sun.security.provider.ConfigFile",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+}
+]
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/resource-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..78ace10
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,52 @@
+{
+ "resources":{
+ "includes":[
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.context.FrameworkExt\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.infra.InfraAdapter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.logger.LoggerAdapter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.Serialization\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.serialize.hessian2.dubbo.Hessian2FactoryInitializer\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.ThreadPool\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.common.threadpool.manager.ExecutorRepository\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.event.EventListener\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Codec2\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Dispatcher\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.Transporter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.exchange.Exchanger\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Filter\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.ProxyFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.ConfiguratorFactory\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.governance.GovernanceRuleRepository\\E"},
+ {"pattern":"\\QMETA-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector\\E"},
+ {"pattern":"\\QMETA-INF/services/org.apache.dubbo.common.extension.LoadingStrategy\\E"},
+ {"pattern":"\\Qjava/io/Serializable.class\\E"},
+ {"pattern":"\\Qjava/lang/Class.class\\E"},
+ {"pattern":"\\Qjava/lang/IllegalArgumentException.class\\E"},
+ {"pattern":"\\Qjava/lang/Object.class\\E"},
+ {"pattern":"\\Qjava/lang/String.class\\E"},
+ {"pattern":"\\Qjava/lang/StringBuffer.class\\E"},
+ {"pattern":"\\Qjava/lang/Throwable.class\\E"},
+ {"pattern":"\\Qjava/lang/reflect/InvocationTargetException.class\\E"},
+ {"pattern":"\\Qjava/util/Map.class\\E"},
+ {"pattern":"\\Qorg/apace/dubbo/graalvm/demo/DemoService.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/common/Version.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/common/bytecode/ClassGenerator$DC.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/common/bytecode/NoSuchMethodException.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/common/bytecode/NoSuchPropertyException.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/common/bytecode/Wrapper.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/remoting/RemotingException.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/remoting/Transporters.class\\E"},
+ {"pattern":"\\Qorg/apache/dubbo/remoting/exchange/Exchangers.class\\E"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ]},
+ "bundles":[]
+}
diff --git a/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/serialization-config.json b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/dubbo-demo-native-provider/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/dubbo-demo/dubbo-demo-native/pom.xml b/dubbo-demo/dubbo-demo-native/pom.xml
new file mode 100644
index 0000000..844dfa0
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-native/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>dubbo-demo-native</artifactId>
+ <packaging>pom</packaging>
+ <modules>
+ <module>dubbo-demo-native-consumer</module>
+ <module>dubbo-demo-native-provider</module>
+ <module>dubbo-demo-native-interface</module>
+ </modules>
+
+
+</project>
\ No newline at end of file
diff --git a/dubbo-demo/pom.xml b/dubbo-demo/pom.xml
index e636a23..69052b6 100644
--- a/dubbo-demo/pom.xml
+++ b/dubbo-demo/pom.xml
@@ -35,6 +35,7 @@
<module>dubbo-demo-xml</module>
<module>dubbo-demo-annotation</module>
<module>dubbo-demo-api</module>
+ <module>dubbo-demo-native</module>
</modules>
<dependencyManagement>
diff --git a/dubbo-graalvm/pom.xml b/dubbo-graalvm/pom.xml
new file mode 100644
index 0000000..91ba85d
--- /dev/null
+++ b/dubbo-graalvm/pom.xml
@@ -0,0 +1,64 @@
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-parent</artifactId>
+ <version>${revision}</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>dubbo-graalvm</artifactId>
+ <packaging>jar</packaging>
+ <name>${project.artifactId}</name>
+
+ <properties>
+ <skip_maven_deploy>false</skip_maven_deploy>
+ </properties>
+
+
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-common</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-metadata-api</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-monitor-api</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-registry-api</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-remoting-zookeeper</artifactId>
+ <version>2.7.12-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
+ </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java
new file mode 100644
index 0000000..4ac2f44
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool$Adaptive.java
@@ -0,0 +1,15 @@
+package org.apache.dubbo.common.threadpool;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class ThreadPool$Adaptive implements org.apache.dubbo.common.threadpool.ThreadPool {
+ public java.util.concurrent.Executor getExecutor(org.apache.dubbo.common.URL arg0) {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = url.getParameter("threadpool", "fixed");
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.common.threadpool.ThreadPool) name from url (" + url.toString() + ") use keys([threadpool])");
+ org.apache.dubbo.common.threadpool.ThreadPool extension = (org.apache.dubbo.common.threadpool.ThreadPool) ExtensionLoader.getExtensionLoader(org.apache.dubbo.common.threadpool.ThreadPool.class).getExtension(extName);
+ return extension.getExecutor(arg0);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/metadata/report/MetadataReportFactory$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/metadata/report/MetadataReportFactory$Adaptive.java
new file mode 100644
index 0000000..94a8506
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/metadata/report/MetadataReportFactory$Adaptive.java
@@ -0,0 +1,15 @@
+package org.apache.dubbo.metadata.report;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class MetadataReportFactory$Adaptive implements org.apache.dubbo.metadata.report.MetadataReportFactory {
+ public org.apache.dubbo.metadata.report.MetadataReport getMetadataReport(org.apache.dubbo.common.URL arg0) {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = (url.getProtocol() == null ? "redis" : url.getProtocol());
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.metadata.report.MetadataReportFactory) name from url (" + url.toString() + ") use keys([protocol])");
+ org.apache.dubbo.metadata.report.MetadataReportFactory extension = (org.apache.dubbo.metadata.report.MetadataReportFactory) ExtensionLoader.getExtensionLoader(org.apache.dubbo.metadata.report.MetadataReportFactory.class).getExtension(extName);
+ return extension.getMetadataReport(arg0);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/monitor/MonitorFactory$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/monitor/MonitorFactory$Adaptive.java
new file mode 100644
index 0000000..6506e3a
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/monitor/MonitorFactory$Adaptive.java
@@ -0,0 +1,12 @@
+package org.apache.dubbo.monitor;
+import org.apache.dubbo.common.extension.ExtensionLoader;
+public class MonitorFactory$Adaptive implements org.apache.dubbo.monitor.MonitorFactory {
+ public org.apache.dubbo.monitor.Monitor getMonitor(org.apache.dubbo.common.URL arg0) {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() );
+ if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.monitor.MonitorFactory) name from url (" + url.toString() + ") use keys([protocol])");
+ org.apache.dubbo.monitor.MonitorFactory extension = (org.apache.dubbo.monitor.MonitorFactory)ExtensionLoader.getExtensionLoader(org.apache.dubbo.monitor.MonitorFactory.class).getExtension(extName);
+ return extension.getMonitor(arg0);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/registry/RegistryFactory$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/registry/RegistryFactory$Adaptive.java
new file mode 100644
index 0000000..cccf8f5
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/registry/RegistryFactory$Adaptive.java
@@ -0,0 +1,12 @@
+package org.apache.dubbo.registry;
+import org.apache.dubbo.common.extension.ExtensionLoader;
+public class RegistryFactory$Adaptive implements org.apache.dubbo.registry.RegistryFactory {
+ public org.apache.dubbo.registry.Registry getRegistry(org.apache.dubbo.common.URL arg0) {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = ( url.getProtocol() == null ? "dubbo" : url.getProtocol() );
+ if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.registry.RegistryFactory) name from url (" + url.toString() + ") use keys([protocol])");
+ org.apache.dubbo.registry.RegistryFactory extension = (org.apache.dubbo.registry.RegistryFactory)ExtensionLoader.getExtensionLoader(org.apache.dubbo.registry.RegistryFactory.class).getExtension(extName);
+ return extension.getRegistry(arg0);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/Dispatcher$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/Dispatcher$Adaptive.java
new file mode 100644
index 0000000..34d028e
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/Dispatcher$Adaptive.java
@@ -0,0 +1,12 @@
+package org.apache.dubbo.remoting;
+import org.apache.dubbo.common.extension.ExtensionLoader;
+public class Dispatcher$Adaptive implements org.apache.dubbo.remoting.Dispatcher {
+ public org.apache.dubbo.remoting.ChannelHandler dispatch(org.apache.dubbo.remoting.ChannelHandler arg0, org.apache.dubbo.common.URL arg1) {
+ if (arg1 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg1;
+ String extName = url.getParameter("dispatcher", url.getParameter("dispather", url.getParameter("channel.handler", "all")));
+ if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Dispatcher) name from url (" + url.toString() + ") use keys([dispatcher, dispather, channel.handler])");
+ org.apache.dubbo.remoting.Dispatcher extension = (org.apache.dubbo.remoting.Dispatcher)ExtensionLoader.getExtensionLoader(org.apache.dubbo.remoting.Dispatcher.class).getExtension(extName);
+ return extension.dispatch(arg0, arg1);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/Transporter$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/Transporter$Adaptive.java
new file mode 100644
index 0000000..d22e2ff
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/Transporter$Adaptive.java
@@ -0,0 +1,25 @@
+package org.apache.dubbo.remoting;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class Transporter$Adaptive implements org.apache.dubbo.remoting.Transporter {
+ public org.apache.dubbo.remoting.RemotingServer bind(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.ChannelHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = url.getParameter("server", url.getParameter("transporter", "netty"));
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Transporter) name from url (" + url.toString() + ") use keys([server, transporter])");
+ org.apache.dubbo.remoting.Transporter extension = (org.apache.dubbo.remoting.Transporter) ExtensionLoader.getExtensionLoader(org.apache.dubbo.remoting.Transporter.class).getExtension(extName);
+ return extension.bind(arg0, arg1);
+ }
+
+ public org.apache.dubbo.remoting.Client connect(org.apache.dubbo.common.URL arg0, org.apache.dubbo.remoting.ChannelHandler arg1) throws org.apache.dubbo.remoting.RemotingException {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = url.getParameter("client", url.getParameter("transporter", "netty"));
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.Transporter) name from url (" + url.toString() + ") use keys([client, transporter])");
+ org.apache.dubbo.remoting.Transporter extension = (org.apache.dubbo.remoting.Transporter) ExtensionLoader.getExtensionLoader(org.apache.dubbo.remoting.Transporter.class).getExtension(extName);
+ return extension.connect(arg0, arg1);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/zookeeper/ZookeeperTransporter$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/zookeeper/ZookeeperTransporter$Adaptive.java
new file mode 100644
index 0000000..8d20e39
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/remoting/zookeeper/ZookeeperTransporter$Adaptive.java
@@ -0,0 +1,15 @@
+package org.apache.dubbo.remoting.zookeeper;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class ZookeeperTransporter$Adaptive implements org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter {
+ public org.apache.dubbo.remoting.zookeeper.ZookeeperClient connect(org.apache.dubbo.common.URL arg0) {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = url.getParameter("client", url.getParameter("transporter", "curator"));
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter) name from url (" + url.toString() + ") use keys([client, transporter])");
+ org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter extension = (org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter) ExtensionLoader.getExtensionLoader(org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter.class).getExtension(extName);
+ return extension.connect(arg0);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/Protocol$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/Protocol$Adaptive.java
new file mode 100644
index 0000000..f74973d
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/Protocol$Adaptive.java
@@ -0,0 +1,39 @@
+package org.apache.dubbo.rpc;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class Protocol$Adaptive implements org.apache.dubbo.rpc.Protocol {
+ public org.apache.dubbo.rpc.Exporter export(org.apache.dubbo.rpc.Invoker arg0) throws org.apache.dubbo.rpc.RpcException {
+ if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument == null");
+ if (arg0.getUrl() == null)
+ throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument getUrl() == null");
+ org.apache.dubbo.common.URL url = arg0.getUrl();
+ String extName = (url.getProtocol() == null ? "dubbo" : url.getProtocol());
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.Protocol) name from url (" + url.toString() + ") use keys([protocol])");
+ org.apache.dubbo.rpc.Protocol extension = (org.apache.dubbo.rpc.Protocol) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.Protocol.class).getExtension(extName);
+ return extension.export(arg0);
+ }
+
+ public org.apache.dubbo.rpc.Invoker refer(java.lang.Class arg0, org.apache.dubbo.common.URL arg1) throws org.apache.dubbo.rpc.RpcException {
+ if (arg1 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg1;
+ String extName = (url.getProtocol() == null ? "dubbo" : url.getProtocol());
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.Protocol) name from url (" + url.toString() + ") use keys([protocol])");
+ org.apache.dubbo.rpc.Protocol extension = (org.apache.dubbo.rpc.Protocol) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.Protocol.class).getExtension(extName);
+ return extension.refer(arg0, arg1);
+ }
+
+ public java.util.List getServers() {
+ throw new UnsupportedOperationException("The method public default java.util.List org.apache.dubbo.rpc.Protocol.getServers() of interface org.apache.dubbo.rpc.Protocol is not adaptive method!");
+ }
+
+ public void destroy() {
+ throw new UnsupportedOperationException("The method public abstract void org.apache.dubbo.rpc.Protocol.destroy() of interface org.apache.dubbo.rpc.Protocol is not adaptive method!");
+ }
+
+ public int getDefaultPort() {
+ throw new UnsupportedOperationException("The method public abstract int org.apache.dubbo.rpc.Protocol.getDefaultPort() of interface org.apache.dubbo.rpc.Protocol is not adaptive method!");
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/ProxyFactory$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/ProxyFactory$Adaptive.java
new file mode 100644
index 0000000..ab3c3e3
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/ProxyFactory$Adaptive.java
@@ -0,0 +1,39 @@
+package org.apache.dubbo.rpc;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class ProxyFactory$Adaptive implements org.apache.dubbo.rpc.ProxyFactory {
+ public java.lang.Object getProxy(org.apache.dubbo.rpc.Invoker arg0) throws org.apache.dubbo.rpc.RpcException {
+ if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument == null");
+ if (arg0.getUrl() == null)
+ throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument getUrl() == null");
+ org.apache.dubbo.common.URL url = arg0.getUrl();
+ String extName = url.getParameter("proxy", "javassist");
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.ProxyFactory) name from url (" + url.toString() + ") use keys([proxy])");
+ org.apache.dubbo.rpc.ProxyFactory extension = (org.apache.dubbo.rpc.ProxyFactory) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.ProxyFactory.class).getExtension(extName);
+ return extension.getProxy(arg0);
+ }
+
+ public java.lang.Object getProxy(org.apache.dubbo.rpc.Invoker arg0, boolean arg1) throws org.apache.dubbo.rpc.RpcException {
+ if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument == null");
+ if (arg0.getUrl() == null)
+ throw new IllegalArgumentException("org.apache.dubbo.rpc.Invoker argument getUrl() == null");
+ org.apache.dubbo.common.URL url = arg0.getUrl();
+ String extName = url.getParameter("proxy", "javassist");
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.ProxyFactory) name from url (" + url.toString() + ") use keys([proxy])");
+ org.apache.dubbo.rpc.ProxyFactory extension = (org.apache.dubbo.rpc.ProxyFactory) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.ProxyFactory.class).getExtension(extName);
+ return extension.getProxy(arg0, arg1);
+ }
+
+ public org.apache.dubbo.rpc.Invoker getInvoker(java.lang.Object arg0, java.lang.Class arg1, org.apache.dubbo.common.URL arg2) throws org.apache.dubbo.rpc.RpcException {
+ if (arg2 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg2;
+ String extName = url.getParameter("proxy", "javassist");
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.ProxyFactory) name from url (" + url.toString() + ") use keys([proxy])");
+ org.apache.dubbo.rpc.ProxyFactory extension = (org.apache.dubbo.rpc.ProxyFactory) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.ProxyFactory.class).getExtension(extName);
+ return extension.getInvoker(arg0, arg1, arg2);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/Cluster$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/Cluster$Adaptive.java
new file mode 100644
index 0000000..60e3765
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/Cluster$Adaptive.java
@@ -0,0 +1,19 @@
+package org.apache.dubbo.rpc.cluster;
+import org.apache.dubbo.common.extension.ExtensionLoader;
+public class Cluster$Adaptive implements org.apache.dubbo.rpc.cluster.Cluster {
+ public org.apache.dubbo.rpc.cluster.Cluster getCluster(java.lang.String arg0) {
+ throw new UnsupportedOperationException("The method public static org.apache.dubbo.rpc.cluster.Cluster org.apache.dubbo.rpc.cluster.Cluster.getCluster(java.lang.String) of interface org.apache.dubbo.rpc.cluster.Cluster is not adaptive method!");
+ }
+ public org.apache.dubbo.rpc.cluster.Cluster getCluster(java.lang.String arg0, boolean arg1) {
+ throw new UnsupportedOperationException("The method public static org.apache.dubbo.rpc.cluster.Cluster org.apache.dubbo.rpc.cluster.Cluster.getCluster(java.lang.String,boolean) of interface org.apache.dubbo.rpc.cluster.Cluster is not adaptive method!");
+ }
+ public org.apache.dubbo.rpc.Invoker join(org.apache.dubbo.rpc.cluster.Directory arg0) throws org.apache.dubbo.rpc.RpcException {
+ if (arg0 == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.cluster.Directory argument == null");
+ if (arg0.getUrl() == null) throw new IllegalArgumentException("org.apache.dubbo.rpc.cluster.Directory argument getUrl() == null");
+ org.apache.dubbo.common.URL url = arg0.getUrl();
+ String extName = url.getParameter("cluster", "failover");
+ if(extName == null) throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.Cluster) name from url (" + url.toString() + ") use keys([cluster])");
+ org.apache.dubbo.rpc.cluster.Cluster extension = (org.apache.dubbo.rpc.cluster.Cluster)ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.cluster.Cluster.class).getExtension(extName);
+ return extension.join(arg0);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/ConfiguratorFactory$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/ConfiguratorFactory$Adaptive.java
new file mode 100644
index 0000000..6ca6033
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/ConfiguratorFactory$Adaptive.java
@@ -0,0 +1,15 @@
+package org.apache.dubbo.rpc.cluster;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class ConfiguratorFactory$Adaptive implements org.apache.dubbo.rpc.cluster.ConfiguratorFactory {
+ public org.apache.dubbo.rpc.cluster.Configurator getConfigurator(org.apache.dubbo.common.URL arg0) {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = url.getProtocol();
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.ConfiguratorFactory) name from url (" + url.toString() + ") use keys([protocol])");
+ org.apache.dubbo.rpc.cluster.ConfiguratorFactory extension = (org.apache.dubbo.rpc.cluster.ConfiguratorFactory) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.cluster.ConfiguratorFactory.class).getExtension(extName);
+ return extension.getConfigurator(arg0);
+ }
+}
\ No newline at end of file
diff --git a/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/RouterFactory$Adaptive.java b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/RouterFactory$Adaptive.java
new file mode 100644
index 0000000..e72522e
--- /dev/null
+++ b/dubbo-graalvm/src/main/java/org/apache/dubbo/rpc/cluster/RouterFactory$Adaptive.java
@@ -0,0 +1,15 @@
+package org.apache.dubbo.rpc.cluster;
+
+import org.apache.dubbo.common.extension.ExtensionLoader;
+
+public class RouterFactory$Adaptive implements org.apache.dubbo.rpc.cluster.RouterFactory {
+ public org.apache.dubbo.rpc.cluster.Router getRouter(org.apache.dubbo.common.URL arg0) {
+ if (arg0 == null) throw new IllegalArgumentException("url == null");
+ org.apache.dubbo.common.URL url = arg0;
+ String extName = url.getProtocol();
+ if (extName == null)
+ throw new IllegalStateException("Failed to get extension (org.apache.dubbo.rpc.cluster.RouterFactory) name from url (" + url.toString() + ") use keys([protocol])");
+ org.apache.dubbo.rpc.cluster.RouterFactory extension = (org.apache.dubbo.rpc.cluster.RouterFactory) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.cluster.RouterFactory.class).getExtension(extName);
+ return extension.getRouter(arg0);
+ }
+}
\ No newline at end of file
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 6f8d6d5..3f84cf8 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
@@ -31,6 +31,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.support.ProtocolUtils;
import com.alibaba.fastjson.JSON;
+import com.google.gson.Gson;
import java.util.Comparator;
import java.util.Map;
@@ -172,7 +173,7 @@ public class InMemoryWritableMetadataService implements WritableMetadataService
if (StringUtils.isNotEmpty(interfaceName)) {
Class interfaceClass = Class.forName(interfaceName);
ServiceDefinition serviceDefinition = ServiceDefinitionBuilder.build(interfaceClass);
- String data = JSON.toJSONString(serviceDefinition);
+ String data = new Gson().toJson(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 39b0992..3d12608 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,9 @@ 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.HashSet;
-import java.util.Set;
+import java.util.List;
import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
import static org.apache.dubbo.rpc.Constants.INTERFACES;
@@ -47,7 +47,7 @@ public abstract class AbstractProxyFactory implements ProxyFactory {
@Override
public <T> T getProxy(Invoker<T> invoker, boolean generic) throws RpcException {
- Set<Class<?>> interfaces = new HashSet<>();
+ List<Class<?>> interfaces = new ArrayList<>();
String config = invoker.getUrl().getParameter(INTERFACES);
if (config != null && config.length() > 0) {
diff --git a/pom.xml b/pom.xml
index 407b226..3939983 100644
--- a/pom.xml
+++ b/pom.xml
@@ -152,6 +152,7 @@
<module>dubbo-metadata</module>
<module>dubbo-build-tools</module>
<module>dubbo-spring-boot</module>
+ <module>dubbo-graalvm</module>
</modules>
<dependencyManagement>