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 - * "java:/TransactionManager" + * This class requires the resource {@link TransactionManager} to be available through any of JNDI locations: + * "java:comp/TransactionManager", "java:appserver/TransactionManager", + * "java:pm/TransactionManager", "java:/TransactionManager" */ 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(); }