我在做一个项目时,需要对数据库数据进行同步,初拟是三个数据库,数据库类型不同,如何才能在对三个数据库同时做操作时进行事物处理 
 
 

解决方案 »

  1.   


    static void Main(string[] args)
            {            SqlConnection sqlConn = new SqlConnection(
                    ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
                SqlTransaction sqlTrans = null;
                try
                {
                    sqlConn.Open();
                    sqlTrans = sqlConn.BeginTransaction();//事务开始
                    SqlCommand sqlComm = new SqlCommand("", sqlConn, sqlTrans);
                    sqlComm.CommandTimeout = 120;
                    sqlComm.CommandType = System.Data.CommandType.Text;                string insertSql = "insert into dbo.TransTestTable values (66,'66');";
                    string updateSql = "update dbo.TransTestTable set [Name] = '77' where [Id] = 66;";                sqlComm.CommandText = insertSql;
                    sqlComm.ExecuteNonQuery();//执行insert                sqlComm.CommandText = updateSql;
                    sqlComm.ExecuteNonQuery();//执行update
                    //throw new Exception("test exception.the transaction must rollback");                sqlTrans.Commit();//事务提交
                }
                catch (Exception ex)
                {
                    sqlTrans.Rollback();//事务回滚
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    if (sqlConn.State != System.Data.ConnectionState.Closed)
                        sqlConn.Close();
                }            Console.ReadLine();
            }
      

  2.   

    你在SERVICE层加上事物 在调用3个不同数据库的DAO的时候抓异常 有异常抛出就可以回滚了
      

  3.   

    跨数据库的事务是事务最高级、最复杂的应用,在 JAVA 环境中需要带有 JTA 事务的 J2EE 容器中才能做到,并且那三个数据库必须支持 XA 事务。
      

  4.   

    4楼说法正确!tomcat容器现在不支持!
      

  5.   

    分布式事务使用两阶段提交协议,也就是通常所称的“2-PC”具体的可以看看这个帖子:http://topic.csdn.net/u/20100521/11/04b05a96-30e5-4356-9675-72111bfb9df3.html我只能跟你说在 J2EE 容器中如何用 JTA 来处理分布式事务了。1:在 J2EE 的 JNDI 上创建那三个数据库的 javax.sql.DataSource手工处理事务的话:
    2:从 J2EE 的 JNDI 上获得 javax.transaction.UserTransaction 对象
    3:操作数据库,使用 UserTransaction 对象进行事务处理让容器自动管理的话:
    2:在 Session Bean 的相关方法上标注 @TransactionAttribute(TransactionAttributeType.REQUIRED) 就可以了。
      

  6.   

    那请问 什么容器支持jta呢?websphere 5.1支持么