[英]Hibernate JTA multiuser session-transaction mapping
我指的是https://developer.jboss.org/wiki/SessionsAndTransactions ,目前正在尝试了解JTA的划分。 它指出在特定事务中,使用getCurrentSession()总是给出相同的当前会话。 它的意思是:
任何指针/帮助深表感谢。
谢谢
根据javadoc SessionFactory.getCurrentSession()
“当前”的确切定义由配置为使用的{@link org.hibernate.context.spi.CurrentSessionContext} impl控制。
已配置JTA,这将默认为{@link org.hibernate.context.internal.JTASessionContext}的实现。
然后您可以看到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
在内部,事务管理器将事务与线程相关联,并且此处的方法对与调用线程相关联的事务进行操作。
因此,它与普通JDBC的会话和事务/事务划分类似(但更清楚):
换句话说,会话绑定到幕后线程,但作用域是事务,就像在JTA环境中一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.