CAMEL-12336: speedup tests in tests/camel-itests (#4081)

* Replace the builtin JMS broker with a extension-based one for quicker test execution

* Convert the greeter to a extension

* Convert the ftp service to an extension

* Adjust the code to use a single static broker

Includes:
- Switch handling of the embedded JMS broker to JUnit instead of Springboot
- Stop creating the broker outside of Junit extension

* CAMEL-12336: speedup tests

Provides the speed up discussed on CAMEL-12336 and include changes to:
- Make the forks reusable
- Make surefire plugin options configurable
diff --git a/tests/camel-itest/pom.xml b/tests/camel-itest/pom.xml
index 626bdfc..8746f34 100644
--- a/tests/camel-itest/pom.xml
+++ b/tests/camel-itest/pom.xml
@@ -31,6 +31,11 @@
     <name>Camel :: Integration Tests :: Non OSGi</name>
     <description>Performs cross component integration tests</description>
 
+    <properties>
+        <camel.itest.fork.count>1</camel.itest.fork.count>
+        <camel.itest.fork.reuse>true</camel.itest.fork.reuse>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.camel</groupId>
@@ -388,8 +393,8 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
                     <!-- must for per test -->
-                    <forkCount>1</forkCount>
-                    <reuseForks>false</reuseForks>
+                    <forkCount>${camel.itest.fork.count}</forkCount>
+                    <reuseForks>${camel.itest.fork.reuse}</reuseForks>
                     <forkedProcessTimeoutInSeconds>3000</forkedProcessTimeoutInSeconds>
                     <systemPropertyVariables>
                         <derby.stream.error.file>target/derby.log</derby.stream.error.file>
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/CamelJmsTestHelper.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/CamelJmsTestHelper.java
index a17cb25..b32ee90 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/CamelJmsTestHelper.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/CamelJmsTestHelper.java
@@ -42,7 +42,7 @@
     public static ConnectionFactory createConnectionFactory(String options) {
         // using a unique broker name improves testing when running the entire test suite in the same JVM
         int id = counter.incrementAndGet();
-        String url = "vm://test-broker-" + id + "?broker.persistent=false&broker.useJmx=false";
+        String url = "vm://localhost?broker.persistent=false&broker.useJmx=false";
         if (options != null) {
             url = url + "&" + options;
         }
@@ -65,10 +65,13 @@
         return pooled;
     }
 
+    @Deprecated
     public static ConnectionFactory createPersistentConnectionFactory() {
         return createPersistentConnectionFactory(null);
     }
 
+
+    @Deprecated
     public static ConnectionFactory createPersistentConnectionFactory(String options) {
         // using a unique broker name improves testing when running the entire test suite in the same JVM
         int id = counter.incrementAndGet();
@@ -79,7 +82,7 @@
         // remove dir so its empty on startup
         FileUtil.removeDir(new File(dir));
 
-        String url = "vm://test-broker-" + id + "?broker.persistent=true&broker.useJmx=false&broker.dataDirectory=" + dir;
+        String url = "vm://localhost?broker.persistent=true&broker.useJmx=false&broker.dataDirectory=" + dir;
         if (options != null) {
             url = url + "&" + options;
         }
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncDslTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncDslTest.java
index 555d754..79da19e 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncDslTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpAsyncDslTest.java
@@ -16,22 +16,22 @@
  */
 package org.apache.camel.itest.async;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.support.SimpleRegistry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class HttpAsyncDslTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private static volatile String order = "";
 
@@ -85,8 +85,8 @@
     @Override
     protected void bindToRegistry(Registry registry) throws Exception {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
         registry.bind("jms", amq);
     }
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpJmsAsyncTimeoutTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpJmsAsyncTimeoutTest.java
index e859e9b..e263790 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpJmsAsyncTimeoutTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/async/HttpJmsAsyncTimeoutTest.java
@@ -16,22 +16,23 @@
  */
 package org.apache.camel.itest.async;
 
-import javax.jms.ConnectionFactory;
 
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.http.common.HttpOperationFailedException;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
 
 public class HttpJmsAsyncTimeoutTest extends HttpAsyncTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Test
     void testHttpJmsAsync() {
@@ -47,8 +48,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
         registry.bind("jms", amq);
     }
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 6fbd8fd..088f42c 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
@@ -19,6 +19,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.util.IOHelper;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
@@ -27,12 +28,15 @@
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 import org.junit.jupiter.api.Test;
+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;
 
 public class CustomerServicesTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Test
     void testCustomerService() throws Exception {
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java
index f290b2d..aee3228 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.camel.itest.customerrelations;
 
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class CustomerServicesWsAddressingTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Test
     void testCustomerService() throws Exception {
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
index 37c8997..e2c5a5e 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
@@ -16,38 +16,28 @@
  */
 package org.apache.camel.itest.ftp;
 
-import java.io.File;
-
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.itest.utils.extensions.FtpServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
-import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.filesystem.nativefs.NativeFileSystemFactory;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
-import org.apache.ftpserver.usermanager.impl.PropertiesUserManager;
-import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class FtpAndHttpRecipientListInterceptSendToEndpointIssueTest extends CamelTestSupport {
-    protected static int ftpPort;
+    @RegisterExtension
+    public static FtpServiceExtension ftpServiceExtension = new FtpServiceExtension();
+
     protected static int httpPort;
-    protected FtpServer ftpServer;
-    
-    
+
     @BeforeAll
     public static void initPort() throws Exception {
-        ftpPort = AvailablePortFinder.getNextAvailable();
         httpPort = AvailablePortFinder.getNextAvailable();
     }
 
     @Test
     void testFtpAndHttpIssue() throws Exception {
-        String ftp = "ftp:localhost:" + ftpPort + "/myapp?password=admin&username=admin";
+        String ftp = ftpServiceExtension.getAddress();
         String http = "http://localhost:" + httpPort + "/myapp";
 
         getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
@@ -78,39 +68,4 @@
             }
         };
     }
-
-    @Override
-    @BeforeEach
-    public void setUp() throws Exception {
-        super.setUp();
-        initFtpServer();
-        ftpServer.start();
-    }
-
-    @Override
-    @AfterEach
-    public void tearDown() throws Exception {
-        super.tearDown();
-        ftpServer.stop();
-        ftpServer = null;
-    }
-
-    protected void initFtpServer() {
-        FtpServerFactory serverFactory = new FtpServerFactory();
-
-        // setup user management to read our users.properties and use clear text passwords
-        File file = new File("src/test/resources/users.properties");
-        UserManager uman = new PropertiesUserManager(new ClearTextPasswordEncryptor(), file, "admin");
-        serverFactory.setUserManager(uman);
-
-        NativeFileSystemFactory fsf = new NativeFileSystemFactory();
-        fsf.setCreateHome(true);
-        serverFactory.setFileSystem(fsf);
-
-        ListenerFactory factory = new ListenerFactory();
-        factory.setPort(ftpPort);
-        serverFactory.addListener("default", factory.createListener());
-
-        ftpServer = serverFactory.createServer();
-    }
 }
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java
index e567082..64cf964 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java
@@ -16,34 +16,17 @@
  */
 package org.apache.camel.itest.ftp;
 
-import java.io.File;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.itest.utils.extensions.FtpServiceExtension;
 import org.apache.camel.test.junit5.CamelTestSupport;
-import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.filesystem.nativefs.NativeFileSystemFactory;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
-import org.apache.ftpserver.usermanager.impl.PropertiesUserManager;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class FtpXQueryTest extends CamelTestSupport {
-    protected static int ftpPort;
-    protected FtpServer ftpServer;
-    private String ftp = "ftp:localhost:" + ftpPort + "/myapp?password=admin&username=admin";
-    
-    @BeforeAll
-    public static void initPort() throws Exception {
-        ftpPort = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    public static FtpServiceExtension ftpServiceExtension = new FtpServiceExtension();
 
     @Test
     void testXQueryFromFtp() throws Exception {
@@ -55,6 +38,8 @@
         other.expectedMessageCount(1);
         other.message(0).body(String.class).contains("Bye World");
 
+        String ftp = ftpServiceExtension.getAddress();
+
         template.sendBodyAndHeader(ftp, "<mail from=\"davsclaus@apache.org\"><subject>Hey</subject><body>Hello World!</body></mail>",
                 Exchange.FILE_NAME, "claus.xml");
 
@@ -69,6 +54,8 @@
         return new RouteBuilder() {
             @Override
             public void configure() {
+                String ftp = ftpServiceExtension.getAddress();
+
                 from(ftp)
                     .choice()
                         .when().xquery("/mail/@from = 'davsclaus@apache.org'")
@@ -78,40 +65,4 @@
             }
         };
     }
-
-    @Override
-    @BeforeEach
-    public void setUp() throws Exception {
-        super.setUp();
-        initFtpServer();
-        ftpServer.start();
-    }
-
-    @Override
-    @AfterEach
-    public void tearDown() throws Exception {
-        super.tearDown();
-        ftpServer.stop();
-        ftpServer = null;
-    }
-
-    protected void initFtpServer() {
-        FtpServerFactory serverFactory = new FtpServerFactory();
-
-        // setup user management to read our users.properties and use clear text passwords
-        File file = new File("src/test/resources/users.properties");
-        UserManager uman = new PropertiesUserManager(new ClearTextPasswordEncryptor(), file, "admin");
-        serverFactory.setUserManager(uman);
-
-        NativeFileSystemFactory fsf = new NativeFileSystemFactory();
-        fsf.setCreateHome(true);
-        serverFactory.setFileSystem(fsf);
-
-        ListenerFactory factory = new ListenerFactory();
-        factory.setPort(ftpPort);
-        serverFactory.addListener("default", factory.createListener());
-
-        ftpServer = serverFactory.createServer();
-    }
-
 }
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java
index ccaea27..95a5186 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java
@@ -16,27 +16,18 @@
  */
 package org.apache.camel.itest.ftp;
 
-import java.io.File;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.itest.utils.extensions.FtpServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.filesystem.nativefs.NativeFileSystemFactory;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
-import org.apache.ftpserver.usermanager.impl.PropertiesUserManager;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -46,14 +37,10 @@
 @CamelSpringTest
 @ContextConfiguration
 public class SpringFileAntPathMatcherRemoteFileFilterTest {
-   
-    private static int ftpPort = AvailablePortFinder.getNextAvailable();
-    static {
-        //set them as system properties so Spring can use the property placeholder
-        //things to set them into the URL's in the spring contexts 
-        System.setProperty("SpringFileAntPathMatcherRemoteFileFilterTest.ftpPort", Integer.toString(ftpPort));
-    }
-    
+    @RegisterExtension
+    public static FtpServiceExtension ftpServiceExtension =
+            new FtpServiceExtension("SpringFileAntPathMatcherRemoteFileFilterTest.ftpPort");
+
     protected FtpServer ftpServer;
 
     protected String expectedBody = "Godday World";
@@ -78,37 +65,5 @@
 
         result.assertIsSatisfied();
     }
-
-    @BeforeEach
-    public void setUp() throws Exception {
-        initFtpServer();
-        ftpServer.start();
-    }
-
-    @AfterEach
-    public void tearDown() throws Exception {
-        ftpServer.stop();
-        ftpServer = null;
-    }
-
-    protected void initFtpServer() {
-        FtpServerFactory serverFactory = new FtpServerFactory();
-
-        // setup user management to read our users.properties and use clear text passwords
-        File file = new File("src/test/resources/users.properties");
-        UserManager uman = new PropertiesUserManager(new ClearTextPasswordEncryptor(), file, "admin");
-        serverFactory.setUserManager(uman);
-
-        NativeFileSystemFactory fsf = new NativeFileSystemFactory();
-        fsf.setCreateHome(true);
-        serverFactory.setFileSystem(fsf);
-
-        ListenerFactory factory = new ListenerFactory();
-        factory.setPort(ftpPort);
-        serverFactory.addListener("default", factory.createListener());
-
-        ftpServer = serverFactory.createServer();
-    }
-
 }
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFtpEndpointTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFtpEndpointTest.java
index 1730d8d..7c8a60b 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFtpEndpointTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFtpEndpointTest.java
@@ -16,25 +16,16 @@
  */
 package org.apache.camel.itest.ftp;
 
-import java.io.File;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.itest.utils.extensions.FtpServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.filesystem.nativefs.NativeFileSystemFactory;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
-import org.apache.ftpserver.usermanager.impl.PropertiesUserManager;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -44,12 +35,10 @@
 @CamelSpringTest
 @ContextConfiguration
 public class SpringFtpEndpointTest {
-    private static int ftpPort = AvailablePortFinder.getNextAvailable();
-    static {
-        //set them as system properties so Spring can use the property placeholder
-        //things to set them into the URL's in the spring contexts 
-        System.setProperty("SpringFtpEndpointTest.ftpPort", Integer.toString(ftpPort));
-    }
+    @RegisterExtension
+    public static FtpServiceExtension ftpServiceExtension =
+            new FtpServiceExtension("SpringFtpEndpointTest.ftpPort");
+
     protected FtpServer ftpServer;
 
     @Autowired
@@ -69,36 +58,4 @@
 
         result.assertIsSatisfied();
     }
-
-    @BeforeEach
-    public void setUp() throws Exception {
-        initFtpServer();
-        ftpServer.start();
-    }
-
-    @AfterEach
-    public void tearDown() throws Exception {
-        ftpServer.stop();
-        ftpServer = null;
-    }
-
-    protected void initFtpServer() {
-        FtpServerFactory serverFactory = new FtpServerFactory();
-
-        // setup user management to read our users.properties and use clear text passwords
-        File file = new File("src/test/resources/users.properties");
-        UserManager uman = new PropertiesUserManager(new ClearTextPasswordEncryptor(), file, "admin");
-        serverFactory.setUserManager(uman);
-
-        NativeFileSystemFactory fsf = new NativeFileSystemFactory();
-        fsf.setCreateHome(true);
-        serverFactory.setFileSystem(fsf);
-
-        ListenerFactory factory = new ListenerFactory();
-        factory.setPort(ftpPort);
-        serverFactory.addListener("default", factory.createListener());
-
-        ftpServer = serverFactory.createServer();
-    }
-
 }
\ No newline at end of file
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java
index 529b416..651745c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java
@@ -18,17 +18,13 @@
 
 import java.io.File;
 
-import javax.xml.ws.Endpoint;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.itest.utils.extensions.GreeterServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
@@ -37,40 +33,14 @@
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
 public class CamelFileGreeterOneWayTest extends CamelSpringTestSupport {
-    
-    private static final Logger LOG = LoggerFactory.getLogger(CamelGreeterTest.class);
-    
-    private static Endpoint endpoint;
-    private static GreeterImpl greeterImpl;
-    private static int port = AvailablePortFinder.getNextAvailable();
-    static {
-        //set them as system properties so Spring can use the property placeholder
-        //things to set them into the URL's in the spring contexts 
-        System.setProperty("CamelFileGreeterOneWayTest.port", Integer.toString(port));
-    }
-
-    @BeforeAll
-    public static void startServer() throws Exception {
-        // Start the Greeter Server
-        greeterImpl = new GreeterImpl();
-        String address = "http://localhost:" + port + "/SoapContext/SoapPort";
-        endpoint = Endpoint.publish(address, greeterImpl);
-        LOG.info("The WS endpoint is published! ");
-    }
-
-    @AfterAll
-    public static void stopServer() throws Exception {
-        // Shutdown the Greeter Server
-        if (endpoint != null) {
-            endpoint.stop();
-            endpoint = null;
-        }
-    }
+    @RegisterExtension
+    public static GreeterServiceExtension greeterServiceExtension =
+            GreeterServiceExtension.createExtension("CamelFileGreeterOneWayTest.port");
 
     @Test
     void testFileWithOnewayOperation() throws Exception {
         deleteDirectory("target/messages/input/");
-        greeterImpl.resetOneWayCounter();
+        greeterServiceExtension.getGreeter().resetOneWayCounter();
         ProducerTemplate template = context.createProducerTemplate();
         template.sendBodyAndHeader("file://target/messages/input/", "Hello World", Exchange.FILE_NAME, "hello.txt");
 
@@ -79,7 +49,8 @@
         template.stop();
         
         // make sure the greeter is called
-        assertEquals(1, greeterImpl.getOneWayCounter(), "The oneway operation of greeter should be called");
+        assertEquals(1, greeterServiceExtension.getGreeter().getOneWayCounter(),
+                "The oneway operation of greeter should be called");
 
         File file = new File("target/messages/input/hello.txt");
         assertFalse(file.exists(), "File " + file + " should be deleted");
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java
index af13cef..efe066f 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java
@@ -24,10 +24,12 @@
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.apache.hello_world_soap_http.PingMeFault;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -39,6 +41,9 @@
 @CamelSpringTest
 @ContextConfiguration
 public class CamelGreeterConsumerTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private static int port = AvailablePortFinder.getNextAvailable();
     static {
         //set them as system properties so Spring can use the property placeholder
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java
index 9531119..2074df9 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java
@@ -18,16 +18,14 @@
 
 import java.io.File;
 
-import javax.xml.ws.Endpoint;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.itest.utils.extensions.GreeterServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.TestSupport;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,38 +38,17 @@
 @CamelSpringTest
 @ContextConfiguration
 public class CamelGreeterFileDomTest {
-    private static final Logger LOG = LoggerFactory.getLogger(CamelGreeterFileDomTest.class);
-    
+    @RegisterExtension
+    public static GreeterServiceExtension greeterServiceExtension =
+            GreeterServiceExtension.createExtension("CamelGreeterFileDomTest.port");
+
     private static final String REQUEST = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
         + "<soap:Body><greetMe xmlns=\"http://apache.org/hello_world_soap_http/types\">"
         + "<requestType>Willem</requestType></greetMe></soap:Body></soap:Envelope>";
-    private static Endpoint endpoint;
-    private static int port = AvailablePortFinder.getNextAvailable();
-    static {
-        //set them as system properties so Spring can use the property placeholder
-        //things to set them into the URL's in the spring contexts 
-        System.setProperty("CamelGreeterFileDomTest.port", Integer.toString(port));
-    }
+
     @Autowired
     protected CamelContext camelContext;
     
-    @BeforeAll
-    public static void startServer() {
-        // Start the Greeter Server
-        Object implementor = new GreeterImpl();
-        String address = "http://localhost:" + port + "/SoapContext/SoapPort";
-        endpoint = Endpoint.publish(address, implementor);
-        LOG.info("The WS endpoint is published! ");
-    }
-
-    @AfterAll
-    public static void stopServer() {
-        // Shutdown the Greeter Server
-        if (endpoint != null) {
-            endpoint.stop();
-            endpoint = null;
-        }
-    }
 
     @Test
     void testCamelGreeter() {
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java
index 48a2b1e..aad196e 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java
@@ -18,21 +18,17 @@
 
 import java.util.List;
 
-import javax.xml.ws.Endpoint;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.itest.utils.extensions.GreeterServiceExtension;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -42,40 +38,19 @@
 @CamelSpringTest
 @ContextConfiguration
 public class CamelGreeterTest {
-    private static final Logger LOG = LoggerFactory.getLogger(CamelGreeterTest.class);
-    
-    private static Endpoint endpoint;
-    
-    private static int port = AvailablePortFinder.getNextAvailable();
-    static {
-        //set them as system properties so Spring can use the property placeholder
-        //things to set them into the URL's in the spring contexts 
-        System.setProperty("CamelGreeterTest.port", Integer.toString(port));
-    }
-    
+    @RegisterExtension
+    public static GreeterServiceExtension greeterServiceExtension =
+            GreeterServiceExtension.createExtension("CamelGreeterTest.port");
+
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     @Autowired
     protected CamelContext camelContext;
 
     @EndpointInject("mock:resultEndpoint")
     protected MockEndpoint resultEndpoint;
 
-    @BeforeAll
-    public static void startServer() {
-        // Start the Greeter Server
-        Object implementor = new GreeterImpl();
-        String address = "http://localhost:" + port + "/SoapContext/SoapPort";
-        endpoint = Endpoint.publish(address, implementor);
-        LOG.info("The WS endpoint is published! ");
-    }
-
-    @AfterAll
-    public static void stopServer() {
-        // Shutdown the Greeter Server
-        if (endpoint != null) {
-            endpoint.stop();
-            endpoint = null;
-        }
-    }
 
     @Test
     void testMocksAreValid() throws Exception {
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java
index 52406fa..b93adb2 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CxfToJmsInOutTest.java
@@ -20,9 +20,11 @@
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -32,6 +34,9 @@
 @CamelSpringTest
 @ContextConfiguration
 public class CxfToJmsInOutTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private static int port = AvailablePortFinder.getNextAvailable();
     static {
         //set them as system properties so Spring can use the property place holder
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 e6e62dd..fdcc849 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
@@ -18,9 +18,11 @@
 
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -30,6 +32,9 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JmsToCxfInOutTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private static int port = AvailablePortFinder.getNextAvailable();
     static {
         //set them as system properties so Spring can use the property place holder
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/Server.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/Server.java
index a6f1792..cf27587 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/Server.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/Server.java
@@ -18,6 +18,7 @@
 
 import javax.xml.ws.Endpoint;
 
+import org.apache.camel.itest.utils.extensions.GreeterImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
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 2eb23e8..b556301 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
@@ -18,21 +18,22 @@
 
 import java.util.Collection;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class RemoveEndpointsTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     @Test
     void testRemoveAllEndpoints() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:jms-queue");
@@ -51,8 +52,8 @@
     @Override
     protected void bindToRegistry(Registry registry) throws Exception {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("jms", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest.java
index 3dd8c7f..4f4bf9c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest.java
@@ -23,9 +23,11 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.http.common.HttpOperationFailedException;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -35,8 +37,11 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JettyJmsShutdownInProgressTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private static int port = AvailablePortFinder.getNextAvailable();
-    private static final String URL = "http://localhost:" + port + "/test";
+    private static final String URL = "http://localhost:" + port + "/JettyJmsShutdownInProgressTest";
     static {
         //set them as system properties so Spring can use the property placeholder
         //things to set them into the URL's in the spring contexts 
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 3d7fed7..c714679 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
@@ -21,9 +21,11 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
@@ -33,9 +35,14 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JettyJmsShutdownTest {
-    private static int port = AvailablePortFinder.getNextAvailable();
-    private static final String URL = "http://localhost:" + port + "/test";
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
+    private static final String URL;
     static {
+        int port = AvailablePortFinder.getNextAvailable();
+        URL = "http://localhost:" + port + "/JettyJmsShutdownTest";
+
         //set them as system properties so Spring can use the property placeholder
         //things to set them into the URL's in the spring contexts 
         System.setProperty("JettyJmsShutdownTest.port", Integer.toString(port));
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTest.java
index c1ae34a..adf7fd1 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTest.java
@@ -23,9 +23,11 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -35,8 +37,11 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JettyJmsTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private static int port = AvailablePortFinder.getNextAvailable();
-    private static final String URL = "http://localhost:" + port + "/test";
+    private static final String URL = "http://localhost:" + port + "/JettyJmsTest";
     static {
         //set them as system properties so Spring can use the property placeholder
         //things to set them into the URL's in the spring contexts 
@@ -46,7 +51,7 @@
     @Autowired
     protected CamelContext camelContext;
 
-    @EndpointInject("mock:resultEndpoint")
+    @EndpointInject("mock:JettyJmsTestResultEndpoint")
     protected MockEndpoint resultEndpoint;
 
     @Test
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTwowayTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTwowayTest.java
index 7a49c4d..29d9bf5 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTwowayTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyJmsTwowayTest.java
@@ -20,9 +20,11 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -32,9 +34,11 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JettyJmsTwowayTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private static int port = AvailablePortFinder.getNextAvailable();
-    private static final String URL = "http://localhost:" + port + "/test";
+    private static final String URL = "http://localhost:" + port + "/JettyJmsTwowayTest";
     static {
         //set them as system properties so Spring can use the property placeholder
         //things to set them into the URL's in the spring contexts 
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 6c07a76..fdce839 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
@@ -19,10 +19,12 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.TestSupport;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -31,9 +33,11 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JettyMulticastJmsFileTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
     
     private static int port = AvailablePortFinder.getNextAvailable();
-    private static final String URL = "http://localhost:" + port + "/test";
+    private static final String URL = "http://localhost:" + port + "/JettyMulticastJmsFileTest";
     static {
         //set them as system properties so Spring can use the property placeholder
         //things to set them into the URL's in the spring contexts 
@@ -55,7 +59,7 @@
         template.stop();
 
         ConsumerTemplate consumer = camelContext.createConsumerTemplate();
-        String in = consumer.receiveBody("jms:queue:foo", 5000, String.class);
+        String in = consumer.receiveBody("jms:queue:JettyMulticastJmsFileTestFoo", 5000, String.class);
         assertEquals("Hello World", in);
 
         String in2 = consumer.receiveBody("file://target/jetty?noop=true&readLock=none", 5000, String.class);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.java
index 5ae8b3c..1ffd622 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.java
@@ -47,12 +47,12 @@
 
     @Test
     void testJettySpringFailoverRoundRobin() throws Exception {
-        getMockEndpoint("mock:bad").expectedMessageCount(1);
-        getMockEndpoint("mock:bad2").expectedMessageCount(1);
-        getMockEndpoint("mock:good").expectedMessageCount(1);
-        getMockEndpoint("mock:good2").expectedMessageCount(0);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestBad").expectedMessageCount(1);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestBad2").expectedMessageCount(1);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestGood").expectedMessageCount(1);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestGood2").expectedMessageCount(0);
 
-        String reply = template.requestBody("direct:start", null, String.class);
+        String reply = template.requestBody("direct:JettySpringFailoverRoundRobinTestStart", null, String.class);
         assertEquals("Good", reply);
 
         assertMockEndpointsSatisfied();
@@ -61,12 +61,12 @@
         // continue where it should
         resetMocks();
 
-        getMockEndpoint("mock:bad").expectedMessageCount(0);
-        getMockEndpoint("mock:bad2").expectedMessageCount(0);
-        getMockEndpoint("mock:good").expectedMessageCount(0);
-        getMockEndpoint("mock:good2").expectedMessageCount(1);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestBad").expectedMessageCount(0);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestBad2").expectedMessageCount(0);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestGood").expectedMessageCount(0);
+        getMockEndpoint("mock:JettySpringFailoverRoundRobinTestGood2").expectedMessageCount(1);
 
-        reply = template.requestBody("direct:start", null, String.class);
+        reply = template.requestBody("direct:JettySpringFailoverRoundRobinTestStart", null, String.class);
         assertEquals("Also good", reply);
     }
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.java
index 6bd8b1c..5307907 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.java
@@ -18,13 +18,17 @@
 
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.reifier.RouteReifier;
 import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.context.support.AbstractApplicationContext;
 
 public class AdviceWithTransactionIssueTest extends CamelSpringTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Override
     protected AbstractApplicationContext createApplicationContext() {
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/DynamicRouteTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/DynamicRouteTest.java
index 2217c42..d732960 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/DynamicRouteTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/DynamicRouteTest.java
@@ -16,21 +16,22 @@
  */
 package org.apache.camel.itest.jms;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Header;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class DynamicRouteTest extends CamelTestSupport {
+
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
     
     @Test
     void testDynamicRouteWithJms() {
@@ -68,8 +69,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
         registry.bind("jms", amq);
         registry.bind("myBean", new MyBean());
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/FileToJmsTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/FileToJmsTest.java
index d2f18c4..e07e526 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/FileToJmsTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/FileToJmsTest.java
@@ -20,14 +20,18 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
 @CamelSpringTest
 @ContextConfiguration
 public class FileToJmsTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Autowired
     protected ProducerTemplate template;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.java
index 85ded34..d85d918 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.java
@@ -20,10 +20,12 @@
 import org.apache.camel.Processor;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.reifier.RouteReifier;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -35,6 +37,8 @@
  * from JMS over Jetty.
  */
 public class JMSTransactionIsTransactedRedeliveredTest extends CamelSpringTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private static int port = AvailablePortFinder.getNextAvailable();
     static {
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsConsumerShutdownTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsConsumerShutdownTest.java
index 9425ca1..95229fa 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsConsumerShutdownTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsConsumerShutdownTest.java
@@ -23,14 +23,18 @@
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
 
 @CamelSpringTest
 @ContextConfiguration
 public class JmsConsumerShutdownTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Produce("activemq:start")
     protected ProducerTemplate activemq;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java
index f4ad1fb..79414f2 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpJmsTest.java
@@ -16,21 +16,19 @@
  */
 package org.apache.camel.itest.jms;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -39,6 +37,9 @@
  */
 public class JmsHttpJmsTest extends CamelTestSupport {
 
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private int port;
 
     @Test
@@ -91,8 +92,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
         registry.bind("jms", amq);
     }
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java
index 97184a9..b4f4ab2 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueTest.java
@@ -16,23 +16,21 @@
  */
 package org.apache.camel.itest.jms;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.apache.camel.Exchange.CONTENT_TYPE;
 import static org.apache.camel.Exchange.HTTP_METHOD;
 import static org.apache.camel.Exchange.HTTP_RESPONSE_CODE;
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -41,6 +39,9 @@
  */
 public class JmsHttpPostIssueTest extends CamelTestSupport {
 
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private int port;
 
     @Test
@@ -89,8 +90,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("jms", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java
index ef52cbe..6a2032b 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsHttpPostIssueWithMockTest.java
@@ -16,22 +16,20 @@
  */
 package org.apache.camel.itest.jms;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.apache.camel.Exchange.CONTENT_TYPE;
 import static org.apache.camel.Exchange.HTTP_METHOD;
 import static org.apache.camel.Exchange.HTTP_RESPONSE_CODE;
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
@@ -39,6 +37,9 @@
  */
 public class JmsHttpPostIssueWithMockTest extends CamelTestSupport {
 
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
+
     private int port;
 
     @Test
@@ -92,8 +93,8 @@
     @Override
     protected void bindToRegistry(Registry registry) throws Exception {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("jms", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsIntegrationTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsIntegrationTest.java
index f00045f..fecb858 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsIntegrationTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsIntegrationTest.java
@@ -19,21 +19,21 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class JmsIntegrationTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private static final Logger LOG = LoggerFactory.getLogger(JmsIntegrationTest.class);
 
@@ -61,8 +61,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("myBean", myBean);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJaxbTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJaxbTest.java
index e26895e..e68aaaf 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJaxbTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJaxbTest.java
@@ -16,21 +16,20 @@
  */
 package org.apache.camel.itest.jms;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.jaxb.JaxbDataFormat;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class JmsJaxbTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Test
     void testOk() throws Exception {
@@ -79,8 +78,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("jms", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
index 3ca575a..1a3e5fc 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
@@ -18,20 +18,20 @@
 
 import java.util.concurrent.TimeUnit;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.apache.camel.test.junit5.TestSupport.body;
 
 public class JmsJettyAsyncTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private int size = 100;
     private int port;
@@ -70,8 +70,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("activemq", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java
index bfa3407..4ed313c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java
@@ -19,22 +19,22 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.Header;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class JmsPerformanceTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private static final Logger LOG = LoggerFactory.getLogger(JmsPerformanceTest.class);
 
@@ -98,8 +98,8 @@
         // add AMQ client and make use of connection pooling we depend on because of the (large) number
         // of the JMS messages we do produce
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("myBean", new MyBean());
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollEnrichTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollEnrichTest.java
index 984bc4e..88732d1 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollEnrichTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollEnrichTest.java
@@ -16,29 +16,29 @@
  */
 package org.apache.camel.itest.jms;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.apache.camel.test.junit5.TestSupport.deleteDirectory;
 
 public class JmsPollEnrichTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Test
     void testPollEnrichJms() throws Exception {
-        template.sendBody("jms:queue:foo", "Bye World");
+        template.sendBody("jms:queue:JmsPollEnrichTestFoo", "Bye World");
 
-        MockEndpoint mock = getMockEndpoint("mock:result");
+        MockEndpoint mock = getMockEndpoint("mock:JmsPollEnrichTestResult");
         mock.expectedBodiesReceived("Bye World");
 
-        template.sendBody("direct:start", "Hello World");
+        template.sendBody("direct:JmsPollEnrichTestStart", "Hello World");
 
         assertMockEndpointsSatisfied();
     }
@@ -47,7 +47,9 @@
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from("direct:start").pollEnrich("jms:queue:foo", 5000).to("mock:result");
+                from("direct:JmsPollEnrichTestStart")
+                        .pollEnrich("jms:queue:JmsPollEnrichTestFoo", 5000)
+                        .to("mock:JmsPollEnrichTestResult");
             }
         };
     }
@@ -57,8 +59,8 @@
         deleteDirectory("activemq-data");
 
         // add ActiveMQ with embedded broker which must be persistent
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createPersistentConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("jms", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollingConsumerTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollingConsumerTest.java
index ef0a8ac..517d701 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollingConsumerTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPollingConsumerTest.java
@@ -23,9 +23,11 @@
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
@@ -33,17 +35,19 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JmsPollingConsumerTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
-    @Produce("activemq:startConsumer")
+    @Produce("activemq:JmsPollingConsumerTestStartConsumer")
     protected ProducerTemplate startConsumer;
 
-    @Produce("direct:startConsumer")
+    @Produce("direct:JmsPollingConsumerTestStartConsumer")
     protected ProducerTemplate startDirectConsumer;
 
-    @Produce("activemq:queue")
+    @Produce("activemq:JmsPollingConsumerTestQueue")
     protected ProducerTemplate queue;
 
-    @EndpointInject("mock:result")
+    @EndpointInject("mock:JmsPollingConsumerTestResult")
     protected MockEndpoint result;
 
     /**
@@ -93,7 +97,7 @@
             StringBuilder result = new StringBuilder();
 
             Exchange exchange;
-            while ((exchange = consumer.receive("activemq:queue", 2000)) != null) {
+            while ((exchange = consumer.receive("activemq:JmsPollingConsumerTestQueue", 2000)) != null) {
                 result.append(exchange.getIn().getBody(String.class));
             }
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java
index dfd6ded..8e52f5c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java
@@ -18,7 +18,6 @@
 
 import java.util.List;
 
-import javax.jms.ConnectionFactory;
 
 import org.apache.camel.Body;
 import org.apache.camel.Exchange;
@@ -27,19 +26,21 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.model.config.BatchResequencerConfig;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertSame;
 
 public class JmsResequencerTest extends CamelTestSupport  {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
     
     private static final Logger LOG = LoggerFactory.getLogger(JmsResequencerTest.class);
     private ReusableBean b1 = new ReusableBean("myBean1");
@@ -164,8 +165,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
         registry.bind("activemq", amq);
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsValidatorTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsValidatorTest.java
index 01f67a1..e55096a 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsValidatorTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsValidatorTest.java
@@ -16,19 +16,19 @@
  */
 package org.apache.camel.itest.jms;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.ValidationException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 
 public class JmsValidatorTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Test
     void testJmsValidator() throws Exception {
@@ -57,8 +57,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("jms", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/SpringJmsValidatorTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/SpringJmsValidatorTest.java
index 6a7ade0..7b3cc77 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/SpringJmsValidatorTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/SpringJmsValidatorTest.java
@@ -16,12 +16,16 @@
  */
 package org.apache.camel.itest.jms;
 
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class SpringJmsValidatorTest extends CamelSpringTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Override
     protected AbstractXmlApplicationContext createApplicationContext() {
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 ea9cba7..6f744f4 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
@@ -26,20 +26,19 @@
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
-import javax.jms.ConnectionFactory;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -47,6 +46,8 @@
  * Doing request/reply over Netty with async processing.
  */
 public class NettyAsyncRequestReplyTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private static final Logger LOG = LoggerFactory.getLogger(NettyAsyncRequestReplyTest.class);
 
@@ -104,10 +105,10 @@
                 port = AvailablePortFinder.getNextAvailable();
 
                 from("netty:tcp://localhost:" + port + "?textline=true&sync=true&reuseAddress=true&synchronous=false")
-                    .to("activemq:queue:foo")
+                    .to("activemq:queue:NettyAsyncRequestReplyTest")
                     .log("Writing reply ${body}");
 
-                from("activemq:queue:foo")
+                from("activemq:queue:NettyAsyncRequestReplyTest")
                     .transform(simple("Bye ${body}"));
             }
         };
@@ -116,8 +117,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("activemq", amq);
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java
index 128ae47..d9277be 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/security/GreeterClientTest.java
@@ -29,6 +29,8 @@
 import org.apache.cxf.frontend.ClientProxy;
 import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
 import org.apache.hello_world_soap_http.Greeter;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
@@ -75,9 +77,22 @@
 
         client.getOutInterceptors().add(wss4jOut);
         ((BindingProvider)greeter).getRequestContext().put("password", password);
+
         return greeter.greetMe(message);
     }
 
+    @BeforeEach
+    public void setUp() {
+        if (!camelContext.isStarted()) {
+            camelContext.start();
+        }
+    }
+
+    @AfterEach
+    public void tearDown() {
+        camelContext.stop();
+    }
+
     @Test
     void testServiceWithValidateUser() throws Exception {
         
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 958115e..38e8edf 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
@@ -19,20 +19,19 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.shiro.security.ShiroSecurityConstants;
 import org.apache.camel.component.shiro.security.ShiroSecurityPolicy;
-import org.apache.camel.itest.CamelJmsTestHelper;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class ShiroOverJmsTest extends CamelTestSupport {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     private byte[] passPhrase = {
         (byte) 0x08, (byte) 0x09, (byte) 0x0A, (byte) 0x0B,
@@ -42,14 +41,14 @@
 
     @Test
     void testShiroOverJms() throws Exception {
-        getMockEndpoint("mock:error").expectedMessageCount(0);
-        getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
-        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:ShiroOverJmsTestError").expectedMessageCount(0);
+        getMockEndpoint("mock:ShiroOverJmsTestFoo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:ShiroOverJmsTestResult").expectedBodiesReceived("Bye World");
 
         Map<String, Object> headers = new HashMap<>();
         headers.put(ShiroSecurityConstants.SHIRO_SECURITY_USERNAME, "ringo");
         headers.put(ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD, "starr");
-        template.requestBodyAndHeaders("direct:start", "Hello World", headers);
+        template.requestBodyAndHeaders("direct:ShiroOverJmsTestStart", "Hello World", headers);
 
         assertMockEndpointsSatisfied();
     }
@@ -57,8 +56,8 @@
     @Override
     protected void bindToRegistry(Registry registry) {
         // add ActiveMQ with embedded broker
-        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
-        JmsComponent amq = jmsComponentAutoAcknowledge(connectionFactory);
+        JmsComponent amq = jmsServiceExtension.getComponent();
+
         amq.setCamelContext(context);
 
         registry.bind("jms", amq);
@@ -72,17 +71,17 @@
                 final ShiroSecurityPolicy securityPolicy = new ShiroSecurityPolicy("src/test/resources/securityconfig.ini", passPhrase);
                 securityPolicy.setBase64(true);
 
-                errorHandler(deadLetterChannel("mock:error"));
+                errorHandler(deadLetterChannel("mock:ShiroOverJmsTestError"));
 
-                from("direct:start")
+                from("direct:ShiroOverJmsTestStart")
                         .policy(securityPolicy)
-                        .to("jms:queue:foo")
-                        .to("mock:result");
+                        .to("jms:queue:ShiroOverJmsTestFoo")
+                        .to("mock:ShiroOverJmsTestResult");
 
-                from("jms:queue:foo")
+                from("jms:queue:ShiroOverJmsTestFoo")
                         .to("log:foo?showHeaders=true")
                         .policy(securityPolicy)
-                        .to("mock:foo")
+                        .to("mock:ShiroOverJmsTestFoo")
                         .transform().constant("Bye World");
             }
         };
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/test/SpringDebugBeforeTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/test/SpringDebugBeforeTest.java
index 4b8384b..1f3117a 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/test/SpringDebugBeforeTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/test/SpringDebugBeforeTest.java
@@ -28,6 +28,7 @@
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class SpringDebugBeforeTest extends CamelSpringTestSupport {
 
@@ -51,14 +52,19 @@
 
     @Test
     void testDebugBefore() throws Exception {
-        getMockEndpoint("mock:result").expectedMessageCount(1);
+        getMockEndpoint("mock:SpringDebugBeforeTestResult").expectedMessageCount(1);
 
-        template.sendBody("direct:start", "Hello World");
+        template.sendBody("direct:SpringDebugBeforeTestStart", "Hello World");
 
         assertMockEndpointsSatisfied();
 
         assertEquals(2, before.size());
-        assertEquals("log1", before.get(0));
-        assertEquals("to1", before.get(1));
+
+        // The ID is not truly deterministic and may be appended a number. To avoid issues with the
+        // IDs receiving a different number other than 1 (as is the case when running multiple tests)
+        // checks only for the preceding ID string for each of the declared routes.
+        assertTrue(before.get(0).startsWith("log"));
+        assertTrue(before.get(1).startsWith("to"));
+
     }
 }
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java
index 70d4ba1..a2a50c5 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpRoute.java
@@ -66,7 +66,7 @@
                 // do a xpath to compare if the status is NOT okay
                 .when().xpath("/reply/status != 'ok'")
                     // as this is based on an unit test we use mocks to verify how many times we did rollback
-                    .to("mock:rollback")
+                    .to("mock:JmsToHttpRoute")
                     // response is not okay so force a rollback by throwing an exception
                     .process(new Processor() {
                         public void process(Exchange exchange) {
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 ab696fb..cc0fddc 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
@@ -19,8 +19,10 @@
 import org.apache.camel.EndpointInject;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.test.context.ContextConfiguration;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -33,9 +35,11 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JmsToHttpTXTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     // use uri to refer to our mock
-    @EndpointInject("mock:rollback")
+    @EndpointInject("mock:JmsToHttpRoute")
     MockEndpoint mock;
 
     // use the spring id to refer to the endpoint we should send data to
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 2c2d60a..7ee203d 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
@@ -22,8 +22,10 @@
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -39,6 +41,8 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Autowired
     private ProducerTemplate template;
@@ -46,7 +50,7 @@
     @EndpointInject("ref:data")
     private Endpoint data;
 
-    @EndpointInject("mock:rollback")
+    @EndpointInject("mock:JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute")
     private MockEndpoint rollback;
 
     // the ok response to expect
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 fe79e19..ff4a564 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
@@ -22,8 +22,10 @@
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 
@@ -39,6 +41,8 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JmsToHttpTXWithOnExceptionTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     @Autowired
     private ProducerTemplate template;
@@ -46,7 +50,7 @@
     @EndpointInject("ref:data")
     private Endpoint data;
 
-    @EndpointInject("mock:rollback")
+    @EndpointInject("mock:JmsToHttpWithOnExceptionRoute")
     private MockEndpoint rollback;
 
     // the ok response to expect
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 5de48bc..1585bbf 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
@@ -19,8 +19,10 @@
 import org.apache.camel.EndpointInject;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.test.context.ContextConfiguration;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -35,9 +37,11 @@
 @CamelSpringTest
 @ContextConfiguration
 public class JmsToHttpTXWithRollbackTest {
+    @RegisterExtension
+    public static JmsServiceExtension jmsServiceExtension = JmsServiceExtension.createExtension();
 
     // use uri to refer to our mock
-    @EndpointInject("mock:rollback")
+    @EndpointInject("mock:JmsToHttpWithRollbackRoute")
     MockEndpoint mock;
 
     // use the spring id to refer to the endpoint we should send data to
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java
index 1747d2c..8002e3f 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute.java
@@ -20,7 +20,9 @@
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.http.common.HttpOperationFailedException;
+import org.apache.camel.itest.utils.extensions.JmsServiceExtension;
 import org.apache.camel.test.AvailablePortFinder;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 /**
  * Route that listen on a JMS queue and send a request/reply over http
@@ -30,7 +32,6 @@
  * error handler.
  */
 public class JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute extends JmsToHttpRoute {
-
     private String noAccess = "<?xml version=\"1.0\"?><reply><status>Access denied</status></reply>";
 
     @Override
@@ -45,7 +46,7 @@
             }
         }).handled(true).to("mock:404").transform(constant(noAccess));
 
-        from("activemq:queue:data")
+        from("activemq:queue:JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute")
             // must setup policy to indicate transacted route
             .policy(required)
             // send a request to http and get the response
@@ -58,7 +59,7 @@
                 // do a xpath to compare if the status is NOT okay
                 .when().xpath("/reply/status != 'ok'")
                     // as this is based on an unit test we use mocks to verify how many times we did rollback
-                    .to("mock:rollback")
+                    .to("mock:JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute")
                     // response is not okay so force a rollback
                     .rollback()
                 .otherwise()
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java
index 76823b8..c17b3b7 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithOnExceptionRoute.java
@@ -16,10 +16,14 @@
  */
 package org.apache.camel.itest.tx;
 
+import javax.annotation.Resource;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.http.common.HttpOperationFailedException;
+import org.apache.camel.spring.SpringRouteBuilder;
+import org.apache.camel.spring.spi.SpringTransactionPolicy;
 import org.apache.camel.test.AvailablePortFinder;
 
 /**
@@ -29,9 +33,17 @@
  * Notice we use the SpringRouteBuilder that supports transacted
  * error handler.
  */
-public class JmsToHttpWithOnExceptionRoute extends JmsToHttpRoute {
+public class JmsToHttpWithOnExceptionRoute extends SpringRouteBuilder {
+    protected static int counter;
+    protected int port;
 
-    private String noAccess = "<?xml version=\"1.0\"?><reply><status>Access denied</status></reply>";
+    @Resource(name = "PROPAGATION_REQUIRED")
+    protected SpringTransactionPolicy required;
+
+    protected final String nok = "<?xml version=\"1.0\"?><reply><status>nok</status></reply>";
+    protected final String ok  = "<?xml version=\"1.0\"?><reply><status>ok</status></reply>";
+
+    private final String noAccess = "<?xml version=\"1.0\"?><reply><status>Access denied</status></reply>";
 
     @Override
     public void configure() {
@@ -46,9 +58,9 @@
                 HttpOperationFailedException e = exchange.getException(HttpOperationFailedException.class);
                 return e != null && e.getStatusCode() == 404;
             }
-        }).handled(true).to("mock:404").transform(constant(noAccess));
+        }).handled(true).to("mock:JmsToHttpWithOnExceptionRoute404").transform(constant(noAccess));
 
-        from("activemq:queue:data")
+        from("activemq:queue:JmsToHttpWithOnExceptionRoute")
             // must setup policy to indicate transacted route
             .policy(required)
             // send a request to http and get the response
@@ -61,7 +73,7 @@
                 // do a xpath to compare if the status is NOT okay
                 .when().xpath("/reply/status != 'ok'")
                     // as this is based on an unit test we use mocks to verify how many times we did rollback
-                    .to("mock:rollback")
+                    .to("mock:JmsToHttpWithOnExceptionRoute")
                     // response is not okay so force a rollback
                     .rollback()
                 .otherwise()
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java
index 0ea28e1..2c98948 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpWithRollbackRoute.java
@@ -16,8 +16,14 @@
  */
 package org.apache.camel.itest.tx;
 
+import javax.annotation.Resource;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.spring.SpringRouteBuilder;
+import org.apache.camel.spring.spi.SpringTransactionPolicy;
 import org.apache.camel.test.AvailablePortFinder;
 
 /**
@@ -27,7 +33,19 @@
  * Notice we use the SpringRouteBuilder that supports transacted
  * error handler.
  */
-public class JmsToHttpWithRollbackRoute extends JmsToHttpRoute {
+public class JmsToHttpWithRollbackRoute extends SpringRouteBuilder {
+    protected static int counter;
+    protected int port;
+
+    @Resource(name = "PROPAGATION_REQUIRED")
+    protected SpringTransactionPolicy required;
+
+    @EndpointInject("ref:data")
+    protected Endpoint data;
+
+    protected String nok = "<?xml version=\"1.0\"?><reply><status>nok</status></reply>";
+    protected String ok  = "<?xml version=\"1.0\"?><reply><status>ok</status></reply>";
+
 
     @Override
     public void configure() {
@@ -49,7 +67,7 @@
                 // do a xpath to compare if the status is NOT okay
                 .when().xpath("/reply/status != 'ok'")
                     // as this is based on an unit test we use mocks to verify how many times we did rollback
-                    .to("mock:rollback")
+                    .to("mock:JmsToHttpWithRollbackRoute")
                     // response is not okay so force a rollback
                     .rollback()
                 .otherwise()
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/FtpServiceExtension.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/FtpServiceExtension.java
new file mode 100644
index 0000000..a6305de
--- /dev/null
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/FtpServiceExtension.java
@@ -0,0 +1,98 @@
+/*
+ * 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.camel.itest.utils.extensions;
+
+import java.io.File;
+
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.ftpserver.FtpServer;
+import org.apache.ftpserver.FtpServerFactory;
+import org.apache.ftpserver.filesystem.nativefs.NativeFileSystemFactory;
+import org.apache.ftpserver.ftplet.UserManager;
+import org.apache.ftpserver.listener.ListenerFactory;
+import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
+import org.apache.ftpserver.usermanager.impl.PropertiesUserManager;
+import org.junit.jupiter.api.extension.AfterAllCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+
+public class FtpServiceExtension implements BeforeAllCallback, AfterAllCallback {
+    private static int ftpPort;
+    private static FtpServer ftpServer;
+
+    public FtpServiceExtension() {
+        if (ftpPort == 0) {
+            ftpPort = AvailablePortFinder.getNextAvailable();
+        }
+    }
+
+    public FtpServiceExtension(String property) {
+        if (ftpPort == 0) {
+            ftpPort = AvailablePortFinder.getNextAvailable();
+        }
+
+        //set them as system properties so Spring can use the property placeholder
+        //things to set them into the URL's in the spring contexts
+        System.setProperty(property, Integer.toString(ftpPort));
+    }
+
+    @Override
+    public void afterAll(ExtensionContext extensionContext) {
+        // Must keep it running (ie.: do not call ftpServer.stop()), otherwise throws:
+        // java.lang.IllegalStateException: FtpServer has been stopped. Restart is not supported
+    }
+
+    @Override
+    public void beforeAll(ExtensionContext extensionContext) throws Exception {
+        if (ftpServer == null) {
+            initFtpServer();
+
+            // Must start only once, otherwise throws:
+            // java.lang.IllegalStateException: Listener already started
+            ftpServer.start();
+        }
+    }
+
+    public int getPort() {
+        return ftpPort;
+    }
+
+    public String getAddress() {
+        return "ftp:localhost:" + ftpPort + "/myapp?password=admin&username=admin";
+    }
+
+
+    private void initFtpServer() {
+        FtpServerFactory serverFactory = new FtpServerFactory();
+
+        // setup user management to read our users.properties and use clear text passwords
+        File file = new File("src/test/resources/users.properties");
+        UserManager uman = new PropertiesUserManager(new ClearTextPasswordEncryptor(), file, "admin");
+        serverFactory.setUserManager(uman);
+
+        NativeFileSystemFactory fsf = new NativeFileSystemFactory();
+        fsf.setCreateHome(true);
+        serverFactory.setFileSystem(fsf);
+
+        ListenerFactory factory = new ListenerFactory();
+        factory.setPort(ftpPort);
+        serverFactory.addListener("default", factory.createListener());
+
+        ftpServer = serverFactory.createServer();
+    }
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/GreeterImpl.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterImpl.java
similarity index 97%
rename from tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/GreeterImpl.java
rename to tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterImpl.java
index 1e3b4c4..5773b9b 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/GreeterImpl.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterImpl.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.itest.greeter;
+package org.apache.camel.itest.utils.extensions;
 
 import java.util.logging.Logger;
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterServiceExtension.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterServiceExtension.java
new file mode 100644
index 0000000..1bd9de4
--- /dev/null
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/GreeterServiceExtension.java
@@ -0,0 +1,68 @@
+/*
+ * 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.camel.itest.utils.extensions;
+
+import javax.xml.ws.Endpoint;
+
+import org.apache.camel.test.AvailablePortFinder;
+import org.junit.jupiter.api.extension.AfterAllCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GreeterServiceExtension implements BeforeAllCallback, AfterAllCallback {
+    private static final Logger LOG = LoggerFactory.getLogger(GreeterServiceExtension.class);
+
+    private static final GreeterImpl GREETER;
+    private static final String ADDRESS;
+    private static final int PORT;
+
+    static {
+        PORT = AvailablePortFinder.getNextAvailable();
+        GREETER = new GreeterImpl();
+
+        ADDRESS = "http://localhost:" + PORT + "/SoapContext/SoapPort";
+        Endpoint.publish(ADDRESS, GREETER);
+    }
+
+    public GreeterServiceExtension(String portProperty) {
+        //set them as system properties so Spring can use the property placeholder
+        //things to set them into the URL's in the spring contexts
+        System.setProperty(portProperty, Integer.toString(PORT));
+    }
+
+    @Override
+    public void afterAll(ExtensionContext extensionContext) throws Exception {
+
+    }
+
+    @Override
+    public void beforeAll(ExtensionContext extensionContext) throws Exception {
+        LOG.info("The WS endpoint is published! ");
+    }
+
+
+    public static GreeterServiceExtension createExtension(String portProperty) {
+        return new GreeterServiceExtension(portProperty);
+    }
+
+    public GreeterImpl getGreeter() {
+        return GREETER;
+    }
+}
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
new file mode 100644
index 0000000..74f066ca
--- /dev/null
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.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.camel.itest.utils.extensions;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+
+import org.apache.camel.component.jms.JmsComponent;
+import org.apache.camel.itest.CamelJmsTestHelper;
+import org.junit.jupiter.api.extension.AfterAllCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+import static org.junit.jupiter.api.Assertions.fail;
+
+public final class JmsServiceExtension implements BeforeAllCallback, AfterAllCallback {
+    private static final Logger LOG = LoggerFactory.getLogger(JmsServiceExtension.class);
+
+    private static JmsServiceExtension instance;
+
+    private JmsComponent amq;
+
+
+    private JmsServiceExtension() throws JMSException {
+        LOG.info("Creating a new reusable AMQ component");
+        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
+
+        amq = jmsComponentAutoAcknowledge(connectionFactory);
+
+        connectionFactory.createConnection();
+    }
+
+
+    @Override
+    public void afterAll(ExtensionContext extensionContext) throws Exception {
+
+    }
+
+    @Override
+    public void beforeAll(ExtensionContext extensionContext) throws Exception {
+
+    }
+
+    public JmsComponent getComponent() {
+        return amq;
+    }
+
+    public static synchronized JmsServiceExtension createExtension() {
+        if (instance == null) {
+            try {
+                instance = new JmsServiceExtension();
+            } catch (JMSException e) {
+                LOG.error("Unable to create JMS connection: {}", e.getMessage(), e);
+                fail(String.format("Unable to create JMS connection: %s", e.getMessage()));
+            }
+        }
+
+        return instance;
+    }
+}
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterConsumerTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterConsumerTest-context.xml
index facda06..a38e91b 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterConsumerTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterConsumerTest-context.xml
@@ -45,7 +45,7 @@
   <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
       <property name="connectionFactory">
         <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
-          <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+          <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
           <property name="trustAllPackages" value="true"/>
         </bean>
       </property>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterTest-context.xml
index 357513a..d70b08a 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CamelGreeterTest-context.xml
@@ -42,7 +42,7 @@
   <bean id="prepareResponse" class="org.apache.camel.itest.greeter.PrepareResponse"/>
 
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
   <!-- START SNIPPET: example -->
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CxfToJmsInOutTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CxfToJmsInOutTest-context.xml
index 2538077..74fe756 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CxfToJmsInOutTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/CxfToJmsInOutTest-context.xml
@@ -44,7 +44,7 @@
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
       <property name="connectionFactory">
         <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
-          <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+          <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
           <property name="trustAllPackages" value="true"/>
         </bean>
       </property>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/JmsToCxfInOutTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/JmsToCxfInOutTest-context.xml
index 76425f9..a638391 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/JmsToCxfInOutTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/greeter/JmsToCxfInOutTest-context.xml
@@ -33,7 +33,7 @@
     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
     
     <jaxws:endpoint id="greeter" 
-	  implementor="org.apache.camel.itest.greeter.GreeterImpl" 
+	  implementor="org.apache.camel.itest.utils.extensions.GreeterImpl"
 	  address="http://localhost:${JmsToCxfInOutTest.port}/SoapContext/SoapPort"
       endpointName="s:SoapOverHttp"
       serviceName="s:SOAPService"
@@ -52,7 +52,7 @@
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
       <property name="connectionFactory">
         <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
-          <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+          <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
           <property name="trustAllPackages" value="true"/>
         </bean>
       </property>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest-context.xml
index ab01678..5f915a4 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownInProgressTest-context.xml
@@ -25,7 +25,7 @@
     ">
     <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"/>
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
         <property name="acceptMessagesWhileStopping" value="true"/>
     </bean>
 
@@ -33,13 +33,13 @@
 
         <!-- jetty supports suspension so we can graceful shutdown -->
         <route>
-            <from uri="jetty:http://localhost:{{JettyJmsShutdownInProgressTest.port}}/test"/>
-            <to uri="jms:queue:foo"/>
+            <from uri="jetty:http://localhost:{{JettyJmsShutdownInProgressTest.port}}/JettyJmsShutdownInProgressTest"/>
+            <to uri="jms:queue:JettyJmsShutdownInProgressTestFoo"/>
         </route>
 
         <!-- also defer this as we defer the other route -->
         <route shutdownRoute="Defer">
-            <from uri="jms:queue:foo?concurrentConsumers=5"/>
+            <from uri="jms:queue:JettyJmsShutdownInProgressTestFoo?concurrentConsumers=5"/>
             <delay>
                 <constant>10000</constant>
             </delay>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownTest-context.xml
index 07bdc72..a1aab3f 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsShutdownTest-context.xml
@@ -27,7 +27,7 @@
     <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"/>
     
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
         <property name="acceptMessagesWhileStopping" value="true"/>
     </bean>
 
@@ -35,13 +35,13 @@
 
         <!-- defer shutdown to route the in progress exchanges -->
         <route shutdownRoute="Defer">
-            <from uri="jetty:http://localhost:{{JettyJmsShutdownTest.port}}/test"/>
-            <to uri="jms:queue:foo"/>
+            <from uri="jetty:http://localhost:{{JettyJmsShutdownTest.port}}/JettyJmsShutdownTest"/>
+            <to uri="jms:queue:JettyJmsShutdownTest"/>
         </route>
 
         <!-- also defer this as we defer the other route -->
         <route shutdownRoute="Defer">
-            <from uri="jms:queue:foo?concurrentConsumers=5"/>
+            <from uri="jms:queue:JettyJmsShutdownTest?concurrentConsumers=5"/>
             <delay>
                 <constant>5000</constant>
             </delay>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTest-context.xml
index e37ca19..fcc4369 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTest-context.xml
@@ -26,7 +26,7 @@
     <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"/>
 
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
     <bean id="setExchangePatternProcessor" class="org.apache.camel.itest.jetty.SetExchangePatternProcessor"/>
@@ -34,14 +34,14 @@
     <!-- START SNIPPET: example -->
     <camelContext xmlns="http://camel.apache.org/schema/spring" trace="true">
         <route>
-            <from uri="jetty:http://localhost:{{JettyJmsTest.port}}/test"/>
+            <from uri="jetty:http://localhost:{{JettyJmsTest.port}}/JettyJmsTest"/>
             <to uri="log:MyCategory?level=INFO"/>
             <process ref="setExchangePatternProcessor"/>
-            <to uri="jms:responseQueue"/>
+            <to uri="jms:JettyJMSTestResponseQueue"/>
         </route>
         <route>
-            <from uri="jms:responseQueue"/>
-            <to uri="mock:resultEndpoint"/>
+            <from uri="jms:JettyJMSTestResponseQueue"/>
+            <to uri="mock:JettyJmsTestResultEndpoint"/>
         </route>
     </camelContext>
     <!-- END SNIPPET: example -->
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTwowayTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTwowayTest-context.xml
index f02a678..0e90f9f 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTwowayTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyJmsTwowayTest-context.xml
@@ -28,7 +28,7 @@
     <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"/>
 
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
     <bean id="setResponseProcessor" class="org.apache.camel.itest.jetty.SetResponseProcessor"/>
@@ -36,11 +36,11 @@
     <!-- START SNIPPET: example -->
     <camelContext xmlns="http://camel.apache.org/schema/spring" trace="true">
         <route>
-            <from uri="jetty:http://localhost:{{JettyJmsTwowayTest.port}}/test"/>
-            <to uri="jms:responseQueue"/>
+            <from uri="jetty:http://localhost:{{JettyJmsTwowayTest.port}}/JettyJmsTwowayTest"/>
+            <to uri="jms:JettyJmsTwowayTestResponseQueue"/>
         </route>
         <route>
-            <from uri="jms:responseQueue"/>
+            <from uri="jms:JettyJmsTwowayTestResponseQueue"/>
             <process ref="setResponseProcessor"/>
         </route>
     </camelContext>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest-context.xml
index ec6baa8..6d50b4a 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest-context.xml
@@ -27,14 +27,14 @@
     <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"/>
 
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
     <camelContext xmlns="http://camel.apache.org/schema/spring" trace="true">
         <route streamCache="true">
-            <from uri="jetty:http://localhost:{{JettyMulticastJmsFileTest.port}}/test"/>
+            <from uri="jetty:http://localhost:{{JettyMulticastJmsFileTest.port}}/JettyMulticastJmsFileTest"/>
             <multicast>
-                <to uri="jms:queue:foo" pattern="InOnly"/>
+                <to uri="jms:queue:JettyMulticastJmsFileTestFoo" pattern="InOnly"/>
                 <to uri="file://target/jetty" pattern="InOnly"/>
             </multicast>
             <transform>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.xml
index cc9c1b0..967983e 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jetty/JettySpringFailoverRoundRobinTest.xml
@@ -38,7 +38,7 @@
 
         <!-- START SNIPPET: e1 -->
         <route>
-            <from uri="direct:start"/>
+            <from uri="direct:JettySpringFailoverRoundRobinTestStart"/>
             <!-- load balance using failover in round robin mode.
                  Also do not inherit error handler which means the failover LB will not fallback
                  and use error handler but trigger failover to next endpoint immediately -->
@@ -55,27 +55,27 @@
 
         <route>
             <from uri="ref:bad"/>
-            <to uri="mock:bad"/>
+            <to uri="mock:JettySpringFailoverRoundRobinTestBad"/>
             <setHeader name="CamelHttpResponseCode"><constant>500</constant></setHeader>
             <setBody><constant>Something bad happened</constant></setBody>
         </route>
 
         <route>
             <from uri="ref:bad2"/>
-            <to uri="mock:bad2"/>
+            <to uri="mock:JettySpringFailoverRoundRobinTestBad2"/>
             <setHeader name="CamelHttpResponseCode"><constant>404</constant></setHeader>
             <setBody><constant>Not found</constant></setBody>
         </route>
 
         <route>
             <from uri="ref:good"/>
-            <to uri="mock:good"/>
+            <to uri="mock:JettySpringFailoverRoundRobinTestGood"/>
             <setBody><constant>Good</constant></setBody>
         </route>
 
         <route>
             <from uri="ref:good2"/>
-            <to uri="mock:good2"/>
+            <to uri="mock:JettySpringFailoverRoundRobinTestGood2"/>
             <setBody><constant>Also good</constant></setBody>
         </route>
 
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.xml
index 9327fa8..143febb 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/AdviceWithTransactionIssueTest.xml
@@ -29,7 +29,7 @@
   </bean>
 
   <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-    <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
+    <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
   </bean>
 
   <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/FileToJmsTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/FileToJmsTest-context.xml
index ebb3b15..7c8f111 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/FileToJmsTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/FileToJmsTest-context.xml
@@ -32,7 +32,7 @@
     </bean>
 
     <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
     <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.xml
index c43458a..28d730a 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JMSTransactionIsTransactedRedeliveredTest.xml
@@ -32,7 +32,7 @@
   </bean>
 
   <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-    <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
+    <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
   </bean>
 
   <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsConsumerShutdownTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsConsumerShutdownTest-context.xml
index fb68d4a..fc471c7 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsConsumerShutdownTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsConsumerShutdownTest-context.xml
@@ -25,7 +25,7 @@
                 http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
 
     <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
     <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsPollingConsumerTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsPollingConsumerTest-context.xml
index eddf6ba..096f20c 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsPollingConsumerTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/JmsPollingConsumerTest-context.xml
@@ -25,12 +25,6 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
        http://activemq.apache.org/schema/core http://activemq.org/config/1.0/1.0.xsd">
 
-    <!-- activemq broker -->
-    <broker:broker id="broker" useJmx="false" persistent="false" brokerName="localhost">
-        <broker:transportConnectors>
-            <broker:transportConnector name="tcp" uri="vm://localhost?broker.persistent=false"/>
-        </broker:transportConnectors>
-    </broker:broker>
 
     <!-- camel stuff below to send and listen to broker with a spring JMS transaction manager -->
     <bean id="poolConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
@@ -38,8 +32,8 @@
         <property name="connectionFactory" ref="jmsConnectionFactory"/>
     </bean>
 
-    <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+    <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
     <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
@@ -71,21 +65,21 @@
         <consumerTemplate id="consumerTemplate"/>
 
         <route>
-            <from uri="activemq:startConsumer"/>
+            <from uri="activemq:JmsPollingConsumerTestStartConsumer"/>
             <delay>
                 <constant>1000</constant>
             </delay>
             <to uri="bean:consumer"/>
-            <to uri="mock:result"/>
+            <to uri="mock:JmsPollingConsumerTestResult"/>
         </route>
 
         <route>
-            <from uri="direct:startConsumer"/>
+            <from uri="direct:JmsPollingConsumerTestStartConsumer"/>
             <delay>
                 <constant>1000</constant>
             </delay>
             <to uri="bean:consumer"/>
-            <to uri="mock:result"/>
+            <to uri="mock:JmsPollingConsumerTestResult"/>
         </route>
 
     </camelContext>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/SpringJmsValidatorTest.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/SpringJmsValidatorTest.xml
index 24c60a2..28a7ff1 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/SpringJmsValidatorTest.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/jms/SpringJmsValidatorTest.xml
@@ -24,7 +24,7 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
 
     <bean id="jms" class="org.apache.camel.component.activemq.ActiveMQComponent">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false"/>
     </bean>
 
     <camelContext xmlns="http://camel.apache.org/schema/spring">
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/test/SpringDebugBeforeTest.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/test/SpringDebugBeforeTest.xml
index a0548a7..a02e9b0 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/test/SpringDebugBeforeTest.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/test/SpringDebugBeforeTest.xml
@@ -25,9 +25,9 @@
 
     <camelContext xmlns="http://camel.apache.org/schema/spring">
         <route>
-            <from uri="direct:start"/>
+            <from uri="direct:SpringDebugBeforeTestStart"/>
             <log message="Got ${body}"/>
-            <to uri="mock:result"/>
+            <to uri="mock:SpringDebugBeforeTestResult"/>
         </route>
     </camelContext>
 
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXTest-context.xml
index dc3a983..bef850e 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXTest-context.xml
@@ -30,7 +30,7 @@
     </bean>
 
     <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
     </bean>
 
     <!-- Spring JMX TX manager -->
@@ -65,7 +65,7 @@
        <routeBuilder ref="route"/>
 
         <!-- define our data endpoint as the activemq queue we send a message to -->
-        <endpoint id="data" uri="activemq:queue:data"/>
+        <endpoint id="data" uri="activemq:queue:JmsToHttpRoute"/>
     </camelContext>
 
 </beans>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest-context.xml
index 9c15212..991bfc1 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest-context.xml
@@ -30,7 +30,7 @@
     </bean>
 
     <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
     </bean>
 
     <!-- Spring JMX TX manager -->
@@ -66,7 +66,7 @@
         <!--use our route -->
         <routeBuilder ref="route"/>
 
-        <endpoint id="data" uri="activemq:queue:data?requestTimeout=5000"/>
+        <endpoint id="data" uri="activemq:queue:JmsToHttpWithOnExceptionAndNoTransactionErrorHandlerConfiguredRoute?requestTimeout=5000"/>
     </camelContext>
 
 </beans>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest-context.xml
index 28bdb5c..2a7f224 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest-context.xml
@@ -30,7 +30,7 @@
     </bean>
 
     <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
     </bean>
 
     <!-- Spring JMX TX manager -->
@@ -66,7 +66,7 @@
         <!--use our route -->
         <routeBuilder ref="route"/>
 
-        <endpoint id="data" uri="activemq:queue:data?requestTimeout=5000"/>
+        <endpoint id="data" uri="activemq:queue:JmsToHttpWithOnExceptionRoute?requestTimeout=5000"/>
     </camelContext>
 
 </beans>
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest-context.xml
index 7befc7f..a6de8ff 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest-context.xml
@@ -30,7 +30,7 @@
     </bean>
 
     <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
+        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
     </bean>
 
     <!-- Spring JMX TX manager -->
@@ -65,7 +65,7 @@
         <routeBuilder ref="route"/>
 
         <!-- define our data endpoint as the activemq queue we send a message to -->
-        <endpoint id="data" uri="activemq:queue:data"/>
+        <endpoint id="data" uri="activemq:queue:JmsToHttpWithRollbackRoute"/>
     </camelContext>
 
 </beans>
diff --git a/tests/camel-itest/src/test/resources/spring-config/jms-applicationContext.xml b/tests/camel-itest/src/test/resources/spring-config/jms-applicationContext.xml
index 256e92e..fead1ee 100644
--- a/tests/camel-itest/src/test/resources/spring-config/jms-applicationContext.xml
+++ b/tests/camel-itest/src/test/resources/spring-config/jms-applicationContext.xml
@@ -29,7 +29,7 @@
 
 	<bean id="jmsConnectionFactory"
 		class="org.apache.activemq.ActiveMQConnectionFactory">
-		<property name="brokerURL" value="vm://localhost" />
+		<property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;create=false" />
 	</bean>
 
 </beans>
diff --git a/tests/camel-itest/src/test/resources/spring-config/server-WsAddressingContext.xml b/tests/camel-itest/src/test/resources/spring-config/server-WsAddressingContext.xml
index 163a2a2..0b3c14a 100644
--- a/tests/camel-itest/src/test/resources/spring-config/server-WsAddressingContext.xml
+++ b/tests/camel-itest/src/test/resources/spring-config/server-WsAddressingContext.xml
@@ -30,13 +30,7 @@
 
 	<import resource="classpath:META-INF/cxf/cxf.xml" />
 	
-    <broker:broker useJmx="false" persistent="false" brokerName="localhost">
-        <broker:transportConnectors>
-            <broker:transportConnector name="vm" uri="vm://localhost"/>
-        </broker:transportConnectors>
-    </broker:broker>
-
-	<import resource="classpath:spring-config/jms-applicationContext.xml" />
+    <import resource="classpath:spring-config/jms-applicationContext.xml" />
 
 	<endpoint xmlns="http://cxf.apache.org/jaxws"
 		id="org.apache.camel.itest.customerrelations.CustomerServiceV1"
diff --git a/tests/camel-itest/src/test/resources/spring-config/server-applicationContext.xml b/tests/camel-itest/src/test/resources/spring-config/server-applicationContext.xml
index 0e12b48..70e0792 100644
--- a/tests/camel-itest/src/test/resources/spring-config/server-applicationContext.xml
+++ b/tests/camel-itest/src/test/resources/spring-config/server-applicationContext.xml
@@ -32,12 +32,6 @@
 	
 	<import	resource="classpath:spring-config/jms-applicationContext.xml" />
 
-    <broker:broker useJmx="false" persistent="false" brokerName="localhost">
-        <broker:transportConnectors>
-            <broker:transportConnector name="vm" uri="vm://localhost"/>
-        </broker:transportConnectors>
-    </broker:broker>
-
 	<endpoint xmlns="http://cxf.apache.org/jaxws"
 		id="org.apache.camel.itest.customerrelations.CustomerServiceV1"
 		xmlns:customer="http://camel.apache.org/itest/customerrelations"