/* * Copyright 2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.batch.core; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import java.util.logging.Logger; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; /** * As of Spring 3.2, when a context is closed, the shutdown method is * called on any beans that are registered. With an embedded database * that uses a connection pool, this can leave the connection pool open * with stale connections. This wraps an {@link EmbeddedDatabase} and * ignores calls to {@link EmbeddedDatabase#shutdown()}. * * @author Phil Webb * @since 3.0 */ public class PooledEmbeddedDataSource implements EmbeddedDatabase { private final EmbeddedDatabase dataSource; /** * @param dataSource The database to be wrapped */ public PooledEmbeddedDataSource(EmbeddedDatabase dataSource) { this.dataSource = dataSource; } /* (non-Javadoc) * @see javax.sql.DataSource#getConnection() */ @Override public Connection getConnection() throws SQLException { return this.dataSource.getConnection(); } /* (non-Javadoc) * @see javax.sql.DataSource#getConnection(java.lang.String, java.lang.String) */ @Override public Connection getConnection(String username, String password) throws SQLException { return this.dataSource.getConnection(username, password); } /* (non-Javadoc) * @see javax.sql.CommonDataSource#getLogWriter() */ @Override public PrintWriter getLogWriter() throws SQLException { return this.dataSource.getLogWriter(); } /* (non-Javadoc) * @see javax.sql.CommonDataSource#setLogWriter(java.io.PrintWriter) */ @Override public void setLogWriter(PrintWriter out) throws SQLException { this.dataSource.setLogWriter(out); } /* (non-Javadoc) * @see javax.sql.CommonDataSource#getLoginTimeout() */ @Override public int getLoginTimeout() throws SQLException { return this.dataSource.getLoginTimeout(); } /* (non-Javadoc) * @see javax.sql.CommonDataSource#setLoginTimeout(int) */ @Override public void setLoginTimeout(int seconds) throws SQLException { this.dataSource.setLoginTimeout(seconds); } /* (non-Javadoc) * @see java.sql.Wrapper#unwrap(java.lang.Class) */ @Override public <T> T unwrap(Class<T> iface) throws SQLException { return this.dataSource.unwrap(iface); } /* (non-Javadoc) * @see java.sql.Wrapper#isWrapperFor(java.lang.Class) */ @Override public boolean isWrapperFor(Class<?> iface) throws SQLException { return this.dataSource.isWrapperFor(iface); } public Logger getParentLogger() { return Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); } /* (non-Javadoc) * @see org.springframework.jdbc.datasource.embedded.EmbeddedDatabase#shutdown() */ @Override public void shutdown() { } }