Skip to content

Commit

Permalink
Fix amqphub#22 to add pooling support
Browse files Browse the repository at this point in the history
  • Loading branch information
zhfeng committed Apr 19, 2023
1 parent e097b7c commit 5eb4a33
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 2 deletions.
4 changes: 4 additions & 0 deletions deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jms-spi-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-netty-deployment</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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";

Expand All @@ -80,6 +91,25 @@ public void enableSecurityServices(BuildProducer<FeatureBuildItem> feature,
AdditionalBeanBuildItem registerBean() {
return AdditionalBeanBuildItem.unremovableOf(QpidJmsProducer.class);
}

@BuildStep
@Record(ExecutionTime.RUNTIME_INIT)
void connectionFactoryWrapper(Optional<ConnectionFactoryWrapperBuildItem> connectionFactoryWrapper,
QpidJmsRecorder recorder,
BuildProducer<SyntheticBeanBuildItem> syntheticBeanProducer) {
Optional<Function<ConnectionFactory, Object>> 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<ReflectiveClassBuildItem> reflectiveClass,
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ConnectionFactoryWrapper> getConnectionFactoryWrapper(Optional<Function<ConnectionFactory, Object>> wrapper) {
return new RuntimeValue<>(connectionFactory -> {
if (wrapper.isPresent()) {
return (ConnectionFactory) wrapper.get().apply(connectionFactory);
} else {
return connectionFactory;
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.amqphub.quarkus.qpid.jms.runtime;

import jakarta.jms.ConnectionFactory;

public interface ConnectionFactoryWrapper {
ConnectionFactory wrap(ConnectionFactory connectionFactory);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down

0 comments on commit 5eb4a33

Please sign in to comment.