declare namespace org { namespace springframework { namespace jdbc { namespace datasource { namespace lookup { /** * DataSource that routes to one of various target DataSources based on the * current transaction isolation level. The target DataSources need to be * configured with the isolation level name as key, as defined on the * {@link org.springframework.transaction.TransactionDefinition TransactionDefinition interface}. *
This is particularly useful in combination with JTA transaction management * (typically through Spring's {@link org.springframework.transaction.jta.JtaTransactionManager}). * Standard JTA does not support transaction-specific isolation levels. Some JTA * providers support isolation levels as a vendor-specific extension (e.g. WebLogic), * which is the preferred way of addressing this. As alternative (e.g. on WebSphere), * the target database can be represented through multiple JNDI DataSources, each * configured with a different isolation level (for the entire DataSource). * The present DataSource router allows to transparently switch to the * appropriate DataSource based on the current transaction's isolation level. *
The configuration can for example look like this, assuming that the target * DataSources are defined as individual Spring beans with names * "myRepeatableReadDataSource", "mySerializableDataSource" and "myDefaultDataSource": *
* <bean id="dataSourceRouter" class="org.springframework.jdbc.datasource.lookup.IsolationLevelDataSourceRouter">
* <property name="targetDataSources">
* <map>
* <entry key="ISOLATION_REPEATABLE_READ" value-ref="myRepeatableReadDataSource"/>
* <entry key="ISOLATION_SERIALIZABLE" value-ref="mySerializableDataSource"/>
* </map>
* </property>
* <property name="defaultTargetDataSource" ref="myDefaultDataSource"/>
* </bean>
* Alternatively, the keyed values can also be data source names, to be resolved
* through a {@link #setDataSourceLookup DataSourceLookup}: by default, JNDI
* names for a standard JNDI lookup. This allows for a single concise definition
* without the need for separate DataSource bean definitions.
*
* <bean id="dataSourceRouter" class="org.springframework.jdbc.datasource.lookup.IsolationLevelDataSourceRouter">
* <property name="targetDataSources">
* <map>
* <entry key="ISOLATION_REPEATABLE_READ" value="java:comp/env/jdbc/myrrds"/>
* <entry key="ISOLATION_SERIALIZABLE" value="java:comp/env/jdbc/myserds"/>
* </map>
* </property>
* <property name="defaultTargetDataSource" value="java:comp/env/jdbc/mydefds"/>
* </bean>
* Note: If you are using this router in combination with Spring's
* {@link org.springframework.transaction.jta.JtaTransactionManager},
* don't forget to switch the "allowCustomIsolationLevels" flag to "true".
* (By default, JtaTransactionManager will only accept a default isolation level
* because of the lack of isolation level support in standard JTA itself.)
*
* <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
* <property name="allowCustomIsolationLevels" value="true"/>
* </bean>
* @author Juergen Hoeller
* @since 2.0.1
* @see #setTargetDataSources
* @see #setDefaultTargetDataSource
* @see org.springframework.transaction.TransactionDefinition#ISOLATION_READ_UNCOMMITTED
* @see org.springframework.transaction.TransactionDefinition#ISOLATION_READ_COMMITTED
* @see org.springframework.transaction.TransactionDefinition#ISOLATION_REPEATABLE_READ
* @see org.springframework.transaction.TransactionDefinition#ISOLATION_SERIALIZABLE
* @see org.springframework.transaction.jta.JtaTransactionManager
*/
// @ts-ignore
class IsolationLevelDataSourceRouter extends org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource {
// @ts-ignore
constructor()
/**
* Supports Integer values for the isolation level constants
* as well as isolation level names as defined on the
* {@link org.springframework.transaction.TransactionDefinition TransactionDefinition interface}.
*/
// @ts-ignore
resolveSpecifiedLookupKey(lookupKey: java.lang.Object | any): any
// @ts-ignore
determineCurrentLookupKey(): any
}
}
}
}
}
}