Пример #1
0
 void earlyInitialize (Plugin::Target& target)
 {
     Broker* broker = dynamic_cast<Broker*>(&target);
     if (!broker) return;
     boost::shared_ptr<MessageStore> p(new TestStore(options, *broker));
     broker->setStore (p);
 }
Пример #2
0
    void earlyInitialize (Plugin::Target& target)
    {
        Broker* broker = dynamic_cast<Broker*>(&target);
        if (!broker) return;
        store.reset(new MessageStoreImpl(broker));
        const DataDir& dataDir = broker->getDataDir ();
        if (options.storeDir.empty ())
        {
            if (!dataDir.isEnabled ())
                throw Exception ("linearstore: If broker option --data-dir is blank or --no-data-dir is specified, linearstore option --store-dir must be present.");

            options.storeDir = dataDir.getPath ();
        } else {
            // Check if store dir is absolute. If not, make it absolute using qpidd executable dir as base
            if (options.storeDir.at(0) != '/') {
                char buf[1024];
                if (::getcwd(buf, sizeof(buf)-1) == 0) {
                    std::ostringstream oss;
                    oss << "linearstore: getcwd() unable to read current directory: errno=" << errno << " (" << strerror(errno) << ")";
                    throw Exception(oss.str());
                }
                std::string newStoreDir = std::string(buf) + "/" + options.storeDir;
                std::ostringstream oss;
                oss << "store-dir option \"" << options.storeDir << "\" is not absolute, changed to \"" << newStoreDir << "\"";
                QLS_LOG(warning, oss.str());
                options.storeDir = newStoreDir;
            }
        }
        store->init(&options);
        boost::shared_ptr<qpid::broker::MessageStore> brokerStore(store);
        broker->setStore(brokerStore);
        target.addFinalizer(boost::bind(&StorePlugin::finalize, this));
    }
Пример #3
0
void XmlExchangePlugin::earlyInitialize(Plugin::Target& target)
{
      Broker* broker = dynamic_cast<broker::Broker*>(&target);
      if (broker) {
          broker->getExchanges().registerType(XmlExchange::typeName, &create);
          QPID_LOG(info, "Registered xml exchange");
      }
}
Пример #4
0
ManagedSession::ManagedSession(Broker& broker, ManagedConnection& p, const std::string i) : parent(p), id(i), unacked(0)
{
    qpid::management::ManagementAgent* agent = broker.getManagementAgent();
    if (agent != 0) {
        session = _qmf::Session::shared_ptr(new _qmf::Session(agent, this, broker.GetVhostObject(), id));
        session->set_attached(true);
        session->set_detachedLifespan(0);
        session->clr_expireTime();
        session->set_connectionRef(parent.GetManagementObject()->getObjectId());
        agent->addObject(session);
    }
}
Пример #5
0
 void initialize(Plugin::Target& target)
 {
     Broker* broker = dynamic_cast<Broker*>(&target);
     if (!broker) return;
     if (!store) return;
     // Not done in earlyInitialize as the Broker::isInCluster test won't work there.
     if (broker->isInCluster()) {
         QPID_LOG(info, "Disabling management instrumentation for the store in a cluster.");
     } else {
         QPID_LOG(info, "Enabling management instrumentation for the store.");
         store->initManagement(broker);
     }
 }
Пример #6
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;
    }
}
Пример #7
0
void Listener::brokerDisconnected(const Broker& broker){
	STDCOUT1("brokerDisconnected: " << broker << endl);

	STDCOUT2("broker disconnection event at " << getSecond() << endl);
	ListenerEvent *le = new BrokerDisconnectionEvent(broker.getUrl());
	int ret = ListenerEvent::sendEventPtr(this->eventfd, le);
	STDCOUT2("passing event: return " << ret << endl);
}
Пример #8
0
    void earlyInitialize (Plugin::Target& target)
    {
        Broker* broker = dynamic_cast<Broker*>(&target);
        if (!broker) return;
        store.reset(new MessageStoreImpl(broker->getTimer()));
        DataDir& dataDir = broker->getDataDir ();
        if (options.storeDir.empty ())
        {
            if (!dataDir.isEnabled ())
                throw Exception ("msgstore: If --data-dir is blank or --no-data-dir is specified, --store-dir must be present.");

            options.storeDir = dataDir.getPath ();
        }
        store->init(&options);
        boost::shared_ptr<qpid::broker::MessageStore> brokerStore(store);
        broker->setStore(brokerStore);
        target.addFinalizer(boost::bind(&StorePlugin::finalize, this));
    }
Пример #9
0
ManagedIncomingLink::ManagedIncomingLink(Broker& broker, ManagedSession& p, const std::string& source, const std::string& target, const std::string& _name)
    : parent(p), name(_name)
{
    qpid::management::ManagementAgent* agent = broker.getManagementAgent();
    if (agent) {
        incoming = _qmf::Incoming::shared_ptr(new _qmf::Incoming(agent, this, &parent, source, target, _name));
        agent->addObject(incoming);
    }
}
Пример #10
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;
    }
}
Пример #11
0
bool Manager::prepare(bool silent)
{
    knowledge.reasolveDependency(strAppName.c_str(), bAutoDependancy, silent);

    clearExecutables();
    connections.clear();
    modules.clear();
    resources.clear();
    connections = knowledge.getSelConnection();
    modules = knowledge.getSelModules();
    resources = knowledge.getSelResources();

    /**
     *  we need to initialize a module with a local broker if the
     *  host property is set to "localhost".
     *
     * TODO: Resources should also be added to the relevant executable. up to now
     *  all of them will be handled by manager.
     */

    ModulePIterator itr;
    int id = 0;
    for(itr=modules.begin(); itr!=modules.end(); itr++)
    {
        Broker* broker = createBroker(*itr);
        broker->setDisplay((*itr)->getDisplay());
        Executable* exe = new Executable(broker, (MEvent*)this, *itr, bWithWatchDog);
        exe->setID(id++);
        exe->setCommand((*itr)->getName());
        exe->setParam((*itr)->getParam());
        exe->setHost((*itr)->getHost());
        exe->setStdio((*itr)->getStdio());
        exe->setWorkDir((*itr)->getWorkDir());        
        exe->setPostExecWait((*itr)->getPostExecWait());
        string env = string("YARP_PORT_PREFIX=") +
                        string((*itr)->getPrefix());
        env = env + ";" + (*itr)->getEnvironment();
        exe->setEnv(env.c_str());

        /**
         * Adding connections to their owners
         * TODO: check whether this is still needed or not
         */

        //CnnIterator cnn;
        //for(cnn=connections.begin(); cnn!=connections.end(); cnn++)
        //    if((*cnn).owner() == (*itr))
        //        exe->addConnection(*cnn);

        /**
         * Adding resources to their owners
         */
        for(unsigned int i=0; i<resources.size(); i++)
        {
            ResYarpPort* res = dynamic_cast<ResYarpPort*>(resources[i]);
            if(res && (res->owner() == (*itr)))
                exe->addResource(*res);
        }

        runnables.push_back(exe);
    }

    return true;
}
Пример #12
0
void Broker::sendToBroker(Broker & targetBroker, std::string s){
    targetBroker.receiveFromBroker(s);
}
Пример #13
0
void Proxy::proxyToBroker(CallMessage msg, Broker & b){
    b.receiveCall(msg);
}