summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/DescriptorHelper.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-10-18 17:38:50 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-10-18 17:38:50 +0000
commit1485e01f77f42c13fb6bd17d6289f7277cdac9cf (patch)
treed0bb149ea54644e9161eedd008c35ead1c9faeb5 /cpp/src/IceGrid/DescriptorHelper.cpp
parentFixed compile error (diff)
downloadice-1485e01f77f42c13fb6bd17d6289f7277cdac9cf.tar.bz2
ice-1485e01f77f42c13fb6bd17d6289f7277cdac9cf.tar.xz
ice-1485e01f77f42c13fb6bd17d6289f7277cdac9cf.zip
Fixed bug 518
Diffstat (limited to 'cpp/src/IceGrid/DescriptorHelper.cpp')
-rw-r--r--cpp/src/IceGrid/DescriptorHelper.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/cpp/src/IceGrid/DescriptorHelper.cpp b/cpp/src/IceGrid/DescriptorHelper.cpp
index 6a2259dd2eb..b9b247a1f5e 100644
--- a/cpp/src/IceGrid/DescriptorHelper.cpp
+++ b/cpp/src/IceGrid/DescriptorHelper.cpp
@@ -1609,6 +1609,31 @@ NodeHelper::update(const NodeUpdateDescriptor& update, const Resolver& appResolv
}
void
+NodeHelper::instantiateServer(const ServerInstanceDescriptor& instance, const Resolver& appResolve)
+{
+ Resolver resolve(appResolve, _definition.variables, false);
+ resolve.setReserved("node", _name);
+ resolve.setContext("node `" + _name + "'");
+
+ ServerInstanceHelper helper(instance, resolve);
+ if(!_serverInstances.insert(make_pair(helper.getId(), helper)).second)
+ {
+ resolve.exception("duplicate server `" + helper.getId() + "' in node `" + _name + "'");
+ }
+
+ //
+ // Update the node descriptor with the new server instances and servers.
+ //
+ _definition.serverInstances.clear();
+ for(ServerInstanceHelperDict::const_iterator r = _serverInstances.begin(); r != _serverInstances.end(); ++r)
+ {
+ _definition.serverInstances.push_back(r->second.getDefinition());
+ }
+
+ _instance = instantiate(resolve);
+}
+
+void
NodeHelper::getIds(multiset<string>& serverIds, multiset<string>& adapterIds, multiset<Ice::Identity>& objectIds) const
{
ServerInstanceHelperDict::const_iterator p;
@@ -2060,6 +2085,37 @@ ApplicationHelper::update(const ApplicationUpdateDescriptor& update)
}
void
+ApplicationHelper::instantiateServer(const string& node, const ServerInstanceDescriptor& instance)
+{
+ Resolver resolve(*this, _definition.name, _definition.variables);
+
+ //
+ // Get the node helper (add it if it doesn't exist.)
+ //
+ NodeHelperDict::iterator q = _nodes.find(node);
+ if(q == _nodes.end())
+ {
+ q = _nodes.insert(q, NodeHelperDict::value_type(node, NodeHelper(node, NodeDescriptor(), resolve)));
+ }
+ q->second.instantiateServer(instance, resolve);
+
+ //
+ // Update the application definition.
+ //
+ _definition.nodes[node] = q->second.getDescriptor();
+
+ //
+ // Update the application descriptor instance.
+ //
+ _instance = instantiate(resolve);
+
+ //
+ // Validate the new application descriptor.
+ //
+ validate(resolve);
+}
+
+void
ApplicationHelper::getIds(set<string>& serverIds, set<string>& adapterIds, set<Ice::Identity>& objectIds) const
{
multiset<string> sIds;