Class ConnectionFactoryUtils
java.lang.Object
org.springframework.jms.connection.ConnectionFactoryUtils
Helper class for managing a JMS 
ConnectionFactory, in particular
 for obtaining transactional JMS resources for a given ConnectionFactory.
 Mainly for internal use within the framework. Used by
 JmsTemplate as well as
 DefaultMessageListenerContainer.
- Since:
 - 2.0
 - Author:
 - Juergen Hoeller
 - See Also:
 
- 
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceCallback interface for resource creation. - 
Constructor Summary
Constructors - 
Method Summary
Modifier and TypeMethodDescriptiondoGetTransactionalSession(ConnectionFactory connectionFactory, ConnectionFactoryUtils.ResourceFactory resourceFactory) Obtain a JMS Session that is synchronized with the current transaction, if any.doGetTransactionalSession(ConnectionFactory connectionFactory, ConnectionFactoryUtils.ResourceFactory resourceFactory, boolean startConnection) Obtain a JMS Session that is synchronized with the current transaction, if any.static SessiongetTargetSession(Session session) Return the innermost target Session of the given Session.static @Nullable QueueSessiongetTransactionalQueueSession(QueueConnectionFactory cf, @Nullable QueueConnection existingCon, boolean synchedLocalTransactionAllowed) Obtain a JMS QueueSession that is synchronized with the current transaction, if any.getTransactionalSession(ConnectionFactory cf, @Nullable Connection existingCon, boolean synchedLocalTransactionAllowed) Obtain a JMS Session that is synchronized with the current transaction, if any.static @Nullable TopicSessiongetTransactionalTopicSession(TopicConnectionFactory cf, @Nullable TopicConnection existingCon, boolean synchedLocalTransactionAllowed) Obtain a JMS TopicSession that is synchronized with the current transaction, if any.static booleanisSessionTransactional(@Nullable Session session, @Nullable ConnectionFactory cf) Determine whether the given JMS Session is transactional, that is, bound to the current thread by Spring's transaction facilities.static voidreleaseConnection(@Nullable Connection con, @Nullable ConnectionFactory cf, boolean started) Release the given Connection, stopping it (if necessary) and eventually closing it. 
- 
Constructor Details
- 
ConnectionFactoryUtils
public ConnectionFactoryUtils() 
 - 
 - 
Method Details
- 
releaseConnection
public static void releaseConnection(@Nullable Connection con, @Nullable ConnectionFactory cf, boolean started) Release the given Connection, stopping it (if necessary) and eventually closing it.Checks
SmartConnectionFactory.shouldStop(jakarta.jms.Connection), if available. This is essentially a more sophisticated version ofJmsUtils.closeConnection(jakarta.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:
 
 - 
getTargetSession
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:
 
 - 
isSessionTransactional
public static boolean isSessionTransactional(@Nullable Session session, @Nullable 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 @Nullable Session getTransactionalSession(ConnectionFactory cf, @Nullable 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 
nullif none found - Throws:
 JMSException- in case of JMS failure
 - 
getTransactionalQueueSession
public static @Nullable QueueSession getTransactionalQueueSession(QueueConnectionFactory cf, @Nullable 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 
nullif none found - Throws:
 JMSException- in case of JMS failure
 - 
getTransactionalTopicSession
public static @Nullable TopicSession getTransactionalTopicSession(TopicConnectionFactory cf, @Nullable 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 
nullif none found - Throws:
 JMSException- in case of JMS failure
 - 
doGetTransactionalSession
public static @Nullable Session doGetTransactionalSession(ConnectionFactory connectionFactory, ConnectionFactoryUtils.ResourceFactory resourceFactory) throws JMSException Obtain a JMS Session that is synchronized with the current transaction, if any.This
doGetTransactionalSessionvariant 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 
nullif none found - Throws:
 JMSException- in case of JMS failure- See Also:
 
 - 
doGetTransactionalSession
public static @Nullable 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 
nullif none found - Throws:
 JMSException- in case of JMS failure
 
 -