Chinaunix首页 | 论坛 | 博客
  • 博客访问: 704343
  • 博文数量: 147
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 10:36
文章分类

全部博文(147)

文章存档

2011年(1)

2010年(1)

2009年(35)

2008年(110)

我的朋友

分类: Java

2009-03-17 16:59:09

什么是事务???
事务是一种机制,把成组的操作进行处理
在事务处理中,要么所有的操作都执行要么都不执行
在事务中涉及的操作可能依赖与很多不同的数据库和服务器

事务处理的ACID属性
 事务是有一系列首字母缩略词ACID属性定义的
 ACID代表:
   Atomic原子性
   Consistent一致性
   Isolated独立性
   Durable持久性
什么是分布式事务????
  一种资源,如数据库,是由资源管理器的软件控制的
  本地事务是处理单个资源管理器的事务
  分布式事务是协同或横跨多个资源管理器的事务
  多个资源管理器的协作是由事务管理器完成的
  事务通常是指事务上下文
两阶段提交协议
  阶段1请求所有的资源管理器准备实现改变,如果其中任何一个没有准备好,则该事务将异常中断
  阶段2请求所有的资源管理器实际提交并且实现永久的改变
  全局事务ID用于跟踪所有与分布式事务相关的改变
事务和资源管理器:
  一个事务管理器协同几个资源管理器
  两阶段提交协议被用于协同事务
 
Java事务API(JTA)
事务能够横跨:
   EJB JDBC JMS 
.事务能够横跨EJB方法调用和JDBC连接的混合方式:
 Context tc=new InitialContext();
 UserTransaction ut=(UserTransaction)tc.lookup("javax.transaction.UserTransaction");
 MyEJBHome ejbHome=(MyEJBHome)tc.lookup("........");
 MyEJB ejb=ejbHome.create();
 DataSource ds=(DataSource)tc.lookup("....");
 Connection con=ds.getConnection();
 Statement stmt=con.createStatement();
 ut.begin();
 ejb.methodA();
 ....
 ut.commit();
事务中的异常:
  事务中涉及的EJBs可能抛出一下异常:
  Application exceptions(应用异常)-如果EJB将事务标记为回滚,那么客户程序只能回滚,如果没有标记成回滚,那么客户程序可以回滚或者提交
  系统或者非应用异常--事务被标记成回滚,客户程序只能回滚
  在事务中涉及的JMS操作可能抛出JMSException
  在事务中涉及的JDBC操作可能抛出JDBCException
  在这两种情况中,客户程序都可以提交或者回滚
ut.begin();
....//取钱
....//存钱
ut.commit();
}catch(CustomException e){
System.out.println(e);
try{
    ut.rollback();
  }catch(System.Ecxeption e){
   System.out.println(e);
  }
}catch(Exception e){
   System.out.println(e);
}
阅读(716) | 评论(0) | 转发(0) |
0

上一篇:Hibernate模板

下一篇:netBeans6.5中注册JBoss5

给主人留下些什么吧!~~