00001 #include "CondCore/DBCommon/interface/Connection.h" 00002 #include "CondCore/DBCommon/interface/DBSession.h" 00003 #include "CondCore/DBCommon/interface/PoolTransaction.h" 00004 #include "CondCore/DBCommon/interface/CoralTransaction.h" 00005 #include "CondCore/DBCommon/interface/SessionConfiguration.h" 00006 #include "CondCore/DBCommon/interface/ConnectionConfiguration.h" 00007 #include "PoolConnectionProxy.h" 00008 #include "CoralConnectionProxy.h" 00009 //#include <iostream> 00010 cond::Connection::Connection(const std::string& con, 00011 int connectionTimeOut): 00012 m_con( con ), 00013 m_connectionTimeOut ( connectionTimeOut ) 00014 { 00015 m_coralConnectionPool.reserve(10); 00016 } 00017 cond::Connection::~Connection(){ 00018 this->disconnect(); 00019 } 00020 void cond::Connection::connect( cond::DBSession* session ){ 00021 m_connectionServiceHandle=&(session->connectionService()); 00022 m_idleConnectionCleanupPeriod=session->configuration().connectionConfiguration()->idleConnectionCleanupPeriod(); 00023 } 00024 00028 cond::CoralTransaction& 00029 cond::Connection::coralTransaction(){ 00030 if( !m_coralConnectionPool.empty() ){ 00031 std::vector<cond::CoralConnectionProxy*>::iterator it; 00032 std::vector<cond::CoralConnectionProxy*>::iterator itEnd=m_coralConnectionPool.end(); 00033 for( it=m_coralConnectionPool.begin(); it!=itEnd; ++it ){ 00034 return static_cast<cond::CoralTransaction&>((*it)->transaction()); 00035 } 00036 } 00037 cond::CoralConnectionProxy* me=new cond::CoralConnectionProxy( 00038 m_connectionServiceHandle,m_con,m_connectionTimeOut,m_idleConnectionCleanupPeriod); 00039 m_coralConnectionPool.push_back(me); 00040 return static_cast<cond::CoralTransaction&>( me->transaction() ); 00041 } 00042 //return transaction object(poolproxy, current transactionCounter, current time 00043 cond::PoolTransaction& 00044 cond::Connection::poolTransaction(){ 00045 if( !m_poolConnectionPool.empty() ){ 00046 std::vector<cond::PoolConnectionProxy*>::iterator it; 00047 std::vector<cond::PoolConnectionProxy*>::iterator itEnd=m_poolConnectionPool.end(); 00048 for( it=m_poolConnectionPool.begin(); it!=itEnd; ++it ){ 00049 return static_cast<cond::PoolTransaction&>((*it)->transaction()); 00050 } 00051 } 00052 cond::PoolConnectionProxy* me=new cond::PoolConnectionProxy(m_connectionServiceHandle,m_con,m_connectionTimeOut,m_idleConnectionCleanupPeriod); 00053 m_poolConnectionPool.push_back(me); 00054 return static_cast<cond::PoolTransaction&>(me->transaction()); 00055 } 00056 std::string 00057 cond::Connection::connectStr() const{ 00058 return m_con; 00059 } 00060 void 00061 cond::Connection::disconnect(){ 00062 if(!m_coralConnectionPool.empty()){ 00063 std::vector<cond::CoralConnectionProxy*>::iterator it; 00064 std::vector<cond::CoralConnectionProxy*>::iterator itEnd=m_coralConnectionPool.end(); 00065 for( it=m_coralConnectionPool.begin(); it!=itEnd; ++it){ 00066 if( *it!=0 ) { 00067 delete *it; 00068 *it=0; 00069 } 00070 } 00071 m_coralConnectionPool.clear(); 00072 } 00073 if(!m_poolConnectionPool.empty()){ 00074 std::vector<cond::PoolConnectionProxy*>::iterator poolit; 00075 std::vector<cond::PoolConnectionProxy*>::iterator poolitEnd=m_poolConnectionPool.end(); 00076 for( poolit=m_poolConnectionPool.begin(); poolit!=poolitEnd; ++poolit){ 00077 if( *poolit!=0 ) { 00078 delete *poolit; 00079 *poolit=0; 00080 } 00081 } 00082 m_poolConnectionPool.clear(); 00083 } 00084 }