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:03:02 UTC

[camel] branch master 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 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 067e53c  CAMEL-13951: Expose setter for transaction propagation using name. Fix tests
     new a6c88eb  Merge pull request #3155 from grgrzybek/CAMEL-13951-master
067e53c is described below

commit 067e53c91f9691a3cbb2bf83dbe16a87e9fa3f46
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
---
 .../aggregate/jdbc/JdbcAggregationRepository.java  | 34 +++++++++++++++++-----
 .../JdbcAggregationRepositoryMultipleRepoTest.java |  4 +++
 2 files changed, 30 insertions(+), 8 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 2a1f412..b580a13 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
@@ -36,6 +36,7 @@ import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.core.Constants;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -48,6 +49,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;
@@ -62,10 +64,13 @@ import org.springframework.util.FileCopyUtils;
  */
 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;
@@ -109,13 +114,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);
     }
 
     /**
@@ -495,13 +493,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;
     }
@@ -535,6 +546,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 c03d505..09a8b4c 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
@@ -29,9 +29,11 @@ public class JdbcAggregationRepositoryMultipleRepoTest extends CamelSpringTestSu
     public void testMultipeRepo() {
         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");
@@ -78,8 +80,10 @@ public class JdbcAggregationRepositoryMultipleRepoTest extends CamelSpringTestSu
     @Test
     public void testMultipeRepoSameKeyDifferentContent() {
         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");