예제 #1
0
bool Interconnects::deleteObject(Broker& broker, const std::string& type, const std::string& name, const qpid::types::Variant::Map& /*properties*/,
                                 const std::string& /*userId*/, const std::string& /*connectionId*/)
{
    if (type == DOMAIN_TYPE) {
        boost::shared_ptr<Domain> domain;
        qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock);
        DomainMap::iterator i = domains.find(name);
        if (i != domains.end()) {
            domain = i->second;
            domains.erase(i);
            if (domain->isDurable()) broker.getStore().destroy(*domain);
            return true;
        } else {
            throw qpid::Exception(QPID_MSG("No such domain: " << name));
        }
    } else if (type == INCOMING_TYPE || type == OUTGOING_TYPE) {
        boost::shared_ptr<Interconnect> interconnect;
        {
            qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock);
            InterconnectMap::iterator i = interconnects.find(name);
            if (i != interconnects.end()) {
                interconnect = i->second;
                interconnects.erase(i);
            } else {
                throw qpid::Exception(QPID_MSG("No such interconnection: " << name));
            }
        }
        if (interconnect) interconnect->deletedFromRegistry();
        return true;
    } else {
        return false;
    }
}
예제 #2
0
bool Interconnects::createObject(Broker& broker, const std::string& type, const std::string& name, const qpid::types::Variant::Map& properties,
                                 const std::string& /*userId*/, const std::string& /*connectionId*/)
{
    if (type == DOMAIN_TYPE) {
        qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock);
        DomainMap::iterator i = domains.find(name);
        if (i == domains.end()) {
            boost::shared_ptr<Domain> domain(new Domain(name, properties, broker));
            domains[name] = domain;
            if (domain->isDurable()) broker.getStore().create(*domain);
            return true;
        } else {
            return false;
        }
    } else if (type == INCOMING_TYPE || type == OUTGOING_TYPE) {
        QPID_LOG(notice, "Creating interconnect " << name << ", " << properties);
        boost::shared_ptr<Domain> domain;
        {
            qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock);
            qpid::types::Variant::Map::const_iterator p = properties.find(DOMAIN_TYPE);
            if (p != properties.end()) {
                std::string domainName = p->second;
                DomainMap::iterator i = domains.find(domainName);
                if (i != domains.end()) {
                    domain = i->second;
                } else {
                    throw qpid::Exception(QPID_MSG("No such domain: " << domainName));
                }
            } else {
                throw qpid::Exception(QPID_MSG("Domain must be specified"));
            }
        }
        domain->connect(type == INCOMING_TYPE, name, properties, *context);
        return true;
    } else {
        return false;
    }
}