You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/08/07 18:16:46 UTC

[camel] branch pool created (now d52683508a6)

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

davsclaus pushed a change to branch pool
in repository https://gitbox.apache.org/repos/asf/camel.git


      at d52683508a6 CAMEL-19721: camel-activemq - ActiveMQ component should use jakarta based connection pool

This branch includes the following new commits:

     new d52683508a6 CAMEL-19721: camel-activemq - ActiveMQ component should use jakarta based connection pool

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[camel] 01/01: CAMEL-19721: camel-activemq - ActiveMQ component should use jakarta based connection pool

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch pool
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d52683508a6a667244fbe228229dda43f8b38fbf
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Aug 7 20:16:32 2023 +0200

    CAMEL-19721: camel-activemq - ActiveMQ component should use jakarta based connection pool
---
 .../component/activemq/ActiveMQComponent.java      | 12 ++++----
 .../component/activemq/ActiveMQConfiguration.java  | 34 +++++++++++++++-------
 2 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQComponent.java b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQComponent.java
index 435f07aae0e..c786331a126 100644
--- a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQComponent.java
+++ b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQComponent.java
@@ -16,10 +16,10 @@
  */
 package org.apache.camel.component.activemq;
 
+import java.lang.reflect.Method;
 import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.apache.activemq.Service;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.jms.JmsComponent;
@@ -41,7 +41,7 @@ import org.springframework.jms.core.JmsTemplate;
 @Component("activemq")
 public class ActiveMQComponent extends JmsComponent {
     private final CopyOnWriteArrayList<SingleConnectionFactory> singleConnectionFactoryList = new CopyOnWriteArrayList<>();
-    private final CopyOnWriteArrayList<Service> pooledConnectionFactoryServiceList = new CopyOnWriteArrayList<>();
+    private final CopyOnWriteArrayList<Object> pooledConnectionFactoryServiceList = new CopyOnWriteArrayList<>();
 
     public ActiveMQComponent() {
     }
@@ -177,7 +177,7 @@ public class ActiveMQComponent extends JmsComponent {
         super.setProperties(bean, parameters);
     }
 
-    protected void addPooledConnectionFactoryService(Service pooledConnectionFactoryService) {
+    protected void addPooledConnectionFactoryService(Object pooledConnectionFactoryService) {
         pooledConnectionFactoryServiceList.add(pooledConnectionFactoryService);
     }
 
@@ -215,9 +215,11 @@ public class ActiveMQComponent extends JmsComponent {
 
     @Override
     protected void doStop() throws Exception {
-        for (Service s : pooledConnectionFactoryServiceList) {
+        for (Object s : pooledConnectionFactoryServiceList) {
             try {
-                s.stop();
+                // invoke stop method if exists
+                Method m = s.getClass().getMethod("stop");
+                org.apache.camel.support.ObjectHelper.invokeMethod(m, s);
             } catch (Exception e) {
                 // ignore
             }
diff --git a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQConfiguration.java b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQConfiguration.java
index c4d9749248f..70cbbff6e6f 100644
--- a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQConfiguration.java
+++ b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQConfiguration.java
@@ -21,9 +21,10 @@ import java.lang.reflect.Constructor;
 import jakarta.jms.ConnectionFactory;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.activemq.Service;
+import org.apache.camel.CamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.jms.JmsConfiguration;
+import org.apache.camel.support.ObjectHelper;
 import org.springframework.jms.connection.CachingConnectionFactory;
 import org.springframework.jms.connection.DelegatingConnectionFactory;
 import org.springframework.jms.connection.JmsTransactionManager;
@@ -59,8 +60,8 @@ public class ActiveMQConfiguration extends JmsConfiguration {
     }
 
     /**
-     * @deprecated - use JmsConfiguration#getUsername()
      * @see        JmsConfiguration#getUsername()
+     * @deprecated - use JmsConfiguration#getUsername()
      */
     @Deprecated
     public String getUserName() {
@@ -68,8 +69,8 @@ public class ActiveMQConfiguration extends JmsConfiguration {
     }
 
     /**
-     * @deprecated - use JmsConfiguration#setUsername(String)
      * @see        JmsConfiguration#setUsername(String)
+     * @deprecated - use JmsConfiguration#setUsername(String)
      */
     @Deprecated
     public void setUserName(String userName) {
@@ -177,6 +178,7 @@ public class ActiveMQConfiguration extends JmsConfiguration {
             answer.setPassword(getPassword());
         }
         answer.setBrokerURL(getBrokerURL());
+        CamelContext context = activeMQComponent != null ? activeMQComponent.getCamelContext() : null;
         if (isUseSingleConnection()) {
             SingleConnectionFactory scf = new SingleConnectionFactory(answer);
             if (activeMQComponent != null) {
@@ -184,9 +186,9 @@ public class ActiveMQConfiguration extends JmsConfiguration {
             }
             return scf;
         } else if (isUsePooledConnection()) {
-            ConnectionFactory pcf = createPooledConnectionFactory(answer);
+            ConnectionFactory pcf = createPooledConnectionFactory(context, answer);
             if (activeMQComponent != null) {
-                activeMQComponent.addPooledConnectionFactoryService((Service) pcf);
+                activeMQComponent.addPooledConnectionFactoryService(pcf);
             }
             return pcf;
         } else {
@@ -194,17 +196,29 @@ public class ActiveMQConfiguration extends JmsConfiguration {
         }
     }
 
-    protected ConnectionFactory createPooledConnectionFactory(ActiveMQConnectionFactory connectionFactory) {
+    protected ConnectionFactory createPooledConnectionFactory(
+            CamelContext camelContext, ActiveMQConnectionFactory connectionFactory) {
         try {
-            Class<?> type = loadClass("org.apache.activemq.pool.PooledConnectionFactory", getClass().getClassLoader());
-            Constructor<?> constructor = type.getConstructor(org.apache.activemq.ActiveMQConnectionFactory.class);
-            return (ConnectionFactory) constructor.newInstance(connectionFactory);
+            Class<?> type = loadClass(camelContext, "org.messaginghub.pooled.jms.JmsPoolConnectionFactory",
+                    getClass().getClassLoader());
+
+            Constructor<?> constructor = type.getConstructor();
+            ConnectionFactory cf = (ConnectionFactory) constructor.newInstance();
+            ObjectHelper.invokeMethod(type.getDeclaredMethod("setConnectionFactory", Object.class), cf,
+                    connectionFactory);
+            return cf;
         } catch (Exception e) {
             throw new RuntimeCamelException("Failed to instantiate PooledConnectionFactory: " + e, e);
         }
     }
 
-    public static Class<?> loadClass(String name, ClassLoader loader) throws ClassNotFoundException {
+    public static Class<?> loadClass(CamelContext camelContext, String name, ClassLoader loader) throws ClassNotFoundException {
+        // if camel then use it to load the class
+        if (camelContext != null) {
+            return camelContext.getClassResolver()
+                    .resolveMandatoryClass("org.messaginghub.pooled.jms.JmsPoolConnectionFactory");
+        }
+
         ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
         if (contextClassLoader != null) {
             try {