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 targetDataSource
, 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:
com.ibm.websphere.rsadapter.JDBCConnectionSpec
,com.ibm.websphere.rsadapter.WSDataSource#getConnection(com.ibm.websphere.rsadapter.JDBCConnectionSpec)
,TransactionSynchronizationManager.getCurrentTransactionIsolationLevel()
,TransactionSynchronizationManager.isCurrentTransactionReadOnly()
Constructor Summary
Constructors Constructor Description WebSphereDataSourceAdapter()
This constructor retrieves the WebSphere JDBC connection spec API, so we can get obtain specific WebSphere Connections using reflection.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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 WebSphereJDBCConnectionSpec
object for the given characteristics.protected Connection
doGetConnection(String username, String password)
Builds a WebSphere JDBCConnectionSpec object for the current settings and callsWSDataSource.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, setCatalog, setCredentialsForCurrentThread, setPassword, setSchema, 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
Methods inherited from interface javax.sql.CommonDataSource
createShardingKeyBuilder
Methods inherited from interface javax.sql.DataSource
createConnectionBuilder
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 interfaceInitializingBean
- Overrides:
afterPropertiesSet
in classDelegatingDataSource
doGetConnection
protected Connection doGetConnection(String username, String password) throws SQLException
Builds a WebSphere JDBCConnectionSpec object for the current settings and callsWSDataSource.getConnection(JDBCConnectionSpec)
.- Overrides:
doGetConnection
in classIsolationLevelDataSourceAdapter
- Parameters:
username
- the username to usepassword
- the password to use- Returns:
- the Connection
- Throws:
SQLException
- See Also:
createConnectionSpec(java.lang.Integer, java.lang.Boolean, java.lang.String, java.lang.String)
,com.ibm.websphere.rsadapter.WSDataSource#getConnection(com.ibm.websphere.rsadapter.JDBCConnectionSpec)
createConnectionSpec
protected Object createConnectionSpec(Integer isolationLevel, Boolean readOnlyFlag, String username, String password) throws SQLException
Create a WebSphereJDBCConnectionSpec
object for the given characteristics.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 (ornull
if none)readOnlyFlag
- the read-only flag to apply (ornull
if none)username
- the username to apply (null
or empty indicates the default)password
- the password to apply (may benull
or empty)- Throws:
SQLException
- if thrown by JDBCConnectionSpec API methods- See Also:
com.ibm.websphere.rsadapter.JDBCConnectionSpec