open class CachingConnectionFactory : SingleConnectionFactory
SingleConnectionFactory subclass that adds javax.jms.Session caching as well javax.jms.MessageProducer caching. This ConnectionFactory also switches the "reconnectOnException" property
to "true" by default, allowing for automatic recovery of the underlying Connection.
By default, only one single Session will be cached, with further requested Sessions being created and disposed on demand. Consider raising the "sessionCacheSize" value
in case of a high-concurrency environment.
When using the JMS 1.0.2 API, this ConnectionFactory will switch into queue/topic mode according to the JMS API methods used at runtime: createQueueConnection
and createTopicConnection
will lead to queue/topic mode, respectively; generic createConnection
calls will lead to a JMS 1.1 connection which is able to serve both modes.
NOTE: This ConnectionFactory requires explicit closing of all Sessions obtained from its shared Connection. This is the usual recommendation for native JMS access code anyway. However, with this ConnectionFactory, its use is mandatory in order to actually allow for Session reuse.
Note also that MessageConsumers obtained from a cached Session won't get closed until the Session will eventually be removed from the pool. This may lead to semantic side effects in some cases. For a durable subscriber, the logical Session.close()
call will also close the subscription. Re-registering a durable consumer for the same subscription on the same Session handle is not supported; close and reobtain a cached Session first.
Author
Juergen Hoeller
Since
2.5.3
CachingConnectionFactory()
Create a new CachingConnectionFactory for bean-style usage. CachingConnectionFactory(targetConnectionFactory: ConnectionFactory)
Create a new CachingConnectionFactory for the given target ConnectionFactory. |
open fun getSessionCacheSize(): Int
Return the desired size for the JMS Session cache (per JMS Session type). |
|
open fun isCacheConsumers(): Boolean
Return whether to cache JMS MessageConsumers per JMS Session instance. |
|
open fun isCacheProducers(): Boolean
Return whether to cache JMS MessageProducers per JMS Session instance. |
|
open fun resetConnection(): Unit
Resets the Session cache as well. |
|
open fun setCacheConsumers(cacheConsumers: Boolean): Unit
Specify whether to cache JMS MessageConsumers per JMS Session instance (more specifically: one MessageConsumer per Destination, selector String and Session). Note that durable subscribers will only be cached until logical closing of the Session handle. Default is "true". Switch this to "false" in order to always recreate MessageConsumers on demand. |
|
open fun setCacheProducers(cacheProducers: Boolean): Unit
Specify whether to cache JMS MessageProducers per JMS Session instance (more specifically: one MessageProducer per Destination and Session). Default is "true". Switch this to "false" in order to always recreate MessageProducers on demand. |
|
open fun setSessionCacheSize(sessionCacheSize: Int): Unit
Specify the desired size for the JMS Session cache (per JMS Session type). This cache size is the maximum limit for the number of cached Sessions per session acknowledgement type (auto, client, dups_ok, transacted). As a consequence, the actual number of cached Sessions may be up to four times as high as the specified value - in the unlikely case of mixing and matching different acknowledgement types. Default is 1: caching a single Session, (re-)creating further ones on demand. Specify a number like 10 if you'd like to raise the number of cached Sessions; that said, 1 may be sufficient for low-concurrency scenarios. |