日期:2014-05-20  浏览次数:20706 次

java 事务处理
如何将两个类里面的sql整合到一个事务里面?如:
UserAction ----> UserService(这个里面有个sql操作)
TeacherAction----> TeacherService(这个里面有个sql操作)
具体的流程为

UserAction ----> UserService---->UserAction ---->TeacherAction----> TeacherService---->TeacherAction----->JSP
请问下我如何将上面两个service里面的sql操作归属到一个事务里面。即UserService操作成功TeacherService必须操作成功反之就不能成功

------解决方案--------------------
前提是操作的一个数据库:
分三层(Dao,Service,Action) 
Dao 操作数据库
Servcic 封装业务逻辑

------解决方案--------------------
UserAction ----> UserService(调用TeacherService方法)---->UserAction ----->JSP
比如:
UserImpService{
private TeacherService teacherService;
public void test(){
xxxDao.xxx();
teacherService.xxx();
}

}
------解决方案--------------------
既然2个service里面的sql是同一个事务的,那就应该写在一个service里面,作为一个服务,
把2个service里面的调dao的东西写一起,就可以用事务管理了
------解决方案--------------------
菜鸟帮楼主顶一下,大致看懂了问题。
业务流程里面 2个service中的事务独立。

要是把2个事务放在一起,2个sql就要合并到一起,那业务流程 是不是 也要改变了?
------解决方案--------------------
举个简单的例子,仅做参考:

public void test(){
String sql1 = "INSERT INTO CS_USERS(T_USERNAME,T_PASSWORD) VALUES ('USERNAME3','PASSWORD3')";
String sql2 = "INSERT INTO CS_USERS(T_USERNAME,T_PASSWORD) VALUES ('USERNAME4','PASSWORD4')";
try {
con.setAutoCommit(false); 
stat = con.createStatement();
//实现业务逻辑
stat.execute(sql1);
//实现业务逻辑
// int i = 1/0;
stat.execute(sql2);
//实现业务逻辑
// int i = 1/0;
con.commit();
} catch (Exception e) {
try {
con.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
}

------解决方案--------------------
用一个总service调用!!应该是这样
------解决方案--------------------
看一下事务的传播。。。

http://yeyhan.blog.163.com/blog/static/441793332010216112439468/
------解决方案--------------------
可以使用Spring,在配置文件里面配一个事务管理器,把 UserService, TeacherService
添加到事物里面 即可