Skip to content

Commit

Permalink
Use ConnectionFactoryWrapperBuildItem in Quarkus (#89)
Browse files Browse the repository at this point in the history
* Bump quarkus-artemis to 3.0.0.Alpha7

* Fix #71 to use ConnectionFactoryWrapperBuildItem in Quarkus
  • Loading branch information
zhfeng authored Mar 8, 2023
1 parent 898e83c commit 1a15178
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 34 deletions.
8 changes: 3 additions & 5 deletions deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,11 @@
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-narayana-jta-deployment</artifactId>
<optional>true</optional>
<artifactId>quarkus-jms-spi-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkiverse.artemis</groupId>
<artifactId>quarkus-artemis-jms-deployment</artifactId>
<version>${quarkus-artemis.version}</version>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-narayana-jta-deployment</artifactId>
<optional>true</optional>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package io.quarkiverse.messaginghub.pooled.jms.deployment;

import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.jboss.jandex.DotName;

import io.quarkiverse.messaginghub.pooled.jms.PooledJmsRecorder;
import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
import io.quarkus.artemis.jms.deployment.ArtemisJmsWrapperBuildItem;
import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.Capability;
import io.quarkus.deployment.annotations.BuildProducer;
Expand All @@ -14,6 +12,7 @@
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.jms.spi.deployment.ConnectionFactoryWrapperBuildItem;

class PooledJmsProcessor {

Expand All @@ -26,14 +25,15 @@ FeatureBuildItem feature() {

@BuildStep
void reflective(BuildProducer<ReflectiveClassBuildItem> producer) {
producer.produce(new ReflectiveClassBuildItem(true, false, ActiveMQConnectionFactory.class));
producer.produce(
new ReflectiveClassBuildItem(true, false, "org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory"));
producer.produce(new ReflectiveClassBuildItem(true, false, "org.apache.commons.pool2.impl.DefaultEvictionPolicy"));
}

@BuildStep
@Record(ExecutionTime.RUNTIME_INIT)
ArtemisJmsWrapperBuildItem wrap(Capabilities capabilities, PooledJmsRecorder recorder) {
return new ArtemisJmsWrapperBuildItem(recorder.getWrapper(capabilities.isPresent(Capability.TRANSACTIONS)));
ConnectionFactoryWrapperBuildItem wrap(Capabilities capabilities, PooledJmsRecorder recorder) {
return new ConnectionFactoryWrapperBuildItem(recorder.getWrapper(capabilities.isPresent(Capability.TRANSACTIONS)));
}

@BuildStep
Expand Down
9 changes: 1 addition & 8 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.version>3.0.0.Alpha5</quarkus.version>
<quarkus-artemis.version>3.0.0.Alpha6</quarkus-artemis.version>
<quarkus-artemis.version>3.0.0.Alpha7</quarkus-artemis.version>
<pooled-jms.version>3.1.0</pooled-jms.version>
</properties>
<dependencyManagement>
Expand All @@ -33,13 +33,6 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.quarkiverse.artemis</groupId>
<artifactId>quarkus-artemis-bom</artifactId>
<version>${quarkus-artemis.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
Expand Down
5 changes: 0 additions & 5 deletions runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,6 @@
<artifactId>quarkus-narayana-jta</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.quarkiverse.artemis</groupId>
<artifactId>quarkus-artemis-jms</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package io.quarkiverse.messaginghub.pooled.jms;

import io.quarkus.artemis.jms.runtime.ArtemisJmsWrapper;
import java.util.function.Function;

import jakarta.jms.ConnectionFactory;

import io.quarkus.runtime.annotations.Recorder;

@Recorder
Expand All @@ -11,7 +14,10 @@ public PooledJmsRecorder(PooledJmsRuntimeConfig config) {
this.pooledJmsRuntimeConfig = config;
}

public ArtemisJmsWrapper getWrapper(boolean transaction) {
return new PooledJmsWrapper(transaction, pooledJmsRuntimeConfig);
public Function<ConnectionFactory, Object> getWrapper(boolean transaction) {
return cf -> {
PooledJmsWrapper wrapper = new PooledJmsWrapper(transaction, pooledJmsRuntimeConfig);
return wrapper.wrapConnectionFactory(cf);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,15 @@
import jakarta.jms.ConnectionFactory;
import jakarta.transaction.TransactionManager;

import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.eclipse.microprofile.config.ConfigProvider;
import org.jboss.narayana.jta.jms.JmsXAResourceRecoveryHelper;
import org.jboss.tm.XAResourceRecoveryRegistry;
import org.messaginghub.pooled.jms.JmsPoolConnectionFactory;
import org.messaginghub.pooled.jms.JmsPoolXAConnectionFactory;

import io.quarkus.arc.Arc;
import io.quarkus.artemis.jms.runtime.ArtemisJmsWrapper;

public class PooledJmsWrapper implements ArtemisJmsWrapper {
public class PooledJmsWrapper {
private boolean transaction;
private PooledJmsRuntimeConfig pooledJmsRuntimeConfig;

Expand All @@ -22,8 +20,7 @@ public PooledJmsWrapper(boolean transaction, PooledJmsRuntimeConfig pooledJmsRun
this.pooledJmsRuntimeConfig = pooledJmsRuntimeConfig;
}

@Override
public ConnectionFactory wrapConnectionFactory(ActiveMQConnectionFactory connectionFactory) {
public ConnectionFactory wrapConnectionFactory(ConnectionFactory connectionFactory) {
if (!pooledJmsRuntimeConfig.poolingEnabled) {
return connectionFactory;
}
Expand All @@ -35,7 +32,7 @@ public ConnectionFactory wrapConnectionFactory(ActiveMQConnectionFactory connect
}
}

private ConnectionFactory getXAConnectionFactory(ActiveMQConnectionFactory connectionFactory) {
private ConnectionFactory getXAConnectionFactory(ConnectionFactory connectionFactory) {
TransactionManager transactionManager = Arc.container().instance(TransactionManager.class).get();

JmsPoolXAConnectionFactory xaConnectionFactory = new JmsPoolXAConnectionFactory();
Expand All @@ -55,15 +52,15 @@ private ConnectionFactory getXAConnectionFactory(ActiveMQConnectionFactory conne
return xaConnectionFactory;
}

private ConnectionFactory getConnectionFactory(ActiveMQConnectionFactory connectionFactory) {
private ConnectionFactory getConnectionFactory(ConnectionFactory connectionFactory) {
JmsPoolConnectionFactory poolConnectionFactory = new JmsPoolConnectionFactory();
pooledJmsRuntimeConfigureConnectionFactory(poolConnectionFactory, connectionFactory);

return poolConnectionFactory;
}

private void pooledJmsRuntimeConfigureConnectionFactory(JmsPoolConnectionFactory poolConnectionFactory,
ActiveMQConnectionFactory connectionFactory) {
ConnectionFactory connectionFactory) {
poolConnectionFactory.setConnectionFactory(connectionFactory);
poolConnectionFactory.setMaxConnections(pooledJmsRuntimeConfig.maxConnections);
poolConnectionFactory.setConnectionIdleTimeout(pooledJmsRuntimeConfig.connectionIdleTimeout);
Expand Down

0 comments on commit 1a15178

Please sign in to comment.