You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2022/08/18 10:03:15 UTC
[camel] 02/06: camel-test-infra-activemq: ensures instances are truly singleton
This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit e3857d681be532bd6ce5c292e7db509e091efcd3
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Aug 18 09:54:29 2022 +0200
camel-test-infra-activemq: ensures instances are truly singleton
---
.../services/ActiveMQEmbeddedServiceBuilder.java | 12 +++-
.../activemq/services/ActiveMQServiceFactory.java | 81 ++++++++++++++++------
2 files changed, 69 insertions(+), 24 deletions(-)
diff --git a/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java b/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java
index 27b6eac6e85..f421925062a 100644
--- a/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java
+++ b/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQEmbeddedServiceBuilder.java
@@ -600,17 +600,23 @@ public class ActiveMQEmbeddedServiceBuilder {
return new ActiveMQEmbeddedServiceBuilder();
}
+ private static String generateDataDirectoryPathForInstance(String name) {
+ return ActiveMQEmbeddedServiceBuilder.class.getResource("/").getFile() + name
+ + ThreadLocalRandom.current().nextInt(1000);
+ }
+
public static ActiveMQEmbeddedServiceBuilder defaultBroker() {
return defaultBroker(ActiveMQEmbeddedServiceBuilder.class.getSimpleName());
}
public static ActiveMQEmbeddedServiceBuilder defaultBroker(String name) {
+ final String dataDirectoryPath = generateDataDirectoryPathForInstance(name);
return new ActiveMQEmbeddedServiceBuilder()
.withDeleteAllMessagesOnStartup(true)
.withBrokerName(name)
.withAdvisorySupport(false)
.withUseJmx(false)
- .withDataDirectory(ActiveMQEmbeddedServiceBuilder.class.getResource("/").getFile());
+ .withDataDirectory(dataDirectoryPath);
}
public static ActiveMQEmbeddedServiceBuilder persistentBroker() {
@@ -619,7 +625,7 @@ public class ActiveMQEmbeddedServiceBuilder {
}
public static ActiveMQEmbeddedServiceBuilder persistentBroker(String name) {
- final String dataDirectory = ActiveMQEmbeddedServiceBuilder.class.getResource("/").getFile() + File.separator + name;
+ final String dataDirectoryPath = generateDataDirectoryPathForInstance(name);
return new ActiveMQEmbeddedServiceBuilder()
.withDeleteAllMessagesOnStartup(true)
@@ -627,7 +633,7 @@ public class ActiveMQEmbeddedServiceBuilder {
.withAdvisorySupport(false)
.withUseJmx(false)
.withPersistent(true)
- .withDataDirectory(dataDirectory);
+ .withDataDirectory(dataDirectoryPath);
}
}
diff --git a/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQServiceFactory.java b/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQServiceFactory.java
index 07cd13bdf5f..fd26b785e9b 100644
--- a/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQServiceFactory.java
+++ b/test-infra/camel-test-infra-activemq/src/test/java/org/apache/camel/test/infra/activemq/services/ActiveMQServiceFactory.java
@@ -63,8 +63,11 @@ public final class ActiveMQServiceFactory {
}
}
- private static SimpleTestServiceBuilder<ActiveMQService> instance;
- private static ActiveMQService service;
+ private static SimpleTestServiceBuilder<ActiveMQService> nonPersistentInstanceBuilder;
+ private static ActiveMQService nonPersistentService;
+
+ private static SimpleTestServiceBuilder<ActiveMQService> persistentInstanceBuilder;
+ private static ActiveMQService persistentService;
private ActiveMQServiceFactory() {
@@ -81,51 +84,87 @@ public final class ActiveMQServiceFactory {
.build();
}
+ /**
+ * Creates a new instance of an embedded ActiveMQ
+ *
+ * @return a new instance of an embedded ActiveMQ
+ */
public static synchronized ActiveMQService createVMService() {
return createSingletonVMService();
}
+ /**
+ * Creates a new instance of an embedded ActiveMQ. It may use a single instance if possible/supported.
+ *
+ * @return a new instance of an embedded ActiveMQ
+ */
public static synchronized ActiveMQService createVMServiceInstance() {
- if (service == null) {
- if (instance == null) {
- instance = new SimpleTestServiceBuilder<>("activemq");
-
- instance.addLocalMapping(() -> new SingletonActiveMQService(new ActiveMQVMService(), "activemq"));
- }
- }
+ SimpleTestServiceBuilder<ActiveMQService> instance = new SimpleTestServiceBuilder<>("activemq");
+ instance.addLocalMapping(ActiveMQVMService::new);
return instance.build();
}
+ /**
+ * Creates or reuses a new singleton instance of an embedded ActiveMQ
+ *
+ * @return an instance of an embedded ActiveMQ
+ */
public static synchronized ActiveMQService createSingletonVMService() {
- if (service == null) {
- service = createVMServiceInstance();
+ if (nonPersistentService == null) {
+ if (nonPersistentInstanceBuilder == null) {
+ nonPersistentInstanceBuilder = new SimpleTestServiceBuilder<>("activemq");
+
+ nonPersistentInstanceBuilder
+ .addLocalMapping(() -> new SingletonActiveMQService(new ActiveMQVMService(), "activemq"));
+ }
+
+ nonPersistentService = nonPersistentInstanceBuilder.build();
}
- return service;
+ return nonPersistentService;
}
+ /**
+ * Creates a new instance of a persistent embedded ActiveMQ. It may use a single instance if possible/supported.
+ *
+ * @return a new instance of a persistent embedded ActiveMQ
+ */
public static synchronized ActiveMQService createPersistentVMService() {
return createSingletonPersistentVMService();
}
+ /**
+ * Creates a new instance of a persistent embedded ActiveMQ
+ *
+ * @return a new instance of a persistent embedded ActiveMQ
+ */
public static synchronized ActiveMQService createPersistentVMServiceInstance() {
- if (service == null) {
- if (instance == null) {
- instance = new SimpleTestServiceBuilder<>("activemq");
+ SimpleTestServiceBuilder<ActiveMQService> instance = new SimpleTestServiceBuilder<>("activemq");
- instance.addLocalMapping(() -> new SingletonActiveMQService(new ActiveMQPersistentVMService(), "activemq"));
- }
- }
+ instance.addLocalMapping(ActiveMQPersistentVMService::new);
return instance.build();
}
+ /**
+ * Creates or reuses a new singleton instance of a persistent embedded ActiveMQ
+ *
+ * @return an instance of a persistent embedded ActiveMQ
+ */
public static synchronized ActiveMQService createSingletonPersistentVMService() {
- if (service == null) {
- service = createVMServiceInstance();
+ if (persistentService == null) {
+ if (persistentInstanceBuilder == null) {
+ persistentInstanceBuilder = new SimpleTestServiceBuilder<>("activemq");
+
+ persistentInstanceBuilder
+ .addLocalMapping(
+ () -> new SingletonActiveMQService(new ActiveMQPersistentVMService(), "activemq-persistent"));
+ }
+
+ persistentService = persistentInstanceBuilder.build();
}
- return service;
+ return persistentService;
}
}