public abstract class org.springframework.jdbc.datasource.DataSourceUtils
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: org.springframework.jdbc.datasource.DataSourceUtils
  super_class: java.lang.Object
{
  public static final int CONNECTION_SYNCHRONIZATION_ORDER;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 1000

  private static final org.apache.commons.logging.Log logger;
    descriptor: Lorg/apache/commons/logging/Log;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 59
            ldc Lorg/springframework/jdbc/datasource/DataSourceUtils;
            invokestatic org.apache.commons.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/commons/logging/Log;
            putstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.jdbc.datasource.DataSourceUtils this
         0: .line 52
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.springframework.jdbc.datasource.DataSourceUtils this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/jdbc/datasource/DataSourceUtils;

  public static java.sql.Connection getConnection(javax.sql.DataSource);
    descriptor: (Ljavax/sql/DataSource;)Ljava/sql/Connection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // javax.sql.DataSource dataSource
         0: .line 78
            aload 0 /* dataSource */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection:(Ljavax/sql/DataSource;)Ljava/sql/Connection;
         1: areturn
         2: .line 80
      StackMap locals:
      StackMap stack: java.sql.SQLException
            astore 1 /* ex */
        start local 1 // java.sql.SQLException ex
         3: .line 81
            new org.springframework.jdbc.CannotGetJdbcConnectionException
            dup
            ldc "Failed to obtain JDBC Connection"
            aload 1 /* ex */
            invokespecial org.springframework.jdbc.CannotGetJdbcConnectionException.<init>:(Ljava/lang/String;Ljava/sql/SQLException;)V
            athrow
        end local 1 // java.sql.SQLException ex
         4: .line 83
      StackMap locals:
      StackMap stack: java.lang.IllegalStateException
            astore 1 /* ex */
        start local 1 // java.lang.IllegalStateException ex
         5: .line 84
            new org.springframework.jdbc.CannotGetJdbcConnectionException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Failed to obtain JDBC Connection: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* ex */
            invokevirtual java.lang.IllegalStateException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.springframework.jdbc.CannotGetJdbcConnectionException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.IllegalStateException ex
        end local 0 // javax.sql.DataSource dataSource
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0  dataSource  Ljavax/sql/DataSource;
            3    4     1          ex  Ljava/sql/SQLException;
            5    6     1          ex  Ljava/lang/IllegalStateException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.sql.SQLException
           0     1       4  Class java.lang.IllegalStateException
    Exceptions:
      throws org.springframework.jdbc.CannotGetJdbcConnectionException
    MethodParameters:
            Name  Flags
      dataSource  

  public static java.sql.Connection doGetConnection(javax.sql.DataSource);
    descriptor: (Ljavax/sql/DataSource;)Ljava/sql/Connection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=1
        start local 0 // javax.sql.DataSource dataSource
         0: .line 101
            aload 0 /* dataSource */
            ldc "No DataSource specified"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 103
            aload 0 /* dataSource */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.getResource:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.springframework.jdbc.datasource.ConnectionHolder
            astore 1 /* conHolder */
        start local 1 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
         2: .line 104
            aload 1 /* conHolder */
            ifnull 8
            aload 1 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.hasConnection:()Z
            ifne 3
            aload 1 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.isSynchronizedWithTransaction:()Z
            ifeq 8
         3: .line 105
      StackMap locals: org.springframework.jdbc.datasource.ConnectionHolder
      StackMap stack:
            aload 1 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.requested:()V
         4: .line 106
            aload 1 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.hasConnection:()Z
            ifne 7
         5: .line 107
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            ldc "Fetching resumed JDBC Connection from DataSource"
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;)V
         6: .line 108
            aload 1 /* conHolder */
            aload 0 /* dataSource */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection:(Ljavax/sql/DataSource;)Ljava/sql/Connection;
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.setConnection:(Ljava/sql/Connection;)V
         7: .line 110
      StackMap locals:
      StackMap stack:
            aload 1 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.getConnection:()Ljava/sql/Connection;
            areturn
         8: .line 114
      StackMap locals:
      StackMap stack:
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            ldc "Fetching JDBC Connection from DataSource"
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;)V
         9: .line 115
            aload 0 /* dataSource */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection:(Ljavax/sql/DataSource;)Ljava/sql/Connection;
            astore 2 /* con */
        start local 2 // java.sql.Connection con
        10: .line 117
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isSynchronizationActive:()Z
            ifeq 26
        11: .line 121
            aload 1 /* conHolder */
            astore 3 /* holderToUse */
        start local 3 // org.springframework.jdbc.datasource.ConnectionHolder holderToUse
        12: .line 122
            aload 3 /* holderToUse */
            ifnonnull 15
        13: .line 123
            new org.springframework.jdbc.datasource.ConnectionHolder
            dup
            aload 2 /* con */
            invokespecial org.springframework.jdbc.datasource.ConnectionHolder.<init>:(Ljava/sql/Connection;)V
            astore 3 /* holderToUse */
        14: .line 124
            goto 16
        15: .line 126
      StackMap locals: java.sql.Connection org.springframework.jdbc.datasource.ConnectionHolder
      StackMap stack:
            aload 3 /* holderToUse */
            aload 2 /* con */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.setConnection:(Ljava/sql/Connection;)V
        16: .line 128
      StackMap locals:
      StackMap stack:
            aload 3 /* holderToUse */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.requested:()V
        17: .line 130
            new org.springframework.jdbc.datasource.DataSourceUtils$ConnectionSynchronization
            dup
            aload 3 /* holderToUse */
            aload 0 /* dataSource */
            invokespecial org.springframework.jdbc.datasource.DataSourceUtils$ConnectionSynchronization.<init>:(Lorg/springframework/jdbc/datasource/ConnectionHolder;Ljavax/sql/DataSource;)V
        18: .line 129
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.registerSynchronization:(Lorg/springframework/transaction/support/TransactionSynchronization;)V
        19: .line 131
            aload 3 /* holderToUse */
            iconst_1
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.setSynchronizedWithTransaction:(Z)V
        20: .line 132
            aload 3 /* holderToUse */
            aload 1 /* conHolder */
            if_acmpeq 26
        21: .line 133
            aload 0 /* dataSource */
            aload 3 /* holderToUse */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.bindResource:(Ljava/lang/Object;Ljava/lang/Object;)V
        end local 3 // org.springframework.jdbc.datasource.ConnectionHolder holderToUse
        22: .line 135
            goto 26
        23: .line 136
      StackMap locals: javax.sql.DataSource org.springframework.jdbc.datasource.ConnectionHolder java.sql.Connection
      StackMap stack: java.lang.RuntimeException
            astore 3 /* ex */
        start local 3 // java.lang.RuntimeException ex
        24: .line 138
            aload 2 /* con */
            aload 0 /* dataSource */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection:(Ljava/sql/Connection;Ljavax/sql/DataSource;)V
        25: .line 139
            aload 3 /* ex */
            athrow
        end local 3 // java.lang.RuntimeException ex
        26: .line 143
      StackMap locals:
      StackMap stack:
            aload 2 /* con */
            areturn
        end local 2 // java.sql.Connection con
        end local 1 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
        end local 0 // javax.sql.DataSource dataSource
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   27     0   dataSource  Ljavax/sql/DataSource;
            2   27     1    conHolder  Lorg/springframework/jdbc/datasource/ConnectionHolder;
           10   27     2          con  Ljava/sql/Connection;
           12   22     3  holderToUse  Lorg/springframework/jdbc/datasource/ConnectionHolder;
           24   26     3           ex  Ljava/lang/RuntimeException;
      Exception table:
        from    to  target  type
          11    22      23  Class java.lang.RuntimeException
    Exceptions:
      throws java.sql.SQLException
    MethodParameters:
            Name  Flags
      dataSource  

  private static java.sql.Connection fetchConnection(javax.sql.DataSource);
    descriptor: (Ljavax/sql/DataSource;)Ljava/sql/Connection;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // javax.sql.DataSource dataSource
         0: .line 157
            aload 0 /* dataSource */
            invokeinterface javax.sql.DataSource.getConnection:()Ljava/sql/Connection;
            astore 1 /* con */
        start local 1 // java.sql.Connection con
         1: .line 158
            aload 1 /* con */
            ifnonnull 3
         2: .line 159
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "DataSource returned null from getConnection(): "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* dataSource */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 161
      StackMap locals: java.sql.Connection
      StackMap stack:
            aload 1 /* con */
            areturn
        end local 1 // java.sql.Connection con
        end local 0 // javax.sql.DataSource dataSource
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0  dataSource  Ljavax/sql/DataSource;
            1    4     1         con  Ljava/sql/Connection;
    Exceptions:
      throws java.sql.SQLException
    MethodParameters:
            Name  Flags
      dataSource  

  public static java.lang.Integer prepareConnectionForTransaction(java.sql.Connection, org.springframework.transaction.TransactionDefinition);
    descriptor: (Ljava/sql/Connection;Lorg/springframework/transaction/TransactionDefinition;)Ljava/lang/Integer;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // java.sql.Connection con
        start local 1 // org.springframework.transaction.TransactionDefinition definition
         0: .line 176
            aload 0 /* con */
            ldc "No Connection specified"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 179
            aload 1 /* definition */
            ifnull 14
            aload 1 /* definition */
            invokeinterface org.springframework.transaction.TransactionDefinition.isReadOnly:()Z
            ifeq 14
         2: .line 181
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isDebugEnabled:()Z
            ifeq 4
         3: .line 182
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Setting JDBC Connection ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* con */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] read-only"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;)V
         4: .line 184
      StackMap locals:
      StackMap stack:
            aload 0 /* con */
            iconst_1
            invokeinterface java.sql.Connection.setReadOnly:(Z)V
         5: .line 185
            goto 14
         6: .line 186
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 2 /* ex */
        start local 2 // java.lang.Exception ex
         7: .line 187
            aload 2 /* ex */
            astore 3 /* exToCheck */
        start local 3 // java.lang.Throwable exToCheck
         8: .line 188
            goto 12
         9: .line 189
      StackMap locals: java.lang.Exception java.lang.Throwable
      StackMap stack:
            aload 3 /* exToCheck */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
            ldc "Timeout"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 11
        10: .line 191
            aload 2 /* ex */
            athrow
        11: .line 193
      StackMap locals:
      StackMap stack:
            aload 3 /* exToCheck */
            invokevirtual java.lang.Throwable.getCause:()Ljava/lang/Throwable;
            astore 3 /* exToCheck */
        12: .line 188
      StackMap locals:
      StackMap stack:
            aload 3 /* exToCheck */
            ifnonnull 9
        13: .line 196
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            ldc "Could not set JDBC Connection read-only"
            aload 2 /* ex */
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 3 // java.lang.Throwable exToCheck
        end local 2 // java.lang.Exception ex
        14: .line 201
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 2 /* previousIsolationLevel */
        start local 2 // java.lang.Integer previousIsolationLevel
        15: .line 202
            aload 1 /* definition */
            ifnull 24
            aload 1 /* definition */
            invokeinterface org.springframework.transaction.TransactionDefinition.getIsolationLevel:()I
            iconst_m1
            if_icmpeq 24
        16: .line 203
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isDebugEnabled:()Z
            ifeq 20
        17: .line 204
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Changing isolation level of JDBC Connection ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* con */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] to "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        18: .line 205
            aload 1 /* definition */
            invokeinterface org.springframework.transaction.TransactionDefinition.getIsolationLevel:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        19: .line 204
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;)V
        20: .line 207
      StackMap locals: java.lang.Integer
      StackMap stack:
            aload 0 /* con */
            invokeinterface java.sql.Connection.getTransactionIsolation:()I
            istore 3 /* currentIsolation */
        start local 3 // int currentIsolation
        21: .line 208
            iload 3 /* currentIsolation */
            aload 1 /* definition */
            invokeinterface org.springframework.transaction.TransactionDefinition.getIsolationLevel:()I
            if_icmpeq 24
        22: .line 209
            iload 3 /* currentIsolation */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            astore 2 /* previousIsolationLevel */
        23: .line 210
            aload 0 /* con */
            aload 1 /* definition */
            invokeinterface org.springframework.transaction.TransactionDefinition.getIsolationLevel:()I
            invokeinterface java.sql.Connection.setTransactionIsolation:(I)V
        end local 3 // int currentIsolation
        24: .line 214
      StackMap locals:
      StackMap stack:
            aload 2 /* previousIsolationLevel */
            areturn
        end local 2 // java.lang.Integer previousIsolationLevel
        end local 1 // org.springframework.transaction.TransactionDefinition definition
        end local 0 // java.sql.Connection con
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   25     0                     con  Ljava/sql/Connection;
            0   25     1              definition  Lorg/springframework/transaction/TransactionDefinition;
            7   14     2                      ex  Ljava/lang/Exception;
            8   14     3               exToCheck  Ljava/lang/Throwable;
           15   25     2  previousIsolationLevel  Ljava/lang/Integer;
           21   24     3        currentIsolation  I
      Exception table:
        from    to  target  type
           2     5       6  Class java.sql.SQLException
           2     5       6  Class java.lang.RuntimeException
    Exceptions:
      throws java.sql.SQLException
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
            Name  Flags
      con         
      definition  

  public static void resetConnectionAfterTransaction(java.sql.Connection, java.lang.Integer);
    descriptor: (Ljava/sql/Connection;Ljava/lang/Integer;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.sql.Connection con
        start local 1 // java.lang.Integer previousIsolationLevel
         0: .line 225
            aload 0 /* con */
            ldc "No Connection specified"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 228
            aload 1 /* previousIsolationLevel */
            ifnull 7
         2: .line 229
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isDebugEnabled:()Z
            ifeq 6
         3: .line 230
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Resetting isolation level of JDBC Connection ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         4: .line 231
            aload 0 /* con */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] to "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* previousIsolationLevel */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 230
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;)V
         6: .line 233
      StackMap locals:
      StackMap stack:
            aload 0 /* con */
            aload 1 /* previousIsolationLevel */
            invokevirtual java.lang.Integer.intValue:()I
            invokeinterface java.sql.Connection.setTransactionIsolation:(I)V
         7: .line 237
      StackMap locals:
      StackMap stack:
            aload 0 /* con */
            invokeinterface java.sql.Connection.isReadOnly:()Z
            ifeq 14
         8: .line 238
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isDebugEnabled:()Z
            ifeq 10
         9: .line 239
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Resetting read-only flag of JDBC Connection ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* con */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;)V
        10: .line 241
      StackMap locals:
      StackMap stack:
            aload 0 /* con */
            iconst_0
            invokeinterface java.sql.Connection.setReadOnly:(Z)V
        11: .line 243
            goto 14
        12: .line 244
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 2 /* ex */
        start local 2 // java.lang.Throwable ex
        13: .line 245
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            ldc "Could not reset JDBC Connection after transaction"
            aload 2 /* ex */
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // java.lang.Throwable ex
        14: .line 247
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Integer previousIsolationLevel
        end local 0 // java.sql.Connection con
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   15     0                     con  Ljava/sql/Connection;
            0   15     1  previousIsolationLevel  Ljava/lang/Integer;
           13   14     2                      ex  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1    11      12  Class java.lang.Throwable
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
                        Name  Flags
      con                     
      previousIsolationLevel  

  public static boolean isConnectionTransactional(java.sql.Connection, javax.sql.DataSource);
    descriptor: (Ljava/sql/Connection;Ljavax/sql/DataSource;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.sql.Connection con
        start local 1 // javax.sql.DataSource dataSource
         0: .line 258
            aload 1 /* dataSource */
            ifnonnull 2
         1: .line 259
            iconst_0
            ireturn
         2: .line 261
      StackMap locals:
      StackMap stack:
            aload 1 /* dataSource */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.getResource:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.springframework.jdbc.datasource.ConnectionHolder
            astore 2 /* conHolder */
        start local 2 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
         3: .line 262
            aload 2 /* conHolder */
            ifnull 4
            aload 2 /* conHolder */
            aload 0 /* con */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.connectionEquals:(Lorg/springframework/jdbc/datasource/ConnectionHolder;Ljava/sql/Connection;)Z
            ifeq 4
            iconst_1
            ireturn
      StackMap locals: org.springframework.jdbc.datasource.ConnectionHolder
      StackMap stack:
         4: iconst_0
            ireturn
        end local 2 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
        end local 1 // javax.sql.DataSource dataSource
        end local 0 // java.sql.Connection con
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0         con  Ljava/sql/Connection;
            0    5     1  dataSource  Ljavax/sql/DataSource;
            3    5     2   conHolder  Lorg/springframework/jdbc/datasource/ConnectionHolder;
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
            Name  Flags
      con         
      dataSource  

  public static void applyTransactionTimeout(java.sql.Statement, javax.sql.DataSource);
    descriptor: (Ljava/sql/Statement;Ljavax/sql/DataSource;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.sql.Statement stmt
        start local 1 // javax.sql.DataSource dataSource
         0: .line 274
            aload 0 /* stmt */
            aload 1 /* dataSource */
            iconst_m1
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.applyTimeout:(Ljava/sql/Statement;Ljavax/sql/DataSource;I)V
         1: .line 275
            return
        end local 1 // javax.sql.DataSource dataSource
        end local 0 // java.sql.Statement stmt
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        stmt  Ljava/sql/Statement;
            0    2     1  dataSource  Ljavax/sql/DataSource;
    Exceptions:
      throws java.sql.SQLException
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
            Name  Flags
      stmt        
      dataSource  

  public static void applyTimeout(java.sql.Statement, javax.sql.DataSource, int);
    descriptor: (Ljava/sql/Statement;Ljavax/sql/DataSource;I)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=3
        start local 0 // java.sql.Statement stmt
        start local 1 // javax.sql.DataSource dataSource
        start local 2 // int timeout
         0: .line 287
            aload 0 /* stmt */
            ldc "No Statement specified"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 288
            aconst_null
            astore 3 /* holder */
        start local 3 // org.springframework.jdbc.datasource.ConnectionHolder holder
         2: .line 289
            aload 1 /* dataSource */
            ifnull 4
         3: .line 290
            aload 1 /* dataSource */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.getResource:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.springframework.jdbc.datasource.ConnectionHolder
            astore 3 /* holder */
         4: .line 292
      StackMap locals: org.springframework.jdbc.datasource.ConnectionHolder
      StackMap stack:
            aload 3 /* holder */
            ifnull 7
            aload 3 /* holder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.hasTimeout:()Z
            ifeq 7
         5: .line 294
            aload 0 /* stmt */
            aload 3 /* holder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.getTimeToLiveInSeconds:()I
            invokeinterface java.sql.Statement.setQueryTimeout:(I)V
         6: .line 295
            goto 9
         7: .line 296
      StackMap locals:
      StackMap stack:
            iload 2 /* timeout */
            iflt 9
         8: .line 298
            aload 0 /* stmt */
            iload 2 /* timeout */
            invokeinterface java.sql.Statement.setQueryTimeout:(I)V
         9: .line 300
      StackMap locals:
      StackMap stack:
            return
        end local 3 // org.springframework.jdbc.datasource.ConnectionHolder holder
        end local 2 // int timeout
        end local 1 // javax.sql.DataSource dataSource
        end local 0 // java.sql.Statement stmt
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   10     0        stmt  Ljava/sql/Statement;
            0   10     1  dataSource  Ljavax/sql/DataSource;
            0   10     2     timeout  I
            2   10     3      holder  Lorg/springframework/jdbc/datasource/ConnectionHolder;
    Exceptions:
      throws java.sql.SQLException
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        org.springframework.lang.Nullable()
      2:
    MethodParameters:
            Name  Flags
      stmt        
      dataSource  
      timeout     

  public static void releaseConnection(java.sql.Connection, javax.sql.DataSource);
    descriptor: (Ljava/sql/Connection;Ljavax/sql/DataSource;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.sql.Connection con
        start local 1 // javax.sql.DataSource dataSource
         0: .line 313
            aload 0 /* con */
            aload 1 /* dataSource */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection:(Ljava/sql/Connection;Ljavax/sql/DataSource;)V
         1: .line 314
            goto 7
         2: .line 315
      StackMap locals:
      StackMap stack: java.sql.SQLException
            astore 2 /* ex */
        start local 2 // java.sql.SQLException ex
         3: .line 316
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            ldc "Could not close JDBC Connection"
            aload 2 /* ex */
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // java.sql.SQLException ex
         4: goto 7
         5: .line 318
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 2 /* ex */
        start local 2 // java.lang.Throwable ex
         6: .line 319
            getstatic org.springframework.jdbc.datasource.DataSourceUtils.logger:Lorg/apache/commons/logging/Log;
            ldc "Unexpected exception on closing JDBC Connection"
            aload 2 /* ex */
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // java.lang.Throwable ex
         7: .line 321
      StackMap locals:
      StackMap stack:
            return
        end local 1 // javax.sql.DataSource dataSource
        end local 0 // java.sql.Connection con
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    8     0         con  Ljava/sql/Connection;
            0    8     1  dataSource  Ljavax/sql/DataSource;
            3    4     2          ex  Ljava/sql/SQLException;
            6    7     2          ex  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     1       2  Class java.sql.SQLException
           0     1       5  Class java.lang.Throwable
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
            Name  Flags
      con         
      dataSource  

  public static void doReleaseConnection(java.sql.Connection, javax.sql.DataSource);
    descriptor: (Ljava/sql/Connection;Ljavax/sql/DataSource;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.sql.Connection con
        start local 1 // javax.sql.DataSource dataSource
         0: .line 335
            aload 0 /* con */
            ifnonnull 2
         1: .line 336
            return
         2: .line 338
      StackMap locals:
      StackMap stack:
            aload 1 /* dataSource */
            ifnull 7
         3: .line 339
            aload 1 /* dataSource */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.getResource:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.springframework.jdbc.datasource.ConnectionHolder
            astore 2 /* conHolder */
        start local 2 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
         4: .line 340
            aload 2 /* conHolder */
            ifnull 7
            aload 2 /* conHolder */
            aload 0 /* con */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.connectionEquals:(Lorg/springframework/jdbc/datasource/ConnectionHolder;Ljava/sql/Connection;)Z
            ifeq 7
         5: .line 342
            aload 2 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.released:()V
         6: .line 343
            return
        end local 2 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
         7: .line 346
      StackMap locals:
      StackMap stack:
            aload 0 /* con */
            aload 1 /* dataSource */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection:(Ljava/sql/Connection;Ljavax/sql/DataSource;)V
         8: .line 347
            return
        end local 1 // javax.sql.DataSource dataSource
        end local 0 // java.sql.Connection con
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    9     0         con  Ljava/sql/Connection;
            0    9     1  dataSource  Ljavax/sql/DataSource;
            4    7     2   conHolder  Lorg/springframework/jdbc/datasource/ConnectionHolder;
    Exceptions:
      throws java.sql.SQLException
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
            Name  Flags
      con         
      dataSource  

  public static void doCloseConnection(java.sql.Connection, javax.sql.DataSource);
    descriptor: (Ljava/sql/Connection;Ljavax/sql/DataSource;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.sql.Connection con
        start local 1 // javax.sql.DataSource dataSource
         0: .line 358
            aload 1 /* dataSource */
            instanceof org.springframework.jdbc.datasource.SmartDataSource
            ifeq 1
            aload 1 /* dataSource */
            checkcast org.springframework.jdbc.datasource.SmartDataSource
            aload 0 /* con */
            invokeinterface org.springframework.jdbc.datasource.SmartDataSource.shouldClose:(Ljava/sql/Connection;)Z
            ifeq 2
         1: .line 359
      StackMap locals:
      StackMap stack:
            aload 0 /* con */
            invokeinterface java.sql.Connection.close:()V
         2: .line 361
      StackMap locals:
      StackMap stack:
            return
        end local 1 // javax.sql.DataSource dataSource
        end local 0 // java.sql.Connection con
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0         con  Ljava/sql/Connection;
            0    3     1  dataSource  Ljavax/sql/DataSource;
    Exceptions:
      throws java.sql.SQLException
    RuntimeVisibleParameterAnnotations: 
      0:
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
            Name  Flags
      con         
      dataSource  

  private static boolean connectionEquals(org.springframework.jdbc.datasource.ConnectionHolder, java.sql.Connection);
    descriptor: (Lorg/springframework/jdbc/datasource/ConnectionHolder;Ljava/sql/Connection;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
        start local 1 // java.sql.Connection passedInCon
         0: .line 374
            aload 0 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.hasConnection:()Z
            ifne 2
         1: .line 375
            iconst_0
            ireturn
         2: .line 377
      StackMap locals:
      StackMap stack:
            aload 0 /* conHolder */
            invokevirtual org.springframework.jdbc.datasource.ConnectionHolder.getConnection:()Ljava/sql/Connection;
            astore 2 /* heldCon */
        start local 2 // java.sql.Connection heldCon
         3: .line 380
            aload 2 /* heldCon */
            aload 1 /* passedInCon */
            if_acmpeq 6
            aload 2 /* heldCon */
            aload 1 /* passedInCon */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 6
         4: .line 381
            aload 2 /* heldCon */
            invokestatic org.springframework.jdbc.datasource.DataSourceUtils.getTargetConnection:(Ljava/sql/Connection;)Ljava/sql/Connection;
            aload 1 /* passedInCon */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 6
         5: .line 380
            iconst_0
            ireturn
      StackMap locals: java.sql.Connection
      StackMap stack:
         6: iconst_1
            ireturn
        end local 2 // java.sql.Connection heldCon
        end local 1 // java.sql.Connection passedInCon
        end local 0 // org.springframework.jdbc.datasource.ConnectionHolder conHolder
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0    conHolder  Lorg/springframework/jdbc/datasource/ConnectionHolder;
            0    7     1  passedInCon  Ljava/sql/Connection;
            3    7     2      heldCon  Ljava/sql/Connection;
    MethodParameters:
             Name  Flags
      conHolder    
      passedInCon  

  public static java.sql.Connection getTargetConnection(java.sql.Connection);
    descriptor: (Ljava/sql/Connection;)Ljava/sql/Connection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // java.sql.Connection con
         0: .line 393
            aload 0 /* con */
            astore 1 /* conToUse */
        start local 1 // java.sql.Connection conToUse
         1: .line 394
            goto 3
         2: .line 395
      StackMap locals: java.sql.Connection
      StackMap stack:
            aload 1 /* conToUse */
            checkcast org.springframework.jdbc.datasource.ConnectionProxy
            invokeinterface org.springframework.jdbc.datasource.ConnectionProxy.getTargetConnection:()Ljava/sql/Connection;
            astore 1 /* conToUse */
         3: .line 394
      StackMap locals:
      StackMap stack:
            aload 1 /* conToUse */
            instanceof org.springframework.jdbc.datasource.ConnectionProxy
            ifne 2
         4: .line 397
            aload 1 /* conToUse */
            areturn
        end local 1 // java.sql.Connection conToUse
        end local 0 // java.sql.Connection con
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0       con  Ljava/sql/Connection;
            1    5     1  conToUse  Ljava/sql/Connection;
    MethodParameters:
      Name  Flags
      con   

  private static int getConnectionSynchronizationOrder(javax.sql.DataSource);
    descriptor: (Ljavax/sql/DataSource;)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // javax.sql.DataSource dataSource
         0: .line 409
            sipush 1000
            istore 1 /* order */
        start local 1 // int order
         1: .line 410
            aload 0 /* dataSource */
            astore 2 /* currDs */
        start local 2 // javax.sql.DataSource currDs
         2: .line 411
            goto 5
         3: .line 412
      StackMap locals: int javax.sql.DataSource
      StackMap stack:
            iinc 1 /* order */ -1
         4: .line 413
            aload 2 /* currDs */
            checkcast org.springframework.jdbc.datasource.DelegatingDataSource
            invokevirtual org.springframework.jdbc.datasource.DelegatingDataSource.getTargetDataSource:()Ljavax/sql/DataSource;
            astore 2 /* currDs */
         5: .line 411
      StackMap locals:
      StackMap stack:
            aload 2 /* currDs */
            instanceof org.springframework.jdbc.datasource.DelegatingDataSource
            ifne 3
         6: .line 415
            iload 1 /* order */
            ireturn
        end local 2 // javax.sql.DataSource currDs
        end local 1 // int order
        end local 0 // javax.sql.DataSource dataSource
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0  dataSource  Ljavax/sql/DataSource;
            1    7     1       order  I
            2    7     2      currDs  Ljavax/sql/DataSource;
    MethodParameters:
            Name  Flags
      dataSource  
}
SourceFile: "DataSourceUtils.java"
NestMembers:
  org.springframework.jdbc.datasource.DataSourceUtils$ConnectionSynchronization
InnerClasses:
  private ConnectionSynchronization = org.springframework.jdbc.datasource.DataSourceUtils$ConnectionSynchronization of org.springframework.jdbc.datasource.DataSourceUtils