You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zh...@apache.org on 2023/06/28 00:43:46 UTC

[camel-quarkus] branch main updated: Fix #5016 to add a IBMMQ pooling test with quarkus-pooled-jms (#5017)

This is an automated email from the ASF dual-hosted git repository.

zhfeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 0a765ca336 Fix #5016 to add a IBMMQ pooling test with quarkus-pooled-jms (#5017)
0a765ca336 is described below

commit 0a765ca336482090e260c918c034320176895ef5
Author: Zheng Feng <zh...@gmail.com>
AuthorDate: Wed Jun 28 08:43:40 2023 +0800

    Fix #5016 to add a IBMMQ pooling test with quarkus-pooled-jms (#5017)
---
 integration-tests/jms-ibmmq-client/pom.xml         |  7 ++++-
 ...QProducers.java => IBMMQConnectionFactory.java} | 26 ++++++++---------
 .../src/main/resources/application.properties      | 19 +++++++++++++
 .../it/{IBMMQTest.java => IBMMQPoolingTest.java}   | 25 ++++++----------
 .../quarkus/component/jms/ibmmq/it/IBMMQTest.java  |  2 +-
 .../component/jms/ibmmq/it/JmsPoolingEnabled.java  | 33 ++++++++++++++++++++++
 6 files changed, 79 insertions(+), 33 deletions(-)

diff --git a/integration-tests/jms-ibmmq-client/pom.xml b/integration-tests/jms-ibmmq-client/pom.xml
index 6b2861773e..924a004516 100644
--- a/integration-tests/jms-ibmmq-client/pom.xml
+++ b/integration-tests/jms-ibmmq-client/pom.xml
@@ -41,6 +41,12 @@
             <artifactId>camel-quarkus-jms</artifactId>
         </dependency>
 
+        <!-- Messaging Pooled JMS -->
+        <dependency>
+            <groupId>io.quarkiverse.messaginghub</groupId>
+            <artifactId>quarkus-pooled-jms</artifactId>
+        </dependency>
+
         <!-- Inherit base messaging routes -->
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -51,7 +57,6 @@
         <dependency>
             <groupId>com.ibm.mq</groupId>
             <artifactId>com.ibm.mq.jakarta.client</artifactId>
-            <scope>provided</scope>
         </dependency>
 
         <!-- test dependencies -->
diff --git a/integration-tests/jms-ibmmq-client/src/main/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQProducers.java b/integration-tests/jms-ibmmq-client/src/main/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQConnectionFactory.java
similarity index 58%
rename from integration-tests/jms-ibmmq-client/src/main/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQProducers.java
rename to integration-tests/jms-ibmmq-client/src/main/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQConnectionFactory.java
index 45b246ea69..fd009b9b63 100644
--- a/integration-tests/jms-ibmmq-client/src/main/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQProducers.java
+++ b/integration-tests/jms-ibmmq-client/src/main/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQConnectionFactory.java
@@ -18,27 +18,25 @@ package org.apache.camel.quarkus.component.jms.ibmmq.it;
 
 import com.ibm.mq.jakarta.jms.MQConnectionFactory;
 import com.ibm.msg.client.jakarta.wmq.WMQConstants;
-import jakarta.enterprise.inject.Produces;
-import jakarta.jms.ConnectionFactory;
+import jakarta.enterprise.context.Dependent;
 import org.eclipse.microprofile.config.ConfigProvider;
 
