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"