You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zh...@apache.org on 2023/02/10 14:25:29 UTC
[camel] branch main updated: Rewrite JdbcOrphanLockAwareIdempotentRepository::insert to not rely on exception (#9286)
This is an automated email from the ASF dual-hosted git repository.
zhfeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 6d566472a81 Rewrite JdbcOrphanLockAwareIdempotentRepository::insert to not rely on exception (#9286)
6d566472a81 is described below
commit 6d566472a8138218ce5f74ad2e902fe08ab8312d
Author: Marco Bungart <32...@users.noreply.github.com>
AuthorDate: Fri Feb 10 15:25:21 2023 +0100
Rewrite JdbcOrphanLockAwareIdempotentRepository::insert to not rely on exception (#9286)
* Removed the transaction since:
- the initial exception will mark the transaction as dirty, blocking subsequent changes
- not all databases support rollback of DDL (e.g MySQL, older Oracle DBs)
* rewrote insert such that no exception is thrown
* reverted changes to JdbcMessageIdRepository
* format fixes
---
.../jdbc/JdbcOrphanLockAwareIdempotentRepository.java | 16 +++++++++-------
.../idempotent/jdbc/JdbcMessageIdRepositoryTest.java | 3 +--
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcOrphanLockAwareIdempotentRepository.java b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcOrphanLockAwareIdempotentRepository.java
index a84cbff205f..2934a71e153 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcOrphanLockAwareIdempotentRepository.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcOrphanLockAwareIdempotentRepository.java
@@ -31,7 +31,6 @@ import javax.sql.DataSource;
import org.apache.camel.CamelContext;
import org.apache.camel.ShutdownableService;
import org.apache.camel.spi.ExecutorServiceManager;
-import org.springframework.dao.DuplicateKeyException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.support.TransactionTemplate;
@@ -119,12 +118,15 @@ public class JdbcOrphanLockAwareIdempotentRepository extends JdbcMessageIdReposi
Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
long stamp = sl.writeLock();
try {
- int result = jdbcTemplate.update(getInsertString(), processorName, key, currentTimestamp);
- processorNameMessageIdSet.add(new ProcessorNameAndMessageId(processorName, key));
- return result;
- } catch (DuplicateKeyException e) {
- //Update in case of orphan lock where a process dies without releasing exist lock
- return jdbcTemplate.update(getUpdateTimestampQuery(), currentTimestamp, processorName, key);
+ if (jdbcTemplate.queryForObject(getQueryString(), Integer.class, processorName, key) == 0) {
+ int result = jdbcTemplate.update(getInsertString(), processorName, key, currentTimestamp);
+ processorNameMessageIdSet.add(new ProcessorNameAndMessageId(processorName, key));
+ return result;
+ } else {
+ //Update in case of orphan lock where a process dies without releasing exist lock
+ return jdbcTemplate.update(getUpdateTimestampQuery(), currentTimestamp,
+ processorName, key);
+ }
} finally {
sl.unlockWrite(stamp);
}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepositoryTest.java b/components/camel-sql/src/test/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepositoryTest.java
index 904724d411d..5d11a8bff2c 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepositoryTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepositoryTest.java
@@ -45,7 +45,6 @@ public class JdbcMessageIdRepositoryTest extends CamelSpringTestSupport {
protected static final String PROCESSOR_NAME = "myProcessorName";
protected JdbcTemplate jdbcTemplate;
- protected DataSource dataSource;
@EndpointInject("mock:result")
protected MockEndpoint resultEndpoint;
@@ -58,7 +57,7 @@ public class JdbcMessageIdRepositoryTest extends CamelSpringTestSupport {
public void setUp() throws Exception {
super.setUp();
- dataSource = context.getRegistry().lookupByNameAndType("dataSource", DataSource.class);
+ DataSource dataSource = context.getRegistry().lookupByNameAndType("dataSource", DataSource.class);
jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.afterPropertiesSet();
}