java-如何从HibernateTransactionManager获取事务状态
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何从HibernateTransactionManager获取事务状态,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1883字,纯文字阅读大概需要3分钟。
内容图文
![java-如何从HibernateTransactionManager获取事务状态](/upload/InfoBanner/zyjiaocheng/662/5a9921e2c33c43898754b2c118e83977.jpg)
我正在尝试将Spring事务管理器从JtaTransactionManager升级到HibernateTransactionManager.在JTA TransactionManager中,我们有一种提供当前交易状态的方法.根据状态,我们正在执行一些操作.实现如下:
private void checkTransactionStatus(TransactionStatus status){
if(status instanceof DefaultTransactionStatus) {
DefaultTransactionStatus transactionStatus = (DefaultTransactionStatus) status;
if(transactionStatus.getTransaction() instanceof JtaTransactionObject){
JtaTransactionObject txObject = (JtaTransactionObject) transactionStatus.getTransaction();
int jtaStatus;
try {
jtaStatus = txObject.getUserTransaction().getStatus();
if(jtaStatus==Status.STATUS_MARKED_ROLLBACK){
// logic heare
}
} catch (SystemException e) {}
}
}
}
我想用HibernateTransactionManager特定的代码替换此方法.我分析发现,HibernateTransactionManager使用HibernateTransactionObject作为事务对象.但是,不幸的是,这是一个私有内部类,我不能用来获取状态.然后,我尝试使用父类JdbcTransactionObjectSupport.但是,我不知道如何从该父类对象获取状态.
private void checkTransactionStatus(TransactionStatus status){
if(status instanceof DefaultTransactionStatus) {
DefaultTransactionStatus transactionStatus = (DefaultTransactionStatus) status;
if(transactionStatus.getTransaction() instanceof JdbcTransactionObjectSupport){
JdbcTransactionObjectSupport txObject = (JdbcTransactionObjectSupport) transactionStatus.getTransaction();
//how to get the current status ?
}
}
}
解决方法:
Spring具有接收回调的机制.您可以实现TransactionSynchronization接口(或更容易地扩展TransactionSynchronizationAdapter).您可能想要实现afterCompletion(int)方法并将逻辑放在其中.
public class MyTxCallback extends TransactionSynchronizationAdapter {
public void afterCompletion(int status) {
if (status==STATUS_ROLLED_BACK) {
//logic here.
}
}
}
然后,您可以通过在事务启动时调用TransactionSynchronizationManager将其绑定到事务.现在,当事务完成时,将调用该方法,并且您可以执行自己的逻辑(无论使用何种基础事务资源).
内容总结
以上是互联网集市为您收集整理的java-如何从HibernateTransactionManager获取事务状态全部内容,希望文章能够帮你解决java-如何从HibernateTransactionManager获取事务状态所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。