我指的是https://developer.jboss.org/wiki/SessionsAndTransactions,目前正试图了解与JTA的划分。它声明在使用getCurrentSession()的特定事务中,始终提供相同的当前会话。这是不是意味着:
非常感谢任何指针/帮助。
由于
答案 0 :(得分:0)
根据javadoc SessionFactory.getCurrentSession()
究竟是什么"当前"意味着由{@link org.hibernate.context.spi.CurrentSessionContext} impl配置控制 用来。
JTA已配置,默认为{@link org.hibernate.context.internal.JTASessionContext} impl。
然后你可以看到JTASessionContext的javadoc和实现。
如果在调用{@link #currentSession()}时会话尚未与当前JTA事务关联,则将打开一个新会话,它将与该JTA事务关联。
public Session currentSession() throws HibernateException {
...
final TransactionManager transactionManager = jtaPlatform.retrieveTransactionManager();
...
txn = transactionManager.getTransaction();
...
final Object txnIdentifier = jtaPlatform.getTransactionIdentifier( txn );
...
Session currentSession = currentSessionMap.get( txnIdentifier );
...
}
TransactionManager javadoc
在内部,事务管理器将事务与线程相关联, 这里的方法对与之相关的交易进行操作 调用线程。
所以,它类似(但更清楚) Sessions and Transactions/Transaction demarcation with plain JDBC:
换句话说,会话绑定到幕后的线程,但是作用于事务,就像在JTA环境中一样。