spring里的事务处理怎么理解
展开全部
你听说过 EJB 2.0 里面的 EJB 是如何处理事务的么?如果你下载个 EJB 2.0 规范的 PDF 看一下几种 transaction attribute 设定下事务的最终结果是什么样的,更重要的是 RemoteException 和 RuntimeException 为什么叫系统异常,系统异常导致 EJB 服务器自动回滚事务,而应用程序异常都表示应用程序自己来决定是否回滚异常(通过 mySessionContext.setRollbackOnly() 来回滚事务)。
EJB 的事务是在服务器内部实现是根据你的transaction attribute 的设定是否要给当前线程绑定一个 transaction (通过 ThreadLocal.set($transaction)),如果碰到 requiresNew 则把原来 ThreadLocal.get() 得到的压入堆栈,重新 TheadLocal.set 另一个。而在EJB调用过程中的事务则是通过 ThreadLocal.get() 得到当前的事务。这些服务器内部的做法我们不需要知道,只需要知道事务是通过与线程绑定在一起的,根据 transaction attribute 来决定当前绑定的是哪个事务,与调用者的事务是共用一个还是新开另一个。
知道事务的线程绑定和 EJB 中异常的分类就明白 EJB 是如何管理事务的。而 Spring 的事务管理其实也是类似的,它也是使用类似的将事务绑定在当前调用的线程,然后也根据你声明的什么 exception 需要回滚事务来决定的事务的提交还是回滚。
EJB 的事务是在服务器内部实现是根据你的transaction attribute 的设定是否要给当前线程绑定一个 transaction (通过 ThreadLocal.set($transaction)),如果碰到 requiresNew 则把原来 ThreadLocal.get() 得到的压入堆栈,重新 TheadLocal.set 另一个。而在EJB调用过程中的事务则是通过 ThreadLocal.get() 得到当前的事务。这些服务器内部的做法我们不需要知道,只需要知道事务是通过与线程绑定在一起的,根据 transaction attribute 来决定当前绑定的是哪个事务,与调用者的事务是共用一个还是新开另一个。
知道事务的线程绑定和 EJB 中异常的分类就明白 EJB 是如何管理事务的。而 Spring 的事务管理其实也是类似的,它也是使用类似的将事务绑定在当前调用的线程,然后也根据你声明的什么 exception 需要回滚事务来决定的事务的提交还是回滚。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询