@ -16,6 +16,7 @@
@@ -16,6 +16,7 @@
package org.springframework.jdbc.datasource ;
import java.lang.reflect.InvocationTargetException ;
import java.lang.reflect.Method ;
import java.sql.Connection ;
import java.sql.SQLException ;
@ -141,7 +142,7 @@ public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter
@@ -141,7 +142,7 @@ public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter
getTargetDataSource ( ) + "], using ConnectionSpec [" + connSpec + "]" ) ;
}
// Create Connection through invoking WSDataSource.getConnection(JDBCConnectionSpec)
Connection con = ( Connection ) ReflectionUtils . invokeJdbcMethod (
Connection con = ( Connection ) invokeJdbcMethod (
this . wsDataSourceGetConnectionMethod , obtainTargetDataSource ( ) , connSpec ) ;
Assert . state ( con ! = null , "No Connection" ) ;
return con ;
@ -163,21 +164,40 @@ public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter
@@ -163,21 +164,40 @@ public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter
protected Object createConnectionSpec ( @Nullable Integer isolationLevel , @Nullable Boolean readOnlyFlag ,
@Nullable String username , @Nullable String password ) throws SQLException {
Object connSpec = ReflectionUtils . invokeJdbcMethod ( this . newJdbcConnSpecMethod , null ) ;
Object connSpec = invokeJdbcMethod ( this . newJdbcConnSpecMethod , null ) ;
Assert . state ( connSpec ! = null , "No JDBCConnectionSpec" ) ;
if ( isolationLevel ! = null ) {
ReflectionUtils . invokeJdbcMethod ( this . setTransactionIsolationMethod , connSpec , isolationLevel ) ;
invokeJdbcMethod ( this . setTransactionIsolationMethod , connSpec , isolationLevel ) ;
}
if ( readOnlyFlag ! = null ) {
ReflectionUtils . invokeJdbcMethod ( this . setReadOnlyMethod , connSpec , readOnlyFlag ) ;
invokeJdbcMethod ( this . setReadOnlyMethod , connSpec , readOnlyFlag ) ;
}
// If the username is empty, we'll simply let the target DataSource
// use its default credentials.
if ( StringUtils . hasLength ( username ) ) {
ReflectionUtils . invokeJdbcMethod ( this . setUserNameMethod , connSpec , username ) ;
ReflectionUtils . invokeJdbcMethod ( this . setPasswordMethod , connSpec , password ) ;
invokeJdbcMethod ( this . setUserNameMethod , connSpec , username ) ;
invokeJdbcMethod ( this . setPasswordMethod , connSpec , password ) ;
}
return connSpec ;
}
@Nullable
private static Object invokeJdbcMethod ( Method method , @Nullable Object target , @Nullable Object . . . args )
throws SQLException {
try {
return method . invoke ( target , args ) ;
}
catch ( IllegalAccessException ex ) {
ReflectionUtils . handleReflectionException ( ex ) ;
}
catch ( InvocationTargetException ex ) {
if ( ex . getTargetException ( ) instanceof SQLException ) {
throw ( SQLException ) ex . getTargetException ( ) ;
}
ReflectionUtils . handleInvocationTargetException ( ex ) ;
}
throw new IllegalStateException ( "Should never get here" ) ;
}
}