什么是事务???
事务是一种机制,把成组的操作进行处理
在事务处理中,要么所有的操作都执行要么都不执行
在事务中涉及的操作可能依赖与很多不同的数据库和服务器
事务处理的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);
}
阅读(761) | 评论(0) | 转发(0) |