You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/10/26 16:06:19 UTC

[1/3] git commit: CAMEL-6905: Added peek option to camel-mail. To mark mail as peek for IMAP messages to avoid mail server eager mark the mail as SEEN in case we rollback. Thanks to Dan Ambrose for reporting.

Updated Branches:
  refs/heads/camel-2.11.x f2e85bb7d -> a01324c74
  refs/heads/camel-2.12.x 21b8aae58 -> d12cba339
  refs/heads/master 9e0f1acf5 -> 090f7dbba


CAMEL-6905: Added peek option to camel-mail. To mark mail as peek for IMAP messages to avoid mail server eager mark the mail as SEEN in case we rollback. Thanks to Dan Ambrose for reporting.


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

Branch: refs/heads/master
Commit: 090f7dbba42e217af2b660c17bd8de3bd47d3e71
Parents: 9e0f1ac
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Oct 26 16:05:18 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Oct 26 16:06:12 2013 +0200

----------------------------------------------------------------------
 .../camel/component/mail/MailConfiguration.java |  9 +++++++
 .../camel/component/mail/MailConsumer.java      | 26 +++++++++++++++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/090f7dbb/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
index bb0d70e..29c5cca 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
@@ -63,6 +63,7 @@ public class MailConfiguration implements Cloneable {
     private boolean ignoreUnsupportedCharset;
     private boolean disconnect;
     private boolean closeFolder = true;
+    private boolean peek = true;
     private SSLContextParameters sslContextParameters;
 
     public MailConfiguration() {
@@ -493,4 +494,12 @@ public class MailConfiguration implements Cloneable {
     public void setCopyTo(String copyTo) {
         this.copyTo = copyTo;
     }
+
+    public boolean isPeek() {
+        return peek;
+    }
+
+    public void setPeek(boolean peek) {
+        this.peek = peek;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/090f7dbb/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
index dfcec4c..99a206d 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
@@ -31,9 +31,9 @@ import javax.mail.Store;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.ScheduledBatchPollingConsumer;
-import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.util.CastUtils;
+import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -180,6 +180,12 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
             // must use the original message in case we need to workaround a charset issue when extracting mail content
             final Message mail = exchange.getIn(MailMessage.class).getOriginalMessage();
 
+            // need to call setPeek on java-mail to avoid the message being flagged eagerly as SEEN on the server in case
+            // we process the message and rollback due an exception
+            if (getEndpoint().getConfiguration().isPeek()) {
+                peekMessage(mail);
+            }
+
             // add on completion to handle after work when the exchange is done
             exchange.addOnCompletion(new SynchronizationAdapter() {
                 public void onComplete(Exchange exchange) {
@@ -210,6 +216,19 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
         return total;
     }
 
+    private void peekMessage(Message mail) {
+        // this only applies to IMAP messages which has a setPeek method
+        if (mail.getClass().getName().startsWith("IMAP")) {
+            try {
+                LOG.trace("Calling setPeek(true) on mail message {}", mail);
+                IntrospectionSupport.setProperty(mail, "peek", true);
+            } catch (Throwable e) {
+                // ignore
+                LOG.trace("Error setting peak property to true on: " + mail + ". This exception is ignored.", e);
+            }
+        }
+    }
+
     protected Queue<Exchange> createExchanges(Message[] messages) throws MessagingException {
         Queue<Exchange> answer = new LinkedList<Exchange>();
 
@@ -222,6 +241,11 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
 
         for (int i = 0; i < count; i++) {
             Message message = messages[i];
+
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Mail #{} is of type: {} - {}", new Object[]{i, ObjectHelper.classCanonicalName(message), message});
+            }
+
             if (!message.getFlags().contains(Flags.Flag.DELETED)) {
                 Exchange exchange = getEndpoint().createExchange(message);
                 if (getEndpoint().getConfiguration().isMapMailMessage()) {


[2/3] git commit: CAMEL-6905: Added peek option to camel-mail. To mark mail as peek for IMAP messages to avoid mail server eager mark the mail as SEEN in case we rollback. Thanks to Dan Ambrose for reporting.

Posted by da...@apache.org.
CAMEL-6905: Added peek option to camel-mail. To mark mail as peek for IMAP messages to avoid mail server eager mark the mail as SEEN in case we rollback. Thanks to Dan Ambrose for reporting.


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

Branch: refs/heads/camel-2.12.x
Commit: d12cba3396a0bc6d913a11bfefba4c3647bdb706
Parents: 21b8aae
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Oct 26 16:05:18 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Oct 26 16:06:34 2013 +0200

----------------------------------------------------------------------
 .../camel/component/mail/MailConfiguration.java |  9 +++++++
 .../camel/component/mail/MailConsumer.java      | 26 +++++++++++++++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d12cba33/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
index bb0d70e..29c5cca 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
@@ -63,6 +63,7 @@ public class MailConfiguration implements Cloneable {
     private boolean ignoreUnsupportedCharset;
     private boolean disconnect;
     private boolean closeFolder = true;
+    private boolean peek = true;
     private SSLContextParameters sslContextParameters;
 
     public MailConfiguration() {
@@ -493,4 +494,12 @@ public class MailConfiguration implements Cloneable {
     public void setCopyTo(String copyTo) {
         this.copyTo = copyTo;
     }
+
+    public boolean isPeek() {
+        return peek;
+    }
+
+    public void setPeek(boolean peek) {
+        this.peek = peek;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/d12cba33/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
index dfcec4c..99a206d 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
@@ -31,9 +31,9 @@ import javax.mail.Store;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.ScheduledBatchPollingConsumer;
-import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.util.CastUtils;
+import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -180,6 +180,12 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
             // must use the original message in case we need to workaround a charset issue when extracting mail content
             final Message mail = exchange.getIn(MailMessage.class).getOriginalMessage();
 
+            // need to call setPeek on java-mail to avoid the message being flagged eagerly as SEEN on the server in case
+            // we process the message and rollback due an exception
+            if (getEndpoint().getConfiguration().isPeek()) {
+                peekMessage(mail);
+            }
+
             // add on completion to handle after work when the exchange is done
             exchange.addOnCompletion(new SynchronizationAdapter() {
                 public void onComplete(Exchange exchange) {
@@ -210,6 +216,19 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
         return total;
     }
 
+    private void peekMessage(Message mail) {
+        // this only applies to IMAP messages which has a setPeek method
+        if (mail.getClass().getName().startsWith("IMAP")) {
+            try {
+                LOG.trace("Calling setPeek(true) on mail message {}", mail);
+                IntrospectionSupport.setProperty(mail, "peek", true);
+            } catch (Throwable e) {
+                // ignore
+                LOG.trace("Error setting peak property to true on: " + mail + ". This exception is ignored.", e);
+            }
+        }
+    }
+
     protected Queue<Exchange> createExchanges(Message[] messages) throws MessagingException {
         Queue<Exchange> answer = new LinkedList<Exchange>();
 
@@ -222,6 +241,11 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
 
         for (int i = 0; i < count; i++) {
             Message message = messages[i];
+
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Mail #{} is of type: {} - {}", new Object[]{i, ObjectHelper.classCanonicalName(message), message});
+            }
+
             if (!message.getFlags().contains(Flags.Flag.DELETED)) {
                 Exchange exchange = getEndpoint().createExchange(message);
                 if (getEndpoint().getConfiguration().isMapMailMessage()) {


[3/3] git commit: CAMEL-6905: Added peek option to camel-mail. To mark mail as peek for IMAP messages to avoid mail server eager mark the mail as SEEN in case we rollback. Thanks to Dan Ambrose for reporting.

Posted by da...@apache.org.
CAMEL-6905: Added peek option to camel-mail. To mark mail as peek for IMAP messages to avoid mail server eager mark the mail as SEEN in case we rollback. Thanks to Dan Ambrose for reporting.


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

Branch: refs/heads/camel-2.11.x
Commit: a01324c7404aa46b45c0701aeb98368017ff4585
Parents: f2e85bb
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Oct 26 16:05:18 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Oct 26 16:06:45 2013 +0200

----------------------------------------------------------------------
 .../camel/component/mail/MailConfiguration.java |  9 +++++++
 .../camel/component/mail/MailConsumer.java      | 26 +++++++++++++++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a01324c7/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
index bb0d70e..29c5cca 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
@@ -63,6 +63,7 @@ public class MailConfiguration implements Cloneable {
     private boolean ignoreUnsupportedCharset;
     private boolean disconnect;
     private boolean closeFolder = true;
+    private boolean peek = true;
     private SSLContextParameters sslContextParameters;
 
     public MailConfiguration() {
@@ -493,4 +494,12 @@ public class MailConfiguration implements Cloneable {
     public void setCopyTo(String copyTo) {
         this.copyTo = copyTo;
     }
+
+    public boolean isPeek() {
+        return peek;
+    }
+
+    public void setPeek(boolean peek) {
+        this.peek = peek;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a01324c7/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
index 829b57f..5bbba45 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
@@ -31,9 +31,9 @@ import javax.mail.Store;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.ScheduledBatchPollingConsumer;
-import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.util.CastUtils;
+import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -180,6 +180,12 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
             // must use the original message in case we need to workaround a charset issue when extracting mail content
             final Message mail = exchange.getIn(MailMessage.class).getOriginalMessage();
 
+            // need to call setPeek on java-mail to avoid the message being flagged eagerly as SEEN on the server in case
+            // we process the message and rollback due an exception
+            if (getEndpoint().getConfiguration().isPeek()) {
+                peekMessage(mail);
+            }
+
             // add on completion to handle after work when the exchange is done
             exchange.addOnCompletion(new SynchronizationAdapter() {
                 public void onComplete(Exchange exchange) {
@@ -210,6 +216,19 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
         return total;
     }
 
+    private void peekMessage(Message mail) {
+        // this only applies to IMAP messages which has a setPeek method
+        if (mail.getClass().getName().startsWith("IMAP")) {
+            try {
+                LOG.trace("Calling setPeek(true) on mail message {}", mail);
+                IntrospectionSupport.setProperty(mail, "peek", true);
+            } catch (Throwable e) {
+                // ignore
+                LOG.trace("Error setting peak property to true on: " + mail + ". This exception is ignored.", e);
+            }
+        }
+    }
+
     protected Queue<Exchange> createExchanges(Message[] messages) throws MessagingException {
         Queue<Exchange> answer = new LinkedList<Exchange>();
 
@@ -222,6 +241,11 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
 
         for (int i = 0; i < count; i++) {
             Message message = messages[i];
+
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Mail #{} is of type: {} - {}", new Object[]{i, ObjectHelper.classCanonicalName(message), message});
+            }
+
             if (!message.getFlags().contains(Flags.Flag.DELETED)) {
                 Exchange exchange = getEndpoint().createExchange(message);
                 if (getEndpoint().getConfiguration().isMapMailMessage()) {