This is an automated email from the ASF dual-hosted git repository. ggrzybek pushed a commit to branch camel-2.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.x by this push: new bb84093 CAMEL-13951: Expose setter for transaction propagation using name. Fix tests bb84093 is described below commit bb8409323b1e334c3a0e441cb5af770185825079 Author: Grzegorz Grzybek <gr.grzy...@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) (cherry picked from commit 01b7916023680c24b9922b0bce56a22f9fb9a20e) --- .../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");