diff options
-rw-r--r-- | CHANGES | 38 | ||||
-rw-r--r-- | config/PropertyNames.xml | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/Glacier2Router.cpp | 51 | ||||
-rw-r--r-- | cpp/src/Glacier2/SessionRouterI.cpp | 10 | ||||
-rw-r--r-- | cpp/src/Ice/PropertyNames.cpp | 4 | ||||
-rw-r--r-- | cpp/src/Ice/PropertyNames.h | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/Client.cpp | 6 | ||||
-rw-r--r-- | cpp/src/IceGrid/RegistryI.cpp | 28 | ||||
-rw-r--r-- | cpp/src/IceStorm/Admin.cpp | 28 | ||||
-rw-r--r-- | cpp/src/IceStorm/Service.cpp | 34 | ||||
-rw-r--r-- | cpp/test/Glacier2/router/Client.cpp | 8 | ||||
-rw-r--r-- | cpp/test/IceGrid/simple/AllTests.cpp | 9 | ||||
-rw-r--r-- | cs/src/Ice/PropertyNames.cs | 4 | ||||
-rw-r--r-- | cs/test/Glacier2/router/Client.cs | 10 | ||||
-rw-r--r-- | cs/test/IceGrid/simple/AllTests.cs | 9 | ||||
-rw-r--r-- | java/src/IceInternal/PropertyNames.java | 4 | ||||
-rw-r--r-- | java/test/Glacier2/router/Client.java | 9 | ||||
-rw-r--r-- | java/test/IceGrid/simple/AllTests.java | 11 | ||||
-rw-r--r-- | js/src/Ice/PropertyNames.js | 2 | ||||
-rw-r--r-- | slice/Ice/Locator.ice | 23 | ||||
-rw-r--r-- | slice/Ice/Router.ice | 22 | ||||
-rw-r--r-- | slice/IceGrid/Discovery.ice | 2 | ||||
-rw-r--r-- | slice/IceStorm/IceStorm.ice | 21 |
23 files changed, 292 insertions, 45 deletions
@@ -27,6 +27,37 @@ Changes since version 3.5.1 General Changes =============== +- Added IceStormAdmin.Host and IceStormAdmin.Port properties. You can + set these properties to connect to an IceStorm instance running on + a given host and port. + +- Added IceStorm finder interface (in the IceStorm/IceStorm.ice slice + file) to enable clients to easily find the proxy of the topic + manager with just the endpoint information of the IceStorm + service. The client doesn't have to know the instance name. + + IceStorm provides an Ice object with the identity `IceStorm/Finder' + that implements this interface. + +- Added support for IceGridDiscovery to the IceGrid administrative + utilities. Also added IceGridAdmin.Host and IceGridAdmin.Port + properties, you can set these properties to connect to an IceGrid + registry running on a given host and port. + +- Added Ice locator and router finder interfaces to enable clients to + easily find proxies for the locator or router (in Ice/Locator.ice + and Ice/Router.ice slice files). + + Glacier2 and IceGrid implement those interfaces and provide finder + Ice objects with respectively the identity `Ice/RouterFinder' and + `Ice/LocatorFinder'. Clients can use those objects to connect to + Glacier2 and IceGrid with just the endpoint information (they don't + need to know the instance name of the Glacier2 or IceGrid service). + +- Added IceGrid discovery plugin. This plugin enables Ice applications + to discover IceGrid registries running on the network using UDP + multicast. See the release notes or Ice manual for more information. + - The collocation optimization has been significanly improved to remove limitations. It now works with AMI, AMD, blobjects and batching. Collocated requests are now always marshaled and @@ -80,6 +111,13 @@ General Changes and server is alive. See the release notes and Ice manual for more information. +- Added IceDiscovery plugin. This plugin provides a UDP multicast + based Ice locator implementation. This can be used as an alternative + to IceGrid when running few clients and servers on the same network + and if you don't want to deploy a central service such as IceGrid. + + See the release notes or Ice manual for more information. + - Added support for IceGrid custom load balancing with the addition of replica group and type filters. These filters allow you to select the set of replicas that are sent back to the client when it diff --git a/config/PropertyNames.xml b/config/PropertyNames.xml index e8caff226da..fed00231db6 100644 --- a/config/PropertyNames.xml +++ b/config/PropertyNames.xml @@ -593,6 +593,8 @@ generated from the section label. <section name="IceStormAdmin"> <property name="TopicManager.[any]" /> + <property name="Host" /> + <property name="Port" /> </section> <section name="Glacier2"> diff --git a/cpp/src/Glacier2/Glacier2Router.cpp b/cpp/src/Glacier2/Glacier2Router.cpp index b8589caa4e0..a44e8db6985 100644 --- a/cpp/src/Glacier2/Glacier2Router.cpp +++ b/cpp/src/Glacier2/Glacier2Router.cpp @@ -22,7 +22,7 @@ using namespace std; using namespace Ice; using namespace Glacier2; -namespace Glacier2 +namespace { class RouterService : public Service @@ -66,14 +66,33 @@ public: } }; +class FinderI : public Ice::RouterFinder +{ +public: + + FinderI(const Glacier2::RouterPrx& router) : _router(router) + { + } + + virtual Ice::RouterPrx + getRouter(const Ice::Current&) + { + return _router; + } + +private: + + const Glacier2::RouterPrx _router; +}; + }; -Glacier2::RouterService::RouterService() +RouterService::RouterService() { } bool -Glacier2::RouterService::start(int argc, char* argv[], int& status) +RouterService::start(int argc, char* argv[], int& status) { bool nowarn; @@ -465,6 +484,24 @@ Glacier2::RouterService::start(int argc, char* argv[], int& status) // _sessionRouter = new SessionRouterI(_instance, verifier, sessionManager, sslVerifier, sslSessionManager); + // + // Th session router is used directly as servant for the main + // Glacier2 router Ice object. + // + Identity routerId; + routerId.category = _instance->properties()->getPropertyWithDefault("Glacier2.InstanceName", "Glacier2"); + routerId.name = "router"; + Glacier2::RouterPrx routerPrx = Glacier2::RouterPrx::uncheckedCast(clientAdapter->add(_sessionRouter, routerId)); + + // + // Add the Ice router finder object to allow retrieving the router + // proxy with just the endpoint information of the router. + // + Identity finderId; + finderId.category = "Ice"; + finderId.name = "RouterFinder"; + clientAdapter->add(new FinderI(routerPrx), finderId); + if(_instance->getObserver()) { _instance->getObserver()->setObserverUpdater(_sessionRouter); @@ -496,7 +533,7 @@ Glacier2::RouterService::start(int argc, char* argv[], int& status) } bool -Glacier2::RouterService::stop() +RouterService::stop() { if(_sessionRouter) { @@ -517,7 +554,7 @@ Glacier2::RouterService::stop() } CommunicatorPtr -Glacier2::RouterService::initializeCommunicator(int& argc, char* argv[], +RouterService::initializeCommunicator(int& argc, char* argv[], const InitializationData& initializationData) { InitializationData initData = initializationData; @@ -549,7 +586,7 @@ Glacier2::RouterService::initializeCommunicator(int& argc, char* argv[], } void -Glacier2::RouterService::usage(const string& appName) +RouterService::usage(const string& appName) { string options = "Options:\n" @@ -581,6 +618,6 @@ main(int argc, char* argv[]) #endif { - Glacier2::RouterService svc; + RouterService svc; return svc.main(argc, argv); } diff --git a/cpp/src/Glacier2/SessionRouterI.cpp b/cpp/src/Glacier2/SessionRouterI.cpp index 992cd8f67dd..21145379e4e 100644 --- a/cpp/src/Glacier2/SessionRouterI.cpp +++ b/cpp/src/Glacier2/SessionRouterI.cpp @@ -602,14 +602,6 @@ SessionRouterI::SessionRouterI(const InstancePtr& instance, _sessionDestroyCallback(newCallback_Session_destroy(this, &SessionRouterI::sessionDestroyException)), _destroy(false) { - // - // This session router is used directly as servant for the main - // Glacier2 router Ice object. - // - Identity routerId; - routerId.category = _instance->properties()->getPropertyWithDefault("Glacier2.InstanceName", "Glacier2"); - routerId.name = "router"; - if(_sessionThread) { __setNoDelete(true); @@ -629,8 +621,6 @@ SessionRouterI::SessionRouterI(const InstancePtr& instance, try { - _instance->clientObjectAdapter()->add(this, routerId); - // // All other calls on the client object adapter are dispatched to // a router servant based on connection information. diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp index acadc7fb151..475a08db4b2 100644 --- a/cpp/src/Ice/PropertyNames.cpp +++ b/cpp/src/Ice/PropertyNames.cpp @@ -6,7 +6,7 @@ // ICE_LICENSE file included in this distribution. // // ********************************************************************** -// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed Jul 9 18:08:33 2014 +// Generated by makeprops.py from file ./config/PropertyNames.xml, Tue Jul 15 11:44:29 2014 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -1047,6 +1047,8 @@ const IceInternal::PropertyArray const IceInternal::Property IceStormAdminPropsData[] = { IceInternal::Property("IceStormAdmin.TopicManager.*", false, 0), + IceInternal::Property("IceStormAdmin.Host", false, 0), + IceInternal::Property("IceStormAdmin.Port", false, 0), }; const IceInternal::PropertyArray diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h index 7f413070df8..126b5ab08f0 100644 --- a/cpp/src/Ice/PropertyNames.h +++ b/cpp/src/Ice/PropertyNames.h @@ -6,7 +6,7 @@ // ICE_LICENSE file included in this distribution. // // ********************************************************************** -// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed Jul 9 18:08:33 2014 +// Generated by makeprops.py from file ./config/PropertyNames.xml, Tue Jul 15 11:44:29 2014 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/cpp/src/IceGrid/Client.cpp b/cpp/src/IceGrid/Client.cpp index 191d5749a88..df2a0979b52 100644 --- a/cpp/src/IceGrid/Client.cpp +++ b/cpp/src/IceGrid/Client.cpp @@ -527,13 +527,13 @@ Client::run(StringSeq& originalArgs) { const int timeout = 3000; // 3s connection timeout. ostringstream os; - os << "IceGridDiscovery/Lookup" << (ssl ? " -s" : ""); + os << "Ice/LocatorFinder" << (ssl ? " -s" : ""); os << ":tcp -h \"" << host << "\" -p " << (port == 0 ? 4061 : port) << " -t " << timeout; os << ":ssl -h \"" << host << "\" -p " << (port == 0 ? 4063 : port) << " -t " << timeout; - LookupPrx lookup = LookupPrx::uncheckedCast(communicator()->stringToProxy(os.str())); + LocatorFinderPrx finder = LocatorFinderPrx::uncheckedCast(communicator()->stringToProxy(os.str())); try { - communicator()->setDefaultLocator(lookup->getLocator()); + communicator()->setDefaultLocator(finder->getLocator()); } catch(const Ice::LocalException&) { diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp index 0892fd5a1f8..8ab2ed0bd92 100644 --- a/cpp/src/IceGrid/RegistryI.cpp +++ b/cpp/src/IceGrid/RegistryI.cpp @@ -174,6 +174,25 @@ private: const WellKnownObjectsManagerPtr _wellKnownObjects; }; +class FinderI : public Ice::LocatorFinder +{ +public: + + FinderI(const WellKnownObjectsManagerPtr& wellKnownObjects) : _wellKnownObjects(wellKnownObjects) + { + } + + virtual Ice::LocatorPrx + getLocator(const Ice::Current&) + { + return _wellKnownObjects->getLocator(); + } + +private: + + const WellKnownObjectsManagerPtr _wellKnownObjects; +}; + } RegistryI::RegistryI(const CommunicatorPtr& communicator, @@ -585,11 +604,9 @@ RegistryI::startImpl() } // - // Setup the lookup servant and add it to the client adapter. + // Add the locator finder object to the client adapter. // - Ice::Identity id = _communicator->stringToIdentity("IceGridDiscovery/Lookup"); - Ice::ObjectPtr lookup = new LookupI(_instanceName, _wellKnownObjects); - _clientAdapter->add(lookup, id); + _clientAdapter->add(new FinderI(_wellKnownObjects), _communicator->stringToIdentity("Ice/LocatorFinder")); // // Setup the discovery object adapter and also add it the lookup @@ -623,8 +640,9 @@ RegistryI::startImpl() try { + Ice::Identity lookupId = _communicator->stringToIdentity("IceGridDiscovery/Lookup"); discoveryAdapter = _communicator->createObjectAdapter("IceGrid.Registry.Discovery"); - discoveryAdapter->add(lookup, id); + discoveryAdapter->add(new LookupI(_instanceName, _wellKnownObjects), lookupId); } catch(const Ice::LocalException& ex) { diff --git a/cpp/src/IceStorm/Admin.cpp b/cpp/src/IceStorm/Admin.cpp index 6377b77c5e9..392d58fea8c 100644 --- a/cpp/src/IceStorm/Admin.cpp +++ b/cpp/src/IceStorm/Admin.cpp @@ -41,12 +41,7 @@ main(int argc, char* argv[]) Ice::InitializationData id; Ice::StringSeq args = Ice::argsToStringSeq(argc, argv); id.properties = Ice::createProperties(args); - // - // We don't want to load DB plug-ins with icestormadmin, as this will - // cause FileLock issues when run with the same configuration file - // used by the service. - // - id.properties->setProperty("Ice.Plugin.DB", ""); + id.properties->setProperty("Ice.Warn.Endpoints", "0"); int rc = app.main(argc, argv, id); return rc; } @@ -157,6 +152,27 @@ Client::run(int argc, char* argv[]) if(!defaultManager) { + string host = properties->getProperty("IceStormAdmin.Host"); + string port = properties->getProperty("IceStormAdmin.Port"); + + const int timeout = 3000; // 3s connection timeout. + ostringstream os; + os << "IceStorm/Finder"; + os << ":tcp" << (host.empty() ? "" : (" -h \"" + host + "\"")) << " -p " << port << " -t " << timeout; + os << ":ssl" << (host.empty() ? "" : (" -h \"" + host + "\"")) << " -p " << port << " -t " << timeout; + IceStorm::FinderPrx finder = IceStorm::FinderPrx::uncheckedCast(communicator()->stringToProxy(os.str())); + try + { + defaultManager = finder->getTopicManager(); + } + catch(const Ice::LocalException&) + { + // Ignore. + } + } + + if(!defaultManager) + { cerr << appName() << ": no manager proxies configured" << endl; return EXIT_FAILURE; } 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 diff --git a/cpp/test/Glacier2/router/Client.cpp b/cpp/test/Glacier2/router/Client.cpp index 5c58b56ce64..80f04942bf7 100644 --- a/cpp/test/Glacier2/router/Client.cpp +++ b/cpp/test/Glacier2/router/Client.cpp @@ -452,6 +452,14 @@ CallbackClient::run(int argc, char* argv[]) } { + cout << "testing router finder... " << flush; + Ice::RouterFinderPrx finder = + RouterFinderPrx::uncheckedCast(communicator()->stringToProxy("Ice/RouterFinder:default -p 12347")); + test(finder->getRouter()->ice_getIdentity() == router->ice_getIdentity()); + cout << "ok" << endl; + } + + { cout << "installing router with communicator... " << flush; communicator()->setDefaultRouter(router); cout << "ok" << endl; diff --git a/cpp/test/IceGrid/simple/AllTests.cpp b/cpp/test/IceGrid/simple/AllTests.cpp index de4283f1ec1..5ee95f3dad4 100644 --- a/cpp/test/IceGrid/simple/AllTests.cpp +++ b/cpp/test/IceGrid/simple/AllTests.cpp @@ -39,6 +39,15 @@ allTests(const Ice::CommunicatorPtr& communicator) obj->ice_ping(); cout << "ok" << endl; + cout << "testing locator finder... " << flush; + Ice::Identity finderId; + finderId.category = "Ice"; + finderId.name = "LocatorFinder"; + Ice::LocatorFinderPrx finder = Ice::LocatorFinderPrx::checkedCast( + communicator->getDefaultLocator()->ice_identity(finderId)); + test(finder->getLocator()); + cout << "ok" << endl; + cout << "testing discovery... " << flush; { Ice::InitializationData initData; diff --git a/cs/src/Ice/PropertyNames.cs b/cs/src/Ice/PropertyNames.cs index a3579f092f2..6f778c0fc94 100644 --- a/cs/src/Ice/PropertyNames.cs +++ b/cs/src/Ice/PropertyNames.cs @@ -6,7 +6,7 @@ // ICE_LICENSE file included in this distribution. // // ********************************************************************** -// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed Jul 9 18:08:33 2014 +// Generated by makeprops.py from file ./config/PropertyNames.xml, Tue Jul 15 11:44:29 2014 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -1016,6 +1016,8 @@ namespace IceInternal public static Property[] IceStormAdminProps = { new Property(@"^IceStormAdmin\.TopicManager\.[^\s]+$", false, null), + new Property(@"^IceStormAdmin\.Host$", false, null), + new Property(@"^IceStormAdmin\.Port$", false, null), null }; diff --git a/cs/test/Glacier2/router/Client.cs b/cs/test/Glacier2/router/Client.cs index b2541faa045..fe9b034bd19 100644 --- a/cs/test/Glacier2/router/Client.cs +++ b/cs/test/Glacier2/router/Client.cs @@ -45,6 +45,16 @@ public class Client Console.Out.WriteLine("ok"); } + + { + Console.Out.Write("testing router finder... "); + Console.Out.Flush(); + Ice.RouterFinderPrx finder = Ice.RouterFinderPrxHelper.uncheckedCast( + communicator().stringToProxy("Ice/RouterFinder:default -p 12347")); + test(finder.getRouter().ice_getIdentity().Equals(router.ice_getIdentity())); + Console.Out.WriteLine("ok"); + } + { Console.Out.Write("installing router with communicator... "); Console.Out.Flush(); diff --git a/cs/test/IceGrid/simple/AllTests.cs b/cs/test/IceGrid/simple/AllTests.cs index ad9dab507a1..5671c54dd78 100644 --- a/cs/test/IceGrid/simple/AllTests.cs +++ b/cs/test/IceGrid/simple/AllTests.cs @@ -47,6 +47,15 @@ public class AllTests Console.Out.Flush(); obj.ice_ping(); Console.Out.WriteLine("ok"); + + Console.Out.Write("testing locator finder... "); + Ice.Identity finderId = new Ice.Identity(); + finderId.category = "Ice"; + finderId.name = "LocatorFinder"; + Ice.LocatorFinderPrx finder = Ice.LocatorFinderPrxHelper.checkedCast( + communicator.getDefaultLocator().ice_identity(finderId)); + test(finder.getLocator() != null); + Console.Out.WriteLine("ok"); System.Console.Out.Write("shutting down server... "); System.Console.Out.Flush(); diff --git a/java/src/IceInternal/PropertyNames.java b/java/src/IceInternal/PropertyNames.java index 54ca60095a9..4bbf3ea7ecf 100644 --- a/java/src/IceInternal/PropertyNames.java +++ b/java/src/IceInternal/PropertyNames.java @@ -6,7 +6,7 @@ // ICE_LICENSE file included in this distribution. // // ********************************************************************** -// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed Jul 9 18:08:33 2014 +// Generated by makeprops.py from file ./config/PropertyNames.xml, Tue Jul 15 11:44:29 2014 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -1016,6 +1016,8 @@ public final class PropertyNames public static final Property IceStormAdminProps[] = { new Property("IceStormAdmin\\.TopicManager\\.[^\\s]+", false, null), + new Property("IceStormAdmin\\.Host", false, null), + new Property("IceStormAdmin\\.Port", false, null), null }; diff --git a/java/test/Glacier2/router/Client.java b/java/test/Glacier2/router/Client.java index 002a4ce2513..63090711dff 100644 --- a/java/test/Glacier2/router/Client.java +++ b/java/test/Glacier2/router/Client.java @@ -53,6 +53,15 @@ public class Client extends test.Util.Application } { + out.print("testing router finder... "); + out.flush(); + Ice.RouterFinderPrx finder = Ice.RouterFinderPrxHelper.uncheckedCast( + communicator().stringToProxy("Ice/RouterFinder:default -p 12347")); + test(finder.getRouter().ice_getIdentity().equals(router.ice_getIdentity())); + out.println("ok"); + } + + { out.print("installing router with communicator... "); out.flush(); communicator().setDefaultRouter(router); diff --git a/java/test/IceGrid/simple/AllTests.java b/java/test/IceGrid/simple/AllTests.java index c8d63eb541e..e240570b050 100644 --- a/java/test/IceGrid/simple/AllTests.java +++ b/java/test/IceGrid/simple/AllTests.java @@ -50,7 +50,16 @@ public class AllTests out.flush(); obj.ice_ping(); out.println("ok"); - + + out.print("testing locator finder... "); + Ice.Identity finderId = new Ice.Identity(); + finderId.category = "Ice"; + finderId.name = "LocatorFinder"; + Ice.LocatorFinderPrx finder = Ice.LocatorFinderPrxHelper.checkedCast( + communicator.getDefaultLocator().ice_identity(finderId)); + test(finder.getLocator() != null); + out.println("ok"); + out.print("shutting down server... "); out.flush(); obj.shutdown(); diff --git a/js/src/Ice/PropertyNames.js b/js/src/Ice/PropertyNames.js index aab40f7c01b..cd6cfe9b573 100644 --- a/js/src/Ice/PropertyNames.js +++ b/js/src/Ice/PropertyNames.js @@ -6,7 +6,7 @@ // ICE_LICENSE file included in this distribution. // // ********************************************************************** -// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed Jul 9 18:08:33 2014 +// Generated by makeprops.py from file ./config/PropertyNames.xml, Tue Jul 15 11:44:29 2014 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/slice/Ice/Locator.ice b/slice/Ice/Locator.ice index fed38092468..f57562ed997 100644 --- a/slice/Ice/Locator.ice +++ b/slice/Ice/Locator.ice @@ -200,5 +200,28 @@ interface LocatorRegistry throws ServerNotFoundException; }; +/** + * + * This inferface should be implemented by services implementing the + * Ice::Locator interface. It should be advertised through an Ice + * object with the identity `Ice/LocatorFinder'. This allows clients + * to retrieve the locator proxy with just the endpoint information of + * the service. + * + **/ +interface LocatorFinder +{ + /** + * + * Get the locator proxy implemented by the process hosting this + * finder object. The proxy might point to several replicas. + * + * @return The locator proxy. + * + **/ + Locator* getLocator(); }; +}; + + diff --git a/slice/Ice/Router.ice b/slice/Ice/Router.ice index 70d131039a2..89541419404 100644 --- a/slice/Ice/Router.ice +++ b/slice/Ice/Router.ice @@ -70,5 +70,27 @@ interface Router idempotent ObjectProxySeq addProxies(ObjectProxySeq proxies); }; +/** + * + * This inferface should be implemented by services implementing the + * Ice::Router interface. It should be advertised through an Ice + * object with the identity `Ice/RouterFinder'. This allows clients to + * retrieve the router proxy with just the endpoint information of the + * service. + * + **/ +interface RouterFinder +{ + /** + * + * Get the router proxy implemented by the process hosting this + * finder object. The proxy might point to several replicas. + * + * @return The router proxy. + * + **/ + Router* getRouter(); +}; + }; diff --git a/slice/IceGrid/Discovery.ice b/slice/IceGrid/Discovery.ice index 9d6e2ec572f..c2482d455a4 100644 --- a/slice/IceGrid/Discovery.ice +++ b/slice/IceGrid/Discovery.ice @@ -22,8 +22,6 @@ interface LookupReply interface Lookup { idempotent void findLocator(string instanceName, LookupReply* reply); - - Locator* getLocator(); }; }; diff --git a/slice/IceStorm/IceStorm.ice b/slice/IceStorm/IceStorm.ice index 2730a2308f0..8df79e30e90 100644 --- a/slice/IceStorm/IceStorm.ice +++ b/slice/IceStorm/IceStorm.ice @@ -382,5 +382,26 @@ interface TopicManager ["nonmutating", "cpp:const"] idempotent Ice::SliceChecksumDict getSliceChecksums(); }; +/** + * + * This inferface is advertised by the IceStorm service through the + * Ice object with the identity `IceStorm/Finder'. This allows clients + * to retrieve the topic manager with just the endpoint information of + * the IceStorm service. + * + **/ +interface Finder +{ + /** + * + * Get the topic manager proxy. The proxy might point to several + * replicas. + * + * @return The topic manager proxy. + * + **/ + TopicManager* getTopicManager(); +}; + }; |