diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2006-12-13 14:34:57 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2006-12-13 14:34:57 +0000 |
commit | 769e22f35e9d21344639a36e07ec90ee2656140c (patch) | |
tree | 36ac09ee40ddf18d408736ceaa59ee9f8e05e414 /cpp | |
parent | Added support for server logs (diff) | |
download | ice-769e22f35e9d21344639a36e07ec90ee2656140c.tar.bz2 ice-769e22f35e9d21344639a36e07ec90ee2656140c.tar.xz ice-769e22f35e9d21344639a36e07ec90ee2656140c.zip |
Bug 1570 - object adapter configuration
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/CHANGES | 5 | ||||
-rw-r--r-- | cpp/demo/Ice/bidir/Client.cpp | 2 | ||||
-rw-r--r-- | cpp/demo/Ice/bidir/config.client | 1 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterFactory.cpp | 22 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.cpp | 51 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.h | 3 | ||||
-rw-r--r-- | cpp/test/FreezeScript/evictor/makedb.cpp | 3 | ||||
-rw-r--r-- | cpp/test/Ice/exceptions/AllTests.cpp | 19 | ||||
-rw-r--r-- | cpp/test/Ice/facets/AllTests.cpp | 1 | ||||
-rw-r--r-- | cpp/test/IceGrid/session/AllTests.cpp | 12 |
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"); |