opensession()和getCurrentSession()方法的区别(JTA(java Transaction Api,分布式事务)事务和Connection事务:数据库自带的事务处理方式)

Session session=sf.getCurrentSession();//当上下文中没有Session时,才打开一个Session,他不需要手动关闭,事务完成后自动关闭。可以界定事务的边界,事务提交后自动close

Session session=sf.openSession();//总是打开一个Session,他需要手动关闭。

上图一个用户注册的过程,用户注册需要有2部分的操作,一部分是将用户注册信息添加到数据库,第二部分是将用户注册后的日志信息写入数据库。这2部分合起来构成一个事务。这3步缺一不可,不能将用户添加到数据库后而没有写日志,也不可以写了日志,而没有添加用户。当这2步中的任何一步出现异常,都要进行回滚操作。这儿借助了上下文的session来界定事务的边界。

 

什么是上下文??在hibernate中用current_session_context_class来指定,上下文方式。

<property name="current_session_context_class">thread</property>

这个属性有4个取值,jta(分布式事务管理) | thread(当前线程) | managed(手工管理事务) | custom.Class(自己定义类来管理上下文),后面2个并不常用。

Connection事务:数据库自带的事务处理方式。

JTAjava Transaction Api,分布式事务)事务:jta事务由中间件提供,tomcat不具备jta事务处理能力,整合spring后才可以。而jboss weblogic具备了jta事务处理能力。

 

这是一个订单处理流程,处理一个订单可能包括2个部分,一是处理订单信息,在db1中,而是处理财务信息,在db2中。这2步也是缺一不可的。然而db1db2是不同的数据库。如:Oracle2个不同数据库,也或者一个是oracle数据库而令一个时Sybase数据库,这2个数据库也位于不同的位置,一个在中国,而另一个在美国。然而订单处理的事务包括了这2部分。当财务处理出现异常时,订单处理也会跟着回滚,反之亦然。那么这个事务用Connection事务处理显然是不行的。这时就用到了jta事务处理,jta事务由中间件提供,tomcat不具备jta事务处理能力,整合spring后才可以。而jboss weblogic具备了jta事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值