summaryrefslogtreecommitdiff
path: root/cpp/demo/Freeze/phonebook/Server.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-09-26 03:50:39 +0000
committerMarc Laukien <marc@zeroc.com>2001-09-26 03:50:39 +0000
commit5d29876aa7e386ebb4572959b7f1cdc84bfef0c5 (patch)
tree3cdd9e64be0d28e87668aef6e1320426ee3ce193 /cpp/demo/Freeze/phonebook/Server.cpp
parentfixes for windows (diff)
downloadice-5d29876aa7e386ebb4572959b7f1cdc84bfef0c5.tar.bz2
ice-5d29876aa7e386ebb4572959b7f1cdc84bfef0c5.tar.xz
ice-5d29876aa7e386ebb4572959b7f1cdc84bfef0c5.zip
Application class
Diffstat (limited to 'cpp/demo/Freeze/phonebook/Server.cpp')
-rw-r--r--cpp/demo/Freeze/phonebook/Server.cpp260
1 files changed, 98 insertions, 162 deletions
diff --git a/cpp/demo/Freeze/phonebook/Server.cpp b/cpp/demo/Freeze/phonebook/Server.cpp
index 7d56e7992fc..325979d60a0 100644
--- a/cpp/demo/Freeze/phonebook/Server.cpp
+++ b/cpp/demo/Freeze/phonebook/Server.cpp
@@ -8,197 +8,133 @@
//
// **********************************************************************
+#include <Ice/Application.h>
#include <ServantFactory.h>
-static Ice::CommunicatorPtr communicator;
-
-#ifdef WIN32
-
-static BOOL WINAPI
-interruptHandler(DWORD)
-{
- assert(communicator);
- communicator->shutdown();
- return TRUE;
-}
-
-static void
-shutdownOnInterrupt()
-{
- SetConsoleCtrlHandler(NULL, FALSE);
- SetConsoleCtrlHandler(interruptHandler, TRUE);
-}
-
-static void
-ignoreInterrupt()
-{
- SetConsoleCtrlHandler(NULL, TRUE);
-}
-
-#else
-
-# include <signal.h>
-
-static void
-interruptHandler(int)
-{
- assert(communicator);
- communicator->shutdown();
-}
-
-static void
-shutdownOnInterrupt()
-{
- struct sigaction action;
- action.sa_handler = interruptHandler;
- sigemptyset(&action.sa_mask);
- sigaddset(&action.sa_mask, SIGHUP);
- sigaddset(&action.sa_mask, SIGINT);
- sigaddset(&action.sa_mask, SIGTERM);
- action.sa_flags = 0;
- sigaction(SIGHUP, &action, 0);
- sigaction(SIGINT, &action, 0);
- sigaction(SIGTERM, &action, 0);
-}
-
-static void
-ignoreInterrupt()
-{
- struct sigaction action;
- action.sa_handler = SIG_IGN;
- sigemptyset(&action.sa_mask);
- action.sa_flags = 0;
- sigaction(SIGHUP, &action, 0);
- sigaction(SIGINT, &action, 0);
- sigaction(SIGTERM, &action, 0);
-}
-
-#endif
-
+using namespace std;
using namespace Ice;
using namespace Freeze;
-using namespace std;
+
+class PhoneBookServer : public Application
+{
+ int run(int argc, char* argv[]);
+};
int
-run(int argc, char* argv[], const DBEnvironmentPtr& dbEnv)
+PhoneBookServer::run(int argc, char* argv[])
{
cout << "starting up..." << endl;
ignoreInterrupt();
-
- PropertiesPtr properties = communicator->getProperties();
- string value;
-
- //
- // Open the phonebook and contacts database.
- //
- DBPtr dbPhoneBook = dbEnv->openDB("phonebook");
- DBPtr dbContacts = dbEnv->openDB("contacts");
-
- //
- // Create an Evictor for contacts.
- //
- EvictorPtr evictor = dbContacts->createEvictor();
- value = properties->getProperty("PhoneBook.EvictorSize");
- if(!value.empty())
+
+ int status;
+ DBEnvironmentPtr dbEnv;
+
+ try
+ {
+ PropertiesPtr properties = communicator()->getProperties();
+ string value;
+
+ //
+ // Open the database environment and the phonebook and
+ // contacts database within this environment.
+ //
+ dbEnv = Freeze::initialize(communicator(), "db");
+ DBPtr dbPhoneBook = dbEnv->openDB("phonebook");
+ DBPtr dbContacts = dbEnv->openDB("contacts");
+
+ //
+ // Create an Evictor for contacts.
+ //
+ EvictorPtr evictor = dbContacts->createEvictor();
+ value = properties->getProperty("PhoneBook.EvictorSize");
+ if(!value.empty())
+ {
+ evictor->setSize(atoi(value.c_str()));
+ }
+ value = properties->getProperty("PhoneBook.SaveAfterMutatingOperation");
+ if(!value.empty() && atoi(value.c_str()) > 0)
+ {
+ evictor->setPersistenceMode(SaveAfterMutatingOperation);
+ }
+ else
+ {
+ evictor->setPersistenceMode(SaveUponEviction);
+ }
+
+ //
+ // Create an Object Adapter, use the Evictor as Servant Locator.
+ //
+ ObjectAdapterPtr adapter = communicator()->createObjectAdapter("PhoneBookAdapter");
+ adapter->setServantLocator(evictor);
+
+ //
+ // Create the phonebook, and add it to the Object Adapter.
+ //
+ PhoneBookIPtr phoneBook = new PhoneBookI(adapter, dbPhoneBook, evictor);
+ adapter->add(phoneBook, "phonebook");
+
+ //
+ // Create and install a factory and initializer for contacts.
+ //
+ ServantFactoryPtr contactFactory = new ContactFactory(phoneBook, evictor);
+ ServantInitializerPtr contactInitializer = ServantInitializerPtr::dynamicCast(contactFactory);
+ communicator()->installServantFactory(contactFactory, "::Contact");
+ evictor->installServantInitializer(contactInitializer);
+
+ //
+ // Everything ok, let's go.
+ //
+ adapter->activate();
+ shutdownOnInterrupt();
+ communicator()->waitForShutdown();
+ ignoreInterrupt();
+ status = EXIT_SUCCESS;
+ }
+ catch(const LocalException& ex)
{
- evictor->setSize(atoi(value.c_str()));
+ cerr << argv[0] << ": local exception: " << ex << endl;
+ status = EXIT_FAILURE;
}
- value = properties->getProperty("PhoneBook.SaveAfterMutatingOperation");
- if(!value.empty() && atoi(value.c_str()) > 0)
+ catch(const DBExceptionPtrE& ex)
{
- evictor->setPersistenceMode(SaveAfterMutatingOperation);
+ cerr << argv[0] << ": database exception: " << ex->message << endl;
+ status = EXIT_FAILURE;
}
- else
+ catch(...)
{
- evictor->setPersistenceMode(SaveUponEviction);
+ cerr << argv[0] << ": unknown exception" << endl;
+ status = EXIT_FAILURE;
}
- //
- // Create an Object Adapter, use the Evictor as Servant Locator.
- //
- ObjectAdapterPtr adapter = communicator->createObjectAdapter("PhoneBookAdapter");
- adapter->setServantLocator(evictor);
-
- //
- // Create the phonebook, and add it to the Object Adapter.
- //
- PhoneBookIPtr phoneBook = new PhoneBookI(adapter, dbPhoneBook, evictor);
- adapter->add(phoneBook, "phonebook");
-
- //
- // Create and install a factory and initializer for contacts.
- //
- ServantFactoryPtr contactFactory = new ContactFactory(phoneBook, evictor);
- ServantInitializerPtr contactInitializer = ServantInitializerPtr::dynamicCast(contactFactory);
- communicator->installServantFactory(contactFactory, "::Contact");
- evictor->installServantInitializer(contactInitializer);
-
- //
- // Everything ok, let's go.
- //
- adapter->activate();
- shutdownOnInterrupt();
- communicator->waitForShutdown();
- cout << "shutting down..." << endl;
- ignoreInterrupt();
- return EXIT_SUCCESS;
-}
-
-int
-main(int argc, char* argv[])
-{
- int status;
- DBEnvironmentPtr dbEnv;
-
try
{
- PropertiesPtr properties = createPropertiesFromFile(argc, argv, "config");
- communicator = Ice::initializeWithProperties(properties);
- dbEnv = Freeze::initialize(communicator, "db");
- status = run(argc, argv, dbEnv);
+ dbEnv->close();
}
catch(const LocalException& ex)
{
- cerr << ex << endl;
+ cerr << argv[0] << ": local exception: " << ex << endl;
status = EXIT_FAILURE;
}
- catch(const DBException& ex)
+ catch(const DBExceptionPtrE& ex)
{
- cerr << ex.message << endl;
+ cerr << argv[0] << ": database exception: " << ex->message << endl;
status = EXIT_FAILURE;
}
-
- if (dbEnv)
+ catch(...)
{
- try
- {
- dbEnv->close();
- }
- catch(const LocalException& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
- catch(const DBException& ex)
- {
- cerr << ex.message << endl;
- status = EXIT_FAILURE;
- }
+ cerr << argv[0] << ": unknown exception" << endl;
+ status = EXIT_FAILURE;
}
- if (communicator)
- {
- try
- {
- communicator->destroy();
- communicator = 0;
- }
- catch(const LocalException& ex)
- {
- cerr << ex << endl;
- status = EXIT_FAILURE;
- }
- }
+ defaultInterrupt();
+ cout << "shutting down..." << endl;
return status;
}
+
+int
+main(int argc, char* argv[])
+{
+ PhoneBookServer app;
+ app.main(argc, argv, "config");
+}