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
- * "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();
}