You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gg...@apache.org on 2019/09/09 08:28:26 UTC
[camel] branch camel-2.24.x updated: CAMEL-13951: Expose setter for
transaction propagation using name. Fix tests
This is an automated email from the ASF dual-hosted git repository.
ggrzybek pushed a commit to branch camel-2.24.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.24.x by this push:
new 01b7916 CAMEL-13951: Expose setter for transaction propagation using name. Fix tests
01b7916 is described below
commit 01b7916023680c24b9922b0bce56a22f9fb9a20e
Author: Grzegorz Grzybek <gr...@gmail.com>
AuthorDate: Mon Sep 9 09:35:45 2019 +0200
CAMEL-13951: Expose setter for transaction propagation using name. Fix tests
(cherry picked from commit 067e53c91f9691a3cbb2bf83dbe16a87e9fa3f46)
---
.../aggregate/jdbc/JdbcAggregationRepository.java | 34 +++++++++++++++++-----
.../JdbcAggregationRepositoryMultipleRepoTest.java | 8 +++--
2 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
index 4fdca6f..597767a 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
@@ -34,6 +34,7 @@ import org.apache.camel.support.ServiceSupport;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.core.Constants;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
@@ -44,6 +45,7 @@ import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
@@ -57,10 +59,13 @@ import org.springframework.transaction.support.TransactionTemplate;
*/
public class JdbcAggregationRepository extends ServiceSupport implements RecoverableAggregationRepository, OptimisticLockingAggregationRepository {
+
private static final Logger LOG = LoggerFactory.getLogger(JdbcAggregationRepository.class);
private static final String ID = "id";
private static final String EXCHANGE = "exchange";
private static final String BODY = "body";
+ private static final Constants PROPAGATION_CONSTANTS = new Constants(TransactionDefinition.class);
+
private JdbcOptimisticLockingExceptionMapper jdbcOptimisticLockingExceptionMapper = new DefaultJdbcOptimisticLockingExceptionMapper();
private PlatformTransactionManager transactionManager;
private DataSource dataSource;
@@ -104,13 +109,6 @@ public class JdbcAggregationRepository extends ServiceSupport implements Recover
public final void setTransactionManager(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
-
- transactionTemplate = new TransactionTemplate(transactionManager);
- transactionTemplate.setPropagationBehavior(propagationBehavior);
-
- transactionTemplateReadOnly = new TransactionTemplate(transactionManager);
- transactionTemplateReadOnly.setPropagationBehavior(propagationBehavior);
- transactionTemplateReadOnly.setReadOnly(true);
}
/**
@@ -476,13 +474,26 @@ public class JdbcAggregationRepository extends ServiceSupport implements Recover
}
/**
- * Sets propagation behavior to use with spring transaction template which are used for database access.
+ * Sets propagation behavior to use with spring transaction templates which are used for database access.
* The default is TransactionDefinition.PROPAGATION_REQUIRED.
*/
public void setPropagationBehavior(int propagationBehavior) {
this.propagationBehavior = propagationBehavior;
}
+ /**
+ * Sets propagation behavior to use with spring transaction templates which are used for database access.
+ * The default is TransactionDefinition.PROPAGATION_REQUIRED. This setter accepts names of the constants, like
+ * "PROPAGATION_REQUIRED".
+ * @param propagationBehaviorName
+ */
+ public void setPropagationBehaviorName(String propagationBehaviorName) {
+ if (!propagationBehaviorName.startsWith(DefaultTransactionDefinition.PREFIX_PROPAGATION)) {
+ throw new IllegalArgumentException("Only propagation constants allowed");
+ }
+ setPropagationBehavior(PROPAGATION_CONSTANTS.asNumber(propagationBehaviorName).intValue());
+ }
+
public LobHandler getLobHandler() {
return lobHandler;
}
@@ -516,6 +527,13 @@ public class JdbcAggregationRepository extends ServiceSupport implements Recover
ObjectHelper.notNull(transactionManager, "TransactionManager");
ObjectHelper.notNull(dataSource, "DataSource");
+ transactionTemplate = new TransactionTemplate(transactionManager);
+ transactionTemplate.setPropagationBehavior(propagationBehavior);
+
+ transactionTemplateReadOnly = new TransactionTemplate(transactionManager);
+ transactionTemplateReadOnly.setPropagationBehavior(propagationBehavior);
+ transactionTemplateReadOnly.setReadOnly(true);
+
// log number of existing exchanges
int current = getKeys().size();
int completed = scan(null).size();
diff --git a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepositoryMultipleRepoTest.java b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepositoryMultipleRepoTest.java
index 1887e5d..be07b7b 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepositoryMultipleRepoTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepositoryMultipleRepoTest.java
@@ -26,12 +26,14 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JdbcAggregationRepositoryMultipleRepoTest extends CamelSpringTestSupport {
@Test
- public void testMultipeRepo() {
+ public void testMultipeRepo() throws Exception {
JdbcAggregationRepository repo1 = applicationContext.getBean("repo1", JdbcAggregationRepository.class);
repo1.setReturnOldExchange(true);
+ repo1.start();
JdbcAggregationRepository repo2 = applicationContext.getBean("repo2", JdbcAggregationRepository.class);
repo2.setReturnOldExchange(true);
+ repo2.start();
// Can't get something we have not put in...
Exchange actual = repo1.get(context, "missing");
@@ -76,10 +78,12 @@ public class JdbcAggregationRepositoryMultipleRepoTest extends CamelSpringTestSu
}
@Test
- public void testMultipeRepoSameKeyDifferentContent() {
+ public void testMultipeRepoSameKeyDifferentContent() throws Exception {
JdbcAggregationRepository repo1 = applicationContext.getBean("repo1", JdbcAggregationRepository.class);
+ repo1.start();
JdbcAggregationRepository repo2 = applicationContext.getBean("repo2", JdbcAggregationRepository.class);
+ repo2.start();
Exchange exchange1 = new DefaultExchange(context);
exchange1.getIn().setBody("Hello World");