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 2020/09/14 10:51:34 UTC

[camel] branch master updated: CAMEL-15504: Support alternative JNDI locations for TransactionManager (#4208)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 6552836  CAMEL-15504: Support alternative JNDI locations for TransactionManager (#4208)
6552836 is described below

commit 655283638c440be25cf51337159223552f9d63fe
Author: Jan Bednar <ma...@janbednar.eu>
AuthorDate: Mon Sep 14 12:51:14 2020 +0200

    CAMEL-15504: Support alternative JNDI locations for TransactionManager (#4208)
---
 .../TransactionalJtaTransactionPolicy.java         | 38 +++++++++++++++++-----
 1 file changed, 30 insertions(+), 8 deletions(-)

diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/TransactionalJtaTransactionPolicy.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/TransactionalJtaTransactionPolicy.java
index 2bbbdde..e4f6812 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/TransactionalJtaTransactionPolicy.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/TransactionalJtaTransactionPolicy.java
@@ -34,22 +34,24 @@ import org.slf4j.LoggerFactory;
 /**
  * Helper methods for transaction handling
  *
- * This class requires the resource {@link TransactionManager} to be available through JNDI url
- * &quot;java:/TransactionManager&quot;
+ * This class requires the resource {@link TransactionManager} to be available through any of JNDI locations:
+ * &quot;java:comp/TransactionManager&quot;, &quot;java:appserver/TransactionManager&quot;,
+ * &quot;java:pm/TransactionManager&quot;, &quot;java:/TransactionManager&quot;
  */
 public abstract class TransactionalJtaTransactionPolicy extends JtaTransactionPolicy {
 
     private static final Logger LOG = LoggerFactory.getLogger(TransactionalJtaTransactionPolicy.class);
-    private static final String TRANSACTION_MANAGER_JNDI_NAME = "java:/TransactionManager";
+    private static final String[] TRANSACTION_MANAGER_JNDI_NAMES = new String[] {
+            "java:comp/TransactionManager",
+            "java:appserver/TransactionManager",
+            "java:pm/TransactionManager",
+            "java:/TransactionManager"
+    };
 
     protected TransactionManager transactionManager;
 
     public TransactionalJtaTransactionPolicy() {
-        try {
-            transactionManager = InitialContext.doLookup(TRANSACTION_MANAGER_JNDI_NAME);
-        } catch (NamingException e) {
-            LOG.warn("Could not find the transaction manager through " + TRANSACTION_MANAGER_JNDI_NAME);
-        }
+        transactionManager = lookupTransactionManager();
     }
 
     protected void runWithTransaction(final Runnable runnable, final boolean isNew) throws Throwable {
@@ -67,6 +69,26 @@ public abstract class TransactionalJtaTransactionPolicy extends JtaTransactionPo
         }
     }
 
+    private TransactionManager lookupTransactionManager() {
+        TransactionManager tm;
+        for (String jndiName : TRANSACTION_MANAGER_JNDI_NAMES) {
+            try {
+                tm = InitialContext.doLookup(jndiName);
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("JTA TransactionManager found at JNDI location [" + jndiName + "]");
+                }
+                return tm;
+            } catch (NamingException ex) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("No JTA TransactionManager found at JNDI location [" + jndiName + "]", ex);
+                }
+            }
+        }
+        LOG.warn("Could not find the transaction manager through any of following locations: {}",
+                String.join(",", TRANSACTION_MANAGER_JNDI_NAMES));
+        return null;
+    }
+
     private void begin() throws Exception {
         transactionManager.begin();
     }