hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ServerApplication.cpp
Go to the documentation of this file.
1 #include <unistd.h>
2 
3 #include "ServerApplication.hpp"
4 
5 namespace HCE {
7  Poco::AutoPtr<Poco::Util::AbstractConfiguration> _config = NULL;
8 
9  namespace database {
11  Poco::SharedPtr<HCE::database::DBSession> Session = NULL;
12  }
13 }
14 
15 HCE::ServerApplication::ServerApplication():_configFileRequest(false),_configFile(),_initializedHCEServerApplication(false)
16 {}
17 
19  if ( (HCE::database::Session.isNull() == false) && HCE::database::Session->isConnected()) {
20  HCE::database::Session->close();
21  }
22 }
23 
24 void HCE::ServerApplication::initialize (Poco::Util::Application& self) {
26  if (Poco::Util::Application::initialized() == true || this->_initializedHCEServerApplication == true) {
28  }
29  else {
30  try {
31  Poco::Util::ServerApplication::initialize(self);
32 
33  this->initializeConfigurationFile();
34  this->initializeLoggers();
35  this->initializeDataBaseSession ();
36 
37  this->_initializedHCEServerApplication = true;
38  }
39  catch (const Poco::NotFoundException& exception) {
40  Poco::Message msg ("Application",exception.displayText() + this->ADDITION_INFORM_STRING_NOT_FOUND, Poco::Message::PRIO_CRITICAL,__FILE__,__LINE__);
42  }
43  catch (const Poco::Exception& exception) {
44  Poco::Message msg ("Application",exception.displayText(),Poco::Message::PRIO_CRITICAL,__FILE__,__LINE__);
46  }
47  catch (const std::exception& exception) {
48  Poco::Message msg ("Application",exception.what(),Poco::Message::PRIO_CRITICAL,__FILE__,__LINE__);
50  }
51 
52  if (this->_initializedHCEServerApplication == false) {
54  //this exception catching in global main function.
55  throw Poco::ApplicationException(APPLICATION_NOT_INITIALIZED_EXCEPTION);
56  }
57  }
58 }
59 
60 void HCE::ServerApplication::reinitialize (Poco::Util::Application& self) {
61  Poco::Util::ServerApplication::reinitialize(self);
62  //...
63 }
64 
66  this->uninitializeDataBaseSession();
67  //...
68  Poco::Util::ServerApplication::uninitialize();
69 }
70 
72  if (this->_configFileRequest == false) {
74 #ifdef PATH_TO_CONFIG_FILE
75  try{
76  Poco::Util::ServerApplication::loadConfiguration(PATH_TO_CONFIG_FILE);
77  }
78  catch(Poco::FileNotFoundException &exception){
79  Poco::Util::ServerApplication::loadConfiguration();
80  }
81 #else
82  Poco::Util::ServerApplication::loadConfiguration();
83 #endif
84  }
85  else {
87  Poco::Util::ServerApplication::loadConfiguration(this->_configFile);
88  }
89  //true - flag for duplicating counter
90  HCE::_config = Poco::AutoPtr<Poco::Util::AbstractConfiguration>(&config(),true);
91  poco_check_ptr (HCE::_config);
92 }
93 
95  if (this->isDataBaseSectionExists()) {
96  this->dataBaseType = this->getDBType();
97  std::string initializeString;
98  if (this->dataBaseType == SQLITE) {
99  initializeString = this->initializeSQLiteConnectionString();
100  Poco::Data::SQLite::Connector::registerConnector();
102  }
103  //default type of database
104  else {
105  initializeString = this->initializeMySQLConnectionString();
106  Poco::Data::MySQL::Connector::registerConnector();
108  }
109  poco_check_ptr (HCE::database::Session);
110  }
111 }
112 
114  if (this->isDataBaseSectionExists()) {
115  if (this->dataBaseType == SQLITE) {
116  Poco::Data::SQLite::Connector::unregisterConnector();
117  }
118  else {
119  Poco::Data::MySQL::Connector::unregisterConnector();
120  }
121  }
122 }
123 
125  bool returnValue = false;
126  Poco::Util::AbstractConfiguration::Keys keysInConfigurationFile;
127  HCE::_config->keys(keysInConfigurationFile);
128  auto it = find(keysInConfigurationFile.begin(),keysInConfigurationFile.end(),DataBase_KEY);
129  if (it != keysInConfigurationFile.end()) {
130  returnValue = true;
131  }
132  return returnValue;
133 }
134 
136  std::string host = HCE::_config->getString(DataBase_HOST);
137  std::string user = HCE::_config->getString(DataBase_USER);
138  std::string password = HCE::_config->getString(DataBase_PASSWORD);
139  std::string db = HCE::_config->getString(DataBase_DB);
140  std::string compress = HCE::_config->getString(DataBase_COMPRESS,DataBase_COMPRESS_DEFAULT);
141  std::string auto_reconnect = HCE::_config->getString(DataBase_AUTO_RECONNECT,DataBase_AUTO_RECONNECT_DEFAULT);
142  //set initialize string
143  std::string initializeString("host=" + host + ";user=" + user + ";password=" + password + ";db=" + db + ";compress=" + compress + ";auto-reconnect=" + auto_reconnect);
144 
145  Poco::Message msg ("PocoWrapperSession",initializeString,Poco::Message::PRIO_INFORMATION,__FILE__,__LINE__);
147 
148  return initializeString;
149 }
150 
152  std::string db = HCE::_config->getString(DataBase_DB);
153  std::string initializeString("db=" + db);
154 
155  Poco::Message msg ("PocoWrapperSession",initializeString,Poco::Message::PRIO_INFORMATION,__FILE__,__LINE__);
157 
158  return initializeString;
159 }
160 
161 std::string HCE::ServerApplication::getDBType () const {
162  std::string type = HCE::_config->getString(DataBase_TYPE);
163  return type;
164 }
165 
168 }
169 
172 void HCE::ServerApplication::defineOptions (Poco::Util::OptionSet& options) {
173  Poco::Util::ServerApplication::defineOptions(options);
174 
175  options.addOption (
176  Poco::Util::Option("config-file","f")
177  .description ("Load configuration data from a file.")
178  .required(false)
179  .repeatable(false)
180  .argument("file")
181  .callback(Poco::Util::OptionCallback<HCE::ServerApplication>(this,&HCE::ServerApplication::handleConfigFile))
182  );
183  options.addOption (
184  Poco::Util::Option("help","h")
185  .description ("Show help information.")
186  .required(false)
187  .repeatable(false)
188  .callback(Poco::Util::OptionCallback<HCE::ServerApplication>(this,&HCE::ServerApplication::handleHelp))
189  );
190  options.addOption (
191  Poco::Util::Option("version","v")
192  .description ("Show version information.")
193  .required(false)
194  .repeatable(false)
195  .callback(Poco::Util::OptionCallback<HCE::ServerApplication>(this,&HCE::ServerApplication::handleVersion))
196  );
197 }
198 
199 void HCE::ServerApplication::handleConfigFile (const std::string&,const std::string& value) {
200  this->_configFileRequest = true;
201  this->_configFile = value;
202 }
203 
204 void HCE::ServerApplication::handleHelp (const std::string& name,const std::string& value) {
205  this->_showHelpInfo = true;
206  Poco::Util::HelpFormatter helpFormatter(options());
207  helpFormatter.setCommand(commandName());
208  helpFormatter.setUsage("OPTIONS");
209  helpFormatter.setHeader("Some options that demonstrates some of the features of the HCE::Application");
210  helpFormatter.format(std::cout);
211 }
212 
213 void HCE::ServerApplication::handleVersion (const std::string& name,const std::string& value) {
214 }