Index: C:/src/Eclipse/Workspaces/amq-4.1-branch/activemq-4.1-branch/activemq-core/src/main/java/org/apache/activemq/advisory/AdvisoryBroker.java =================================================================== --- C:/src/Eclipse/Workspaces/amq-4.1-branch/activemq-4.1-branch/activemq-core/src/main/java/org/apache/activemq/advisory/AdvisoryBroker.java (revision 553418) +++ C:/src/Eclipse/Workspaces/amq-4.1-branch/activemq-4.1-branch/activemq-core/src/main/java/org/apache/activemq/advisory/AdvisoryBroker.java (working copy) @@ -140,7 +140,7 @@ public Destination addDestination(ConnectionContext context, ActiveMQDestination destination) throws Exception { Destination answer = next.addDestination(context, destination); - + ActiveMQTopic topic = AdvisorySupport.getDestinationAdvisoryTopic(destination); DestinationInfo info = new DestinationInfo(context.getConnectionId(), DestinationInfo.ADD_OPERATION_TYPE, destination); fireAdvisory(context, topic, info); @@ -154,7 +154,7 @@ ActiveMQTopic topic = AdvisorySupport.getDestinationAdvisoryTopic(destination); fireAdvisory(context, topic, info); - destinations.put(destination, info); + destinations.put(destination, info); } public void removeDestination(ConnectionContext context, ActiveMQDestination destination, long timeout) throws Exception { @@ -165,14 +165,16 @@ info.setOperationType(DestinationInfo.REMOVE_OPERATION_TYPE); ActiveMQTopic topic = AdvisorySupport.getDestinationAdvisoryTopic(destination); fireAdvisory(context, topic, info); - try { - next.removeDestination(context, AdvisorySupport.getConsumerAdvisoryTopic(info.getDestination()), -1); - } catch (Exception expectedIfDestinationDidNotExistYet) { + if (!AdvisorySupport.isAdvisoryTopic(destination)) { + try { + context.getBroker().removeDestination(context, AdvisorySupport.getConsumerAdvisoryTopic(info.getDestination()), -1); + } catch (Exception expectedIfDestinationDidNotExistYet) { + } + try { + context.getBroker().removeDestination(context, AdvisorySupport.getProducerAdvisoryTopic(info.getDestination()), -1); + } catch (Exception expectedIfDestinationDidNotExistYet) { + } } - try { - next.removeDestination(context, AdvisorySupport.getProducerAdvisoryTopic(info.getDestination()), -1); - } catch (Exception expectedIfDestinationDidNotExistYet) { - } } } @@ -186,14 +188,16 @@ info.setOperationType(DestinationInfo.REMOVE_OPERATION_TYPE); ActiveMQTopic topic = AdvisorySupport.getDestinationAdvisoryTopic(destInfo.getDestination()); fireAdvisory(context, topic, info); - try { - next.removeDestination(context, AdvisorySupport.getConsumerAdvisoryTopic(info.getDestination()), -1); - } catch (Exception expectedIfDestinationDidNotExistYet) { + if (!AdvisorySupport.isAdvisoryTopic(destInfo.getDestination())) { + try { + context.getBroker().removeDestination(context, AdvisorySupport.getConsumerAdvisoryTopic(info.getDestination()), -1); + } catch (Exception expectedIfDestinationDidNotExistYet) { + } + try { + context.getBroker().removeDestination(context, AdvisorySupport.getProducerAdvisoryTopic(info.getDestination()), -1); + } catch (Exception expectedIfDestinationDidNotExistYet) { + } } - try { - next.removeDestination(context, AdvisorySupport.getProducerAdvisoryTopic(info.getDestination()), -1); - } catch (Exception expectedIfDestinationDidNotExistYet) { - } } } @@ -265,7 +269,7 @@ advisoryMessage.setDestination(topic); advisoryMessage.setResponseRequired(false); advisoryMessage.setProducerId(advisoryProducerId); - + boolean originalFlowControl = context.isProducerFlowControl(); try { context.setProducerFlowControl(false);