-public class IBMMQProducers {
-    @Produces
-    ConnectionFactory createConnectionFactory() {
-        MQConnectionFactory connectionFactory = new MQConnectionFactory();
-        connectionFactory.setHostName(ConfigProvider.getConfig().getValue("ibm.mq.host", String.class));
+@Dependent
+public class IBMMQConnectionFactory extends MQConnectionFactory {
+
+    public IBMMQConnectionFactory() {
+        setHostName(ConfigProvider.getConfig().getValue("ibm.mq.host", String.class));
         try {
-            connectionFactory.setPort(ConfigProvider.getConfig().getValue("ibm.mq.port", Integer.class));
-            connectionFactory.setChannel(ConfigProvider.getConfig().getValue("ibm.mq.channel", String.class));
-            connectionFactory.setQueueManager(ConfigProvider.getConfig().getValue("ibm.mq.queueManagerName", String.class));
-            connectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
-            connectionFactory.setStringProperty(WMQConstants.USERID,
+            setPort(ConfigProvider.getConfig().getValue("ibm.mq.port", Integer.class));
+            setChannel(ConfigProvider.getConfig().getValue("ibm.mq.channel", String.class));
+            setQueueManager(ConfigProvider.getConfig().getValue("ibm.mq.queueManagerName", String.class));
+            setTransportType(WMQConstants.WMQ_CM_CLIENT);
+            setStringProperty(WMQConstants.USERID,
                     ConfigProvider.getConfig().getValue("ibm.mq.user", String.class));
-            connectionFactory.setStringProperty(WMQConstants.PASSWORD,
+            setStringProperty(WMQConstants.PASSWORD,
                     ConfigProvider.getConfig().getValue("ibm.mq.password", String.class));
         } catch (Exception e) {
             throw new RuntimeException("Unable to create new IBM MQ connection factory", e);
         }
-        return connectionFactory;
     }
 }
diff --git a/integration-tests/jms-ibmmq-client/src/main/resources/application.properties b/integration-tests/jms-ibmmq-client/src/main/resources/application.properties
new file mode 100644
index 0000000000..b32e2e1086
--- /dev/null
+++ b/integration-tests/jms-ibmmq-client/src/main/resources/application.properties
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+#
+# Only enabled with IBMMQPoolingTest
+quarkus.pooled-jms.pooling.enabled=false
diff --git a/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQTest.java b/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQPoolingTest.java
similarity index 82%
copy from integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQTest.java
copy to integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQPoolingTest.java
index eb81e9e3d1..8597e50904 100644
--- a/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQTest.java
+++ b/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQPoolingTest.java
@@ -14,12 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.apache.camel.quarkus.component.jms.ibmmq.it;
 
 import java.lang.reflect.Method;
 
 import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
 import io.restassured.RestAssured;
 import org.apache.camel.quarkus.component.jms.ibmmq.support.IBMMQDestinations;
 import org.apache.camel.quarkus.component.jms.ibmmq.support.IBMMQTestResource;
@@ -30,14 +32,14 @@ import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
 
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.startsWith;
 
 @QuarkusTest
 @QuarkusTestResource(IBMMQTestResource.class)
 @EnabledIfSystemProperty(named = "ibm.mq.container.license", matches = "accept")
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
-public class IBMMQTest extends AbstractJmsMessagingTest {
+@TestProfile(JmsPoolingEnabled.class)
+public class IBMMQPoolingTest extends AbstractJmsMessagingTest {
     private IBMMQDestinations destinations;
 
     /**
@@ -67,22 +69,11 @@ public class IBMMQTest extends AbstractJmsMessagingTest {
         RestAssured.get("/messaging/jms/ibmmq/connection/factory")
                 .then()
                 .statusCode(200)
-                .body(startsWith("com.ibm.mq"));
+                .body(startsWith("org.apache.camel.quarkus.component.jms.ibmmq.it.IBMMQConnectionFactory"));
     }
 
-    @Test
-    public void testPojoProducer() {
-        String message = "Camel Quarkus IBM MQ Pojo Producer";
-
-        RestAssured.given()
-                .body(message)
-                .post("/messaging/jms/ibmmq/pojo/producer")
-                .then()
-                .statusCode(204);
-
-        RestAssured.get("/messaging/{queueName}", queue)
-                .then()
-                .statusCode(200)
-                .body(is(message));
+    @Override
+    public void testJmsTopic() {
+        // Ignore testJmsTopic since it can't use setClientId in a pool connection.
     }
 }
diff --git a/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQTest.java b/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQTest.java
index eb81e9e3d1..5dcd0d784d 100644
--- a/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQTest.java
+++ b/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/IBMMQTest.java
@@ -67,7 +67,7 @@ public class IBMMQTest extends AbstractJmsMessagingTest {
         RestAssured.get("/messaging/jms/ibmmq/connection/factory")
                 .then()
                 .statusCode(200)
-                .body(startsWith("com.ibm.mq"));
+                .body(startsWith("org.apache.camel.quarkus.component.jms.ibmmq.it.IBMMQConnectionFactory"));
     }
 
     @Test
diff --git a/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/JmsPoolingEnabled.java b/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/JmsPoolingEnabled.java
new file mode 100644
index 0000000000..e9727a299f
--- /dev/null
+++ b/integration-tests/jms-ibmmq-client/src/test/java/org/apache/camel/quarkus/component/jms/ibmmq/it/JmsPoolingEnabled.java
@@ -0,0 +1,33 @@
+/*
+ * 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.quarkus.component.jms.ibmmq.it;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+public class JmsPoolingEnabled implements QuarkusTestProfile {
+    @Override
+    public Map<String, String> getConfigOverrides() {
+        Map<String, String> props = new HashMap<>();
+        props.put("quarkus.pooled-jms.pooling.enabled", "true");
+        props.put("quarkus.pooled-jms.max-connections", "8");
+        return props;
+    }
+}