public abstract class org.springframework.transaction.support.TransactionSynchronizationManager
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: org.springframework.transaction.support.TransactionSynchronizationManager
  super_class: java.lang.Object
{
  private static final org.apache.commons.logging.Log logger;
    descriptor: Lorg/apache/commons/logging/Log;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.ThreadLocal<java.util.Map<java.lang.Object, java.lang.Object>> resources;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;>;

  private static final java.lang.ThreadLocal<java.util.Set<org.springframework.transaction.support.TransactionSynchronization>> synchronizations;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Ljava/util/Set<Lorg/springframework/transaction/support/TransactionSynchronization;>;>;

  private static final java.lang.ThreadLocal<java.lang.String> currentTransactionName;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Ljava/lang/String;>;

  private static final java.lang.ThreadLocal<java.lang.Boolean> currentTransactionReadOnly;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Ljava/lang/Boolean;>;

  private static final java.lang.ThreadLocal<java.lang.Integer> currentTransactionIsolationLevel;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Ljava/lang/Integer;>;

  private static final java.lang.ThreadLocal<java.lang.Boolean> actualTransactionActive;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Ljava/lang/Boolean;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 79
            ldc Lorg/springframework/transaction/support/TransactionSynchronizationManager;
            invokestatic org.apache.commons.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/commons/logging/Log;
            putstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
         1: .line 82
            new org.springframework.core.NamedThreadLocal
            dup
            ldc "Transactional resources"
            invokespecial org.springframework.core.NamedThreadLocal.<init>:(Ljava/lang/String;)V
         2: .line 81
            putstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
         3: .line 85
            new org.springframework.core.NamedThreadLocal
            dup
            ldc "Transaction synchronizations"
            invokespecial org.springframework.core.NamedThreadLocal.<init>:(Ljava/lang/String;)V
         4: .line 84
            putstatic org.springframework.transaction.support.TransactionSynchronizationManager.synchronizations:Ljava/lang/ThreadLocal;
         5: .line 88
            new org.springframework.core.NamedThreadLocal
            dup
            ldc "Current transaction name"
            invokespecial org.springframework.core.NamedThreadLocal.<init>:(Ljava/lang/String;)V
         6: .line 87
            putstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionName:Ljava/lang/ThreadLocal;
         7: .line 91
            new org.springframework.core.NamedThreadLocal
            dup
            ldc "Current transaction read-only status"
            invokespecial org.springframework.core.NamedThreadLocal.<init>:(Ljava/lang/String;)V
         8: .line 90
            putstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionReadOnly:Ljava/lang/ThreadLocal;
         9: .line 94
            new org.springframework.core.NamedThreadLocal
            dup
            ldc "Current transaction isolation level"
            invokespecial org.springframework.core.NamedThreadLocal.<init>:(Ljava/lang/String;)V
        10: .line 93
            putstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionIsolationLevel:Ljava/lang/ThreadLocal;
        11: .line 97
            new org.springframework.core.NamedThreadLocal
            dup
            ldc "Actual transaction active"
            invokespecial org.springframework.core.NamedThreadLocal.<init>:(Ljava/lang/String;)V
        12: .line 96
            putstatic org.springframework.transaction.support.TransactionSynchronizationManager.actualTransactionActive:Ljava/lang/ThreadLocal;
        13: .line 97
            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.transaction.support.TransactionSynchronizationManager this
         0: .line 77
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.springframework.transaction.support.TransactionSynchronizationManager this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/transaction/support/TransactionSynchronizationManager;

  public static java.util.Map<java.lang.Object, java.lang.Object> getResourceMap();
    descriptor: ()Ljava/util/Map;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=0
         0: .line 114
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.Map
            astore 0 /* map */
        start local 0 // java.util.Map map
         1: .line 115
            aload 0 /* map */
            ifnull 2
            aload 0 /* map */
            invokestatic java.util.Collections.unmodifiableMap:(Ljava/util/Map;)Ljava/util/Map;
            goto 3
      StackMap locals: java.util.Map
      StackMap stack:
         2: invokestatic java.util.Collections.emptyMap:()Ljava/util/Map;
      StackMap locals:
      StackMap stack: java.util.Map
         3: areturn
        end local 0 // java.util.Map map
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            1    4     0   map  Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;
    Signature: ()Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;

  public static boolean hasResource(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // java.lang.Object key
         0: .line 125
            aload 0 /* key */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationUtils.unwrapResourceIfNecessary:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 1 /* actualKey */
        start local 1 // java.lang.Object actualKey
         1: .line 126
            aload 1 /* actualKey */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.doGetResource:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* value */
        start local 2 // java.lang.Object value
         2: .line 127
            aload 2 /* value */
            ifnull 3
            iconst_1
            ireturn
      StackMap locals: java.lang.Object java.lang.Object
      StackMap stack:
         3: iconst_0
            ireturn
        end local 2 // java.lang.Object value
        end local 1 // java.lang.Object actualKey
        end local 0 // java.lang.Object key
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0        key  Ljava/lang/Object;
            1    4     1  actualKey  Ljava/lang/Object;
            2    4     2      value  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      key   

  public static java.lang.Object getResource(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // java.lang.Object key
         0: .line 139
            aload 0 /* key */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationUtils.unwrapResourceIfNecessary:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 1 /* actualKey */
        start local 1 // java.lang.Object actualKey
         1: .line 140
            aload 1 /* actualKey */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.doGetResource:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* value */
        start local 2 // java.lang.Object value
         2: .line 141
            aload 2 /* value */
            ifnull 6
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isTraceEnabled:()Z
            ifeq 6
         3: .line 142
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Retrieved value ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] for key ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* actualKey */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] bound to thread ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         4: .line 143
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 142
            invokeinterface org.apache.commons.logging.Log.trace:(Ljava/lang/Object;)V
         6: .line 145
      StackMap locals: java.lang.Object java.lang.Object
      StackMap stack:
            aload 2 /* value */
            areturn
        end local 2 // java.lang.Object value
        end local 1 // java.lang.Object actualKey
        end local 0 // java.lang.Object key
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0        key  Ljava/lang/Object;
            1    7     1  actualKey  Ljava/lang/Object;
            2    7     2      value  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    MethodParameters:
      Name  Flags
      key   

  private static java.lang.Object doGetResource(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.lang.Object actualKey
         0: .line 153
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.Map
            astore 1 /* map */
        start local 1 // java.util.Map map
         1: .line 154
            aload 1 /* map */
            ifnonnull 3
         2: .line 155
            aconst_null
            areturn
         3: .line 157
      StackMap locals: java.util.Map
      StackMap stack:
            aload 1 /* map */
            aload 0 /* actualKey */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* value */
        start local 2 // java.lang.Object value
         4: .line 159
            aload 2 /* value */
            instanceof org.springframework.transaction.support.ResourceHolder
            ifeq 9
            aload 2 /* value */
            checkcast org.springframework.transaction.support.ResourceHolder
            invokeinterface org.springframework.transaction.support.ResourceHolder.isVoid:()Z
            ifeq 9
         5: .line 160
            aload 1 /* map */
            aload 0 /* actualKey */
            invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 162
            aload 1 /* map */
            invokeinterface java.util.Map.isEmpty:()Z
            ifeq 8
         7: .line 163
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         8: .line 165
      StackMap locals: java.lang.Object
      StackMap stack:
            aconst_null
            astore 2 /* value */
         9: .line 167
      StackMap locals:
      StackMap stack:
            aload 2 /* value */
            areturn
        end local 2 // java.lang.Object value
        end local 1 // java.util.Map map
        end local 0 // java.lang.Object actualKey
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   10     0  actualKey  Ljava/lang/Object;
            1   10     1        map  Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;
            4   10     2      value  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    MethodParameters:
           Name  Flags
      actualKey  

  public static void bindResource(java.lang.Object, java.lang.Object);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // java.lang.Object key
        start local 1 // java.lang.Object value
         0: .line 178
            aload 0 /* key */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationUtils.unwrapResourceIfNecessary:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* actualKey */
        start local 2 // java.lang.Object actualKey
         1: .line 179
            aload 1 /* value */
            ldc "Value must not be null"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         2: .line 180
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* map */
        start local 3 // java.util.Map map
         3: .line 182
            aload 3 /* map */
            ifnonnull 6
         4: .line 183
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 3 /* map */
         5: .line 184
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
            aload 3 /* map */
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         6: .line 186
      StackMap locals: java.lang.Object java.util.Map
      StackMap stack:
            aload 3 /* map */
            aload 2 /* actualKey */
            aload 1 /* value */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* oldValue */
        start local 4 // java.lang.Object oldValue
         7: .line 188
            aload 4 /* oldValue */
            instanceof org.springframework.transaction.support.ResourceHolder
            ifeq 9
            aload 4 /* oldValue */
            checkcast org.springframework.transaction.support.ResourceHolder
            invokeinterface org.springframework.transaction.support.ResourceHolder.isVoid:()Z
            ifeq 9
         8: .line 189
            aconst_null
            astore 4 /* oldValue */
         9: .line 191
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 4 /* oldValue */
            ifnull 13
        10: .line 192
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Already value ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* oldValue */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] for key ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        11: .line 193
            aload 2 /* actualKey */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] bound to thread ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        12: .line 192
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        13: .line 195
      StackMap locals:
      StackMap stack:
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isTraceEnabled:()Z
            ifeq 17
        14: .line 196
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Bound value ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] for key ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* actualKey */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] to thread ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        15: .line 197
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        16: .line 196
            invokeinterface org.apache.commons.logging.Log.trace:(Ljava/lang/Object;)V
        17: .line 199
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.lang.Object oldValue
        end local 3 // java.util.Map map
        end local 2 // java.lang.Object actualKey
        end local 1 // java.lang.Object value
        end local 0 // java.lang.Object key
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   18     0        key  Ljava/lang/Object;
            0   18     1      value  Ljava/lang/Object;
            1   18     2  actualKey  Ljava/lang/Object;
            3   18     3        map  Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;
            7   18     4   oldValue  Ljava/lang/Object;
    Exceptions:
      throws java.lang.IllegalStateException
    MethodParameters:
       Name  Flags
      key    
      value  

  public static java.lang.Object unbindResource(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=1
        start local 0 // java.lang.Object key
         0: .line 209
            aload 0 /* key */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationUtils.unwrapResourceIfNecessary:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 1 /* actualKey */
        start local 1 // java.lang.Object actualKey
         1: .line 210
            aload 1 /* actualKey */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.doUnbindResource:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* value */
        start local 2 // java.lang.Object value
         2: .line 211
            aload 2 /* value */
            ifnonnull 6
         3: .line 212
            new java.lang.IllegalStateException
            dup
         4: .line 213
            new java.lang.StringBuilder
            dup
            ldc "No value for key ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* actualKey */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] bound to thread ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 212
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 215
      StackMap locals: java.lang.Object java.lang.Object
      StackMap stack:
            aload 2 /* value */
            areturn
        end local 2 // java.lang.Object value
        end local 1 // java.lang.Object actualKey
        end local 0 // java.lang.Object key
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0        key  Ljava/lang/Object;
            1    7     1  actualKey  Ljava/lang/Object;
            2    7     2      value  Ljava/lang/Object;
    Exceptions:
      throws java.lang.IllegalStateException
    MethodParameters:
      Name  Flags
      key   

  public static java.lang.Object unbindResourceIfPossible(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // java.lang.Object key
         0: .line 225
            aload 0 /* key */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationUtils.unwrapResourceIfNecessary:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 1 /* actualKey */
        start local 1 // java.lang.Object actualKey
         1: .line 226
            aload 1 /* actualKey */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.doUnbindResource:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 1 // java.lang.Object actualKey
        end local 0 // java.lang.Object key
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0        key  Ljava/lang/Object;
            1    2     1  actualKey  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    MethodParameters:
      Name  Flags
      key   

  private static java.lang.Object doUnbindResource(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // java.lang.Object actualKey
         0: .line 234
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.Map
            astore 1 /* map */
        start local 1 // java.util.Map map
         1: .line 235
            aload 1 /* map */
            ifnonnull 3
         2: .line 236
            aconst_null
            areturn
         3: .line 238
      StackMap locals: java.util.Map
      StackMap stack:
            aload 1 /* map */
            aload 0 /* actualKey */
            invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* value */
        start local 2 // java.lang.Object value
         4: .line 240
            aload 1 /* map */
            invokeinterface java.util.Map.isEmpty:()Z
            ifeq 6
         5: .line 241
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.resources:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         6: .line 244
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2 /* value */
            instanceof org.springframework.transaction.support.ResourceHolder
            ifeq 8
            aload 2 /* value */
            checkcast org.springframework.transaction.support.ResourceHolder
            invokeinterface org.springframework.transaction.support.ResourceHolder.isVoid:()Z
            ifeq 8
         7: .line 245
            aconst_null
            astore 2 /* value */
         8: .line 247
      StackMap locals:
      StackMap stack:
            aload 2 /* value */
            ifnull 12
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isTraceEnabled:()Z
            ifeq 12
         9: .line 248
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Removed value ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* value */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] for key ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* actualKey */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] from thread ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        10: .line 249
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 248
            invokeinterface org.apache.commons.logging.Log.trace:(Ljava/lang/Object;)V
        12: .line 251
      StackMap locals:
      StackMap stack:
            aload 2 /* value */
            areturn
        end local 2 // java.lang.Object value
        end local 1 // java.util.Map map
        end local 0 // java.lang.Object actualKey
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   13     0  actualKey  Ljava/lang/Object;
            1   13     1        map  Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;
            4   13     2      value  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    MethodParameters:
           Name  Flags
      actualKey  

  public static boolean isSynchronizationActive();
    descriptor: ()Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 265
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.synchronizations:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static void initSynchronization();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 274
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isSynchronizationActive:()Z
            ifeq 2
         1: .line 275
            new java.lang.IllegalStateException
            dup
            ldc "Cannot activate transaction synchronization - already active"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 277
      StackMap locals:
      StackMap stack:
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            ldc "Initializing transaction synchronization"
            invokeinterface org.apache.commons.logging.Log.trace:(Ljava/lang/Object;)V
         3: .line 278
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.synchronizations:Ljava/lang/ThreadLocal;
            new java.util.LinkedHashSet
            dup
            invokespecial java.util.LinkedHashSet.<init>:()V
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         4: .line 279
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Exceptions:
      throws java.lang.IllegalStateException

  public static void registerSynchronization(org.springframework.transaction.support.TransactionSynchronization);
    descriptor: (Lorg/springframework/transaction/support/TransactionSynchronization;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.springframework.transaction.support.TransactionSynchronization synchronization
         0: .line 294
            aload 0 /* synchronization */
            ldc "TransactionSynchronization must not be null"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         1: .line 295
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.synchronizations:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.Set
            astore 1 /* synchs */
        start local 1 // java.util.Set synchs
         2: .line 296
            aload 1 /* synchs */
            ifnonnull 4
         3: .line 297
            new java.lang.IllegalStateException
            dup
            ldc "Transaction synchronization is not active"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 299
      StackMap locals: java.util.Set
      StackMap stack:
            aload 1 /* synchs */
            aload 0 /* synchronization */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         5: .line 300
            return
        end local 1 // java.util.Set synchs
        end local 0 // org.springframework.transaction.support.TransactionSynchronization synchronization
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    6     0  synchronization  Lorg/springframework/transaction/support/TransactionSynchronization;
            2    6     1           synchs  Ljava/util/Set<Lorg/springframework/transaction/support/TransactionSynchronization;>;
    Exceptions:
      throws java.lang.IllegalStateException
    MethodParameters:
                 Name  Flags
      synchronization  

  public static java.util.List<org.springframework.transaction.support.TransactionSynchronization> getSynchronizations();
    descriptor: ()Ljava/util/List;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=0
         0: .line 310
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.synchronizations:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.util.Set
            astore 0 /* synchs */
        start local 0 // java.util.Set synchs
         1: .line 311
            aload 0 /* synchs */
            ifnonnull 3
         2: .line 312
            new java.lang.IllegalStateException
            dup
            ldc "Transaction synchronization is not active"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 317
      StackMap locals: java.util.Set
      StackMap stack:
            aload 0 /* synchs */
            invokeinterface java.util.Set.isEmpty:()Z
            ifeq 5
         4: .line 318
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            areturn
         5: .line 322
      StackMap locals:
      StackMap stack:
            new java.util.ArrayList
            dup
            aload 0 /* synchs */
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            astore 1 /* sortedSynchs */
        start local 1 // java.util.List sortedSynchs
         6: .line 323
            aload 1 /* sortedSynchs */
            invokestatic org.springframework.core.annotation.AnnotationAwareOrderComparator.sort:(Ljava/util/List;)V
         7: .line 324
            aload 1 /* sortedSynchs */
            invokestatic java.util.Collections.unmodifiableList:(Ljava/util/List;)Ljava/util/List;
            areturn
        end local 1 // java.util.List sortedSynchs
        end local 0 // java.util.Set synchs
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            1    8     0        synchs  Ljava/util/Set<Lorg/springframework/transaction/support/TransactionSynchronization;>;
            6    8     1  sortedSynchs  Ljava/util/List<Lorg/springframework/transaction/support/TransactionSynchronization;>;
    Exceptions:
      throws java.lang.IllegalStateException
    Signature: ()Ljava/util/List<Lorg/springframework/transaction/support/TransactionSynchronization;>;

  public static void clearSynchronization();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 334
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isSynchronizationActive:()Z
            ifne 2
         1: .line 335
            new java.lang.IllegalStateException
            dup
            ldc "Cannot deactivate transaction synchronization - not active"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 337
      StackMap locals:
      StackMap stack:
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.logger:Lorg/apache/commons/logging/Log;
            ldc "Clearing transaction synchronization"
            invokeinterface org.apache.commons.logging.Log.trace:(Ljava/lang/Object;)V
         3: .line 338
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.synchronizations:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         4: .line 339
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Exceptions:
      throws java.lang.IllegalStateException

  public static void setCurrentTransactionName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String name
         0: .line 353
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionName:Ljava/lang/ThreadLocal;
            aload 0 /* name */
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         1: .line 354
            return
        end local 0 // java.lang.String name
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  name  Ljava/lang/String;
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
    MethodParameters:
      Name  Flags
      name  

  public static java.lang.String getCurrentTransactionName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 364
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionName:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.lang.String
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public static void setCurrentTransactionReadOnly(boolean);
    descriptor: (Z)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // boolean readOnly
         0: .line 375
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionReadOnly:Ljava/lang/ThreadLocal;
            iload 0 /* readOnly */
            ifeq 1
            getstatic java.lang.Boolean.TRUE:Ljava/lang/Boolean;
            goto 2
      StackMap locals:
      StackMap stack: java.lang.ThreadLocal
         1: aconst_null
      StackMap locals: int
      StackMap stack: java.lang.ThreadLocal java.lang.Boolean
         2: invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         3: .line 376
            return
        end local 0 // boolean readOnly
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0  readOnly  Z
    MethodParameters:
          Name  Flags
      readOnly  

  public static boolean isCurrentTransactionReadOnly();
    descriptor: ()Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 391
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionReadOnly:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static void setCurrentTransactionIsolationLevel(java.lang.Integer);
    descriptor: (Ljava/lang/Integer;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Integer isolationLevel
         0: .line 411
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionIsolationLevel:Ljava/lang/ThreadLocal;
            aload 0 /* isolationLevel */
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         1: .line 412
            return
        end local 0 // java.lang.Integer isolationLevel
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0  isolationLevel  Ljava/lang/Integer;
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
    MethodParameters:
                Name  Flags
      isolationLevel  

  public static java.lang.Integer getCurrentTransactionIsolationLevel();
    descriptor: ()Ljava/lang/Integer;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 433
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionIsolationLevel:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.lang.Integer
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public static void setActualTransactionActive(boolean);
    descriptor: (Z)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // boolean active
         0: .line 443
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.actualTransactionActive:Ljava/lang/ThreadLocal;
            iload 0 /* active */
            ifeq 1
            getstatic java.lang.Boolean.TRUE:Ljava/lang/Boolean;
            goto 2
      StackMap locals:
      StackMap stack: java.lang.ThreadLocal
         1: aconst_null
      StackMap locals: int
      StackMap stack: java.lang.ThreadLocal java.lang.Boolean
         2: invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         3: .line 444
            return
        end local 0 // boolean active
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0  active  Z
    MethodParameters:
        Name  Flags
      active  

  public static boolean isActualTransactionActive();
    descriptor: ()Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 458
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.actualTransactionActive:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static void clear();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 472
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.synchronizations:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         1: .line 473
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionName:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         2: .line 474
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionReadOnly:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         3: .line 475
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.currentTransactionIsolationLevel:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         4: .line 476
            getstatic org.springframework.transaction.support.TransactionSynchronizationManager.actualTransactionActive:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         5: .line 477
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
SourceFile: "TransactionSynchronizationManager.java"