diff --git a/deployment/pom.xml b/deployment/pom.xml
index 5e5ede5..f861349 100644
--- a/deployment/pom.xml
+++ b/deployment/pom.xml
@@ -52,6 +52,10 @@
io.quarkus
quarkus-arc-deployment
+
+ io.quarkus
+ quarkus-jms-spi-deployment
+
io.quarkus
quarkus-netty-deployment
diff --git a/deployment/src/main/java/org/amqphub/quarkus/qpid/jms/deployment/QpidJmsProcessor.java b/deployment/src/main/java/org/amqphub/quarkus/qpid/jms/deployment/QpidJmsProcessor.java
index 52ec56b..eb8ccb4 100644
--- a/deployment/src/main/java/org/amqphub/quarkus/qpid/jms/deployment/QpidJmsProcessor.java
+++ b/deployment/src/main/java/org/amqphub/quarkus/qpid/jms/deployment/QpidJmsProcessor.java
@@ -15,6 +15,14 @@
*/
package org.amqphub.quarkus.qpid.jms.deployment;
+import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.jms.spi.deployment.ConnectionFactoryWrapperBuildItem;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.jms.ConnectionFactory;
+import org.amqphub.quarkus.qpid.jms.QpidJmsRecorder;
+import org.amqphub.quarkus.qpid.jms.runtime.ConnectionFactoryWrapper;
import org.amqphub.quarkus.qpid.jms.runtime.QpidJmsProducer;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.apache.qpid.jms.meta.JmsConnectionInfo;
@@ -60,6 +68,9 @@
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
+import java.util.Optional;
+import java.util.function.Function;
+
public class QpidJmsProcessor {
private static final String QPID_JMS = "qpid-jms";
@@ -80,6 +91,25 @@ public void enableSecurityServices(BuildProducer feature,
AdditionalBeanBuildItem registerBean() {
return AdditionalBeanBuildItem.unremovableOf(QpidJmsProducer.class);
}
+
+ @BuildStep
+ @Record(ExecutionTime.RUNTIME_INIT)
+ void connectionFactoryWrapper(Optional connectionFactoryWrapper,
+ QpidJmsRecorder recorder,
+ BuildProducer syntheticBeanProducer) {
+ Optional> wrapper = Optional.empty();
+ if (connectionFactoryWrapper.isPresent()) {
+ wrapper = Optional.of(connectionFactoryWrapper.get().getWrapper());
+ }
+
+ SyntheticBeanBuildItem.ExtendedBeanConfigurator configurator = SyntheticBeanBuildItem.configure(ConnectionFactoryWrapper.class)
+ .setRuntimeInit()
+ .defaultBean()
+ .scope(ApplicationScoped.class)
+ .runtimeValue(recorder.getConnectionFactoryWrapper(wrapper));
+
+ syntheticBeanProducer.produce(configurator.done());
+ }
@BuildStep
public void build(CombinedIndexBuildItem indexBuildItem, BuildProducer reflectiveClass,
diff --git a/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/QpidJmsRecorder.java b/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/QpidJmsRecorder.java
new file mode 100644
index 0000000..797feac
--- /dev/null
+++ b/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/QpidJmsRecorder.java
@@ -0,0 +1,22 @@
+package org.amqphub.quarkus.qpid.jms;
+
+import io.quarkus.runtime.RuntimeValue;
+import io.quarkus.runtime.annotations.Recorder;
+import jakarta.jms.ConnectionFactory;
+import org.amqphub.quarkus.qpid.jms.runtime.ConnectionFactoryWrapper;
+
+import java.util.Optional;
+import java.util.function.Function;
+
+@Recorder
+public class QpidJmsRecorder {
+ public RuntimeValue getConnectionFactoryWrapper(Optional> wrapper) {
+ return new RuntimeValue<>(connectionFactory -> {
+ if (wrapper.isPresent()) {
+ return (ConnectionFactory) wrapper.get().apply(connectionFactory);
+ } else {
+ return connectionFactory;
+ }
+ });
+ }
+}
diff --git a/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/runtime/ConnectionFactoryWrapper.java b/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/runtime/ConnectionFactoryWrapper.java
new file mode 100644
index 0000000..b201d10
--- /dev/null
+++ b/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/runtime/ConnectionFactoryWrapper.java
@@ -0,0 +1,7 @@
+package org.amqphub.quarkus.qpid.jms.runtime;
+
+import jakarta.jms.ConnectionFactory;
+
+public interface ConnectionFactoryWrapper {
+ ConnectionFactory wrap(ConnectionFactory connectionFactory);
+}
diff --git a/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/runtime/QpidJmsProducer.java b/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/runtime/QpidJmsProducer.java
index 3231184..eefca2a 100644
--- a/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/runtime/QpidJmsProducer.java
+++ b/runtime/src/main/java/org/amqphub/quarkus/qpid/jms/runtime/QpidJmsProducer.java
@@ -33,8 +33,8 @@ public class QpidJmsProducer {
@Produces
@ApplicationScoped
@DefaultBean
- public ConnectionFactory connectionFactory() {
- return new JmsConnectionFactory(config.username.orElse(null), config.password.orElse(null), config.url);
+ public ConnectionFactory connectionFactory(ConnectionFactoryWrapper wrapper) {
+ return wrapper.wrap(new JmsConnectionFactory(config.username.orElse(null), config.password.orElse(null), config.url));
}
public QpidJmsRuntimeConfig getConfig() {