Nutz事务模板值得注意的细节
Nutz.Dao事务模板的官方文档: http://code.google.com/p/nutz/wiki/dao_transaction
需要注意的几个细节,文档还没提及: 1. 数据库连接池的AutoCommit属性 对于我见到的大部分连接池和数据库驱动,默认情况下AutoCommit=true,应该是为了性能 这就导致如果用户不自行设置的话,Trans的大部分操作都是不可回滚的.故,如果使用Trans,那么务必设置AutoCommit
2. 多个数据源的事务 大部分情况下,用户都不是使用XA驱动,故,多数据源的事务提交,在最后的提交阶段出错的话,已经执行commit操作的数据源,是不可能回滚的
3. 子线程的事务 考虑下面的代码:
Trans.exec(new Atom(){
public void run() {
dao.insert(pet);
new MySuperPowerThread().start();
dao.count(Pet.class);
}
});
那么MySuperPowerThread的代码并不是在事务模板中执行的,因为这里的事务不会被子线程继承
4. 返回值问题(更新了) 使用Molecule
Molecule<object> mc = new Molecule<object>() {
public void run() {
dao.insert(pet);
setObj(dao.count(Pet.class));
}
};
Trans.exec(mc);
System.out.println(mc.getObj());
blog comments powered by Disqus