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

gnodet pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new ad5683af2a0e CAMEL-23194: Fix blocked JMS tests in camel-itest (#22061)
ad5683af2a0e is described below

commit ad5683af2a0e5c138eb387dab319567c8a229419
Author: Guillaume Nodet <[email protected]>
AuthorDate: Wed Mar 18 15:04:56 2026 +0100

    CAMEL-23194: Fix blocked JMS tests in camel-itest (#22061)
    
    Stop sharing a singleton JmsComponent across tests. The shared component
    could get stopped/stuck when one test's CamelContext shuts down, blocking
    subsequent tests. Now only the broker and ConnectionFactory are shared,
    while each test gets a fresh JmsComponent instance.
    
    Also add @Timeout(60) to 13 JMS-related test classes that lacked it,
    preventing indefinite hangs on CI.
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 .../itest/customerrelations/CustomerServicesTest.java     |  2 ++
 .../org/apache/camel/itest/greeter/JmsToCxfInOutTest.java |  2 ++
 .../apache/camel/itest/issues/RemoveEndpointsTest.java    |  2 ++
 .../apache/camel/itest/jetty/JettyJmsShutdownTest.java    |  2 ++
 .../camel/itest/jetty/JettyMulticastJmsFileTest.java      |  2 ++
 .../camel/itest/netty/NettyAsyncRequestReplyTest.java     |  2 ++
 .../org/apache/camel/itest/shiro/ShiroOverJmsTest.java    |  2 ++
 .../sql/FromJmsToJdbcIdempotentConsumerToJmsTest.java     |  2 ++
 .../sql/FromJmsToJdbcIdempotentConsumerToJmsXaTest.java   |  2 ++
 .../java/org/apache/camel/itest/tx/JmsToHttpTXTest.java   |  2 ++
 ...ceptionAndNoTransactionErrorHandlerConfiguredTest.java |  2 ++
 .../camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java    |  2 ++
 .../camel/itest/tx/JmsToHttpTXWithRollbackTest.java       |  2 ++
 .../camel/itest/utils/extensions/JmsServiceExtension.java | 15 +++++++++------
 14 files changed, 35 insertions(+), 6 deletions(-)

diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesTest.java
index accc49f7a1ca..5c360461b4bb 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesTest.java
@@ -28,12 +28,14 @@ import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
+@Timeout(60)
 public class CustomerServicesTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
index 2e088b195182..ac4fc23771c9 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
@@ -22,6 +22,7 @@ import 
org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit6.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
@@ -31,6 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 @CamelSpringTest
 @ContextConfiguration
+@Timeout(60)
 public class JmsToCxfInOutTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java
index c6317922be05..d603cb1d4a79 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java
@@ -26,10 +26,12 @@ import 
org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@Timeout(60)
 public class RemoveEndpointsTest extends CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
index 4bd195a35d9e..11144e1d6125 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownTest.java
@@ -25,6 +25,7 @@ import 
org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit6.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
@@ -33,6 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @CamelSpringTest
 @ContextConfiguration
+@Timeout(60)
 public class JettyJmsShutdownTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
index be72953eb7d2..f21126a7e8b0 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.TestSupport;
 import org.apache.camel.test.spring.junit6.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
@@ -32,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @CamelSpringTest
 @ContextConfiguration
+@Timeout(60)
 public class JettyMulticastJmsFileTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
index d7716126066a..b0a06f9eacdb 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
@@ -33,6 +33,7 @@ import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,6 +44,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 /**
  * Doing request/reply over Netty with async processing.
  */
+@Timeout(60)
 public class NettyAsyncRequestReplyTest extends CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java
index b11714686303..65f4db919560 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java
@@ -28,8 +28,10 @@ import 
org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
+@Timeout(60)
 public class ShiroOverJmsTest extends CamelTestSupport {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsTest.java
index 7bcb5812016d..f975933de466 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsTest.java
@@ -30,6 +30,7 @@ import 
org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit6.CamelSpringTestSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,6 +45,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 /**
  * JMS with JDBC idempotent consumer test.
  */
+@Timeout(60)
 public class FromJmsToJdbcIdempotentConsumerToJmsTest extends 
CamelSpringTestSupport {
 
     @RegisterExtension
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsXaTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsXaTest.java
index 2e2207b2bda6..4255867e277a 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsXaTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/sql/FromJmsToJdbcIdempotentConsumerToJmsXaTest.java
@@ -22,6 +22,7 @@ import java.sql.SQLException;
 import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -33,6 +34,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 /**
  * JMS with JDBC idempotent consumer test using XA.
  */
+@Timeout(60)
 public class FromJmsToJdbcIdempotentConsumerToJmsXaTest extends 
FromJmsToJdbcIdempotentConsumerToJmsTest {
 
     @RegisterExtension
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java
index bdc26886264d..f6d29921fc9a 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit6.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -33,6 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
  */
 @CamelSpringTest
 @ContextConfiguration
+@Timeout(60)
 public class JmsToHttpTXTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java
index bdaa5d80cecf..b881cabf381c 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit6.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
@@ -39,6 +40,7 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 @CamelSpringTest
 @ContextConfiguration
+@Timeout(60)
 public class 
JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java
index 4d3257b7c108..6a01b1cf9116 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit6.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
@@ -39,6 +40,7 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 @CamelSpringTest
 @ContextConfiguration
+@Timeout(60)
 public class JmsToHttpTXWithOnExceptionTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java
index 338a43a35fd7..2c987d29a577 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit6.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -34,6 +35,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
  */
 @CamelSpringTest
 @ContextConfiguration
+@Timeout(60)
 public class JmsToHttpTXWithRollbackTest {
     @RegisterExtension
     public static JmsServiceExtension jmsServiceExtension = 
JmsServiceExtension.createExtension();
diff --git 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java
 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java
index dc97c9251e6f..8f70bac8c668 100644
--- 
a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java
+++ 
b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java
@@ -44,7 +44,7 @@ public final class JmsServiceExtension implements Extension {
     private static final Lock LOCK = new ReentrantLock();
     private static JmsServiceExtension instance;
 
-    private final JmsComponent amq;
+    private final ConnectionFactory connectionFactory;
 
     private JmsServiceExtension() throws JMSException {
         EmbeddedActiveMQ embeddedBrokerService = new EmbeddedActiveMQ();
@@ -74,16 +74,19 @@ public final class JmsServiceExtension implements Extension 
{
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        LOG.info("Creating a new reusable AMQ component");
-        ConnectionFactory connectionFactory = 
CamelJmsTestHelper.createConnectionFactory(brokerURL);
-
-        amq = jmsComponentAutoAcknowledge(connectionFactory);
+        LOG.info("Creating a shared ConnectionFactory for the embedded 
broker");
+        connectionFactory = 
CamelJmsTestHelper.createConnectionFactory(brokerURL);
 
         connectionFactory.createConnection();
     }
 
+    /**
+     * Returns a new {@link JmsComponent} wrapping the shared {@link 
ConnectionFactory} each time. This avoids sharing a
+     * single component instance across tests, which can cause blocking when 
one test's CamelContext shuts down and
+     * stops the shared component.
+     */
     public JmsComponent getComponent() {
-        return amq;
+        return jmsComponentAutoAcknowledge(connectionFactory);
     }
 
     public static JmsServiceExtension createExtension() {

Reply via email to