From 113c65ceaa2541cfdae06adbc39e4d527dfd90ae Mon Sep 17 00:00:00 2001 From: Dekel Pilli Date: Tue, 15 Oct 2019 13:20:21 +1100 Subject: [PATCH 1/2] Adding @PreDestroy annotation to shutdown methods --- .gitignore | 4 ++++ .../com/amazonaws/services/sqs/AmazonSQSRequester.java | 8 +++++--- .../amazonaws/services/sqs/AmazonSQSRequesterClient.java | 5 ++++- .../com/amazonaws/services/sqs/AmazonSQSResponder.java | 3 ++- .../amazonaws/services/sqs/AmazonSQSResponderClient.java | 3 +++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index b83d222..0f43c43 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ /target/ +.idea +.classpath +.project +*.iml diff --git a/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequester.java b/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequester.java index cab29b5..89e97ec 100644 --- a/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequester.java +++ b/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequester.java @@ -1,12 +1,13 @@ package com.amazonaws.services.sqs; +import com.amazonaws.services.sqs.model.Message; +import com.amazonaws.services.sqs.model.SendMessageRequest; + +import javax.annotation.PreDestroy; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import com.amazonaws.services.sqs.AmazonSQS; -import com.amazonaws.services.sqs.model.Message; -import com.amazonaws.services.sqs.model.SendMessageRequest; public interface AmazonSQSRequester { @@ -26,5 +27,6 @@ public Message sendMessageAndGetResponse(SendMessageRequest request, public CompletableFuture sendMessageAndGetResponseAsync(SendMessageRequest request, int timeout, TimeUnit unit); + @PreDestroy public void shutdown(); } diff --git a/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequesterClient.java b/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequesterClient.java index fb88e32..a43d9ea 100644 --- a/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequesterClient.java +++ b/src/main/java/com/amazonaws/services/sqs/AmazonSQSRequesterClient.java @@ -18,6 +18,8 @@ import com.amazonaws.services.sqs.util.SQSMessageConsumer; import com.amazonaws.services.sqs.util.SQSQueueUtils; +import javax.annotation.PreDestroy; + /** * Implementation of the request/response interfaces that creates a single * temporary queue for each response message. @@ -76,7 +78,7 @@ public CompletableFuture sendMessageAndGetResponseAsync(SendMessageRequ sqs.sendMessage(requestWithResponseUrl); CompletableFuture future = new CompletableFuture<>(); - + // TODO-RS: accept an AmazonSQSAsync instead and use its threads instead of our own. // TODO-RS: complete the future exceptionally, for the right set of SQS exceptions SQSMessageConsumer consumer = new ResponseListener(responseQueueUrl, future); @@ -110,6 +112,7 @@ protected void runShutdownHook() { } @Override + @PreDestroy public void shutdown() { responseConsumers.forEach(SQSMessageConsumer::terminate); if (shutdownHook != null) { diff --git a/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponder.java b/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponder.java index fcb4621..4d90e86 100644 --- a/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponder.java +++ b/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponder.java @@ -1,6 +1,6 @@ package com.amazonaws.services.sqs; -import com.amazonaws.services.sqs.AmazonSQS; +import javax.annotation.PreDestroy; public interface AmazonSQSResponder { @@ -21,5 +21,6 @@ public interface AmazonSQSResponder { */ public void sendResponseMessage(MessageContent requestMessage, MessageContent response); + @PreDestroy public void shutdown(); } diff --git a/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponderClient.java b/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponderClient.java index 10cb446..070233e 100644 --- a/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponderClient.java +++ b/src/main/java/com/amazonaws/services/sqs/AmazonSQSResponderClient.java @@ -7,6 +7,8 @@ import com.amazonaws.services.sqs.model.QueueDoesNotExistException; import com.amazonaws.services.sqs.model.SendMessageRequest; +import javax.annotation.PreDestroy; + class AmazonSQSResponderClient implements AmazonSQSResponder { private static final Log LOG = LogFactory.getLog(AmazonSQSResponderClient.class); @@ -49,6 +51,7 @@ public boolean isResponseMessageRequested(MessageContent requestMessage) { } @Override + @PreDestroy public void shutdown() { } } From 7ef7eb9f840c288946fff344a89e03f0e2a938b8 Mon Sep 17 00:00:00 2001 From: Dekel Pilli Date: Sun, 20 Oct 2019 02:07:37 +1100 Subject: [PATCH 2/2] Also adding PreDestroy to the consumer's shutdown method --- .../com/amazonaws/services/sqs/util/SQSMessageConsumer.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/amazonaws/services/sqs/util/SQSMessageConsumer.java b/src/main/java/com/amazonaws/services/sqs/util/SQSMessageConsumer.java index 400adae..ff88cd6 100644 --- a/src/main/java/com/amazonaws/services/sqs/util/SQSMessageConsumer.java +++ b/src/main/java/com/amazonaws/services/sqs/util/SQSMessageConsumer.java @@ -11,6 +11,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; +import javax.annotation.PreDestroy; + import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.model.Message; import com.amazonaws.services.sqs.model.QueueDoesNotExistException; @@ -165,7 +167,8 @@ private void handleMessage(Message message) { protected void accept(Message message) { consumer.accept(message); } - + + @PreDestroy public void shutdown() { if (shuttingDown.compareAndSet(false, true)) { runShutdownHook();