Go to the documentation of this file.00001
00002
00003
00004
00005 #include <cassert>
00006 #include <string>
00007 #include <sstream>
00008
00009 #if defined(SOCI_HEADERS_BURIED)
00010 #include <soci/core/soci.h>
00011 #include <soci/backends/mysql/soci-mysql.h>
00012 #else // SOCI_HEADERS_BURIED
00013 #include <soci.h>
00014 #include <mysql/soci-mysql.h>
00015 #endif // SOCI_HEADERS_BURIED
00016
00017 #include <stdair/stdair_exceptions.hpp>
00018 #include <stdair/basic/BasDBParams.hpp>
00019 #include <stdair/service/DBSessionManager.hpp>
00020 #include <stdair/service/Logger.hpp>
00021
00022 namespace stdair {
00023
00024
00025 DBSessionManager::DBSessionManager () : _dbSession (NULL) {
00026 }
00027
00028
00029 DBSessionManager::DBSessionManager (const DBSessionManager&)
00030 : _dbSession (NULL) {
00031 assert (false);
00032 }
00033
00034
00035 DBSessionManager::~DBSessionManager () {
00036
00037 dbFinalise();
00038 }
00039
00040
00041 void DBSessionManager::dbInit (const BasDBParams& iDBParams) {
00042
00043
00044 std::ostringstream oStr;
00045 oStr << "db=" << iDBParams.getDBName() << " user=" << iDBParams.getUser()
00046 << " password=" << iDBParams.getPassword()
00047 << " port=" << iDBParams.getPort() << " host=" << iDBParams.getHost();
00048 const std::string lDBSessionConnectionString (oStr.str());
00049
00050
00051 _dbSession = new DBSession_T;
00052
00053 try {
00054
00055 _dbSession->open (soci::mysql, lDBSessionConnectionString);
00056
00057 } catch (std::exception const& lException) {
00058 std::ostringstream oMessage;
00059 oMessage <<"Error while opening a connection to database: "
00060 << lException.what() << std::endl
00061 << "Database parameters used:"
00062 << " db=" << iDBParams.getDBName()
00063 << " user=" << iDBParams.getUser()
00064 << " port=" << iDBParams.getPort()
00065 << " host=" << iDBParams.getHost();
00066 throw SQLDatabaseConnectionImpossibleException (oMessage.str());
00067 }
00068 }
00069
00070
00071 void DBSessionManager::dbFinalise () {
00072 delete _dbSession; _dbSession = NULL;
00073 }
00074
00075
00076 void DBSessionManager::init (const BasDBParams& iDBParams) {
00077 DBSessionManager& lInstance = instance();
00078 lInstance.dbInit (iDBParams);
00079 }
00080
00081
00082 DBSessionManager& DBSessionManager::instance() {
00083 static DBSessionManager _instance;
00084 return _instance;
00085 }
00086
00087
00088 void DBSessionManager::clean() {
00089 }
00090
00091
00092 DBSession_T& DBSessionManager::getDBSession() const {
00093 if (_dbSession == NULL) {
00094 throw NonInitialisedDBSessionManagerException ("");
00095 }
00096 assert (_dbSession != NULL);
00097 return *_dbSession;
00098 }
00099
00100 }