org.springframework.jdbc.datasource

## Class WebSphereDataSourceAdapter

- java.lang.Object
- - org.springframework.jdbc.datasource.DelegatingDataSource
  - - org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter
    - - org.springframework.jdbc.datasource.IsolationLevelDataSourceAdapter
      - - org.springframework.jdbc.datasource.WebSphereDataSourceAdapter

All Implemented Interfaces:
  Wrapper, CommonDataSource, DataSource, InitializingBean

    public class WebSphereDataSourceAdapter
    extends IsolationLevelDataSourceAdapter

`DataSource` implementation that delegates all calls to a WebSphere target `DataSource`, typically obtained from JNDI, applying a current isolation level and/or current user credentials to every Connection obtained from it.

Uses IBM-specific API to get a JDBC Connection with a specific isolation level (and read-only flag) from a WebSphere DataSource (IBM code example). Supports the transaction-specific isolation level exposed by `TransactionSynchronizationManager.getCurrentTransactionIsolationLevel()`. It's also possible to specify a default isolation level, to be applied when the current Spring-managed transaction does not define a specific isolation level.

Usage example, defining the target DataSource as an inner-bean JNDI lookup (of course, you can link to any WebSphere DataSource through a bean reference):

     <bean id="myDataSource" class="org.springframework.jdbc.datasource.WebSphereDataSourceAdapter">
       <property name="targetDataSource">
         <bean class="org.springframework.jndi.JndiObjectFactoryBean">
           <property name="jndiName" value="jdbc/myds"/>
         </bean>
       </property>
     </bean>

Thanks to Ricardo Olivieri for submitting the original implementation of this approach!

Since:
  2.0.3
Author:
  Juergen Hoeller, Lari Hotari, Ricardo N. Olivieri
See Also:
  `JDBCConnectionSpec`, `WSDataSource`, `TransactionSynchronizationManager.getCurrentTransactionIsolationLevel()`, `TransactionSynchronizationManager.isCurrentTransactionReadOnly()`

### Field Summary

Fields
`protected Log` `logger`

### Constructor Summary

Constructors
Constructor and Description
`WebSphereDataSourceAdapter()` This constructor retrieves the WebSphere JDBC connection spec API, so we can get obtain specific WebSphere Connections using reflection.

### Method Summary

Methods
`void` `afterPropertiesSet()` Checks that the specified 'targetDataSource' actually is a WebSphere WSDataSource.
`protected Object` `createConnectionSpec(Integer isolationLevel, Boolean readOnlyFlag, String username, String password)` Create a WebSphere `JDBCConnectionSpec` object for the given charateristics.
`protected Connection` `doGetConnection(String username, String password)` Builds a WebSphere JDBCConnectionSpec object for the current settings and calls `WSDataSource.getConnection(JDBCConnectionSpec)`.

### Methods inherited from class org.springframework.jdbc.datasource.IsolationLevelDataSourceAdapter

`getCurrentIsolationLevel, getCurrentReadOnlyFlag, getIsolationLevel, setIsolationLevel, setIsolationLevelName`

### Methods inherited from class org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter

`getConnection, getConnection, removeCredentialsFromCurrentThread, setCredentialsForCurrentThread, setPassword, setUsername`

### Methods inherited from class org.springframework.jdbc.datasource.DelegatingDataSource

`getLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, setLoginTimeout, setLogWriter, setTargetDataSource, unwrap`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### logger

    protected final Log logger

### Constructor Detail

#### WebSphereDataSourceAdapter

    public WebSphereDataSourceAdapter()

This constructor retrieves the WebSphere JDBC connection spec API, so we can get obtain specific WebSphere Connections using reflection.

### Method Detail

#### afterPropertiesSet

    public void afterPropertiesSet()

Checks that the specified 'targetDataSource' actually is a WebSphere WSDataSource.

Specified by:
  `afterPropertiesSet` in interface `InitializingBean`
Overrides:
  `afterPropertiesSet` in class `DelegatingDataSource`

#### doGetConnection

    protected Connection doGetConnection(String username,
                             String password)
                                  throws SQLException

Builds a WebSphere JDBCConnectionSpec object for the current settings and calls `WSDataSource.getConnection(JDBCConnectionSpec)`.

Overrides:
  `doGetConnection` in class `IsolationLevelDataSourceAdapter`
Parameters:
  `username` - the username to use
  `password` - the password to use
Returns:
  the Connection
Throws:
  `SQLException`
See Also:
  `createConnectionSpec(java.lang.Integer, java.lang.Boolean, java.lang.String, java.lang.String)`, `WSDataSource`

#### createConnectionSpec

    protected Object createConnectionSpec(Integer isolationLevel,
                              Boolean readOnlyFlag,
                              String username,
                              String password)
                                   throws SQLException

Create a WebSphere `JDBCConnectionSpec` object for the given charateristics.

The default implementation uses reflection to apply the given settings. Can be overridden in subclasses to customize the JDBCConnectionSpec object (JDBCConnectionSpec javadoc; IBM developerWorks article).

Parameters:
  `isolationLevel` - the isolation level to apply (or `null` if none)
  `readOnlyFlag` - the read-only flag to apply (or `null` if none)
  `username` - the username to apply (`null` or empty indicates the default)
  `password` - the password to apply (may be `null` or empty)
Throws:
  `SQLException` - if thrown by JDBCConnectionSpec API methods
See Also:
  `JDBCConnectionSpec`