All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.jdbc.datasource.ConnectionHolder Maven / Gradle / Ivy

There is a newer version: 2.0-M4
Show newest version
/*
 * Copyright 2002-2005 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.jdbc.datasource;

import java.sql.Connection;

import org.springframework.transaction.support.ResourceHolderSupport;

/**
 * Connection holder, wrapping a JDBC Connection.
 * DataSourceTransactionManager binds instances of this class
 * to the thread, for a given DataSource.
 *
 * 

Inherits rollback-only support for nested JDBC transactions * and reference count functionality from the base class. * *

Note: This is an SPI class, not intended to be used by applications. * * @author Juergen Hoeller * @since 06.05.2003 * @see DataSourceTransactionManager * @see DataSourceUtils */ public class ConnectionHolder extends ResourceHolderSupport { private final ConnectionHandle connectionHandle; private Connection currentConnection; /** * Create a new ConnectionHolder for the given ConnectionHandle. * @param connectionHandle the ConnectionHandle to hold */ public ConnectionHolder(ConnectionHandle connectionHandle) { this.connectionHandle = connectionHandle; } /** * Create a new ConnectionHolder for the given JDBC Connection, * wrapping it with a SimpleConnectionHandle. * @param connection the JDBC Connection to hold * @see SimpleConnectionHandle */ public ConnectionHolder(Connection connection) { this.connectionHandle = new SimpleConnectionHandle(connection); } /** * Return the ConnectionHandle held by this ConnectionHolder. */ public ConnectionHandle getConnectionHandle() { return connectionHandle; } /** * Return the current Connection held by this ConnectionHolder. *

This will be the same Connection until released * gets called on the ConnectionHolder, which will reset the * held Connection, fetching a new Connection on demand. * @see ConnectionHandle#getConnection() * @see #released() */ public Connection getConnection() { if (this.currentConnection == null) { this.currentConnection = this.connectionHandle.getConnection(); } return this.currentConnection; } /** * Releases the current Connection held by this ConnectionHolder. *

This is necessary for ConnectionHandles that expect "Connection borrowing", * where each returned Connection is only temporarily leased and needs to be * returned once the data operation is done, to make the Connection available * for other operations within the same transaction. This is the case with * JDO 2.0 DataStoreConnections, for example. * @see org.springframework.orm.jdo.DefaultJdoDialect#getJdbcConnection */ public void released() { super.released(); if (this.currentConnection != null) { this.connectionHandle.releaseConnection(this.currentConnection); this.currentConnection = null; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy