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 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). |
getCurrentIsolationLevel, getCurrentReadOnlyFlag, getIsolationLevel, setIsolationLevel, setIsolationLevelNamegetConnection, getConnection, removeCredentialsFromCurrentThread, setCredentialsForCurrentThread, setPassword, setUsernamegetLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, setLoginTimeout, setLogWriter, setTargetDataSource, unwrapprotected final Log logger
public WebSphereDataSourceAdapter()
public void afterPropertiesSet()
afterPropertiesSet in interface InitializingBeanafterPropertiesSet in class DelegatingDataSourceprotected Connection doGetConnection(String username, String password) throws SQLException
WSDataSource.getConnection(JDBCConnectionSpec).doGetConnection in class IsolationLevelDataSourceAdapterusername - the username to usepassword - the password to useSQLExceptioncreateConnectionSpec(java.lang.Integer, java.lang.Boolean, java.lang.String, java.lang.String),
WSDataSourceprotected Object createConnectionSpec(Integer isolationLevel, Boolean readOnlyFlag, String username, String password) throws SQLException
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).
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)SQLException - if thrown by JDBCConnectionSpec API methodsJDBCConnectionSpec