Author: arielch Date: Mon Feb 4 17:54:16 2013 New Revision: 1442201 URL: http://svn.apache.org/viewvc?rev=1442201&view=rev Log: Ensure UNO context propagation on drivers instantiation
Use a better approach than revision 1387711 Modified: openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx Modified: openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx?rev=1442201&r1=1442200&r2=1442201&view=diff ============================================================================== --- openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx (original) +++ openoffice/trunk/main/connectivity/source/manager/mdrivermanager.cxx Mon Feb 4 17:54:16 2013 @@ -119,6 +119,9 @@ Any SAL_CALL ODriverEnumeration::nextEle /// an STL functor which ensures that a SdbcDriver described by a DriverAccess is loaded struct EnsureDriver : public ::std::unary_function< DriverAccess, DriverAccess > { + EnsureDriver( const Reference< XComponentContext > &rxContext ) + : mxContext( rxContext ) {} + const DriverAccess& operator()( const DriverAccess& _rDescriptor ) const { if ( !_rDescriptor.xDriver.is() ) @@ -126,9 +129,12 @@ Any SAL_CALL ODriverEnumeration::nextEle if ( _rDescriptor.xComponentFactory.is() ) // we have a factory for it const_cast< DriverAccess& >( _rDescriptor ).xDriver = _rDescriptor.xDriver.query( - _rDescriptor.xComponentFactory->createInstanceWithContext( _rDescriptor.xUNOContext ) ); + _rDescriptor.xComponentFactory->createInstanceWithContext( mxContext ) ); return _rDescriptor; } + + private: + Reference< XComponentContext > mxContext; }; //--------------------------------------------------------------------- @@ -150,7 +156,8 @@ Any SAL_CALL ODriverEnumeration::nextEle /// an STL functor which loads a driver described by a DriverAccess, and extracts the SdbcDriver struct ExtractAfterLoad : public ExtractAfterLoad_BASE { - ExtractAfterLoad() : ExtractAfterLoad_BASE( ExtractDriverFromAccess(), EnsureDriver() ) { } + ExtractAfterLoad( const Reference< XComponentContext > &rxContext ) + : ExtractAfterLoad_BASE( ExtractDriverFromAccess(), EnsureDriver( rxContext ) ) {} }; //--------------------------------------------------------------------- @@ -338,7 +345,6 @@ void OSDBCDriverManager::bootstrapDriver { // yes -> no need to load the driver immediately (load it later when needed) aDriverDescriptor.sImplementationName = xSI->getImplementationName(); aDriverDescriptor.xComponentFactory = xFactory; - aDriverDescriptor.xUNOContext = m_aContext.getUNOContext(); bValidDescriptor = sal_True; m_aEventLogger.log( LogLevel::CONFIG, @@ -523,7 +529,7 @@ Reference< XEnumeration > SAL_CALL OSDBC ODriverEnumeration::DriverArray aDrivers; // ensure that all our bootstrapped drivers are insatntiated - ::std::for_each( m_aDriversBS.begin(), m_aDriversBS.end(), EnsureDriver() ); + ::std::for_each( m_aDriversBS.begin(), m_aDriversBS.end(), EnsureDriver( m_aContext.getUNOContext() ) ); // copy the bootstrapped drivers ::std::transform( @@ -704,13 +710,13 @@ Reference< XDriver > OSDBCDriverManager: aFind = ::std::find_if( m_aDriversBS.begin(), // begin of search range m_aDriversBS.end(), // end of search range - std::unary_compose< AcceptsURL, ExtractAfterLoad >( AcceptsURL( _rURL ), ExtractAfterLoad() ) + std::unary_compose< AcceptsURL, ExtractAfterLoad >( AcceptsURL( _rURL ), ExtractAfterLoad( m_aContext.getUNOContext() ) ) // compose two functors: extract the driver from the access, then ask the resulting driver for acceptance ); } // if ( m_aDriversBS.find(sDriverFactoryName ) == m_aDriversBS.end() ) else { - EnsureDriver aEnsure; + EnsureDriver aEnsure( m_aContext.getUNOContext() ); aEnsure(*aFind); } Modified: openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx?rev=1442201&r1=1442200&r2=1442201&view=diff ============================================================================== --- openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx (original) +++ openoffice/trunk/main/connectivity/source/manager/mdrivermanager.hxx Mon Feb 4 17:54:16 2013 @@ -50,12 +50,10 @@ namespace drivermanager DECLARE_STL_USTRINGACCESS_MAP( SdbcDriver, DriverCollection ); typedef ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > DriverFactory; - typedef ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > UNOContext; struct DriverAccess { ::rtl::OUString sImplementationName; /// the implementation name of the driver DriverFactory xComponentFactory; /// the factory to create the driver component (if not already done so) - UNOContext xUNOContext; /// ensure UNO context propagation SdbcDriver xDriver; /// the driver itself };