diff options
| author | Carl C. Trieloff <cctrieloff@apache.org> | 2007-10-19 18:57:30 +0000 |
|---|---|---|
| committer | Carl C. Trieloff <cctrieloff@apache.org> | 2007-10-19 18:57:30 +0000 |
| commit | b97be677001ec35469d080a98ba88276f2300651 (patch) | |
| tree | 2d947cee25396e96ad1a49f43d9de82e04f0f96a /cpp/src/qpid/broker/QueueRegistry.cpp | |
| parent | f25df3a53ca1ef5eec396512fd584823e7f6636d (diff) | |
| download | qpid-python-b97be677001ec35469d080a98ba88276f2300651.tar.gz | |
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
Diffstat (limited to 'cpp/src/qpid/broker/QueueRegistry.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/QueueRegistry.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
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 <sstream> #include <assert.h> 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<ManagementObject>(mgmtObject)); + } + return std::pair<Queue::shared_ptr, bool>(queue, true); } else { return std::pair<Queue::shared_ptr, bool>(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<ManagementObject>(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; +} + |
