|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.jdbc.datasource.DelegatingDataSource org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter org.springframework.jdbc.datasource.IsolationLevelDataSourceAdapter
public class IsolationLevelDataSourceAdapter
An adapter for a target DataSource
, applying the current
Spring transaction's isolation level (and potentially specified user credentials)
to every getConnection
call. Also applies the read-only flag,
if specified.
Can be used to proxy a target JNDI DataSource that does not have the desired isolation level (and user credentials) configured. Client code can work with this DataSource as usual, not worrying about such settings.
Inherits the capability to apply specific user credentials from its superclass
UserCredentialsDataSourceAdapter
; see the latter's javadoc for details
on that functionality (e.g. UserCredentialsDataSourceAdapter.setCredentialsForCurrentThread(java.lang.String, java.lang.String)
).
WARNING: This adapter simply calls
Connection.setTransactionIsolation(int)
and/or
Connection.setReadOnly(boolean)
for every Connection obtained from it.
It does, however, not reset those settings; it rather expects the target
DataSource to perform such resetting as part of its connection pool handling.
Make sure that the target DataSource properly cleans up such transaction state.
setIsolationLevel(int)
,
setIsolationLevelName(java.lang.String)
,
UserCredentialsDataSourceAdapter.setUsername(java.lang.String)
,
UserCredentialsDataSourceAdapter.setPassword(java.lang.String)
Field Summary | |
---|---|
private static Constants |
constants
Constants instance for TransactionDefinition |
private java.lang.Integer |
isolationLevel
|
Constructor Summary | |
---|---|
IsolationLevelDataSourceAdapter()
|
Method Summary | |
---|---|
protected java.sql.Connection |
doGetConnection(java.lang.String username,
java.lang.String password)
Applies the current isolation level value and read-only flag to the returned Connection. |
protected java.lang.Integer |
getCurrentIsolationLevel()
Determine the current isolation level: either the transaction's isolation level or a statically defined isolation level. |
protected java.lang.Boolean |
getCurrentReadOnlyFlag()
Determine the current read-only flag: by default, the transaction's read-only hint. |
protected java.lang.Integer |
getIsolationLevel()
Return the statically specified isolation level, or null if none. |
void |
setIsolationLevel(int isolationLevel)
Specify the default isolation level to use for Connection retrieval, according to the JDBC Connection constants
(equivalent to the corresponding Spring
TransactionDefinition constants). |
void |
setIsolationLevelName(java.lang.String constantName)
Set the default isolation level by the name of the corresponding constant in TransactionDefinition , e.g. |
Methods inherited from class org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter |
---|
getConnection, getConnection, removeCredentialsFromCurrentThread, setCredentialsForCurrentThread, setPassword, setUsername |
Methods inherited from class org.springframework.jdbc.datasource.DelegatingDataSource |
---|
afterPropertiesSet, 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 |
---|
private static final Constants constants
private java.lang.Integer isolationLevel
Constructor Detail |
---|
public IsolationLevelDataSourceAdapter()
Method Detail |
---|
public final void setIsolationLevelName(java.lang.String constantName) throws java.lang.IllegalArgumentException
TransactionDefinition
, e.g.
"ISOLATION_SERIALIZABLE".
If not specified, the target DataSource's default will be used. Note that a transaction-specific isolation value will always override any isolation setting specified at the DataSource level.
constantName
- name of the constant
java.lang.IllegalArgumentException
TransactionDefinition.ISOLATION_READ_UNCOMMITTED
,
TransactionDefinition.ISOLATION_READ_COMMITTED
,
TransactionDefinition.ISOLATION_REPEATABLE_READ
,
TransactionDefinition.ISOLATION_SERIALIZABLE
,
setIsolationLevel(int)
public void setIsolationLevel(int isolationLevel)
Connection
constants
(equivalent to the corresponding Spring
TransactionDefinition
constants).
If not specified, the target DataSource's default will be used. Note that a transaction-specific isolation value will always override any isolation setting specified at the DataSource level.
Connection.TRANSACTION_READ_UNCOMMITTED
,
Connection.TRANSACTION_READ_COMMITTED
,
Connection.TRANSACTION_REPEATABLE_READ
,
Connection.TRANSACTION_SERIALIZABLE
,
TransactionDefinition.ISOLATION_READ_UNCOMMITTED
,
TransactionDefinition.ISOLATION_READ_COMMITTED
,
TransactionDefinition.ISOLATION_REPEATABLE_READ
,
TransactionDefinition.ISOLATION_SERIALIZABLE
,
TransactionDefinition.getIsolationLevel()
,
TransactionSynchronizationManager.getCurrentTransactionIsolationLevel()
protected java.lang.Integer getIsolationLevel()
null
if none.
protected java.sql.Connection doGetConnection(java.lang.String username, java.lang.String password) throws java.sql.SQLException
doGetConnection
in class UserCredentialsDataSourceAdapter
username
- the username to usepassword
- the password to use
java.sql.SQLException
getCurrentIsolationLevel()
,
getCurrentReadOnlyFlag()
protected java.lang.Integer getCurrentIsolationLevel()
null
if noneTransactionSynchronizationManager.getCurrentTransactionIsolationLevel()
,
setIsolationLevel(int)
protected java.lang.Boolean getCurrentReadOnlyFlag()
TransactionSynchronizationManager.isCurrentTransactionReadOnly()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |