Class ConnectionFactoryUtils
- java.lang.Object
- org.springframework.jms.connection.ConnectionFactoryUtils
public abstract class ConnectionFactoryUtils extends Object
Helper class for managing a JMSConnectionFactory
, in particular for obtaining transactional JMS resources for a given ConnectionFactory.Mainly for internal use within the framework. Used by
JmsTemplate
as well asDefaultMessageListenerContainer
.- Since:
- 2.0
- Author:
- Juergen Hoeller
- See Also:
SmartConnectionFactory
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
ConnectionFactoryUtils.ResourceFactory
Callback interface for resource creation.
Constructor Summary
Constructors Constructor Description ConnectionFactoryUtils()
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static Session
doGetTransactionalSession(ConnectionFactory connectionFactory, ConnectionFactoryUtils.ResourceFactory resourceFactory)
Obtain a JMS Session that is synchronized with the current transaction, if any.static Session
doGetTransactionalSession(ConnectionFactory connectionFactory, ConnectionFactoryUtils.ResourceFactory resourceFactory, boolean startConnection)
Obtain a JMS Session that is synchronized with the current transaction, if any.static Session
getTargetSession(Session session)
Return the innermost target Session of the given Session.static QueueSession
getTransactionalQueueSession(QueueConnectionFactory cf, QueueConnection existingCon, boolean synchedLocalTransactionAllowed)
Obtain a JMS QueueSession that is synchronized with the current transaction, if any.static Session
getTransactionalSession(ConnectionFactory cf, Connection existingCon, boolean synchedLocalTransactionAllowed)
Obtain a JMS Session that is synchronized with the current transaction, if any.static TopicSession
getTransactionalTopicSession(TopicConnectionFactory cf, TopicConnection existingCon, boolean synchedLocalTransactionAllowed)
Obtain a JMS TopicSession that is synchronized with the current transaction, if any.static boolean
isSessionTransactional(Session session, ConnectionFactory cf)
Determine whether the given JMS Session is transactional, that is, bound to the current thread by Spring's transaction facilities.static void
releaseConnection(Connection con, ConnectionFactory cf, boolean started)
Release the given Connection, stopping it (if necessary) and eventually closing it.
Constructor Detail
ConnectionFactoryUtils
public ConnectionFactoryUtils()
Method Detail
releaseConnection
public static void releaseConnection(Connection con, ConnectionFactory cf, boolean started)
Release the given Connection, stopping it (if necessary) and eventually closing it.Checks
SmartConnectionFactory.shouldStop(javax.jms.Connection)
, if available. This is essentially a more sophisticated version ofJmsUtils.closeConnection(javax.jms.Connection)
.- Parameters:
con
- the Connection to release (if this isnull
, the call will be ignored)cf
- the ConnectionFactory that the Connection was obtained from (may benull
)started
- whether the Connection might have been started by the application- See Also:
SmartConnectionFactory.shouldStop(javax.jms.Connection)
,JmsUtils.closeConnection(javax.jms.Connection)
getTargetSession
public static Session getTargetSession(Session session)
Return the innermost target Session of the given Session. If the given Session is a proxy, it will be unwrapped until a non-proxy Session is found. Otherwise, the passed-in Session will be returned as-is.- Parameters:
session
- the Session proxy to unwrap- Returns:
- the innermost target Session, or the passed-in one if no proxy
- See Also:
SessionProxy.getTargetSession()
isSessionTransactional
public static boolean isSessionTransactional(Session session, ConnectionFactory cf)
Determine whether the given JMS Session is transactional, that is, bound to the current thread by Spring's transaction facilities.- Parameters:
session
- the JMS Session to checkcf
- the JMS ConnectionFactory that the Session originated from- Returns:
- whether the Session is transactional
getTransactionalSession
public static Session getTransactionalSession(ConnectionFactory cf, Connection existingCon, boolean synchedLocalTransactionAllowed) throws JMSException
Obtain a JMS Session that is synchronized with the current transaction, if any.- Parameters:
cf
- the ConnectionFactory to obtain a Session forexistingCon
- the existing JMS Connection to obtain a Session for (may benull
)synchedLocalTransactionAllowed
- whether to allow for a local JMS transaction that is synchronized with a Spring-managed transaction (where the main transaction might be a JDBC-based one for a specific DataSource, for example), with the JMS transaction committing right after the main transaction. If not allowed, the given ConnectionFactory needs to handle transaction enlistment underneath the covers.- Returns:
- the transactional Session, or
null
if none found - Throws:
JMSException
- in case of JMS failure
getTransactionalQueueSession
public static QueueSession getTransactionalQueueSession(QueueConnectionFactory cf, QueueConnection existingCon, boolean synchedLocalTransactionAllowed) throws JMSException
Obtain a JMS QueueSession that is synchronized with the current transaction, if any.Mainly intended for use with the JMS 1.0.2 API.
- Parameters:
cf
- the ConnectionFactory to obtain a Session forexistingCon
- the existing JMS Connection to obtain a Session for (may benull
)synchedLocalTransactionAllowed
- whether to allow for a local JMS transaction that is synchronized with a Spring-managed transaction (where the main transaction might be a JDBC-based one for a specific DataSource, for example), with the JMS transaction committing right after the main transaction. If not allowed, the given ConnectionFactory needs to handle transaction enlistment underneath the covers.- Returns:
- the transactional Session, or
null
if none found - Throws:
JMSException
- in case of JMS failure
getTransactionalTopicSession
public static TopicSession getTransactionalTopicSession(TopicConnectionFactory cf, TopicConnection existingCon, boolean synchedLocalTransactionAllowed) throws JMSException
Obtain a JMS TopicSession that is synchronized with the current transaction, if any.Mainly intended for use with the JMS 1.0.2 API.
- Parameters:
cf
- the ConnectionFactory to obtain a Session forexistingCon
- the existing JMS Connection to obtain a Session for (may benull
)synchedLocalTransactionAllowed
- whether to allow for a local JMS transaction that is synchronized with a Spring-managed transaction (where the main transaction might be a JDBC-based one for a specific DataSource, for example), with the JMS transaction committing right after the main transaction. If not allowed, the given ConnectionFactory needs to handle transaction enlistment underneath the covers.- Returns:
- the transactional Session, or
null
if none found - Throws:
JMSException
- in case of JMS failure
doGetTransactionalSession
public static Session doGetTransactionalSession(ConnectionFactory connectionFactory, ConnectionFactoryUtils.ResourceFactory resourceFactory) throws JMSException
Obtain a JMS Session that is synchronized with the current transaction, if any.This
doGetTransactionalSession
variant always starts the underlying JMS Connection, assuming that the Session will be used for receiving messages.- Parameters:
connectionFactory
- the JMS ConnectionFactory to bind for (used as TransactionSynchronizationManager key)resourceFactory
- the ResourceFactory to use for extracting or creating JMS resources- Returns:
- the transactional Session, or
null
if none found - Throws:
JMSException
- in case of JMS failure- See Also:
doGetTransactionalSession(javax.jms.ConnectionFactory, ResourceFactory, boolean)
doGetTransactionalSession
public static Session doGetTransactionalSession(ConnectionFactory connectionFactory, ConnectionFactoryUtils.ResourceFactory resourceFactory, boolean startConnection) throws JMSException
Obtain a JMS Session that is synchronized with the current transaction, if any.- Parameters:
connectionFactory
- the JMS ConnectionFactory to bind for (used as TransactionSynchronizationManager key)resourceFactory
- the ResourceFactory to use for extracting or creating JMS resourcesstartConnection
- whether the underlying JMS Connection approach should be started in order to allow for receiving messages. Note that a reused Connection may already have been started before, even if this flag isfalse
.- Returns:
- the transactional Session, or
null
if none found - Throws:
JMSException
- in case of JMS failure