@Override protected DataSource createInstance() throws Exception { Preconditions.checkNotNull(config, "config cannot be empty"); final ComboPooledDataSource targetDataSource = createNewDataSource(); final DelegatingDataSource proxyDataSource = createProxyDataSource(targetDataSource); config.setReloadCallback(new ReloadCallback() { @Override public void reload() throws Exception { // switch data source ComboPooledDataSource oldTargetDataSource = (ComboPooledDataSource)proxyDataSource.getTargetDataSource(); ComboPooledDataSource newTargetDataSource = createNewDataSource(); newTargetDataSource.getConnection().close(); // initialize a connection (+ throw it away) to force the datasource to initialize the pool proxyDataSource.setTargetDataSource(newTargetDataSource); oldTargetDataSource.close(); } }); return proxyDataSource; }
@Override protected DataSource createInstance() throws Exception { Preconditions.checkNotNull(config, "config cannot be empty"); final BoneCPDataSource targetDataSource = createNewDataSource(); final DelegatingDataSource proxyDataSource = createProxyDataSource(targetDataSource); config.setReloadCallback(new ReloadCallback() { @Override public void reload() throws Exception { // switch data source BoneCPDataSource oldTargetDataSource = (BoneCPDataSource)proxyDataSource.getTargetDataSource(); BoneCPDataSource newTargetDataSource = createNewDataSource(); newTargetDataSource.getConnection().close(); // initialize a connection (+ throw it away) to force the datasource to initialize the pool proxyDataSource.setTargetDataSource(newTargetDataSource); oldTargetDataSource.close(); } }); return proxyDataSource; }
@Override protected DataSource createInstance() throws Exception { Preconditions.checkNotNull(config, "config cannot be empty"); final DruidDataSource targetDataSource = createNewDataSource(); final DelegatingDataSource proxyDataSource = createProxyDataSource(targetDataSource); config.setReloadCallback(new ReloadCallback() { @Override public void reload() throws Exception { // switch data source DruidDataSource oldTargetDataSource = (DruidDataSource)proxyDataSource.getTargetDataSource(); DruidDataSource newTargetDataSource = createNewDataSource(); newTargetDataSource.getConnection().close(); // initialize a connection (+ throw it away) to force the datasource to initialize the pool proxyDataSource.setTargetDataSource(newTargetDataSource); oldTargetDataSource.close(); } }); return proxyDataSource; }
/** * Close the datasource. This part is c3p0 specific, since the close is not generally available * on the {@link DataSource} interface. * * @param dataSource * the data source to close. if null, nothing will be done. */ private void closeDataSource(DataSource dataSource) { try { // if wrapped get target DataSource while (dataSource instanceof DelegatingDataSource) { dataSource = ((DelegatingDataSource) dataSource).getTargetDataSource(); } if (dataSource instanceof PooledDataSource) { LOGGER.info("Closing database connection pool."); ((PooledDataSource) dataSource).close(); } } catch (Exception e) { LOGGER.error("An error occurred while closing the connections", e); } }
/** * Méthode utilisée par l'initialisation spring pour la mise en place * du {@link DataSource} */ public void setDataSource(DataSource dataSource) { /* * Il faut utiliser une DelegatingDataSource car le transaction manager d'hibernate * n'accepte pas de partager la gestion d'un data-source avec un autre transaction * manager. * On wrappe donc la data-source pour qu'hibernate accepte de déléguer la gestion. */ DelegatingDataSource myDataSource = new DelegatingDataSource(dataSource); jdbcTemplate = new JdbcTemplate(myDataSource); }
protected DelegatingDataSource createProxyDataSource(DataSource targetDataSource) { return new DelegatingDataSource(targetDataSource) { @Override public String toString() { if(getTargetDataSource()!=null) { return getTargetDataSource().toString(); } else { return "_NULL_DATA_SOURCE_"; } } }; }
private static TemporaryDatabase findTemporaryDatabase(final DataSource dataSource) { if (dataSource instanceof TemporaryDatabase) { return (TemporaryDatabase) dataSource; } else if (dataSource instanceof DelegatingDataSource) { return findTemporaryDatabase(((DelegatingDataSource) dataSource).getTargetDataSource()); } else { return null; } }
@Override protected void destroyInstance(DataSource instance) throws Exception { ((ComboPooledDataSource)((DelegatingDataSource)instance).getTargetDataSource()).close(); }
@Override protected void destroyInstance(DataSource instance) throws Exception { ((BoneCPDataSource)((DelegatingDataSource)instance).getTargetDataSource()).close(); }
@Override protected void destroyInstance(DataSource instance) throws Exception { ((DruidDataSource)((DelegatingDataSource)instance).getTargetDataSource()).close(); }