summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/Service.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2014-07-15 12:59:43 +0200
committerBenoit Foucher <benoit@zeroc.com>2014-07-15 12:59:43 +0200
commit1652b782824c9c24638512b57b74dae8745d2c79 (patch)
treeebf6200f98a6ede37d47028447e32e0197aa8f8b /cpp/src/IceStorm/Service.cpp
parentFixed Java IceWS bug which was cuasing 100% CPU usage for Ice client/server (diff)
downloadice-1652b782824c9c24638512b57b74dae8745d2c79.tar.bz2
ice-1652b782824c9c24638512b57b74dae8745d2c79.tar.xz
ice-1652b782824c9c24638512b57b74dae8745d2c79.zip
Fixed ICE-4611: added finder objects for locator/router/IceStorm to allow easily retrieving proxies without knowning the instance name
Diffstat (limited to 'cpp/src/IceStorm/Service.cpp')
-rw-r--r--cpp/src/IceStorm/Service.cpp34
1 files changed, 28 insertions, 6 deletions
diff --git a/cpp/src/IceStorm/Service.cpp b/cpp/src/IceStorm/Service.cpp
index 02423174323..dc722a2ba6d 100644
--- a/cpp/src/IceStorm/Service.cpp
+++ b/cpp/src/IceStorm/Service.cpp
@@ -35,7 +35,7 @@ using namespace IceStorm;
using namespace IceStormInternal;
using namespace IceStormElection;
-namespace IceStormInternal
+namespace
{
class ServiceI : public IceStormInternal::Service
@@ -70,6 +70,25 @@ private:
InstancePtr _instance;
};
+class FinderI : public IceStorm::Finder
+{
+public:
+
+ FinderI(const TopicManagerPrx& topicManager) : _topicManager(topicManager)
+ {
+ }
+
+ virtual TopicManagerPrx
+ getTopicManager(const Ice::Current&)
+ {
+ return _topicManager;
+ }
+
+private:
+
+ const TopicManagerPrx _topicManager;
+};
+
}
extern "C"
@@ -372,6 +391,9 @@ ServiceI::start(
throw e;
}
}
+
+ topicAdapter->add(new FinderI(TopicManagerPrx::uncheckedCast(topicAdapter->createProxy(topicManagerId))),
+ communicator->stringToIdentity("IceStorm/Finder"));
topicAdapter->activate();
publishAdapter->activate();
@@ -379,11 +401,11 @@ ServiceI::start(
void
ServiceI::start(const CommunicatorPtr& communicator,
- const ObjectAdapterPtr& topicAdapter,
- const ObjectAdapterPtr& publishAdapter,
- const string& name,
- const Ice::Identity& id,
- const string& /*dbEnv*/)
+ const ObjectAdapterPtr& topicAdapter,
+ const ObjectAdapterPtr& publishAdapter,
+ const string& name,
+ const Ice::Identity& id,
+ const string& /*dbEnv*/)
{
//
// For IceGrid we don't validate the properties as all sorts of