You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2015/07/03 22:23:52 UTC

[08/13] camel git commit: CAMEL-8478: IdempotentRepository - Add clear operation, align JpaMessageIdRepository

CAMEL-8478: IdempotentRepository - Add clear operation, align JpaMessageIdRepository


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/02a6aa25
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/02a6aa25
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/02a6aa25

Branch: refs/heads/master
Commit: 02a6aa2571f0eb5d496d2bb850c0d0b75ff79138
Parents: c4261d6
Author: Andrea Cosentino <an...@gmail.com>
Authored: Fri Jul 3 17:08:10 2015 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Fri Jul 3 17:08:10 2015 +0200

----------------------------------------------------------------------
 .../idempotent/jpa/JpaMessageIdRepository.java  | 35 ++++++++++++++++++++
 1 file changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/02a6aa25/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 4af8658..2f39177 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
@@ -17,7 +17,9 @@
 package org.apache.camel.processor.idempotent.jpa;
 
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
+
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
@@ -45,6 +47,7 @@ import static org.apache.camel.component.jpa.JpaHelper.getTargetEntityManager;
 @ManagedResource(description = "JPA based message id repository")
 public class JpaMessageIdRepository extends ServiceSupport implements ExchangeIdempotentRepository<String> {
     protected static final String QUERY_STRING = "select x from " + MessageProcessed.class.getName() + " x where x.processorName = ?1 and x.messageId = ?2";
+    protected static final String QUERY_CLEAR_STRING = "select x from " + MessageProcessed.class.getName() + " x where x.processorName = ?1";
     private static final Logger LOG = LoggerFactory.getLogger(JpaMessageIdRepository.class);
     private final String processorName;
     private final EntityManagerFactory entityManagerFactory;
@@ -183,12 +186,44 @@ public class JpaMessageIdRepository extends ServiceSupport implements ExchangeId
         return true;
     }
 
+    @ManagedOperation(description = "Clear the store")
+    public void clear() {
+        final EntityManager entityManager = getTargetEntityManager(null, entityManagerFactory, true, sharedEntityManager);
+
+        Boolean rc = transactionTemplate.execute(new TransactionCallback<Boolean>() {
+            public Boolean doInTransaction(TransactionStatus status) {
+                if (isJoinTransaction()) {
+                    entityManager.joinTransaction();
+                }
+
+                List<?> list = queryClear(entityManager);
+                if (!list.isEmpty()) {
+                    Iterator it = list.iterator();
+                    while (it.hasNext()) {
+                        Object item = it.next();
+                        entityManager.remove(item);
+                        entityManager.flush();
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        });
+
+        LOG.debug("clear the store {}", MessageProcessed.class.getName());        
+    }
+
     private List<?> query(final EntityManager entityManager, final String messageId) {
         Query query = entityManager.createQuery(QUERY_STRING);
         query.setParameter(1, processorName);
         query.setParameter(2, messageId);
         return query.getResultList();
     }
+    
+    private List<?> queryClear(final EntityManager entityManager) {
+        Query query = entityManager.createQuery(QUERY_CLEAR_STRING);
+        query.setParameter(1, processorName);
+        return query.getResultList();
+    }
 
     @ManagedAttribute(description = "The processor name")
     public String getProcessorName() {