From 8c43c59c03e77f1281994b5a368cf56c62294c46 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 11 Oct 2012 13:17:02 -0400 Subject: [PATCH] INT-2777 TransactionSynchronization Ensured that bindings of the resource only happen if TransactionSynchronizationFactory is not null Add documentation describing the expectation for the unbinding of the resource. INT-2777 Polishing Don't set up holder if it's not used. Doc fixes. --- .../endpoint/SourcePollingChannelAdapter.java | 7 +++---- .../integration/mail/ImapIdleChannelAdapter.java | 8 +++----- src/reference/docbook/transactions.xml | 10 ++++++++++ src/reference/docbook/whats-new.xml | 8 -------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java index f1a594b507..83d3dd55a2 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java @@ -103,11 +103,10 @@ public class SourcePollingChannelAdapter extends AbstractPollingEndpoint impleme IntegrationResourceHolder holder = null; if (TransactionSynchronizationManager.isActualTransactionActive()) { - holder = new IntegrationResourceHolder(); - holder.addAttribute(IntegrationResourceHolder.MESSAGE_SOURCE, source); - TransactionSynchronizationManager.bindResource(source, holder); - if (transactionSynchronizationFactory != null){ + holder = new IntegrationResourceHolder(); + holder.addAttribute(IntegrationResourceHolder.MESSAGE_SOURCE, source); + TransactionSynchronizationManager.bindResource(source, holder); TransactionSynchronizationManager.registerSynchronization(transactionSynchronizationFactory.create(source)); } } 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 43874d001a..dc4e6fca74 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 @@ -211,12 +211,10 @@ public class ImapIdleChannelAdapter extends MessageProducerSupport implements Be MessageBuilder.withPayload(mailMessage).build(); if (TransactionSynchronizationManager.isActualTransactionActive()) { - - IntegrationResourceHolder holder = new IntegrationResourceHolder(); - holder.setMessage(message); - TransactionSynchronizationManager.bindResource(ImapIdleChannelAdapter.this, holder); - if (transactionSynchronizationFactory != null){ + IntegrationResourceHolder holder = new IntegrationResourceHolder(); + holder.setMessage(message); + TransactionSynchronizationManager.bindResource(ImapIdleChannelAdapter.this, holder); TransactionSynchronizationManager. registerSynchronization(transactionSynchronizationFactory.create(ImapIdleChannelAdapter.this)); } diff --git a/src/reference/docbook/transactions.xml b/src/reference/docbook/transactions.xml index fde979ddef..26e38766df 100644 --- a/src/reference/docbook/transactions.xml +++ b/src/reference/docbook/transactions.xml @@ -254,10 +254,20 @@ public interface TransactionSynchronizationProcessor { 'payload'. + It is important to understand that this is simply synchronizing the actions with a transaction, it does not make a resource that is not inherently transactional actually transactional. Instead, the transaction (be it JDBC or otherwise) is started before the poll, and committed/rolled back when the flow completes, followed by the synchronized action. + + + It is also important to understand that if you provide a custom TransactionSynchronizationFactory, + it is responsible for creating a resource synchronization that will cause the bound resource to be unbound automatically, + when the transaction completes. + The default TransactionSynchronizationFactory does this by returning a subclass + of ResourceHolderSynchronization, with the default + shouldUnbindAtCompletion() returning true. + In addition to the after-commit and after-rollback expressions, diff --git a/src/reference/docbook/whats-new.xml b/src/reference/docbook/whats-new.xml index 91911c6f67..1eaeb7b8e5 100644 --- a/src/reference/docbook/whats-new.xml +++ b/src/reference/docbook/whats-new.xml @@ -119,14 +119,6 @@ For more information please see . -
- Transaction Synchronization - - When running from a transactional poller, - mail inbound adapters can be configured to update the mailbox only - if the transaction commits. - -
Orderly Shutdown