Description
In the method NetworkChannel.removeConsumerInfo(ConsumerInfo info) the following test must evaluate TRUE for in ordre for a NetworkMessageBridge to be stopped.
if (currefcnt <= 0 && !bridge.isDurableTopic() &&
(bridge.getDestination().isTopic() || bridge.getDestination().isTemporary()))
I do not think this test is correct. If a consumer creates a subscription on a queue, an then disconnects, the above expression evaluates false and the NetworkMessageBridge is left open. I put out a log statement showing the values tested for the closure of a queue subscriber:
RefCnt=0 isDurableTopic=false isTopic=false isTemp=false
I do not understand the last condition of the above test. Why only stop the bridge if the destation is a Topic or Temporary Queue? Why would it not be appropriate to stop the bridge a non-temporary queue when the subscriber is gone. It seems contrary to the documentation that indicates messages are only transfered between brokers when a subcriber is attached. I think this is the reason that it appears that messages go missing. The messages are not missing, they just end up on a broker that has not subscriber to receive them. If you start up the subcriber process again, the missing messages reapear.