org.springframework.jms.connection
Class JmsTransactionManager

java.lang.Object
  extended byorg.springframework.transaction.support.AbstractPlatformTransactionManager
      extended byorg.springframework.jms.connection.JmsTransactionManager
All Implemented Interfaces:
PlatformTransactionManager, Serializable
Direct Known Subclasses:
JmsTransactionManager102

public class JmsTransactionManager
extends AbstractPlatformTransactionManager

PlatformTransactionManager implementation for a single JMS ConnectionFactory. Binds a JMS Connection/Session pair from the specified ConnectionFactory to the thread, potentially allowing for one thread session per connection factory.

This local strategy is an alternative to executing JMS operations within JTA transactions. Its advantage is that it is able to work in any environment, for example a standalone application or a test suite. It is not able to provide XA transactions, for example to share transactions with data access.

JmsTemplate will auto-detect such thread-bound connection/session pairs and automatically participate in them. There is currently no support for letting plain JMS code participate in such transactions.

This transaction strategy will typically be used in combination with SingleConnectionFactory, which uses a single JMS connection for all JMS access to save resources, typically in a standalone application. Each transaction will then use the same JMS Connection but its own JMS Session.

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.

Since:
1.1
Author:
Juergen Hoeller
See Also:
JmsTemplate, SingleConnectionFactory, Serialized Form

Field Summary
 
Fields inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
 
Constructor Summary
JmsTransactionManager()
          Create a new JmsTransactionManager for bean-style usage.
JmsTransactionManager(ConnectionFactory connectionFactory)
          Create a new JmsTransactionManager, given a ConnectionFactory.
 
Method Summary
 void afterPropertiesSet()
          Make sure the connection factory has been set.
protected  Connection createConnection()
          Create a JMS Connection via this template's ConnectionFactory.
protected  Session createSession(Connection con)
          Create a JMS Session for the given Connection.
protected  void doBegin(Object transaction, TransactionDefinition definition)
          Begin a new transaction with the given transaction definition.
protected  void doCleanupAfterCompletion(Object transaction)
          Cleanup resources after transaction completion.
protected  void doCommit(DefaultTransactionStatus status)
          Perform an actual commit on the given transaction.
protected  Object doGetTransaction()
          Return a current transaction object, i.e. a JTA UserTransaction.
protected  void doResume(Object transaction, Object suspendedResources)
          Resume the resources of the current transaction.
protected  void doRollback(DefaultTransactionStatus status)
          Perform an actual rollback on the given transaction.
protected  void doSetRollbackOnly(DefaultTransactionStatus status)
          Set the given transaction rollback-only.
protected  Object doSuspend(Object transaction)
          Suspend the resources of the current transaction.
 ConnectionFactory getConnectionFactory()
          Return the JMS ConnectionFactory that this instance should manage transactions for.
protected  boolean isExistingTransaction(Object transaction)
          Check if the given transaction object indicates an existing, i.e. already begun, transaction.
 void setConnectionFactory(ConnectionFactory connectionFactory)
          Set the JMS ConnectionFactory that this instance should manage transactions for.
 
Methods inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
commit, getTransaction, getTransactionSynchronization, isNestedTransactionAllowed, isRollbackOnCommitFailure, rollback, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionSynchronization, setTransactionSynchronizationName, useSavepointForNestedTransaction
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JmsTransactionManager

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

Note: The ConnectionFactory has to be set before using the instance. This constructor can be used to prepare a JmsTemplate 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(javax.jms.ConnectionFactory), AbstractPlatformTransactionManager.setTransactionSynchronization(int)

JmsTransactionManager

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

Parameters:
connectionFactory - the ConnectionFactory to obtain connections from
Method Detail

setConnectionFactory

public void setConnectionFactory(ConnectionFactory connectionFactory)
Set the JMS ConnectionFactory that this instance should manage transactions for.


getConnectionFactory

public ConnectionFactory getConnectionFactory()
Return the JMS ConnectionFactory that this instance should manage transactions for.


afterPropertiesSet

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


createConnection

protected Connection createConnection()
                               throws JMSException
Create a JMS Connection via this template's ConnectionFactory.

