diff options
author | Benoit Foucher <benoit@zeroc.com> | 2005-10-18 17:38:50 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2005-10-18 17:38:50 +0000 |
commit | 1485e01f77f42c13fb6bd17d6289f7277cdac9cf (patch) | |
tree | d0bb149ea54644e9161eedd008c35ead1c9faeb5 /cpp/src/IceGrid/DescriptorHelper.cpp | |
parent | Fixed compile error (diff) | |
download | ice-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.cpp | 56 |
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; |