summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Application.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2009-05-13 14:22:48 -0230
committerDwayne Boone <dwayne@zeroc.com>2009-05-13 14:22:48 -0230
commit46e64f90df4d8da704eea09029458b540e4a3c87 (patch)
tree2f99a321f86ba39907cc81f6936ed9b4bbc04858 /cpp/src/Ice/Application.cpp
parentSlice compiler crash when slice file had double slashes (diff)
downloadice-46e64f90df4d8da704eea09029458b540e4a3c87.tar.bz2
ice-46e64f90df4d8da704eea09029458b540e4a3c87.tar.xz
ice-46e64f90df4d8da704eea09029458b540e4a3c87.zip
Bug 3696 - new Application:main instances
Diffstat (limited to 'cpp/src/Ice/Application.cpp')
-rw-r--r--cpp/src/Ice/Application.cpp129
1 files changed, 79 insertions, 50 deletions
diff --git a/cpp/src/Ice/Application.cpp b/cpp/src/Ice/Application.cpp
index 219f571810b..fcdaf147453 100644
--- a/cpp/src/Ice/Application.cpp
+++ b/cpp/src/Ice/Application.cpp
@@ -298,12 +298,18 @@ Ice::Application::~Application()
int
Ice::Application::main(int argc, char* argv[])
{
- return main(argc, argv, InitializationData());
+ return mainInternal(argc, argv, InitializationData(), 0);
}
int
Ice::Application::main(int argc, char* argv[], const char* configFile)
{
+ return main(argc, argv, configFile, 0);
+}
+
+int
+Ice::Application::main(int argc, char* argv[], const char* configFile, const Ice::PropertiesPtr& overrideProps)
+{
//
// We don't call the main below to avoid a deprecated warning
//
@@ -350,59 +356,13 @@ Ice::Application::main(int argc, char* argv[], const char* configFile)
return EXIT_FAILURE;
}
}
- return main(argc, argv, initData);
+ return mainInternal(argc, argv, initData, overrideProps);
}
int
Ice::Application::main(int argc, char* argv[], const InitializationData& initData)
{
- if(_communicator != 0)
- {
- Error out(getProcessLogger());
- if(argv[0])
- {
- out << argv[0] << ": ";
- }
- out << "only one instance of the Application class can be used";
- return EXIT_FAILURE;
- }
- int status;
-
- if(_signalPolicy == HandleSignals)
- {
- try
- {
- //
- // The ctrlCHandler must be created before starting any thread, in particular
- // before initializing the communicator.
- //
- CtrlCHandler ctrCHandler;
- _ctrlCHandler = &ctrCHandler;
-
- status = mainInternal(argc, argv, initData);
-
- //
- // Set _ctrlCHandler to 0 only once communicator->destroy() has completed.
- //
- _ctrlCHandler = 0;
- }
- catch(const CtrlCHandlerException&)
- {
- Error out(getProcessLogger());
- if(argv[0])
- {
- out << argv[0] << ": ";
- }
- out << "only one instance of the Application class can be used";
- status = EXIT_FAILURE;
- }
- }
- else
- {
- status = mainInternal(argc, argv, initData);
- }
-
- return status;
+ return mainInternal(argc, argv, initData, 0);
}
int
@@ -420,6 +380,13 @@ Ice::Application::main(const StringSeq& args, const char* configFile)
}
int
+Ice::Application::main(const StringSeq& args, const char* configFile, const Ice::PropertiesPtr& overrideProps)
+{
+ ArgVector av(args);
+ return main(av.argc, av.argv, configFile, overrideProps);
+}
+
+int
Ice::Application::main(const StringSeq& args, const InitializationData& initData)
{
ArgVector av(args);
@@ -598,7 +565,61 @@ Ice::Application::interrupted()
}
int
-Ice::Application::mainInternal(int argc, char* argv[], const InitializationData& initializationData)
+Ice::Application::mainInternal(int argc, char* argv[], const InitializationData& initData,
+ const Ice::PropertiesPtr& overrideProps)
+{
+ if(_communicator != 0)
+ {
+ Error out(getProcessLogger());
+ if(argv[0])
+ {
+ out << argv[0] << ": ";
+ }
+ out << "only one instance of the Application class can be used";
+ return EXIT_FAILURE;
+ }
+ int status;
+
+ if(_signalPolicy == HandleSignals)
+ {
+ try
+ {
+ //
+ // The ctrlCHandler must be created before starting any thread, in particular
+ // before initializing the communicator.
+ //
+ CtrlCHandler ctrCHandler;
+ _ctrlCHandler = &ctrCHandler;
+
+ status = executeRun(argc, argv, initData, overrideProps);
+
+ //
+ // Set _ctrlCHandler to 0 only once communicator->destroy() has completed.
+ //
+ _ctrlCHandler = 0;
+ }
+ catch(const CtrlCHandlerException&)
+ {
+ Error out(getProcessLogger());
+ if(argv[0])
+ {
+ out << argv[0] << ": ";
+ }
+ out << "only one instance of the CtrlCHandler class can be used";
+ status = EXIT_FAILURE;
+ }
+ }
+ else
+ {
+ status = executeRun(argc, argv, initData, overrideProps);
+ }
+
+ return status;
+}
+
+int
+Ice::Application::executeRun(int argc, char* argv[], const InitializationData& initializationData,
+ const Ice::PropertiesPtr& overrideProps)
{
int status;
@@ -617,6 +638,14 @@ Ice::Application::mainInternal(int argc, char* argv[], const InitializationData&
//
InitializationData initData = initializationData;
initData.properties = createProperties(argc, argv, initData.properties, initData.stringConverter);
+ if(overrideProps)
+ {
+ Ice::PropertyDict props = overrideProps->getPropertiesForPrefix("");
+ for(PropertyDict::const_iterator p = props.begin(); p != props.end(); ++p)
+ {
+ initData.properties->setProperty(p->first, p->second);
+ }
+ }
//
// If the process logger is the default logger, we replace it with a