summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/RegistryI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/RegistryI.cpp')
-rw-r--r--cpp/src/IceGrid/RegistryI.cpp57
1 files changed, 48 insertions, 9 deletions
diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp
index 9051af23036..294c99d76bf 100644
--- a/cpp/src/IceGrid/RegistryI.cpp
+++ b/cpp/src/IceGrid/RegistryI.cpp
@@ -27,6 +27,7 @@
#include <IceGrid/AdminI.h>
#include <IceGrid/QueryI.h>
#include <IceGrid/SessionI.h>
+#include <IceGrid/AdminCallbackRouter.h>
#include <IceGrid/AdminSessionI.h>
#include <IceGrid/InternalRegistryI.h>
#include <IceGrid/SessionServantManager.h>
@@ -118,6 +119,33 @@ private:
const std::map<std::string, std::string> _passwords;
};
+
+class DefaultServantLocator : public Ice::ServantLocator
+{
+public:
+
+ DefaultServantLocator(const ObjectPtr& servant) :
+ _servant(servant)
+ {
+ }
+
+ virtual ObjectPtr locate(const Current& c, LocalObjectPtr&)
+ {
+ return _servant;
+ }
+
+ virtual void finished(const Current&, const ObjectPtr&, const LocalObjectPtr&)
+ {
+ }
+
+ virtual void deactivate(const string&)
+ {
+ }
+
+private:
+ ObjectPtr _servant;
+};
+
}
RegistryI::RegistryI(const CommunicatorPtr& communicator, const TraceLevelsPtr& traceLevels) :
@@ -349,13 +377,13 @@ RegistryI::start(bool nowarn)
registerNodes(internalRegistry, _session.getNodes(nodes));
}
- ObjectAdapterPtr serverAdapter = _communicator->createObjectAdapter("IceGrid.Registry.Server");
+ _serverAdapter = _communicator->createObjectAdapter("IceGrid.Registry.Server");
_clientAdapter = _communicator->createObjectAdapter("IceGrid.Registry.Client");
Ice::Identity dummy;
dummy.name = "dummy";
_wellKnownObjects->addEndpoint("Client", _clientAdapter->createDirectProxy(dummy));
- _wellKnownObjects->addEndpoint("Server", serverAdapter->createDirectProxy(dummy));
+ _wellKnownObjects->addEndpoint("Server", _serverAdapter->createDirectProxy(dummy));
_wellKnownObjects->addEndpoint("Internal", registryAdapter->createDirectProxy(dummy));
setupNullPermissionsVerifier(registryAdapter);
@@ -367,7 +395,7 @@ RegistryI::start(bool nowarn)
QueryPrx query = setupQuery(_clientAdapter);
RegistryPrx registry = setupRegistry(_clientAdapter);
- Ice::LocatorRegistryPrx locatorRegistry = setupLocatorRegistry(serverAdapter);
+ Ice::LocatorRegistryPrx locatorRegistry = setupLocatorRegistry(_serverAdapter);
LocatorPrx internalLocator = setupLocator(_clientAdapter, registryAdapter, locatorRegistry, registry, query);
//
@@ -376,12 +404,17 @@ RegistryI::start(bool nowarn)
// accessed by the connection that created the session. The session servant manager
// also takes care of providing the router servant for server admin objects.
//
- Ice::ObjectPtr router = new RegistryServerAdminRouter(_database);
- _servantManager = new SessionServantManager(_clientAdapter, _instanceName, true, getServerAdminCategory(), router);
+ Ice::ObjectPtr serverAdminRouter = new RegistryServerAdminRouter(_database);
+
+ AdminCallbackRouterPtr adminCallbackRouter = new AdminCallbackRouter;
+
+ _servantManager = new SessionServantManager(_clientAdapter, _instanceName, true, getServerAdminCategory(), serverAdminRouter, adminCallbackRouter);
_clientAdapter->addServantLocator(_servantManager, "");
+
+ _serverAdapter->addServantLocator(new DefaultServantLocator(adminCallbackRouter), "");
Ice::ObjectAdapterPtr sessionAdpt = setupClientSessionFactory(registryAdapter, internalLocator, nowarn);
- Ice::ObjectAdapterPtr admSessionAdpt = setupAdminSessionFactory(registryAdapter, router, internalLocator, nowarn);
+ Ice::ObjectAdapterPtr admSessionAdpt = setupAdminSessionFactory(registryAdapter, serverAdminRouter, internalLocator, nowarn);
_wellKnownObjects->finish();
if(_master)
@@ -396,7 +429,7 @@ RegistryI::start(bool nowarn)
//
// We are ready to go!
//
- serverAdapter->activate();
+ _serverAdapter->activate();
_clientAdapter->activate();
if(sessionAdpt)
{
@@ -542,7 +575,7 @@ RegistryI::setupClientSessionFactory(const Ice::ObjectAdapterPtr& registryAdapte
if(!properties->getProperty("IceGrid.Registry.SessionManager.Endpoints").empty())
{
adapter = _communicator->createObjectAdapter("IceGrid.Registry.SessionManager");
- servantManager = new SessionServantManager(adapter, _instanceName, false, "", 0);
+ servantManager = new SessionServantManager(adapter, _instanceName, false, "", 0, 0);
adapter->addServantLocator(servantManager, "");
}
@@ -599,7 +632,7 @@ RegistryI::setupAdminSessionFactory(const Ice::ObjectAdapterPtr& registryAdapter
if(!properties->getProperty("IceGrid.Registry.AdminSessionManager.Endpoints").empty())
{
adapter = _communicator->createObjectAdapter("IceGrid.Registry.AdminSessionManager");
- servantManager = new SessionServantManager(adapter, _instanceName, false, getServerAdminCategory(), router);
+ servantManager = new SessionServantManager(adapter, _instanceName, false, getServerAdminCategory(), router, 0);
adapter->addServantLocator(servantManager, "");
}
@@ -941,6 +974,12 @@ RegistryI::shutdown()
_clientAdapter->deactivate();
}
+Ice::ObjectPrx
+RegistryI::createAdminCallbackProxy(const Identity& identity) const
+{
+ return _serverAdapter->createProxy(identity);
+}
+
void
RegistryI::setupThreadPool(const PropertiesPtr& properties, const string& name, int size, int sizeMax)
{