public class org.springframework.orm.hibernate5.SpringSessionContext implements org.hibernate.context.spi.CurrentSessionContext
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.springframework.orm.hibernate5.SpringSessionContext
  super_class: java.lang.Object
{
  private final org.hibernate.engine.spi.SessionFactoryImplementor sessionFactory;
    descriptor: Lorg/hibernate/engine/spi/SessionFactoryImplementor;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private javax.transaction.TransactionManager transactionManager;
    descriptor: Ljavax/transaction/TransactionManager;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private org.hibernate.context.spi.CurrentSessionContext jtaSessionContext;
    descriptor: Lorg/hibernate/context/spi/CurrentSessionContext;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  public void <init>(org.hibernate.engine.spi.SessionFactoryImplementor);
    descriptor: (Lorg/hibernate/engine/spi/SessionFactoryImplementor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.springframework.orm.hibernate5.SpringSessionContext this
        start local 1 // org.hibernate.engine.spi.SessionFactoryImplementor sessionFactory
         0: .line 63
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 64
            aload 0 /* this */
            aload 1 /* sessionFactory */
            putfield org.springframework.orm.hibernate5.SpringSessionContext.sessionFactory:Lorg/hibernate/engine/spi/SessionFactoryImplementor;
         2: .line 66
            aload 1 /* sessionFactory */
            invokeinterface org.hibernate.engine.spi.SessionFactoryImplementor.getServiceRegistry:()Lorg/hibernate/service/spi/ServiceRegistryImplementor;
            ldc Lorg/hibernate/engine/transaction/jta/platform/spi/JtaPlatform;
            invokeinterface org.hibernate.service.spi.ServiceRegistryImplementor.getService:(Ljava/lang/Class;)Lorg/hibernate/service/Service;
            checkcast org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform
            astore 2 /* jtaPlatform */
        start local 2 // org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform jtaPlatform
         3: .line 67
            aload 0 /* this */
            aload 2 /* jtaPlatform */
            invokeinterface org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform.retrieveTransactionManager:()Ljavax/transaction/TransactionManager;
            putfield org.springframework.orm.hibernate5.SpringSessionContext.transactionManager:Ljavax/transaction/TransactionManager;
         4: .line 68
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.transactionManager:Ljavax/transaction/TransactionManager;
            ifnull 11
         5: .line 69
            aload 0 /* this */
            new org.springframework.orm.hibernate5.SpringJtaSessionContext
            dup
            aload 1 /* sessionFactory */
            invokespecial org.springframework.orm.hibernate5.SpringJtaSessionContext.<init>:(Lorg/hibernate/engine/spi/SessionFactoryImplementor;)V
            putfield org.springframework.orm.hibernate5.SpringSessionContext.jtaSessionContext:Lorg/hibernate/context/spi/CurrentSessionContext;
        end local 2 // org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform jtaPlatform
         6: .line 71
            goto 11
         7: .line 72
      StackMap locals: org.springframework.orm.hibernate5.SpringSessionContext org.hibernate.engine.spi.SessionFactoryImplementor
      StackMap stack: java.lang.Exception
            astore 2 /* ex */
        start local 2 // java.lang.Exception ex
         8: .line 73
            ldc Lorg/springframework/orm/hibernate5/SpringSessionContext;
            invokestatic org.apache.commons.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/commons/logging/Log;
         9: .line 74
            ldc "Could not introspect Hibernate JtaPlatform for SpringJtaSessionContext"
            aload 2 /* ex */
        10: .line 73
            invokeinterface org.apache.commons.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // java.lang.Exception ex
        11: .line 76
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.hibernate.engine.spi.SessionFactoryImplementor sessionFactory
        end local 0 // org.springframework.orm.hibernate5.SpringSessionContext this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   12     0            this  Lorg/springframework/orm/hibernate5/SpringSessionContext;
            0   12     1  sessionFactory  Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            3    6     2     jtaPlatform  Lorg/hibernate/engine/transaction/jta/platform/spi/JtaPlatform;
            8   11     2              ex  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           2     6       7  Class java.lang.Exception
    MethodParameters:
                Name  Flags
      sessionFactory  

  public org.hibernate.Session currentSession();
    descriptor: ()Lorg/hibernate/Session;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=1
        start local 0 // org.springframework.orm.hibernate5.SpringSessionContext this
         0: .line 85
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.sessionFactory:Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.getResource:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 1 /* value */
        start local 1 // java.lang.Object value
         1: .line 86
            aload 1 /* value */
            instanceof org.hibernate.Session
            ifeq 3
         2: .line 87
            aload 1 /* value */
            checkcast org.hibernate.Session
            areturn
         3: .line 89
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 1 /* value */
            instanceof org.springframework.orm.hibernate5.SessionHolder
            ifeq 17
         4: .line 91
            aload 1 /* value */
            checkcast org.springframework.orm.hibernate5.SessionHolder
            astore 2 /* sessionHolder */
        start local 2 // org.springframework.orm.hibernate5.SessionHolder sessionHolder
         5: .line 92
            aload 2 /* sessionHolder */
            invokevirtual org.springframework.orm.hibernate5.SessionHolder.getSession:()Lorg/hibernate/Session;
            astore 3 /* session */
        start local 3 // org.hibernate.Session session
         6: .line 93
            aload 2 /* sessionHolder */
            invokevirtual org.springframework.orm.hibernate5.SessionHolder.isSynchronizedWithTransaction:()Z
            ifne 16
         7: .line 94
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isSynchronizationActive:()Z
            ifeq 16
         8: .line 96
            new org.springframework.orm.hibernate5.SpringSessionSynchronization
            dup
            aload 2 /* sessionHolder */
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.sessionFactory:Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            iconst_0
            invokespecial org.springframework.orm.hibernate5.SpringSessionSynchronization.<init>:(Lorg/springframework/orm/hibernate5/SessionHolder;Lorg/hibernate/SessionFactory;Z)V
         9: .line 95
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.registerSynchronization:(Lorg/springframework/transaction/support/TransactionSynchronization;)V
        10: .line 97
            aload 2 /* sessionHolder */
            iconst_1
            invokevirtual org.springframework.orm.hibernate5.SessionHolder.setSynchronizedWithTransaction:(Z)V
        11: .line 100
            aload 3 /* session */
            invokestatic org.springframework.orm.hibernate5.SessionFactoryUtils.getFlushMode:(Lorg/hibernate/Session;)Lorg/hibernate/FlushMode;
            astore 4 /* flushMode */
        start local 4 // org.hibernate.FlushMode flushMode
        12: .line 101
            aload 4 /* flushMode */
            getstatic org.hibernate.FlushMode.MANUAL:Lorg/hibernate/FlushMode;
            invokevirtual org.hibernate.FlushMode.equals:(Ljava/lang/Object;)Z
            ifeq 16
        13: .line 102
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isCurrentTransactionReadOnly:()Z
            ifne 16
        14: .line 103
            aload 3 /* session */
            getstatic org.hibernate.FlushMode.AUTO:Lorg/hibernate/FlushMode;
            invokeinterface org.hibernate.Session.setFlushMode:(Lorg/hibernate/FlushMode;)V
        15: .line 104
            aload 2 /* sessionHolder */
            aload 4 /* flushMode */
            invokevirtual org.springframework.orm.hibernate5.SessionHolder.setPreviousFlushMode:(Lorg/hibernate/FlushMode;)V
        end local 4 // org.hibernate.FlushMode flushMode
        16: .line 107
      StackMap locals: org.springframework.orm.hibernate5.SessionHolder org.hibernate.Session
      StackMap stack:
            aload 3 /* session */
            areturn
        end local 3 // org.hibernate.Session session
        end local 2 // org.springframework.orm.hibernate5.SessionHolder sessionHolder
        17: .line 109
      StackMap locals:
      StackMap stack:
            aload 1 /* value */
            instanceof org.springframework.orm.jpa.EntityManagerHolder
            ifeq 19
        18: .line 111
            aload 1 /* value */
            checkcast org.springframework.orm.jpa.EntityManagerHolder
            invokevirtual org.springframework.orm.jpa.EntityManagerHolder.getEntityManager:()Ljavax/persistence/EntityManager;
            ldc Lorg/hibernate/Session;
            invokeinterface javax.persistence.EntityManager.unwrap:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast org.hibernate.Session
            areturn
        19: .line 114
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.transactionManager:Ljavax/transaction/TransactionManager;
            ifnull 29
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.jtaSessionContext:Lorg/hibernate/context/spi/CurrentSessionContext;
            ifnull 29
        20: .line 116
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.transactionManager:Ljavax/transaction/TransactionManager;
            invokeinterface javax.transaction.TransactionManager.getStatus:()I
            ifne 29
        21: .line 117
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.jtaSessionContext:Lorg/hibernate/context/spi/CurrentSessionContext;
            invokeinterface org.hibernate.context.spi.CurrentSessionContext.currentSession:()Lorg/hibernate/Session;
            astore 2 /* session */
        start local 2 // org.hibernate.Session session
        22: .line 118
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isSynchronizationActive:()Z
            ifeq 25
        23: .line 120
            new org.springframework.orm.hibernate5.SpringFlushSynchronization
            dup
            aload 2 /* session */
            invokespecial org.springframework.orm.hibernate5.SpringFlushSynchronization.<init>:(Lorg/hibernate/Session;)V
        24: .line 119
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.registerSynchronization:(Lorg/springframework/transaction/support/TransactionSynchronization;)V
        25: .line 122
      StackMap locals: org.hibernate.Session
      StackMap stack:
            aload 2 /* session */
        26: areturn
        end local 2 // org.hibernate.Session session
        27: .line 125
      StackMap locals: org.springframework.orm.hibernate5.SpringSessionContext java.lang.Object
      StackMap stack: javax.transaction.SystemException
            astore 2 /* ex */
        start local 2 // javax.transaction.SystemException ex
        28: .line 126
            new org.hibernate.HibernateException
            dup
            ldc "JTA TransactionManager found but status check failed"
            aload 2 /* ex */
            invokespecial org.hibernate.HibernateException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // javax.transaction.SystemException ex
        29: .line 130
      StackMap locals:
      StackMap stack:
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isSynchronizationActive:()Z
            ifeq 39
        30: .line 131
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.sessionFactory:Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            invokeinterface org.hibernate.engine.spi.SessionFactoryImplementor.openSession:()Lorg/hibernate/Session;
            astore 2 /* session */
        start local 2 // org.hibernate.Session session
        31: .line 132
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.isCurrentTransactionReadOnly:()Z
            ifeq 33
        32: .line 133
            aload 2 /* session */
            getstatic org.hibernate.FlushMode.MANUAL:Lorg/hibernate/FlushMode;
            invokeinterface org.hibernate.Session.setFlushMode:(Lorg/hibernate/FlushMode;)V
        33: .line 135
      StackMap locals: org.hibernate.Session
      StackMap stack:
            new org.springframework.orm.hibernate5.SessionHolder
            dup
            aload 2 /* session */
            invokespecial org.springframework.orm.hibernate5.SessionHolder.<init>:(Lorg/hibernate/Session;)V
            astore 3 /* sessionHolder */
        start local 3 // org.springframework.orm.hibernate5.SessionHolder sessionHolder
        34: .line 137
            new org.springframework.orm.hibernate5.SpringSessionSynchronization
            dup
            aload 3 /* sessionHolder */
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.sessionFactory:Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            iconst_1
            invokespecial org.springframework.orm.hibernate5.SpringSessionSynchronization.<init>:(Lorg/springframework/orm/hibernate5/SessionHolder;Lorg/hibernate/SessionFactory;Z)V
        35: .line 136
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.registerSynchronization:(Lorg/springframework/transaction/support/TransactionSynchronization;)V
        36: .line 138
            aload 0 /* this */
            getfield org.springframework.orm.hibernate5.SpringSessionContext.sessionFactory:Lorg/hibernate/engine/spi/SessionFactoryImplementor;
            aload 3 /* sessionHolder */
            invokestatic org.springframework.transaction.support.TransactionSynchronizationManager.bindResource:(Ljava/lang/Object;Ljava/lang/Object;)V
        37: .line 139
            aload 3 /* sessionHolder */
            iconst_1
            invokevirtual org.springframework.orm.hibernate5.SessionHolder.setSynchronizedWithTransaction:(Z)V
        38: .line 140
            aload 2 /* session */
            areturn
        end local 3 // org.springframework.orm.hibernate5.SessionHolder sessionHolder
        end local 2 // org.hibernate.Session session
        39: .line 143
      StackMap locals:
      StackMap stack:
            new org.hibernate.HibernateException
            dup
            ldc "Could not obtain transaction-synchronized Session for current thread"
            invokespecial org.hibernate.HibernateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.Object value
        end local 0 // org.springframework.orm.hibernate5.SpringSessionContext this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   40     0           this  Lorg/springframework/orm/hibernate5/SpringSessionContext;
            1   40     1          value  Ljava/lang/Object;
            5   17     2  sessionHolder  Lorg/springframework/orm/hibernate5/SessionHolder;
            6   17     3        session  Lorg/hibernate/Session;
           12   16     4      flushMode  Lorg/hibernate/FlushMode;
           22   27     2        session  Lorg/hibernate/Session;
           28   29     2             ex  Ljavax/transaction/SystemException;
           31   39     2        session  Lorg/hibernate/Session;
           34   39     3  sessionHolder  Lorg/springframework/orm/hibernate5/SessionHolder;
      Exception table:
        from    to  target  type
          20    26      27  Class javax.transaction.SystemException
    Exceptions:
      throws org.hibernate.HibernateException
}
SourceFile: "SpringSessionContext.java"