From aab914676e5280b45b6bf9813480a0b5e882c9b4 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 10 Jan 2011 09:33:52 -0500 Subject: [PATCH] INT-1701 updated reference documentation regarding changes to IMAP IDLE auto-reconnect, changed copyright versions --- docs/src/reference/docbook/mail.xml | 35 ++++++++++++++++++- .../mail/AbstractMailReceiver.java | 2 +- .../mail/ImapIdleChannelAdapter.java | 4 ++- .../integration/mail/ImapMailReceiver.java | 2 +- .../integration/mail/MailHeaders.java | 2 +- .../integration/mail/MailReceiver.java | 2 +- .../mail/MailReceivingMessageSource.java | 2 +- .../mail/MailSendingMessageHandler.java | 2 +- .../integration/mail/MailTransportUtils.java | 2 +- .../integration/mail/Pop3MailReceiver.java | 2 +- .../config/ImapIdleChannelAdapterParser.java | 2 +- .../mail/config/MailHeaderEnricherParser.java | 2 +- .../MailInboundChannelAdapterParser.java | 2 +- .../mail/config/MailNamespaceHandler.java | 2 +- .../MailOutboundChannelAdapterParser.java | 2 +- .../mail/config/MailReceiverFactoryBean.java | 2 +- .../config/MailToStringTransformerParser.java | 2 +- .../AbstractMailMessageTransformer.java | 2 +- .../transformer/MailToStringTransformer.java | 2 +- 19 files changed, 54 insertions(+), 19 deletions(-) diff --git a/docs/src/reference/docbook/mail.xml b/docs/src/reference/docbook/mail.xml index a62b73c9f4..7fd2f1cfc8 100644 --- a/docs/src/reference/docbook/mail.xml +++ b/docs/src/reference/docbook/mail.xml @@ -89,7 +89,7 @@ - To configure an inbound Channel Adapter, you have the choice between polling or event-driven (assuming your + To configure an Inbound Channel Adapter, you have the choice between polling or event-driven (assuming your mail server supports IMAP IDLE - if not, then polling is the only option). A polling Channel Adapter simply requires the store URI and the channel to send inbound Messages to. The URI may begin with "pop3" or "imap": false ]]> + + IMAP IDLE and lost connection + + + When using IMAP IDLE channel adapter there might be situations where connection to the server may be lost + (e.g., network failure) and since Java Mail documentation explicitly states that the actual IMAP API is EXPERIMENTAL it is + important to understand the differences in the API and how to deal with them when configuring IMAP IDLE adapters. + Currently Spring Integration Mail adapters was tested with Java Mail 1.4.1 and Java Mail 1.4.3 and depending on which one + is used special attention must be payed to some of the java mail properties that needs to be set with regard to auto-reconnect. + + + + The following behavior was observed with GMAIL but should provide you with some tips on how to solve re-connect + issue with other providers, however feedback is always welcome. Again, below notes are based on GMAIL. + + + + With Java Mail 1.4.1 if mail.imaps.timeout property is set for a relatively short period of time (e.g., ~ 5 min) + then IMAPFolder.idle() will throw FolderClosedException after this timeout. + However if this property is not set (should be indefinite) the behavior that was observed is that IMAPFolder.idle() + method never returns nor it throws an exception. It will however reconnect automatically if connection was lost for a short + period of time (e.g., under 10 min), but if connection was lost for a long period of time (e.g., over 10 min), then + IMAPFolder.idle() will not throw FolderClosedException nor it will re-establish connection + and will remain in the blocked state indefinitely, thus leaving you no possibility to reconnect without restarting the adapter. + So the only way to make re-connect to work with Java Mail 1.4.1 is to set mail.imaps.timeout property explicitly + to some value, but it also means that such value shoudl be relatively short (under 10 min) and the connection should be + re-estabished relatively quickly. Again, it may be different with other providers. + + With Java Mail 1.4.3 there was significant improvements to the API ensuring that there will always be a condition which + will force IMAPFolder.idle() method to return via StoreClosedException or + FolderClosedException or simply return, thus allowing us to proceed with auto-reconnect. + Currently auto-reconnect will run infinitely making attempts to reconnect every 10 sec. + In both configurations channel and should-delete-messages are the REQUIRED diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java index 5eabda38d2..b9b3bc691e 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java index bb8f4f96f1..ad2e6bfed6 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,6 +41,7 @@ import org.springframework.util.Assert; * * @author Arjen Poutsma * @author Mark Fisher + * @author Oleg Zhurakousky */ public class ImapIdleChannelAdapter extends MessageProducerSupport { @@ -136,6 +137,7 @@ public class ImapIdleChannelAdapter extends MessageProducerSupport { } } catch (MessagingException e) { + e.printStackTrace(); if (shouldReconnectAutomatically){ if (e instanceof FolderClosedException || e instanceof StoreClosedException || diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java index 8122216efd..7136b287f8 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailHeaders.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailHeaders.java index 18faea5f5b..37b22ec838 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailHeaders.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailHeaders.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceiver.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceiver.java index 88c10316a3..cb349f0912 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceiver.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceiver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java index 967336b980..27a6c2ecca 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java index 1915378a4e..3e0da21904 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailTransportUtils.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailTransportUtils.java index 5a3ad02760..f385e59b77 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailTransportUtils.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailTransportUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2007-2009 the original author or authors. + * Copyright 2007-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/Pop3MailReceiver.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/Pop3MailReceiver.java index bf98d8555b..0701235f8a 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/Pop3MailReceiver.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/Pop3MailReceiver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java index f57ba135f4..0f53513fb4 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailHeaderEnricherParser.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailHeaderEnricherParser.java index 68f0184838..8c348f88c7 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailHeaderEnricherParser.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailHeaderEnricherParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java index d742a318fc..c273c18a49 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java index 7e4e100d5b..c55db32dde 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParser.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParser.java index a6892af3eb..e8e6318054 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParser.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java index f382949d8b..5d9f960be5 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailToStringTransformerParser.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailToStringTransformerParser.java index 8b7e38ef3e..b7cd9277d7 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailToStringTransformerParser.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailToStringTransformerParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/AbstractMailMessageTransformer.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/AbstractMailMessageTransformer.java index 33dfaec756..4feff16ab8 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/AbstractMailMessageTransformer.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/AbstractMailMessageTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/MailToStringTransformer.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/MailToStringTransformer.java index b9e0689584..fdcc0e6ee3 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/MailToStringTransformer.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/transformer/MailToStringTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.