java处理事务的方法

1.使用JDBC+RDB处理:

用JDBC的实现的2个方法:

①简单的事务处理

try{

connection.setAutoCommit(false);

//DAO各种操作

connection. commit();

} catch (Exception e) {

connection. rollback();

}

②复杂的事务处理

自己写一个java注解,用动态代理的方法实现编译后跟上面的代码一致,这种方法看着重复性还少一些


http://blog.csdn.net/huilangeliuxin/article/details/43447091  这个是一个大哥的方法


2.使用Spring注解处理:

在service的方法或者类上加上spring的标注:(因为源码中@Target({ElementType.METHOD, ElementType.TYPE})包括方法或类)

@Transactional(rollbackFor = { RuntimeException.class, Exception.class })

service中出现异常就会回滚

注意3种情况:1.出现异常不想让异常之前的回滚,自己就把出现的异常try catch了

2.没异常但状态不对,想回滚,就自己throw一个异常

3.在controller中记得捕捉异常并按要求做个性化处理

我们公司就是这么做的,对于分布式处理事务的情况,都是在自己负责的service中判断别人的完成传来的参数和状态是否正确(数据验证),

然后再做自己的逻辑,也就是没分布式处理事务,但这种方法也可以保证业务的正确性,就是对业务得熟练。


3.分布式处理事务:

看一看 bao110908 大神的答案:


目前只有 J2EE 容器才能支持分布式事务处理(2012.5)
对于数据库来说,那三个是持 XA 事务的。
建议,在 J2EE 容器上绑定 XA 的 DataSource,并且绑定 JTA 事务。在其他各应用中均使用 JNDI 从 J2EE 容器中获取连接,并开启事务。

这是之前给其他网友回复关于分布式事务的一些内容,有兴趣的话可以看一下:

在 JAVA 中要想使用分布式事务处理,需要使用 JTA。但是 JTA 在 J2SE 环境中是没办法测试的,必须在 J2EE 应用服务器中。

J2EE 应用服务器为什么说会有好的、差的,免费的和商业的,其中最为重要的一点就是对于事务的处理能力。像开源的 J2EE 应用服务器在这一点上是没办法跟 WebLogic, WebSphere 这些商业 J2EE 应用服务器相比拟的。
在 J2EE 环境中使用 JTA 事务与 Local 事务的代码是一模一样的,对于开发人员来说这绝对是希望听到的。
Local 事务就是通常所称的 Connection 的事务。
分布式事务一般采用一种称为 2-PC(两阶段提交)的协议进行处理,2-PC 是分布式事务处理协议。
比如说一个事务涉及 Oracle、MySQL 和 MS SQLServer 三个数据库的操作,举个最简单的例子,要在这三个数据库中各插入一条数据,但必须保持在一个事务中,要三个插入全部成功才算成功,如果只成功了一个或者两个,那么所有的操作都进行回滚,而 2-PC 就是用来干这事的。
两阶段提交需要有个中间协调人。在 Java 中只有 JTA 才能支持两阶段提交,而这个中间协调人就是 J2EE 应用服务器。
继续刚才那个事务,两个阶段如下:
一、各数据库在执行完 INSERT 后,J2EE 应用服务器在收到提交指令,这时通知各数据库进行事务提交准备。
数据库在收到响应后,进行准备工作,基本上是一个预提交工作,如果能提交则响应 J2EE 应用服务器是 能成功提交的,如果无法提交则响应 J2EE 应用服务器是无法提交的。

二、J2EE 应用服务器在收集到所有的响应之后进行判断,如果在第一阶段收到的信息都是可提交的,那么就通知所有的数据库进行提交;如果在第一阶段收到的信息有一个是无法提交的,那么就通知所有的数据库进行回滚操作。
通过这些步骤,可以看出分布式事务处理是很耗时的,也是相当麻烦的。因为数据库在第一阶段给事务协调器响应后如果能提交,在第二阶段就必须要保证事务能被提交,这是数据库要做的事情。
这里的 J2EE 应用服务器是 2-PC 的协调者。2-PC 在 JAVA 中不仅可以用于分布式数据库事务,也能应用于 JMS 事务。
要支持分布式事务,那么数据库就必须支持两阶段提交协议,否则是不能支持的。 

以上原理已经很详细了,接着是更详细的图解和例子:

来自 : http://www.cnblogs.com/yeehuqiu/archive/2012/02/15/2353322.html

引言

  JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值