Spring AMQP

org.springframework.amqp.rabbit.transaction
Class RabbitTransactionManager

java.lang.Object
  extended by org.springframework.transaction.support.AbstractPlatformTransactionManager
      extended by org.springframework.amqp.rabbit.transaction.RabbitTransactionManager
All Implemented Interfaces:
Serializable, InitializingBean, PlatformTransactionManager, ResourceTransactionManager

public class RabbitTransactionManager
extends AbstractPlatformTransactionManager
implements ResourceTransactionManager, InitializingBean

PlatformTransactionManager implementation for a single Rabbit ConnectionFactory. Binds a Rabbit Channel from the specified ConnectionFactory to the thread, potentially allowing for one thread-bound channel per ConnectionFactory.

This local strategy is an alternative to executing Rabbit operations within, and synchronized with, external transactions. This strategy is not able to provide XA transactions, for example in order to share transactions between messaging and database access.

Application code is required to retrieve the transactional Rabbit resources via ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactory, boolean) instead of a standard Connection.createChannel() call with subsequent Channel creation. Spring's RabbitTemplate will autodetect a thread-bound Channel and automatically participate in it.

The use of CachingConnectionFactory as a target for this transaction manager is strongly recommended. CachingConnectionFactory uses a single Rabbit Connection for all Rabbit access in order to avoid the overhead of repeated Connection creation, as well as maintaining a cache of Channels. Each transaction will then share the same Rabbit Connection, while still using its own individual Rabbit Channel.

Transaction synchronization is turned off by default, as this manager might be used alongside a datastore-based Spring transaction manager such as the JDBC DataSourceTransactionManager, which has stronger needs for synchronization.

Author:
Dave Syer
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
AbstractPlatformTransactionManager.SuspendedResourcesHolder
 
Field Summary
 
Fields inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
 
Constructor Summary
RabbitTransactionManager()
          Create a new RabbitTransactionManager for bean-style usage.
RabbitTransactionManager(ConnectionFactory connectionFactory)
          Create a new RabbitTransactionManager, given a ConnectionFactory.
 
Method Summary
 void afterPropertiesSet()
          Make sure the ConnectionFactory has been set.
protected  void doBegin(Object transaction, TransactionDefinition definition)
           
protected  void doCleanupAfterCompletion(Object transaction)
           
protected  void doCommit(DefaultTransactionStatus status)
           
protected  Object doGetTransaction()
           
protected  void doResume(Object transaction, Object suspendedResources)
           
protected  void doRollback(DefaultTransactionStatus status)
           
protected  void doSetRollbackOnly(DefaultTransactionStatus status)
           
protected  Object doSuspend(Object transaction)
           
 ConnectionFactory getConnectionFactory()
           
 Object getResourceFactory()
           
protected  boolean isExistingTransaction(Object transaction)
           
 void setConnectionFactory(ConnectionFactory connectionFactory)
           
 
Methods inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, newTransactionStatus, prepareForCommit, prepareSynchronization, prepareTransactionStatus, registerAfterCompletionWithExistingTransaction, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, shouldCommitOnGlobalRollbackOnly, suspend, triggerBeforeCommit, triggerBeforeCompletion, useSavepointForNestedTransaction
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.springframework.transaction.PlatformTransactionManager
commit, getTransaction, rollback
 

Constructor Detail

RabbitTransactionManager

public RabbitTransactionManager()
Create a new RabbitTransactionManager for bean-style usage.

Note: The ConnectionFactory has to be set before using the instance. This constructor can be used to prepare a RabbitTemplate via a BeanFactory, typically setting the ConnectionFactory via setConnectionFactory.

Turns off transaction synchronization by default, as this manager might be used alongside a datastore-based Spring transaction manager like DataSourceTransactionManager, which has stronger needs for synchronization. Only one manager is allowed to drive synchronization at any point of time.

See Also:
setConnectionFactory(org.springframework.amqp.rabbit.connection.ConnectionFactory), AbstractPlatformTransactionManager.setTransactionSynchronization(int)

RabbitTransactionManager

public RabbitTransactionManager(ConnectionFactory connectionFactory)
Create a new RabbitTransactionManager, given a ConnectionFactory.

Parameters:
connectionFactory - the ConnectionFactory to use
Method Detail

setConnectionFactory

public void setConnectionFactory(ConnectionFactory connectionFactory)
Parameters:
connectionFactory - the connectionFactory to set

getConnectionFactory

public ConnectionFactory getConnectionFactory()
Returns:
the connectionFactory

afterPropertiesSet

public void afterPropertiesSet()
Make sure the ConnectionFactory has been set.

Specified by:
afterPropertiesSet in interface InitializingBean

getResourceFactory

public Object getResourceFactory()
Specified by:
getResourceFactory in interface ResourceTransactionManager

doGetTransaction

protected Object doGetTransaction()
Specified by:
doGetTransaction in class AbstractPlatformTransactionManager

isExistingTransaction

protected boolean isExistingTransaction(Object transaction)
Overrides:
isExistingTransaction in class AbstractPlatformTransactionManager

doBegin

protected void doBegin(Object transaction,
                       TransactionDefinition definition)
Specified by:
doBegin in class AbstractPlatformTransactionManager

doSuspend

protected Object doSuspend(Object transaction)
Overrides:
doSuspend in class AbstractPlatformTransactionManager

doResume

protected void doResume(Object transaction,
                        Object suspendedResources)
Overrides:
doResume in class AbstractPlatformTransactionManager

doCommit

protected void doCommit(DefaultTransactionStatus status)
Specified by:
doCommit in class AbstractPlatformTransactionManager

doRollback

protected void doRollback(DefaultTransactionStatus status)
Specified by:
doRollback in class AbstractPlatformTransactionManager

doSetRollbackOnly

protected void doSetRollbackOnly(DefaultTransactionStatus status)
Overrides:
doSetRollbackOnly in class AbstractPlatformTransactionManager

doCleanupAfterCompletion

protected void doCleanupAfterCompletion(Object transaction)
Overrides:
doCleanupAfterCompletion in class AbstractPlatformTransactionManager

Spring AMQP

Copyright © 2011. All Rights Reserved.