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ář <m...@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();
     }

Reply via email to