diff options
Diffstat (limited to 'cpp/src/IceStorm/Service.cpp')
-rw-r--r-- | cpp/src/IceStorm/Service.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/cpp/src/IceStorm/Service.cpp b/cpp/src/IceStorm/Service.cpp index 9cfc1bb4139..6c10fbe55ba 100644 --- a/cpp/src/IceStorm/Service.cpp +++ b/cpp/src/IceStorm/Service.cpp @@ -15,6 +15,7 @@ #include <IceStorm/TopicManagerI.h> #include <IceStorm/TransientTopicManagerI.h> #include <IceStorm/Instance.h> +#include <IceStorm/Util.h> #include <IceStorm/Service.h> @@ -61,6 +62,7 @@ public: private: + void createDbEnv(const Ice::CommunicatorPtr&); void validateProperties(const string&, const PropertiesPtr&, const LoggerPtr&); TopicManagerImplPtr _manager; @@ -183,14 +185,16 @@ ServiceI::start( if(id == -1) // No replication. { - _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter); - try { - _manager = new TopicManagerImpl(_instance); + PersistentInstancePtr instance = + new PersistentInstance(instanceName, name, communicator, publishAdapter, topicAdapter); + _instance = instance; + + _manager = new TopicManagerImpl(instance); _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->add(_manager->getServant(), topicManagerId)); } - catch(const Ice::Exception& ex) + catch(const IceUtil::Exception& ex) { _instance = 0; @@ -336,8 +340,11 @@ ServiceI::start( Ice::ObjectAdapterPtr nodeAdapter = communicator->createObjectAdapter(name + ".Node"); - _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter, - nodeAdapter, nodes[id]); + PersistentInstancePtr instance = + new PersistentInstance(instanceName, name, communicator, publishAdapter, topicAdapter, + nodeAdapter, nodes[id]); + _instance = instance; + _instance->observers()->setMajority(static_cast<unsigned int>(nodes.size())/2); // Trace replication information. @@ -366,7 +373,7 @@ ServiceI::start( _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->createIndirectProxy(topicManagerId)); } - _manager = new TopicManagerImpl(_instance); + _manager = new TopicManagerImpl(instance); topicAdapter->add(_manager->getServant(), topicManagerId); ostringstream os; // The node object identity. @@ -382,7 +389,7 @@ ServiceI::start( node->start(); } - catch(const Ice::Exception& ex) + catch(const IceUtil::Exception& ex) { _instance = 0; @@ -420,7 +427,7 @@ ServiceI::start(const CommunicatorPtr& communicator, // This is for IceGrid only and as such we use a transient // implementation of IceStorm. string instanceName = communicator->getProperties()->getPropertyWithDefault(name + ".InstanceName", "IceStorm"); - _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter); + _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter, 0); try { @@ -536,7 +543,8 @@ ServiceI::validateProperties(const string& name, const PropertiesPtr& properties "SQL.Port", "SQL.DatabaseName", "SQL.UserName", - "SQL.Password" + "SQL.Password", + "LMDB.Path" }; vector<string> unknownProps; |