CAMEL-8478: IdempotentRepository - Add clear operation, align JdbcMessageIdRepository
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/84e1d5da Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/84e1d5da Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/84e1d5da Branch: refs/heads/master Commit: 84e1d5dacb8e8f9c64186047a526cdafe99ce869 Parents: 02a6aa2 Author: Andrea Cosentino <anco...@gmail.com> Authored: Fri Jul 3 17:08:57 2015 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Fri Jul 3 17:08:57 2015 +0200 ---------------------------------------------------------------------- .../idempotent/jpa/JpaMessageIdRepository.java | 2 +- .../jdbc/AbstractJdbcMessageIdRepository.java | 19 +++++++++++++++++++ .../idempotent/jdbc/JdbcMessageIdRepository.java | 6 ++++++ .../jdbc/JdbcMessageIdRepositoryTest.java | 9 ++++++--- 4 files changed, 32 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/84e1d5da/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/JpaMessageIdRepository.java ---------------------------------------------------------------------- diff --git a/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/JpaMessageIdRepository.java b/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/JpaMessageIdRepository.java index 2f39177..b488277 100644 --- a/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/JpaMessageIdRepository.java +++ b/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/JpaMessageIdRepository.java @@ -202,8 +202,8 @@ public class JpaMessageIdRepository extends ServiceSupport implements ExchangeId while (it.hasNext()) { Object item = it.next(); entityManager.remove(item); - entityManager.flush(); } + entityManager.flush(); } return Boolean.TRUE; } http://git-wip-us.apache.org/repos/asf/camel/blob/84e1d5da/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/AbstractJdbcMessageIdRepository.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/AbstractJdbcMessageIdRepository.java b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/AbstractJdbcMessageIdRepository.java index f6e565d..ca1d15b 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/AbstractJdbcMessageIdRepository.java +++ b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/AbstractJdbcMessageIdRepository.java @@ -94,6 +94,14 @@ public abstract class AbstractJdbcMessageIdRepository<T> extends ServiceSupport * @return int number of rows deleted */ protected abstract int delete(final T key); + + /** + * Operations that deletes all the rows + * + * @param key the key + * @return int number of rows deleted + */ + protected abstract int delete(); /** * Creates the transaction template @@ -164,6 +172,17 @@ public abstract class AbstractJdbcMessageIdRepository<T> extends ServiceSupport }); return rc.booleanValue(); } + + @ManagedOperation(description = "Clear the store") + @Override + public void clear() { + transactionTemplate.execute(new TransactionCallback<Boolean>() { + public Boolean doInTransaction(TransactionStatus status) { + delete(); + return Boolean.TRUE; + } + }); + } @Override public boolean confirm(final T key) { http://git-wip-us.apache.org/repos/asf/camel/blob/84e1d5da/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java index 3aec5e8..b7bf688 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java +++ b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java @@ -36,6 +36,7 @@ public class JdbcMessageIdRepository extends AbstractJdbcMessageIdRepository<Str private String queryString = "SELECT COUNT(*) FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ? AND messageId = ?"; private String insertString = "INSERT INTO CAMEL_MESSAGEPROCESSED (processorName, messageId, createdAt) VALUES (?, ?, ?)"; private String deleteString = "DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ? AND messageId = ?"; + private String clearString = "DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?"; public JdbcMessageIdRepository() { } @@ -98,6 +99,11 @@ public class JdbcMessageIdRepository extends AbstractJdbcMessageIdRepository<Str protected int delete(String key) { return jdbcTemplate.update(deleteString, processorName, key); } + + @Override + protected int delete() { + return jdbcTemplate.update(clearString, processorName); + } public boolean isCreateTableIfNotExists() { return createTableIfNotExists; http://git-wip-us.apache.org/repos/asf/camel/blob/84e1d5da/components/camel-sql/src/test/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepositoryTest.java ---------------------------------------------------------------------- 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 1a1f0aa..9a4b9b8 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 @@ -36,6 +36,7 @@ import org.springframework.jdbc.core.JdbcTemplate; public class JdbcMessageIdRepositoryTest extends CamelSpringTestSupport { protected static final String SELECT_ALL_STRING = "SELECT messageId FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?"; + protected static final String CLEAR_STRING = "DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?"; protected static final String PROCESSOR_NAME = "myProcessorName"; protected JdbcTemplate jdbcTemplate; @@ -111,13 +112,15 @@ public class JdbcMessageIdRepositoryTest extends CamelSpringTestSupport { template.sendBodyAndHeader("direct:start", "three", "messageId", "3"); assertMockEndpointsSatisfied(); + + jdbcTemplate.update(CLEAR_STRING, PROCESSOR_NAME); // only message 1 and 3 should be in jdbc repo List<String> receivedMessageIds = jdbcTemplate.queryForList(SELECT_ALL_STRING, String.class, PROCESSOR_NAME); - assertEquals(2, receivedMessageIds.size()); - assertTrue("Should contain message 1", receivedMessageIds.contains("1")); - assertTrue("Should contain message 3", receivedMessageIds.contains("3")); + assertEquals(0, receivedMessageIds.size()); + assertFalse("Should not contain message 1", receivedMessageIds.contains("1")); + assertFalse("Should not contain message 3", receivedMessageIds.contains("3")); } @Override