1
、
JTA
是什么?
JTA
,是
Java Transaction API
,
Java
事务处理
API
,完成
Java
应用中的事务处理。
2
、什么是事务?
由若干具体操作组成的不可分割的逻辑单元。经典的例子是转帐,从一个账户向另外一个账户转帐,主要操作两个:从第一个账户扣钱,向第二个账户加钱。这两个操作要么同时成功,要么同时失败。
3
、事务处理是干什么的?
事务处理要保证事务所涉及的所有操作要么都成功,要么都不执行。例如对于上面的转账来说,如果两个操作都成功,事务就正常结束。如果第一个操作失败,第二个操作就不执行了。如果第一个成功,第二个失败,应该撤销第一个操作(回滚)。
4
、使用
JDBC
进行事务处理
默认情况下,数据库的操作是自动提交。执行一句,结果就会影响到数据库。如果后面执行出错,不会影响前面的内容。
为了进行事务处理,需要把自动提交方式修改为手动提交。通过下面的代码:
con.setAutoCommit(false);
执行完之后需要手动提交,使用下面的代码;
con.commit();
执行出错的时候要回滚已经执行的操作,代码:
con.rollback();
以订单添加为例。
try{
con.setAutoCommit(false); //
取消自动提交
//
生成订单
stmt.executeUpdate(sql); //
插入订单基本信息
for(…){
stmt.executeUpdate(sql2); //
插入订单明细
}
con.commit(); //
提交
}catch(Exception e){
con.rollback(); //
回滚操作
}finally{
…
}
5
、使用
JTA
进行事务处理
应用服务器通常会提供事务处理服务,用户可以通过
JTA
来使用应用服务器提供的事务处理服务。事务处理服务对象绑定在
JNDI
树上。
使用过程:
l
连接到
JNDI
树,从
JNDI
树上查找事务处理对象;
l
开始事务;
l
执行事务相关的操作;
l
提交事务;
l
回滚事务(异常的时候)。
以订单生成为例。
UserTransaction utx; //
事务处理对象
try{
//
连接到
JNDI
树
Context ctx = new InitialContext(p);
//
查找事务处理对象
utx = (UserTransaction)ctx.lookup(“javax.transaction.UserTransaction”);
//
开始事务
utx.begin();
//
执行与事务相关的操作
…
//
提交事务
utx.commit();
}catch(Exception e){
//
产生异常的时候,回滚已经执行的操作
utx.rollback();
}finally{
}
6
、声明式事务处理和编程方式的事务处理
上面介绍的是编程方式的事务处理,在代码中自己来控制事务的开始、提交、回滚。
声明方式的事务处理需要通过配置文件或者注释方式告诉容器(应用服务器)需要什么样的事务处理,通过容器控制事务的开始、提交和回滚。在
EJB
部分介绍。
7
、服务器是如何实现事务处理的?
服务器的事务处理过程使用各种被管理资源本身提供的事务处理。具有集成的作用。