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.