summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/QueueRegistry.cpp
diff options
context:
space:
mode:
authorCarl C. Trieloff <cctrieloff@apache.org>2007-10-19 18:57:30 +0000
committerCarl C. Trieloff <cctrieloff@apache.org>2007-10-19 18:57:30 +0000
commitb97be677001ec35469d080a98ba88276f2300651 (patch)
tree2d947cee25396e96ad1a49f43d9de82e04f0f96a /cpp/src/qpid/broker/QueueRegistry.cpp
parentf25df3a53ca1ef5eec396512fd584823e7f6636d (diff)
downloadqpid-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.cpp37
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;
+}
+