diff --git a/[refs] b/[refs] index 7aa57f832e0d7..cfcf42980f9e7 100644 --- a/[refs] +++ b/[refs] @@ -1,3 +1,3 @@ --- refs/heads/gh-pages: 09c786f70121f131b3715aaf3464996502bbeb7e -"refs/heads/CMSSW_7_1_X": e96ba7f1d1f7aaae4e55a0978be9e51918dc124c +"refs/heads/CMSSW_7_1_X": fa1cb827cb64e431305c4132bb22011e6cb6e383 diff --git a/trunk/CondCore/DBCommon/interface/TechnologyProxy.h b/trunk/CondCore/DBCommon/interface/TechnologyProxy.h index d15793844869c..97004b2abbfff 100644 --- a/trunk/CondCore/DBCommon/interface/TechnologyProxy.h +++ b/trunk/CondCore/DBCommon/interface/TechnologyProxy.h @@ -17,11 +17,10 @@ namespace cond{ class DbSession; class TechnologyProxy{ public: - explicit TechnologyProxy( const DbSession& isession ): m_session(isession) {} + explicit TechnologyProxy( ){} virtual ~TechnologyProxy(){} + virtual void initialize(const DbConnection& connection)=0; virtual std::string getRealConnectString() const=0; - protected: - DbSession m_session; private: TechnologyProxy( const TechnologyProxy& ); const TechnologyProxy& operator=(const TechnologyProxy&); diff --git a/trunk/CondCore/DBCommon/interface/TechnologyProxyFactory.h b/trunk/CondCore/DBCommon/interface/TechnologyProxyFactory.h index a216758afe651..dc195c10af5e5 100644 --- a/trunk/CondCore/DBCommon/interface/TechnologyProxyFactory.h +++ b/trunk/CondCore/DBCommon/interface/TechnologyProxyFactory.h @@ -2,13 +2,14 @@ #define CondCore_DBCommon_TechnologyProxyFactory_h #include "FWCore/PluginManager/interface/PluginFactory.h" #include "CondCore/DBCommon/interface/TechnologyProxy.h" +#include "CondCore/DBCommon/interface/Exception.h" + #include #include namespace cond{ typedef edmplugin::PluginFactory< cond::TechnologyProxy*(const std::string&) > TechnologyProxyFactory; - std::auto_ptr buildTechnologyProxy (cond::DBSession& session){ - const std::string & userconnect = session.connectionString(); + std::auto_ptr buildTechnologyProxy (const std::string&userconnect){ std::string protocol; std::size_t pos=userconnect.find_first_of(':'); if( pos!=std::string::npos ){ @@ -22,7 +23,7 @@ namespace cond{ } //std::cout<<"userconnect "< ptr(cond::TechnologyProxyFactory::get()->create(protocol,session)); + std::auto_ptr ptr(cond::TechnologyProxyFactory::get()->create(protocol)); return ptr; } diff --git a/trunk/CondCore/DBCommon/plugins/FrontierProxy.cc b/trunk/CondCore/DBCommon/plugins/FrontierProxy.cc index a8c0a26b989ff..ca2ddc187976b 100644 --- a/trunk/CondCore/DBCommon/plugins/FrontierProxy.cc +++ b/trunk/CondCore/DBCommon/plugins/FrontierProxy.cc @@ -16,9 +16,9 @@ namespace cond{ public: explicit FrontierProxy(const DbSession& isession); ~FrontierProxy(); + void initialize(const DbConnection& connection); std::string getRealConnectString() const; private: - void setupSession(); static unsigned int countslash(const std::string& input); private: std::vector m_refreshtablelist; @@ -56,7 +56,7 @@ cond::FrontierProxy::getRealConnectString() const{ } void -cond::FrontierProxy::setupSession(){ +cond::FrontierProxy::initialize(const DbConnection& connection){ std::string refreshConnect; std::string realconnect=this->getRealConnectString(); std::string::size_type startRefresh = realconnect.find("://"); @@ -77,7 +77,7 @@ cond::FrontierProxy::setupSession(){ std::vector::iterator ibeg=m_refreshtablelist.begin(); std::vector::iterator iend=m_refreshtablelist.end(); for(std::vector::iterator it=ibeg; it!=iend; ++it){ - m_session.connection().webCacheControl().refreshTable(refreshConnect,*it ); + connection.webCacheControl().refreshTable(refreshConnect,*it ); } } unsigned int diff --git a/trunk/CondCore/DBCommon/plugins/OracleProxy.cc b/trunk/CondCore/DBCommon/plugins/OracleProxy.cc index c21ac31259d66..d6fb5a0ea7d81 100644 --- a/trunk/CondCore/DBCommon/plugins/OracleProxy.cc +++ b/trunk/CondCore/DBCommon/plugins/OracleProxy.cc @@ -2,9 +2,9 @@ namespace cond { class OracleProxy: public TechnologyProxy { public: - explicit OracleProxy(const DbSession& isession): - cond::TechnologyProxy(isession){} + explicit OracleProxy(){} ~OracleProxy(){} + void initialize(const DbConnection&){} std::string getRealConnectString() const{ return m_session.connectionString();} }; }//ns cond diff --git a/trunk/CondCore/DBCommon/plugins/SQLiteProxy.cc b/trunk/CondCore/DBCommon/plugins/SQLiteProxy.cc index 7936aeb4432d1..f474054e0a6bf 100644 --- a/trunk/CondCore/DBCommon/plugins/SQLiteProxy.cc +++ b/trunk/CondCore/DBCommon/plugins/SQLiteProxy.cc @@ -5,10 +5,9 @@ namespace cond{ class SQLiteProxy:public TechnologyProxy{ public: - explicit SQLiteProxy(const DbSession& isession): - cond::TechnologyProxy(isession){} + explicit SQLiteProxy({} ~SQLiteProxy(){} - + void initialize(const DbConnection&){} std::string getRealConnectString( ) const{ std::string const & userconnect = m_session.connectionString(); diff --git a/trunk/CondCore/DBCommon/src/DbSession.cc b/trunk/CondCore/DBCommon/src/DbSession.cc index 8da2e84ed079b..918bb9cda6df8 100644 --- a/trunk/CondCore/DBCommon/src/DbSession.cc +++ b/trunk/CondCore/DBCommon/src/DbSession.cc @@ -22,25 +22,31 @@ #include "ObjectRelationalAccess/ObjectRelationalMappingSchema.h" //#include "ObjectRelationalAccess/ObjectRelationalMappingPersistency.h" +#include "CondCore/DBCommon/interface/TechnologyProxy.h" + + namespace cond { class DbSession::SessionImpl { - public: - SessionImpl(); - explicit SessionImpl( const DbConnection& connection ); - - virtual ~SessionImpl(); - - void open( const std::string& connectionString, bool readOnly ); - void close(); - - DbConnection* m_connection; - std::string m_connectionString; - std::string m_blobStreamingService; - pool::IFileCatalog* m_catalogue; - pool::IDataSvc* m_dataSvc; - coral::ISessionProxy* m_session; - DbTransaction* m_transaction; - bool m_isOpen; + public: + SessionImpl(); + explicit SessionImpl( const DbConnection& connection ); + + virtual ~SessionImpl(); + + void open( const std::string& connectionString, bool readOnly ); + void close(); + + DbConnection* m_connection; + + std::auto_ptr technologyProxy; + + std::string m_connectionString; + std::string m_blobStreamingService; + pool::IFileCatalog* m_catalogue; + pool::IDataSvc* m_dataSvc; + coral::ISessionProxy* m_session; + DbTransaction* m_transaction; + bool m_isOpen; }; } @@ -97,10 +103,11 @@ void cond::DbSession::SessionImpl::open( const std::string& connectionString, bo policy.setReadMode( pool::DatabaseConnectionPolicy::READ ); m_dataSvc->session().setDefaultConnectionPolicy( policy ); // open the db connection - m_connectionString = connectionString; - m_session = &m_dataSvc->configuration().sharedSession( connectionString, (readOnly)? coral::ReadOnly: coral::Update ); + technologyProxy = buildTechnologyProxy(connectionString); + m_connectionString = (*technologyProxy).getRealConnectString(); + m_session = &m_dataSvc->configuration().sharedSession(m_connectionString, (readOnly)? coral::ReadOnly: coral::Update ); std::string catalogConnectionString("pfncatalog_memory://POOL_RDBMS?"); - catalogConnectionString.append(connectionString); + catalogConnectionString.append(m_connectionString); m_catalogue->setWriteCatalog( catalogConnectionString ); m_catalogue->connect(); m_catalogue->start(); @@ -171,6 +178,11 @@ const std::string& cond::DbSession::connectionString() const { return m_implementation->m_connectionString; } +const DbConnection& connection() const { + return *m_implementation->m_connection; +} + + void cond::DbSession::setBlobStreamingService( const std::string& serviceName ) { m_implementation->m_blobStreamingService = serviceName; diff --git a/trunk/CondCore/DBCommon/test/testTechnologyPlugin.cc b/trunk/CondCore/DBCommon/test/testTechnologyPlugin.cc index f1110ca667e28..e5fb8990b4e53 100644 --- a/trunk/CondCore/DBCommon/test/testTechnologyPlugin.cc +++ b/trunk/CondCore/DBCommon/test/testTechnologyPlugin.cc @@ -1,42 +1,31 @@ -#include "CondCore/DBCommon/interface/TechnologyProxyFactory.h" -#include "CondCore/DBCommon/interface/TechnologyProxy.h" #include "FWCore/PluginManager/interface/PluginManager.h" #include "FWCore/PluginManager/interface/standard.h" -#include "CondCore/DBCommon/interface/DBSession.h" -#include "CondCore/DBCommon/interface/ConnectionHandler.h" -#include "FWCore/Catalog/interface/SiteLocalConfig.h" -#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CondCore/DBCommon/interface/Exception.h" +#include "CondCore/DBCommon/interface/DbSession.h" #include int main(){ edmplugin::PluginManager::Config config; edmplugin::PluginManager::configure(edmplugin::standard::config()); - /* const char* path = getenv("LD_LIBRARY_PATH"); - std::string spath(path? path: ""); - std::string::size_type last=0; - std::string::size_type i=0; - std::vector paths; - while( (i=spath.find_first_of(':',last))!=std::string::npos) { - paths.push_back(spath.substr(last,i-last)); - last = i+1; - std::cout <open(); - conHandler.connect(session); - conHandler.disconnectAll(); - std::auto_ptr ptr(cond::TechnologyProxyFactory::get()->create("sqlite","sqlite_file:pippo.db")); - std::cout<getRealConnectString()< ptr2(cond::TechnologyProxyFactory::get()->create("frontier","frontier://cmsfrontier.cern.ch:8000/FrontierDev/CMS_COND_PRESH")); - std::cout<getRealConnectString()<