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!
JDBCConnectionSpec
,
WSDataSource
,
TransactionSynchronizationManager.getCurrentTransactionIsolationLevel()
,
TransactionSynchronizationManager.isCurrentTransactionReadOnly()
Constructor and Description |
---|
WebSphereDataSourceAdapter()
This constructor retrieves the WebSphere JDBC connection spec API,
so we can get obtain specific WebSphere Connections using reflection.
|
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Checks that the specified 'targetDataSource' actually is
a WebSphere WSDataSource.
|
protected java.lang.Object |
createConnectionSpec(java.lang.Integer isolationLevel,
java.lang.Boolean readOnlyFlag,
java.lang.String username,
java.lang.String password)
Create a WebSphere
JDBCConnectionSpec object for the given characteristics. |
protected java.sql.Connection |
doGetConnection(java.lang.String username,
java.lang.String password)
Builds a WebSphere JDBCConnectionSpec object for the current settings
and calls
WSDataSource.getConnection(JDBCConnectionSpec) . |
getCurrentIsolationLevel, getCurrentReadOnlyFlag, getIsolationLevel, setIsolationLevel, setIsolationLevelName
getConnection, getConnection, removeCredentialsFromCurrentThread, setCatalog, setCredentialsForCurrentThread, setPassword, setSchema, setUsername
getLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, obtainTargetDataSource, setLoginTimeout, setLogWriter, setTargetDataSource, unwrap
protected final Log logger
public WebSphereDataSourceAdapter()
public void afterPropertiesSet()
afterPropertiesSet
in interface InitializingBean
afterPropertiesSet
in class DelegatingDataSource
protected java.sql.Connection doGetConnection(@Nullable java.lang.String username, @Nullable java.lang.String password) throws java.sql.SQLException
WSDataSource.getConnection(JDBCConnectionSpec)
.doGetConnection
in class IsolationLevelDataSourceAdapter
username
- the username to usepassword
- the password to usejava.sql.SQLException
createConnectionSpec(java.lang.Integer, java.lang.Boolean, java.lang.String, java.lang.String)
,
WSDataSource
protected java.lang.Object createConnectionSpec(@Nullable java.lang.Integer isolationLevel, @Nullable java.lang.Boolean readOnlyFlag, @Nullable java.lang.String username, @Nullable java.lang.String password) throws java.sql.SQLException
JDBCConnectionSpec
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).
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)java.sql.SQLException
- if thrown by JDBCConnectionSpec API methodsJDBCConnectionSpec