newxy新坐标的事务管理
newxy新坐标
技术运用之六
作者:胡立新
一、简介
newxy(新坐标)可以同时对多个数据库进行事务管理, newxy(新坐标)的事务由类 net.newxy.dbm.Transaction来完成。
newxy(新坐标)目前只支持本地事务(在未来版本中,如果数据库连接有JTA的支持,那么在 newxy(新坐标)事务中进行的操作将是整个原子性JTA事务的一部分)。
一个Transaction实例除有一个主线程外,还有一个专门负责 超时回滚任务的线程。主线程负责对一批需要一次性完成的单元进行操作。如果在设定或默认的时间内主线程一批操作尚未完成,负责超时回滚任务的线程会干预,回滚事务。
newxy(新坐标)的事务管理很方便,只需在调用 IFacade接口方法前调用事务方法call( IFacade ifacade), 或方法call( IFacade ifacade,int transactionIsolation),如 tran.call(ifacade).update(dto)。
一个Transaction实例除有一个主线程外,还有一个专门负责 超时回滚任务的线程。主线程负责对一批需要一次性完成的单元进行操作。如果在设定或默认的时间内主线程一批操作尚未完成,负责超时回滚任务的线程会干预,回滚事务。
newxy(新坐标)的事务管理很方便,只需在调用 IFacade接口方法前调用事务方法call( IFacade ifacade), 或方法call( IFacade ifacade,int transactionIsolation),如 tran.call(ifacade).update(dto)。
二、运用举例:
设有数据库有两表:
/*客户表 */
create table customers (
id int primary key,
name VARCHAR(255)
)
/*订单表 */
create table orders (
id int primary key,
customer_id int,
date datetime
)
运用一
//新建一名叫“张五”的客户,新建 一与此用户关联的定单,订单表字段customer_id是“张五”客户的id号,
//id号由系统自动生成。
package common;
import net.newxy.dbm.*;
import org.apache.commons.beanutils.DynaBean;
public class Test{
public static void main(String[] args) {
TestSqlServerDao
dao1=new TestSqlServerDao();
DynaDto customerDto=new DynaDto();
customerDto.set_table("customers");
customerDto.set("name","张五 ");
DynaDto ordersDto=new DynaDto();
ordersDto.set_table("orders");
ordersDto.set("date",net.newxy.util.DateTools.todayInTs());
Transaction tran=new Transaction();
try{
tran.begin();
Object result1=tran.
call
(
dao1).update(customerDto);
if(result1!=null){
// result不等于空,表明是插入操作,且 result中包含了自动生成的主关键字值。
ordersDto.set("customer_id",((DynaBean)result1).get("id"));
}else{