CMS 3D CMS Logo

Connection.cc

Go to the documentation of this file.
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 }

Generated on Tue Jun 9 17:26:05 2009 for CMSSW by  doxygen 1.5.4