From b97be677001ec35469d080a98ba88276f2300651 Mon Sep 17 00:00:00 2001 From: "Carl C. Trieloff" Date: Fri, 19 Oct 2007 18:57:30 +0000 Subject: QPID-651 applied patch from Ted git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@586578 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/QueueRegistry.cpp | 37 ++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/broker/QueueRegistry.cpp') diff --git a/cpp/src/qpid/broker/QueueRegistry.cpp b/cpp/src/qpid/broker/QueueRegistry.cpp index ef1fb982e1..927de4c079 100644 --- a/cpp/src/qpid/broker/QueueRegistry.cpp +++ b/cpp/src/qpid/broker/QueueRegistry.cpp @@ -19,13 +19,16 @@ * */ #include "QueueRegistry.h" +#include "ManagementAgent.h" +#include "ManagementObjectQueue.h" #include #include using namespace qpid::broker; using namespace qpid::sys; -QueueRegistry::QueueRegistry(MessageStore* const _store) : counter(1), store(_store){} +QueueRegistry::QueueRegistry(MessageStore* const _store) : + counter(1), store(_store) {} QueueRegistry::~QueueRegistry(){} @@ -37,9 +40,18 @@ QueueRegistry::declare(const string& declareName, bool durable, string name = declareName.empty() ? generateName() : declareName; assert(!name.empty()); QueueMap::iterator i = queues.find(name); + if (i == queues.end()) { Queue::shared_ptr queue(new Queue(name, autoDelete, durable ? store : 0, owner)); queues[name] = queue; + + if (managementAgent){ + ManagementObjectQueue::shared_ptr mgmtObject(new ManagementObjectQueue (name, durable, autoDelete)); + + queue->setMgmt (mgmtObject); + managementAgent->addObject(dynamic_pointer_cast(mgmtObject)); + } + return std::pair(queue, true); } else { return std::pair(i->second, false); @@ -48,12 +60,24 @@ QueueRegistry::declare(const string& declareName, bool durable, void QueueRegistry::destroy(const string& name){ RWlock::ScopedWlock locker(lock); + + if (managementAgent){ + ManagementObjectQueue::shared_ptr mgmtObject; + QueueMap::iterator i = queues.find(name); + + if (i != queues.end()){ + mgmtObject = i->second->getMgmt (); + managementAgent->deleteObject (dynamic_pointer_cast(mgmtObject)); + } + } + queues.erase(name); } Queue::shared_ptr QueueRegistry::find(const string& name){ RWlock::ScopedRlock locker(lock); QueueMap::iterator i = queues.find(name); + if (i == queues.end()) { return Queue::shared_ptr(); } else { @@ -76,3 +100,14 @@ string QueueRegistry::generateName(){ MessageStore* const QueueRegistry::getStore() const { return store; } + +void QueueRegistry::setManagementAgent (ManagementAgent::shared_ptr agent) +{ + managementAgent = agent; +} + +ManagementAgent::shared_ptr QueueRegistry::getManagementAgent (void) +{ + return managementAgent; +} + -- cgit v1.2.1