summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2006-12-13 14:34:57 +0000
committerDwayne Boone <dwayne@zeroc.com>2006-12-13 14:34:57 +0000
commit769e22f35e9d21344639a36e07ec90ee2656140c (patch)
tree36ac09ee40ddf18d408736ceaa59ee9f8e05e414 /cpp
parentAdded support for server logs (diff)
downloadice-769e22f35e9d21344639a36e07ec90ee2656140c.tar.bz2
ice-769e22f35e9d21344639a36e07ec90ee2656140c.tar.xz
ice-769e22f35e9d21344639a36e07ec90ee2656140c.zip
Bug 1570 - object adapter configuration
Diffstat (limited to 'cpp')
-rw-r--r--cpp/CHANGES5
-rw-r--r--cpp/demo/Ice/bidir/Client.cpp2
-rw-r--r--cpp/demo/Ice/bidir/config.client1
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.cpp22
-rw-r--r--cpp/src/Ice/ObjectAdapterI.cpp51
-rw-r--r--cpp/src/Ice/ObjectAdapterI.h3
-rw-r--r--cpp/test/FreezeScript/evictor/makedb.cpp3
-rw-r--r--cpp/test/Ice/exceptions/AllTests.cpp19
-rw-r--r--cpp/test/Ice/facets/AllTests.cpp1
-rw-r--r--cpp/test/IceGrid/session/AllTests.cpp12
10 files changed, 91 insertions, 28 deletions
diff --git a/cpp/CHANGES b/cpp/CHANGES
index 552254721fc..f7345630180 100644
--- a/cpp/CHANGES
+++ b/cpp/CHANGES
@@ -1,6 +1,11 @@
Changes since version 3.1.1
---------------------------
+- The communcator object adapter now throw an InitializationException
+ if the adapter has no configuration. It is possible to explicitly
+ create a adapter with no configuration, useful for use with
+ bi-directional connections, by calling createObjectAdapter("").
+
- It is now possible to start and stop individual IceBox services
using the IceBox admin utility.
diff --git a/cpp/demo/Ice/bidir/Client.cpp b/cpp/demo/Ice/bidir/Client.cpp
index a6c9648d87a..158556da851 100644
--- a/cpp/demo/Ice/bidir/Client.cpp
+++ b/cpp/demo/Ice/bidir/Client.cpp
@@ -50,7 +50,7 @@ CallbackClient::run(int argc, char* argv[])
return EXIT_FAILURE;
}
- Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Callback.Client");
+ Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("");
Ice::Identity ident;
ident.name = IceUtil::generateUUID();
ident.category = "";
diff --git a/cpp/demo/Ice/bidir/config.client b/cpp/demo/Ice/bidir/config.client
index 9a460ecb33c..c11ffbbb081 100644
--- a/cpp/demo/Ice/bidir/config.client
+++ b/cpp/demo/Ice/bidir/config.client
@@ -1,5 +1,4 @@
Callback.Client.CallbackServer=sender:tcp -p 10000
-Callback.Client.Endpoints=
#
# Warn about connection exceptions
diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp
index bd1c9152be6..36b88ee695e 100644
--- a/cpp/src/Ice/ObjectAdapterFactory.cpp
+++ b/cpp/src/Ice/ObjectAdapterFactory.cpp
@@ -11,6 +11,7 @@
#include <Ice/ObjectAdapterI.h>
#include <Ice/LocalException.h>
#include <Ice/Functional.h>
+#include <IceUtil/UUID.h>
using namespace std;
using namespace Ice;
@@ -116,8 +117,25 @@ IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const
throw AlreadyRegisteredException(__FILE__, __LINE__, "object adapter", name);
}
- ObjectAdapterIPtr adapter = new ObjectAdapterI(_instance, _communicator, this, name, endpoints, router);
- _adapters.insert(make_pair(name, adapter));
+ if(name.empty() && (!name.empty() || router != 0))
+ {
+ InitializationException ex(__FILE__, __LINE__);
+ ex.reason = "Cannot configure endpoints or router with nameless object adapter";
+ throw ex;
+ }
+
+ ObjectAdapterIPtr adapter;
+ if(name.empty())
+ {
+ string uuid = IceUtil::generateUUID();
+ adapter = new ObjectAdapterI(_instance, _communicator, this, uuid, "", 0, true);
+ _adapters.insert(make_pair(uuid, adapter));
+ }
+ else
+ {
+ adapter = new ObjectAdapterI(_instance, _communicator, this, name, endpoints, router, false);
+ _adapters.insert(make_pair(name, adapter));
+ }
return adapter;
}
diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp
index a84e7f1eb43..ac6d5262c2a 100644
--- a/cpp/src/Ice/ObjectAdapterI.cpp
+++ b/cpp/src/Ice/ObjectAdapterI.cpp
@@ -51,7 +51,7 @@ Ice::ObjectAdapterI::getName() const
//
// No mutex lock necessary, _name is immutable.
//
- return _name;
+ return _noConfig ? "" : _name;
}
CommunicatorPtr
@@ -97,8 +97,13 @@ Ice::ObjectAdapterI::activate()
_waitForActivate = true;
locatorInfo = _locatorInfo;
- printAdapterReady = _instance->initializationData().properties->getPropertyAsInt("Ice.PrintAdapterReady") > 0;
- registerProcess = _instance->initializationData().properties->getPropertyAsInt(_name + ".RegisterProcess") > 0;
+ if(!_noConfig)
+ {
+ printAdapterReady =
+ _instance->initializationData().properties->getPropertyAsInt("Ice.PrintAdapterReady") > 0;
+ registerProcess =
+ _instance->initializationData().properties->getPropertyAsInt(_name + ".RegisterProcess") > 0;
+ }
}
try
@@ -671,7 +676,7 @@ Ice::ObjectAdapterI::getServantManager() const
Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const CommunicatorPtr& communicator,
const ObjectAdapterFactoryPtr& objectAdapterFactory, const string& name,
- const string& endpointInfo, const RouterPrx& router) :
+ const string& endpointInfo, const RouterPrx& router, bool noConfig) :
_deactivated(false),
_instance(instance),
_communicator(communicator),
@@ -679,12 +684,34 @@ Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const Communica
_servantManager(new ServantManager(instance, name)),
_activateOneOffDone(false),
_name(name),
- _id(instance->initializationData().properties->getProperty(name + ".AdapterId")),
- _replicaGroupId(instance->initializationData().properties->getProperty(name + ".ReplicaGroupId")),
_directCount(0),
_waitForActivate(false),
- _waitForDeactivate(false)
+ _waitForDeactivate(false),
+ _noConfig(noConfig)
{
+ if(_noConfig)
+ {
+ return;
+ }
+
+ //
+ // Make sure named adapter has some configuration
+ //
+ if(endpointInfo.empty() && router == 0)
+ {
+ PropertyDict oaProps = instance->initializationData().properties->getPropertiesForPrefix(_name + ".");
+ if(oaProps.size() == 0)
+ {
+ InitializationException ex(__FILE__, __LINE__);
+ ex.reason = "Object adapter \"" + _name + "\" requires configuration.";
+ throw ex;
+ }
+ }
+
+ const_cast<string&>(_id) = instance->initializationData().properties->getProperty(name + ".AdapterId");
+ const_cast<string&>(_replicaGroupId) =
+ instance->initializationData().properties->getProperty(name + ".ReplicaGroupId");
+
__setNoDelete(true);
try
{
@@ -809,12 +836,12 @@ Ice::ObjectAdapterI::~ObjectAdapterI()
if(!_deactivated)
{
Warning out(_instance->initializationData().logger);
- out << "object adapter `" << _name << "' has not been deactivated";
+ out << "object adapter `" << getName() << "' has not been deactivated";
}
else if(_instance)
{
Warning out(_instance->initializationData().logger);
- out << "object adapter `" << _name << "' deactivation had not been waited for";
+ out << "object adapter `" << getName() << "' deactivation had not been waited for";
}
else
{
@@ -892,7 +919,7 @@ Ice::ObjectAdapterI::checkForDeactivation() const
if(_deactivated)
{
ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
+ ex.name = getName();
throw ex;
}
}
@@ -988,12 +1015,12 @@ ObjectAdapterI::updateLocatorRegistry(const IceInternal::LocatorInfoPtr& locator
if(!locatorRegistry)
{
Warning out(_instance->initializationData().logger);
- out << "object adapter `" << _name << "' cannot register the process without a locator registry";
+ out << "object adapter `" << getName() << "' cannot register the process without a locator registry";
}
else if(serverId.empty())
{
Warning out(_instance->initializationData().logger);
- out << "object adapter `" << _name << "' cannot register the process without a value for Ice.ServerId";
+ out << "object adapter `" << getName() << "' cannot register the process without a value for Ice.ServerId";
}
}
diff --git a/cpp/src/Ice/ObjectAdapterI.h b/cpp/src/Ice/ObjectAdapterI.h
index 2e82ffb2cdd..e90416cadc0 100644
--- a/cpp/src/Ice/ObjectAdapterI.h
+++ b/cpp/src/Ice/ObjectAdapterI.h
@@ -85,7 +85,7 @@ private:
ObjectAdapterI(const IceInternal::InstancePtr&, const CommunicatorPtr&,
const IceInternal::ObjectAdapterFactoryPtr&, const std::string&, const std::string&,
- const RouterPrx&);
+ const RouterPrx&, bool);
virtual ~ObjectAdapterI();
friend class IceInternal::ObjectAdapterFactory;
@@ -115,6 +115,7 @@ private:
int _directCount; // The number of direct proxies dispatching on this object adapter.
bool _waitForActivate;
bool _waitForDeactivate;
+ bool _noConfig;
class ProcessI : public Process
{
diff --git a/cpp/test/FreezeScript/evictor/makedb.cpp b/cpp/test/FreezeScript/evictor/makedb.cpp
index 03c319c86d3..67228ab2b69 100644
--- a/cpp/test/FreezeScript/evictor/makedb.cpp
+++ b/cpp/test/FreezeScript/evictor/makedb.cpp
@@ -69,8 +69,7 @@ run(const Ice::CommunicatorPtr& communicator, const string& envName, const strin
Ice::ObjectFactoryPtr factory = new Factory;
communicator->addObjectFactory(factory, "");
- Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("test");
-
+ Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("");
Freeze::EvictorPtr evictor = Freeze::createEvictor(adapter, envName, dbName);
for(int i = 0; i < 10; ++i)
diff --git a/cpp/test/Ice/exceptions/AllTests.cpp b/cpp/test/Ice/exceptions/AllTests.cpp
index 11fcc831051..4d361e6a85a 100644
--- a/cpp/test/Ice/exceptions/AllTests.cpp
+++ b/cpp/test/Ice/exceptions/AllTests.cpp
@@ -572,7 +572,19 @@ allTests(const Ice::CommunicatorPtr& communicator, bool collocated)
{
cout << "testing object adapter registration exceptions... " << flush;
{
- Ice::ObjectAdapterPtr first = communicator->createObjectAdapter("TestAdapter0");
+ Ice::ObjectAdapterPtr first;
+ try
+ {
+ first = communicator->createObjectAdapter("TestAdapter0");
+ test(false);
+ }
+ catch(const Ice::InitializationException&)
+ {
+ // Expected
+ }
+
+ communicator->getProperties()->setProperty("TestAdapter0.Endpoints", "default");
+ first = communicator->createObjectAdapter("TestAdapter0");
try
{
Ice::ObjectAdapterPtr second = communicator->createObjectAdapter("TestAdapter0");
@@ -583,7 +595,6 @@ allTests(const Ice::CommunicatorPtr& communicator, bool collocated)
// Expected
}
- communicator->getProperties()->setProperty("TestAdapter0.Endpoints", "");
try
{
Ice::ObjectAdapterPtr second =
@@ -597,13 +608,14 @@ allTests(const Ice::CommunicatorPtr& communicator, bool collocated)
//
// Properties must remain unaffected if an exception occurs.
//
- test(communicator->getProperties()->getProperty("TestAdapter0.Endpoints") == "");
+ test(communicator->getProperties()->getProperty("TestAdapter0.Endpoints") == "default");
first->deactivate();
}
cout << "ok" << endl;
cout << "testing servant registration exceptions... " << flush;
{
+ communicator->getProperties()->setProperty("TestAdapter1.Endpoints", "default");
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("TestAdapter1");
Ice::ObjectPtr obj = new EmptyI;
adapter->add(obj, communicator->stringToIdentity("x"));
@@ -632,6 +644,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool collocated)
cout << "testing servant locator registrations exceptions... " << flush;
{
+ communicator->getProperties()->setProperty("TestAdapter2.Endpoints", "default");
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("TestAdapter2");
Ice::ServantLocatorPtr loc = new ServantLocatorI;
adapter->addServantLocator(loc, "x");
diff --git a/cpp/test/Ice/facets/AllTests.cpp b/cpp/test/Ice/facets/AllTests.cpp
index 903b07caebd..33e126a37d6 100644
--- a/cpp/test/Ice/facets/AllTests.cpp
+++ b/cpp/test/Ice/facets/AllTests.cpp
@@ -22,6 +22,7 @@ GPrx
allTests(const Ice::CommunicatorPtr& communicator)
{
cout << "testing facet registration exceptions... " << flush;
+ communicator->getProperties()->setProperty("FacetExceptionTestAdapter.Endpoints", "default");
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("FacetExceptionTestAdapter");
Ice::ObjectPtr obj = new EmptyI;
adapter->add(obj, communicator->stringToIdentity("d"));
diff --git a/cpp/test/IceGrid/session/AllTests.cpp b/cpp/test/IceGrid/session/AllTests.cpp
index 38a8aec99d2..82f12c4bf53 100644
--- a/cpp/test/IceGrid/session/AllTests.cpp
+++ b/cpp/test/IceGrid/session/AllTests.cpp
@@ -1182,7 +1182,7 @@ allTests(const Ice::CommunicatorPtr& communicator)
AdminPrx admin1 = session1->getAdmin();
AdminPrx admin2 = session2->getAdmin();
- Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("Observer1");
+ Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("");
ApplicationObserverIPtr appObs1 = new ApplicationObserverI("appObs1.1");
Ice::ObjectPrx app1 = adpt1->addWithUUID(appObs1);
NodeObserverIPtr nodeObs1 = new NodeObserverI("nodeObs1");
@@ -1407,7 +1407,7 @@ allTests(const Ice::CommunicatorPtr& communicator)
keepAlive->add(session1);
- Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("Observer1.1");
+ Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("");
ApplicationObserverIPtr appObs1 = new ApplicationObserverI("appObs1.2");
Ice::ObjectPrx app1 = adpt1->addWithUUID(appObs1);
adpt1->activate();
@@ -1504,7 +1504,7 @@ allTests(const Ice::CommunicatorPtr& communicator)
keepAlive->add(session1);
- Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("Observer1.1");
+ Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("");
AdapterObserverIPtr adptObs1 = new AdapterObserverI("adptObs1");
Ice::ObjectPrx adapter1 = adpt1->addWithUUID(adptObs1);
adpt1->activate();
@@ -1589,7 +1589,7 @@ allTests(const Ice::CommunicatorPtr& communicator)
keepAlive->add(session1);
- Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("Observer1.1");
+ Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("");
ObjectObserverIPtr objectObs1 = new ObjectObserverI("objectObs1");
Ice::ObjectPrx object1 = adpt1->addWithUUID(objectObs1);
adpt1->activate();
@@ -1755,7 +1755,7 @@ allTests(const Ice::CommunicatorPtr& communicator)
keepAlive->add(session1);
- Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("Observer1.2");
+ Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("");
ApplicationObserverIPtr appObs1 = new ApplicationObserverI("appObs1.3");
Ice::ObjectPrx app1 = adpt1->addWithUUID(appObs1);
NodeObserverIPtr nodeObs1 = new NodeObserverI("nodeObs1");
@@ -1902,7 +1902,7 @@ allTests(const Ice::CommunicatorPtr& communicator)
keepAlive->add(session1);
- Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("Observer1.3");
+ Ice::ObjectAdapterPtr adpt1 = communicator->createObjectAdapter("");
ApplicationObserverIPtr appObs1 = new ApplicationObserverI("appObs1.4");
Ice::ObjectPrx app1 = adpt1->addWithUUID(appObs1);
RegistryObserverIPtr registryObs1 = new RegistryObserverI("registryObs1");