Class SingleConnectionDataSource

All Implemented Interfaces:
AutoCloseable, Wrapper, CommonDataSource, DataSource, DisposableBean, SmartDataSource

public class SingleConnectionDataSource extends DriverManagerDataSource implements SmartDataSource, AutoCloseable, DisposableBean
Implementation of SmartDataSource that wraps a single JDBC 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 (for example, uses DataSourceUtils.releaseConnection).

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.

This is primarily intended for testing. For example, it enables easy testing outside an application server, for code that expects to work on a DataSource. 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:
  • Constructor Details Link icon

    • SingleConnectionDataSource Link icon

      public SingleConnectionDataSource()
      Constructor for bean-style configuration.
    • SingleConnectionDataSource Link icon

      public SingleConnectionDataSource(String url, String username, String password, boolean suppressClose)
      Create a new SingleConnectionDataSource with the given standard DriverManager parameters.
      Parameters:
      url - the JDBC URL to use for accessing the DriverManager
      username - the JDBC username to use for accessing the DriverManager
      password - the JDBC password to use for accessing the DriverManager
      suppressClose - if the returned Connection should be a close-suppressing proxy or the physical Connection
      See Also:
    • SingleConnectionDataSource Link icon

      public SingleConnectionDataSource(String url, boolean suppressClose)
      Create a new SingleConnectionDataSource with the given standard DriverManager parameters.
      Parameters:
      url - the JDBC URL to use for accessing the DriverManager
      suppressClose - if the returned Connection should be a close-suppressing proxy or the physical Connection
      See Also:
    • SingleConnectionDataSource Link icon

      public SingleConnectionDataSource(Connection target, boolean suppressClose)
      Create a new SingleConnectionDataSource with a given Connection.
      Parameters:
      target - underlying target 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 Details Link icon

    • setSuppressClose Link icon

      public void setSuppressClose(boolean suppressClose)
      Specify whether the returned Connection should be a close-suppressing proxy or the physical Connection.
    • isSuppressClose Link icon

      protected boolean isSuppressClose()
      Return whether the returned Connection will be a close-suppressing proxy or the physical Connection.
    • setRollbackBeforeClose Link icon

      public void setRollbackBeforeClose(boolean rollbackBeforeClose)
      Specify whether the shared Connection should be explicitly rolled back before close (if not in auto-commit mode).

      This is recommended for the Oracle JDBC driver in testing scenarios.

      Since:
      6.1.2
    • isRollbackBeforeClose Link icon

      protected boolean isRollbackBeforeClose()
      Return whether the shared Connection should be explicitly rolled back before close (if not in auto-commit mode).
      Since:
      6.1.2
    • setAutoCommit Link icon

      public void setAutoCommit(boolean autoCommit)
      Specify whether the returned Connection's "autoCommit" setting should be overridden.
    • getAutoCommitValue Link icon

      protected @Nullable Boolean getAutoCommitValue()
      Return whether the returned Connection's "autoCommit" setting should be overridden.
      Returns:
      the "autoCommit" value, or null if none to be applied
    • getConnection Link icon

      public Connection getConnection() throws SQLException
      Description copied from class: AbstractDriverBasedDataSource
      This implementation delegates to getConnectionFromDriver, using the default username and password of this DataSource.
      Specified by:
      getConnection in interface DataSource
      Overrides:
      getConnection in class AbstractDriverBasedDataSource
      Throws:
      SQLException
      See Also:
    • getConnection Link icon

      public Connection getConnection(String username, String password) throws 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; throws an SQLException else.
      Specified by:
      getConnection in interface DataSource
      Overrides:
      getConnection in class AbstractDriverBasedDataSource
      Throws:
      SQLException
      See Also:
    • shouldClose Link icon

      public boolean shouldClose(Connection con)
      This is a single Connection: Do not close it when returning to the "pool".
      Specified by:
      shouldClose in interface SmartDataSource
      Parameters:
      con - the Connection to check
      Returns:
      whether the given Connection should be closed
      See Also:
    • close Link icon

      public void close()
      Close the underlying Connection. The provider of this DataSource needs to care for proper shutdown.

      As this class implements AutoCloseable, it can be used with a try-with-resource statement.

      Specified by:
      close in interface AutoCloseable
      Since:
      6.1.2
    • destroy Link icon

      public void destroy()
      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 the bean.

      Specified by:
      destroy in interface DisposableBean
    • initConnection Link icon

      public void initConnection() throws SQLException
      Initialize the underlying Connection via the DriverManager.
      Throws:
      SQLException
    • resetConnection Link icon

      public void resetConnection()
      Reset the underlying shared Connection, to be reinitialized on next access.
    • prepareConnection Link icon

      protected void prepareConnection(Connection con) throws SQLException
      Prepare the given Connection before it is exposed.

      The default implementation applies the auto-commit flag, if necessary. Can be overridden in subclasses.

      Parameters:
      con - the Connection to prepare
      Throws:
      SQLException
      See Also:
    • closeConnection Link icon

      protected void closeConnection(Connection con)
      Close the underlying shared Connection.
      Since:
      6.1.2
    • getCloseSuppressingConnectionProxy Link icon

      protected Connection getCloseSuppressingConnectionProxy(Connection target)
      Wrap the given Connection with a proxy that delegates every method call to it but suppresses close calls.
      Parameters:
      target - the original Connection to wrap
      Returns:
      the wrapped Connection