You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ar...@apache.org on 2023/01/19 12:14:59 UTC

[fineract] branch develop updated: FINERACT-1724: Removed accidental closing of JMS connection upon startup

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

arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 66e4ac619 FINERACT-1724: Removed accidental closing of JMS connection upon startup
66e4ac619 is described below

commit 66e4ac61945542779c5c2136a5fca03b8555964e
Author: Arnold Galovics <ga...@gmail.com>
AuthorDate: Thu Jan 19 12:08:38 2023 +0100

    FINERACT-1724: Removed accidental closing of JMS connection upon startup
---
 .../jms/JMSMultiExternalEventProducer.java         | 29 ++++++++++++++--------
 .../jms/JMSMultiExternalEventProducerTest.java     |  1 -
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducer.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducer.java
index e063e44f4..794c45cc3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducer.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducer.java
@@ -39,6 +39,7 @@ import org.apache.fineract.infrastructure.core.messaging.jms.MessageFactory;
 import org.apache.fineract.infrastructure.core.service.HashingService;
 import org.apache.fineract.infrastructure.event.external.exception.AcknowledgementTimeoutException;
 import org.apache.fineract.infrastructure.event.external.producer.ExternalEventProducer;
+import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -49,7 +50,7 @@ import org.springframework.stereotype.Component;
 @Slf4j
 @RequiredArgsConstructor
 @ConditionalOnProperty(value = "fineract.events.external.producer.jms.enabled", havingValue = "true")
-public class JMSMultiExternalEventProducer implements ExternalEventProducer, InitializingBean {
+public class JMSMultiExternalEventProducer implements ExternalEventProducer, InitializingBean, DisposableBean {
 
     @Qualifier("eventDestination")
     private final Destination destination;
@@ -67,22 +68,30 @@ public class JMSMultiExternalEventProducer implements ExternalEventProducer, Ini
 
     private final List<MessageProducer> producers = new ArrayList<>();
 
+    private Connection connection;
+
     @Override
     public void afterPropertiesSet() throws Exception {
         int producerCount = getProducerCount();
-        try (Connection connection = connectionFactory.createConnection()) {
-            for (int i = 0; i < producerCount; i++) {
-                // It's crucial to create the session within the loop, otherwise the producers won't be handled as
-                // parallel
-                // producers
-                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-                MessageProducer producer = session.createProducer(destination);
-                producers.add(producer);
-            }
+        connection = connectionFactory.createConnection();
+        for (int i = 0; i < producerCount; i++) {
+            // It's crucial to create the session within the loop, otherwise the producers won't be handled as
+            // parallel
+            // producers
+            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            MessageProducer producer = session.createProducer(destination);
+            producers.add(producer);
         }
         log.info("Initialized JMS multi producer for external events with {} parallel producers", producerCount);
     }
 
+    @Override
+    public void destroy() throws Exception {
+        if (connection != null) {
+            connection.close();
+        }
+    }
+
     private int getProducerCount() {
         return fineractProperties.getEvents().getExternal().getProducer().getJms().getProducerCount();
     }
diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducerTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducerTest.java
index 503717ed8..2f28dca2a 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducerTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducerTest.java
@@ -101,7 +101,6 @@ class JMSMultiExternalEventProducerTest {
         verify(session1).createProducer(destination);
         verify(session2).createProducer(destination);
         verify(session3).createProducer(destination);
-        verify(connection).close();
     }
 
     @Test