summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/NodeRegistryI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IcePack/NodeRegistryI.cpp')
-rw-r--r--cpp/src/IcePack/NodeRegistryI.cpp78
1 files changed, 44 insertions, 34 deletions
diff --git a/cpp/src/IcePack/NodeRegistryI.cpp b/cpp/src/IcePack/NodeRegistryI.cpp
index 5d2d5827274..b75fb2290d0 100644
--- a/cpp/src/IcePack/NodeRegistryI.cpp
+++ b/cpp/src/IcePack/NodeRegistryI.cpp
@@ -15,20 +15,20 @@
using namespace std;
using namespace IcePack;
-IcePack::NodeRegistryI::NodeRegistryI(const Ice::CommunicatorPtr& communicator,
- const string& envName,
- const string& dbName,
- const AdapterRegistryPtr& adapterRegistry,
- const AdapterFactoryPtr& adapterFactory,
- const TraceLevelsPtr& traceLevels) :
+const string NodeRegistryI::_dbName = "noderegistry";
+
+NodeRegistryI::NodeRegistryI(const Ice::CommunicatorPtr& communicator,
+ const string& envName,
+ const AdapterRegistryPtr& adapterRegistry,
+ const AdapterFactoryPtr& adapterFactory,
+ const TraceLevelsPtr& traceLevels) :
_connectionCache(Freeze::createConnection(communicator, envName)),
- _dictCache(_connectionCache, dbName),
+ _dictCache(_connectionCache, _dbName),
_adapterRegistry(adapterRegistry),
_adapterFactory(adapterFactory),
_traceLevels(traceLevels),
_envName(envName),
- _communicator(communicator),
- _dbName(dbName)
+ _communicator(communicator)
{
for(StringObjectProxyDict::iterator p = _dictCache.begin(); p != _dictCache.end(); ++p)
{
@@ -48,7 +48,7 @@ IcePack::NodeRegistryI::NodeRegistryI(const Ice::CommunicatorPtr& communicator,
}
void
-IcePack::NodeRegistryI::add(const string& name, const NodePrx& node, const Ice::Current& current)
+NodeRegistryI::add(const string& name, const NodePrx& node, const Ice::Current& current)
{
while(true)
{
@@ -101,36 +101,46 @@ IcePack::NodeRegistryI::add(const string& name, const NodePrx& node, const Ice::
break;
}
- try
- {
- _adapterRegistry->findById("IcePack.Node." + name);
-
- //
- // TODO: ensure this adapter has been created by the adapter factory. It's possible that an
- // adapter has been created with the same name. In such a case, the best is probably to
- // prevent the node registration by throwing an appropriate exception. The user would then
- // need to remove the adapter from the adapter registry to be able to run the node.
- //
- }
- catch(const AdapterNotExistException&)
+ AdapterPrx adapter;
+ while(!adapter)
{
- //
- // Create and register the node adapter.
- //
- AdapterPrx adapter = _adapterFactory->createStandaloneAdapter("IcePackNodeAdapter." + name);
try
{
- _adapterRegistry->add("IcePack.Node." + name, adapter);
- }
- catch(const AdapterExistsException&)
+ adapter = _adapterRegistry->findById("IcePack.Node." + name);
+
+ //
+ // TODO: ensure this adapter has been created by the adapter factory. It's possible that an
+ // adapter has been created with the same name. In such a case, the best is probably to
+ // prevent the node registration by throwing an appropriate exception. The user would then
+ // need to remove the adapter from the adapter registry to be able to run the node.
+ //
+ }
+ catch(const AdapterNotExistException&)
{
- adapter->destroy();
+ //
+ // Create and register the node adapter.
+ //
+ adapter = _adapterFactory->createStandaloneAdapter("IcePackNodeAdapter." + name);
+ try
+ {
+ _adapterRegistry->add("IcePack.Node." + name, adapter);
+ }
+ catch(const AdapterExistsException&)
+ {
+ adapter->destroy();
+ adapter = 0;
+ }
}
}
+
+ //
+ // Set the direct proxy of the node object adapter.
+ //
+ adapter->setDirectProxy(node);
}
void
-IcePack::NodeRegistryI::remove(const string& name, const Ice::Current&)
+NodeRegistryI::remove(const string& name, const Ice::Current&)
{
IceUtil::Mutex::Lock sync(*this);
@@ -158,7 +168,7 @@ IcePack::NodeRegistryI::remove(const string& name, const Ice::Current&)
{
AdapterPrx adapter = _adapterRegistry->findById("IcePack.Node." + name);
adapter->destroy();
- _adapterRegistry->remove("IcePack.Node." + name);
+ _adapterRegistry->remove("IcePack.Node." + name, 0);
}
catch(const AdapterNotExistException&)
{
@@ -166,7 +176,7 @@ IcePack::NodeRegistryI::remove(const string& name, const Ice::Current&)
}
NodePrx
-IcePack::NodeRegistryI::findByName(const string& name, const Ice::Current&)
+NodeRegistryI::findByName(const string& name, const Ice::Current&)
{
Freeze::ConnectionPtr connection = Freeze::createConnection(_communicator, _envName);
StringObjectProxyDict dict(connection, _dbName);
@@ -190,7 +200,7 @@ IcePack::NodeRegistryI::findByName(const string& name, const Ice::Current&)
}
Ice::StringSeq
-IcePack::NodeRegistryI::getAll(const Ice::Current&) const
+NodeRegistryI::getAll(const Ice::Current&) const
{
Freeze::ConnectionPtr connection = Freeze::createConnection(_communicator, _envName);
StringObjectProxyDict dict(connection, _dbName);