This implementation uses JMS 1.1 API.

Returns:
the new JMS Connection
Throws:
JMSException - if thrown by JMS API methods

createSession

protected Session createSession(Connection con)
                         throws JMSException
Create a JMS Session for the given Connection.

This implementation uses JMS 1.1 API.

Parameters:
con - the JMS Connection to create a Session for
Returns:
the new JMS Session
Throws:
JMSException - if thrown by JMS API methods

doGetTransaction

protected Object doGetTransaction()
Description copied from class: AbstractPlatformTransactionManager
Return a current transaction object, i.e. a JTA UserTransaction.

Specified by:
doGetTransaction in class AbstractPlatformTransactionManager
Returns:
the current transaction object

isExistingTransaction

protected boolean isExistingTransaction(Object transaction)
Description copied from class: AbstractPlatformTransactionManager
Check if the given transaction object indicates an existing, i.e. already begun, transaction.

Specified by:
isExistingTransaction in class AbstractPlatformTransactionManager
Parameters:
transaction - transaction object returned by doGetTransaction
Returns:
if there is an existing transaction

doBegin

protected void doBegin(Object transaction,
                       TransactionDefinition definition)
Description copied from class: AbstractPlatformTransactionManager
Begin a new transaction with the given transaction definition. Does not have to care about applying the propagation behavior, as this has already been handled by this abstract manager.

Specified by:
doBegin in class AbstractPlatformTransactionManager
Parameters:
transaction - transaction object returned by doGetTransaction
definition - TransactionDefinition instance, describing propagation behavior, isolation level, timeout etc.

doSuspend

protected Object doSuspend(Object transaction)
Description copied from class: AbstractPlatformTransactionManager
Suspend the resources of the current transaction. Transaction synchronization will already have been suspended.

Specified by:
doSuspend in class AbstractPlatformTransactionManager
Parameters:
transaction - transaction object returned by doGetTransaction
Returns:
an object that holds suspended resources (will be kept unexamined for passing it into doResume)
See Also:
AbstractPlatformTransactionManager.doResume(java.lang.Object, java.lang.Object)

doResume

protected void doResume(Object transaction,
                        Object suspendedResources)
Description copied from class: AbstractPlatformTransactionManager
Resume the resources of the current transaction. Transaction synchronization will be resumed afterwards.

Specified by:
doResume in class AbstractPlatformTransactionManager
Parameters:
transaction - transaction object returned by doGetTransaction
suspendedResources - the object that holds suspended resources, as returned by doSuspend
See Also:
AbstractPlatformTransactionManager.doSuspend(java.lang.Object)

doCommit

protected void doCommit(DefaultTransactionStatus status)
Description copied from class: AbstractPlatformTransactionManager
Perform an actual commit on the given transaction. An implementation does not need to check the rollback-only flag.

Specified by:
doCommit in class AbstractPlatformTransactionManager
Parameters:
status - status representation of the transaction

doRollback

protected void doRollback(DefaultTransactionStatus status)
Description copied from class: AbstractPlatformTransactionManager
Perform an actual rollback on the given transaction. An implementation does not need to check the new transaction flag.

Specified by:
doRollback in class AbstractPlatformTransactionManager
Parameters:
status - status representation of the transaction

doSetRollbackOnly

protected void doSetRollbackOnly(DefaultTransactionStatus status)
Description copied from class: AbstractPlatformTransactionManager
Set the given transaction rollback-only. Only called on rollback if the current transaction takes part in an existing one.

Specified by:
doSetRollbackOnly in class AbstractPlatformTransactionManager
Parameters:
status - status representation of the transaction

doCleanupAfterCompletion

protected void doCleanupAfterCompletion(Object transaction)
Description copied from class: AbstractPlatformTransactionManager
Cleanup resources after transaction completion. Called after doCommit and doRollback execution on any outcome. Should not throw any exceptions but just issue warnings on errors.

Default implementation does nothing.

Overrides:
doCleanupAfterCompletion in class AbstractPlatformTransactionManager
Parameters:
transaction - transaction object returned by doGetTransaction


Copyright (C) 2003-2004 The Spring Framework Project.