Consider a broker that is configured for
<systemUsage>
<systemUsage sendFailIfNoSpace="true">
...
</systemUsage>
and raises an exception in case the persistence store is full.
Now, when using a CXF client with JMS transport and request/reply communication, the broker may raise an JMSException in case it cannot take any more message because the store is full.
While the exception is caught and handled in org.apache.cxf.transport.jms.JMSConduit.sendExchange():
if (exchange.isOneWay()) { sendMessage(request, outMessage, null, null, closer, session); } else { sendAndReceiveMessage(exchange, request, outMessage, closer, session); } } catch (JMSException e) { // Close connection so it will be refreshed on next try --> ResourceCloser.close(connection); this.connection = null; this.staticReplyDestination = null;
and CXF tries to close the JMS connection, this call will fail with this message
INFO: failed to delete Temporary Queue "temp-queue://ID:Mac.fritz.box-58171-1529310181545-1:1:1" on closing pooled connection: A consumer is consuming from the temporary destination
It fails because the call to ActiveMQConnection.close(), first tries to delete any temporary destinations. These however cannot be deleted because there is still a consumer registered on this temp destination. Hence above message.
The ActiveMQConnection remains open, the temp destination is not cleared either but remains registered under the ActiveMQConnection.
- is caused by
-
ENTMQ-2311 PooledConnectionFactory connection close does not delete temp dests if there is an active consumer
- Closed