org.springframework.jdbc.datasource
Class SingleConnectionDataSource

java.lang.Object
  extended byorg.springframework.jdbc.datasource.AbstractDataSource
      extended byorg.springframework.jdbc.datasource.DriverManagerDataSource
          extended byorg.springframework.jdbc.datasource.SingleConnectionDataSource
All Implemented Interfaces:
javax.sql.DataSource, DisposableBean, SmartDataSource

public class SingleConnectionDataSource
extends DriverManagerDataSource
implements DisposableBean

Implementation of SmartDataSource that wraps a single connection which is not closed after use. Obviously, this is not multi-threading capable.

Note that at shutdown, someone should close the underlying connection via the close() method. Client code will never call close on the connection handle if it is SmartDataSource-aware (e.g. uses DataSourceUtils.closeConnectionIfNecessary).

If client code will call close in the assumption of a pooled connection, like when using persistence tools, set suppressClose to true. This will return a close-suppressing proxy instead of the physical connection. Be aware that you will not be able to cast this to a native OracleConnection or the like anymore.

This is primarily a test class. For example, it enables easy testing of code outside an application server, in conjunction with a simple JNDI environment. In contrast to DriverManagerDataSource, it reuses the same connection all the time, avoiding excessive creation of physical connections.

Author:
Rod Johnson, Juergen Hoeller
See Also:
DataSourceUtils.closeConnectionIfNecessary(java.sql.Connection, javax.sql.DataSource)

Field Summary
 
Fields inherited from class org.springframework.jdbc.datasource.AbstractDataSource
logger
 
Constructor Summary
SingleConnectionDataSource()
          Constructor for bean-style configuration.
SingleConnectionDataSource(java.sql.Connection source, boolean suppressClose)
          Create a new SingleConnectionDataSource with a given connection.
SingleConnectionDataSource(java.lang.String driverClassName, java.lang.String url, java.lang.String username, java.lang.String password, boolean suppressClose)
          Create a new SingleConnectionDataSource with the given standard DriverManager parameters.
 
Method Summary
 void destroy()
          Close the underlying connection.
 java.sql.Connection getConnection()
           
 java.sql.Connection getConnection(java.lang.String username, java.lang.String password)
          Specifying a custom username and password doesn't make sense with a single connection.
protected  void init()
          Initialize the underlying connection via DriverManager.
protected  void init(java.sql.Connection source)
          Initialize the underlying connection.
 boolean isSuppressClose()
          Return if the returned connection will be a close-suppressing proxy or the physical connection.
 void setSuppressClose(boolean suppressClose)
          Set if the returned connection should be a close-suppressing proxy or the physical connection.
 boolean shouldClose(java.sql.Connection conn)
          This is a single connection: Do not close it when returning to the "pool".
 
Methods inherited from class org.springframework.jdbc.datasource.DriverManagerDataSource
getConnectionFromDriverManager, getConnectionFromDriverManager, getDriverClassName, getPassword, getUrl, getUsername, setDriverClassName, setPassword, setUrl, setUsername
 
Methods inherited from class org.springframework.jdbc.datasource.AbstractDataSource
getLoginTimeout, getLogWriter, setLoginTimeout, setLogWriter
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.sql.DataSource
getLoginTimeout, getLogWriter, setLoginTimeout, setLogWriter
 

Constructor Detail

SingleConnectionDataSource

public SingleConnectionDataSource()
Constructor for bean-style configuration.


SingleConnectionDataSource

public SingleConnectionDataSource(java.lang.String driverClassName,
                                  java.lang.String url,
                                  java.lang.String username,
                                  java.lang.String password,
                                  boolean suppressClose)
                           throws CannotGetJdbcConnectionException
Create a new SingleConnectionDataSource with the given standard DriverManager parameters.

Parameters:
suppressClose - if the returned connection should be a close-suppressing proxy or the physical connection.

SingleConnectionDataSource

public SingleConnectionDataSource(java.sql.Connection source,
                                  boolean suppressClose)
Create a new SingleConnectionDataSource with a given connection.

Parameters:
source - underlying source connection
suppressClose - if the connection should be wrapped with a* connection that suppresses close() calls (to allow for normal close() usage in applications that expect a pooled connection but do not know our SmartDataSource interface).
Method Detail

setSuppressClose

public void setSuppressClose(boolean suppressClose)
Set if the returned connection should be a close-suppressing proxy or the physical connection.


isSuppressClose

public boolean isSuppressClose()
Return if the returned connection will be a close-suppressing proxy or the physical connection.


shouldClose

public boolean shouldClose(java.sql.Connection conn)
This is a single connection: Do not close it when returning to the "pool".

Specified by:
shouldClose in interface SmartDataSource
Overrides:
shouldClose in class DriverManagerDataSource

init

protected void init()
             throws java.sql.SQLException
Initialize the underlying connection via DriverManager.

Throws:
java.sql.SQLException

init

protected void init(java.sql.Connection source)
Initialize the underlying connection. Wraps the connection with a close-suppressing proxy if necessary.

Parameters:
source - the JDBC Connection to use

getConnection

public java.sql.Connection getConnection()
                                  throws java.sql.SQLException
Specified by:
getConnection in interface javax.sql.DataSource
Overrides:
getConnection in class DriverManagerDataSource
Throws:
java.sql.SQLException

getConnection

public java.sql.Connection getConnection(java.lang.String username,
                                         java.lang.String password)
                                  throws java.sql.SQLException
Specifying a custom username and password doesn't make sense with a single connection. Returns the single connection if given the same username and password, though.

Specified by:
getConnection in interface javax.sql.DataSource
Overrides:
getConnection in class DriverManagerDataSource
Throws:
java.sql.SQLException

destroy

public void destroy()
             throws java.sql.SQLException
Close the underlying connection. The provider of this DataSource needs to care for proper shutdown.

As this bean implements DisposableBean, a bean factory will automatically invoke this on destruction of its cached singletons.

Specified by:
destroy in interface DisposableBean
Throws:
java.sql.SQLException


Copyright (C) 2003-2004 The Spring Framework Project.