Description
We see "The producer is closed exceptions" often after the system was in idle mode for a few days/hours (weekend) and then the first requests of monday start to arrive at the system. I am a bit confused because I thought that producers are not pooled. Only connections and sessions are pooled?
The spring config of the connection factory looks like this:
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<ref local="jmsConnectionFactory" />
</property>
<property name="createConnectionOnStartup" value="true" />
<property name="idleTimeout" value="0" />
<property name="maxConnections" value="3" />
<property name="maximumActiveSessionPerConnection" value="100" />
<property name="timeBetweenExpirationCheckMillis" value="30000" />
<property name="blockIfSessionPoolIsFull" value="false" />
</bean>
The exception:
Caused by: javax.jms.IllegalStateException: The producer is closed
at org.apache.activemq.ActiveMQMessageProducer.checkClosed(ActiveMQMessageProducer.java:196)
at org.apache.activemq.ActiveMQMessageProducerSupport.getDeliveryMode(ActiveMQMessageProducerSupport.java:148)
at org.apache.activemq.jms.pool.PooledProducer.<init>(PooledProducer.java:42)
at org.apache.activemq.jms.pool.PooledSession.createProducer(PooledSession.java:359)
at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:971)
at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:952)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:563)
at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:536)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:466)
... 16 more