如何对几个不同的数据库同时做事务处理

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


...全文
200 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jypapgl 2010-09-19
jta
威武!
回复
sunjigen803 2010-09-19
[Quote=引用 11 楼 bao110908 的回复:]
引用 9 楼 caoyizhi1987 的回复:
那请问 什么容器支持jta呢?websphere 5.1支持么


支持!
[/Quote]
支持
回复
sunjigen803 2010-09-19
[Quote=引用 3 楼 wolfkingty 的回复:]
jta
[/Quote]
可以
回复
[Quote=引用 9 楼 caoyizhi1987 的回复:]
那请问 什么容器支持jta呢?websphere 5.1支持么
[/Quote]

支持!
回复
茫茫大海 2010-09-16
[Quote=引用 3 楼 wolfkingty 的回复:]

jta
[/Quote]
对的!支持!!
回复
caoyizhi1987 2010-09-16
那请问 什么容器支持jta呢?websphere 5.1支持么
回复
帮顶........
回复
分布式事务使用两阶段提交协议,也就是通常所称的“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) 就可以了。
回复
WANGYQ_412 2010-09-16
4楼说法正确!tomcat容器现在不支持!
[Quote=引用 4 楼 bao110908 的回复:]
跨数据库的事务是事务最高级、最复杂的应用,在 JAVA 环境中需要带有 JTA 事务的 J2EE 容器中才能做到,并且那三个数据库必须支持 XA 事务。
[/Quote]
回复
closewbq 2010-09-16
回复
跨数据库的事务是事务最高级、最复杂的应用,在 JAVA 环境中需要带有 JTA 事务的 J2EE 容器中才能做到,并且那三个数据库必须支持 XA 事务。
回复
小霍夫 2010-09-16
jta
回复
zn85600301 2010-09-16
你在SERVICE层加上事物 在调用3个不同数据库的DAO的时候抓异常 有异常抛出就可以回滚了
回复
24K純帥 2010-09-16

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();
}
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-09-16 02:21
社区公告
暂无公告