You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2020/09/12 22:48:00 UTC

[camel] branch CAMEL-15504 created (now 642dc00)

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

janbednar pushed a change to branch CAMEL-15504
in repository https://gitbox.apache.org/repos/asf/camel.git.


      at 642dc00  CAMEL-15504: Support alternative JNDI locations for TransactionManager

This branch includes the following new commits:

     new 642dc00  CAMEL-15504: Support alternative JNDI locations for TransactionManager

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-15504: Support alternative JNDI locations for TransactionManager

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

janbednar pushed a commit to branch CAMEL-15504
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 642dc00e7608e2726c3b9ad7869e46b03f8fe67f
Author: Jan Bednář <ma...@janbednar.eu>
AuthorDate: Sat Sep 12 23:43:52 2020 +0200

    CAMEL-15504: Support alternative JNDI locations for TransactionManager
---
 .../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();
     }