summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/AdminSessionI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/AdminSessionI.cpp')
-rw-r--r--cpp/src/IceGrid/AdminSessionI.cpp98
1 files changed, 46 insertions, 52 deletions
diff --git a/cpp/src/IceGrid/AdminSessionI.cpp b/cpp/src/IceGrid/AdminSessionI.cpp
index 08bcda2d3d7..f0c5e026494 100644
--- a/cpp/src/IceGrid/AdminSessionI.cpp
+++ b/cpp/src/IceGrid/AdminSessionI.cpp
@@ -44,6 +44,9 @@ AdminSessionI::getAdmin(const Ice::Current& current) const
void
AdminSessionI::setObservers(const RegistryObserverPrx& registryObserver,
const NodeObserverPrx& nodeObserver,
+ const ApplicationObserverPrx& appObserver,
+ const AdapterObserverPrx& adapterObserver,
+ const ObjectObserverPrx& objectObserver,
const Ice::Current& current)
{
Lock sync(*this);
@@ -54,32 +57,19 @@ AdminSessionI::setObservers(const RegistryObserverPrx& registryObserver,
throw ex;
}
- //
- // Subscribe to the topics.
- //
- if(registryObserver)
- {
- if(_registryObserver)
- {
- _database->getRegistryObserverTopic()->unsubscribe(_registryObserver);
- }
- _registryObserver = RegistryObserverPrx::uncheckedCast(registryObserver->ice_timeout(_timeout * 1000));
- _database->getRegistryObserverTopic()->subscribe(_registryObserver);
- }
- if(nodeObserver)
- {
- if(_nodeObserver)
- {
- _database->getNodeObserverTopic()->unsubscribe(_nodeObserver);
- }
- _nodeObserver = NodeObserverPrx::uncheckedCast(nodeObserver->ice_timeout(_timeout * 1000));
- _database->getNodeObserverTopic()->subscribe(_nodeObserver);
- }
+ setupObserverSubscription(RegistryObserverTopicName, registryObserver);
+ setupObserverSubscription(NodeObserverTopicName, nodeObserver);
+ setupObserverSubscription(ApplicationObserverTopicName, appObserver);
+ setupObserverSubscription(AdapterObserverTopicName, adapterObserver);
+ setupObserverSubscription(ObjectObserverTopicName, objectObserver);
}
void
AdminSessionI::setObserversByIdentity(const Ice::Identity& registryObserver,
const Ice::Identity& nodeObserver,
+ const Ice::Identity& appObserver,
+ const Ice::Identity& adapterObserver,
+ const Ice::Identity& objectObserver,
const Ice::Current& current)
{
Lock sync(*this);
@@ -90,27 +80,12 @@ AdminSessionI::setObserversByIdentity(const Ice::Identity& registryObserver,
throw ex;
}
- //
- // Subscribe to the topics.
- //
- if(!registryObserver.name.empty())
- {
- if(_registryObserver)
- {
- _database->getRegistryObserverTopic()->unsubscribe(_registryObserver);
- }
- _registryObserver = RegistryObserverPrx::uncheckedCast(current.con->createProxy(registryObserver));
- _database->getRegistryObserverTopic()->subscribe(_registryObserver);
- }
- if(!nodeObserver.name.empty())
- {
- if(_nodeObserver)
- {
- _database->getNodeObserverTopic()->unsubscribe(_nodeObserver);
- }
- _nodeObserver = NodeObserverPrx::uncheckedCast(current.con->createProxy(nodeObserver));
- _database->getNodeObserverTopic()->subscribe(_nodeObserver);
- }
+ setupObserverSubscription(RegistryObserverTopicName, toProxy(registryObserver, current.con));
+ setupObserverSubscription(NodeObserverTopicName, toProxy(nodeObserver, current.con));
+ setupObserverSubscription(ApplicationObserverTopicName, toProxy(appObserver, current.con));
+ setupObserverSubscription(AdapterObserverTopicName, toProxy(adapterObserver, current.con));
+ setupObserverSubscription(ObjectObserverTopicName, toProxy(objectObserver, current.con));
+
}
int
@@ -173,16 +148,11 @@ AdminSessionI::destroy(const Ice::Current& current)
//
if(current.adapter) // Not shutting down
{
- if(_registryObserver) // Immutable once _destroy = true
- {
- _database->getRegistryObserverTopic()->unsubscribe(_registryObserver);
- _registryObserver = 0;
- }
- if(_nodeObserver)
- {
- _database->getNodeObserverTopic()->unsubscribe(_nodeObserver);
- _nodeObserver = 0;
- }
+ setupObserverSubscription(RegistryObserverTopicName, 0);
+ setupObserverSubscription(NodeObserverTopicName, 0);
+ setupObserverSubscription(ApplicationObserverTopicName, 0);
+ setupObserverSubscription(AdapterObserverTopicName, 0);
+ setupObserverSubscription(ObjectObserverTopicName, 0);
}
}
@@ -201,6 +171,8 @@ AdminSessionFactory::AdminSessionFactory(const Ice::ObjectAdapterPtr& adapter,
Glacier2::SessionPrx
AdminSessionFactory::createGlacier2Session(const string& sessionId, const Glacier2::SessionControlPrx& ctl)
{
+ assert(_adapter);
+
Ice::IdentitySeq ids; // Identities of the object the session is allowed to access.
Ice::Identity id;
@@ -286,3 +258,25 @@ AdminSSLSessionManagerI::create(const Glacier2::SSLInfo& info,
return _factory->createGlacier2Session(userDN, ctl);
}
+
+void
+AdminSessionI::setupObserverSubscription(TopicName name, const Ice::ObjectPrx& observer)
+{
+ if(_observers[name] != observer)
+ {
+ _database->getObserverTopic(name)->unsubscribe(_observers[name]);
+ _observers[name] = 0;
+ }
+
+ if(observer)
+ {
+ _observers[name] = observer->ice_timeout(_timeout * 1000);
+ _database->getObserverTopic(name)->subscribe(_observers[name]);
+ }
+}
+
+Ice::ObjectPrx
+AdminSessionI::toProxy(const Ice::Identity& id, const Ice::ConnectionPtr& connection)
+{
+ return id.name.empty() ? Ice::ObjectPrx() : connection->createProxy(id);
+}