fix attachments of async sample (#410)
diff --git a/dubbo-samples-async/dubbo-samples-async-original-future/case-versions.conf b/dubbo-samples-async/dubbo-samples-async-original-future/case-versions.conf
index 0e26c8b..d718a9f 100644
--- a/dubbo-samples-async/dubbo-samples-async-original-future/case-versions.conf
+++ b/dubbo-samples-async/dubbo-samples-async-original-future/case-versions.conf
@@ -20,5 +20,5 @@
# Supported component versions of the test case
# Spring app
-dubbo.version=2.7*, 3.*
+dubbo.version=3.*
spring.version=4.*, 5.*
diff --git a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/AsyncConsumer.java b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/AsyncConsumer.java
index 7d8f3c4..82d5d2c 100644
--- a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/AsyncConsumer.java
+++ b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/AsyncConsumer.java
@@ -40,10 +40,9 @@
RpcContext.getContext().setAttachment("consumer-key1", "consumer-value1");
CompletableFuture<String> future = asyncService.sayHello("async call request");
- RpcContext savedServerContext = RpcContext.getServerContext();
CountDownLatch latch = new CountDownLatch(1);
future.whenComplete((v, t) -> {
- System.out.println((String) savedServerContext.getAttachment("server-key1"));
+ System.out.println((String) RpcContext.getServerContext().getAttachment("server-key1"));
if (t != null) {
logger.warn("Exception: ", t);
} else {
diff --git a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/filter/LegacyListenableFilter.java b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/filter/LegacyListenableFilter.java
index 370feb2..f879ebf 100644
--- a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/filter/LegacyListenableFilter.java
+++ b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/filter/LegacyListenableFilter.java
@@ -44,7 +44,7 @@
if (StringUtils.isEmpty(filters)) {
filters = "";
}
- filters += " legacy-block-filter";
+ filters += " legacy-listenable-filter";
context.setAttachment("filters", filters);
return invoker.invoke(invocation);
diff --git a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/impl/AsyncServiceImpl.java b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/impl/AsyncServiceImpl.java
index c3e4395..f810277 100644
--- a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/impl/AsyncServiceImpl.java
+++ b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/async/impl/AsyncServiceImpl.java
@@ -19,7 +19,9 @@
package org.apache.dubbo.samples.async.impl;
+import org.apache.dubbo.rpc.AsyncContext;
import org.apache.dubbo.rpc.RpcContext;
+import org.apache.dubbo.rpc.RpcContextAttachment;
import org.apache.dubbo.samples.async.api.AsyncService;
import org.slf4j.Logger;
@@ -32,16 +34,20 @@
@Override
public CompletableFuture<String> sayHello(String name) {
- RpcContext savedContext = RpcContext.getContext();
- RpcContext savedServerContext = RpcContext.getServerContext();
+ // If attachments and context are going to be used in the new thread, startAsync() and signalContextSwitch() must be called.
+ // Otherwise, it is not necessary to call these two methods.
+ AsyncContext asyncContext = RpcContext.startAsync();
return CompletableFuture.supplyAsync(() -> {
- String received = (String) savedContext.getAttachment("consumer-key1");
+ asyncContext.signalContextSwitch();
+ RpcContextAttachment attachmentFromClient = RpcContext.getServerAttachment();
+ RpcContextAttachment attachmentToClient = RpcContext.getServerContext();
+ String received = (String) attachmentFromClient.getAttachment("consumer-key1");
logger.info("consumer-key1 from attachment: " + received);
- savedServerContext.setAttachment("server-key1", "server-" + received);
+ attachmentToClient.setAttachment("server-key1", "server-" + received);
- received = (String) savedContext.getAttachment("filters");
+ received = (String) attachmentFromClient.getAttachment("filters");
logger.info("filters from attachment: " + received);
- savedServerContext.setAttachment("filters", received);
+ attachmentToClient.setAttachment("filters", received);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {