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"
