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

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


...全文
435 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复 1
[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();
}

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