J2EE中的不同数据库之间事务(续)

原创 2004年10月11日 22:03:00

又朋友说我上篇说的太简单了,其实我本人及比较懒,不知不觉就把blog当作记流水账了。
下面详细说一下,平台(windows2000+sqlserver2000+msjdbc+weblogic+eclipse+lomboz),基本配置本文不作介绍,不明白者请google一下即可。
具体步骤:
1:首先去微软网站下在最新的jdbc驱动并且安装,要让它支持分布式事务你需要做以下事情(帮助文件中有)首先copy   msjdbc安装目录下/SQLServer JTA/sqljdbc.dll  到 sqlserver安装目录下/binn目录下面,然后打开查询分析器,装载 msjdbc安装目录下/SQLServer JTA/instjdbc.sql并执行,(可能需要重新启动)
2:在sqlserver中建立2个数据库,分别建立2个表。然后启动weblogic 控制台,建立2个connection pool分别指向前面的2个数据库,这里要注意要选择type 4xa的微软jdbc驱动程序,然后建立2个data source指向connection pool。
3:OK,现在我们就可以写程序了,在eclipse建立一个war类型的lomoz项目,server选择weblogc。
建立a.jsp ,这里说明一下,使用jta,只需要Context  ctx = new InitialContext(htx);   UserTransaction tx = (UserTransaction)  ctx.lookup("javax.transaction.UserTransaction"); 就可以使用tx了,下面就是a.jsp的例子,不过这个例子是同时不向2个数据库插入操作的,如果你想同时向2个数据库插入数据成功,将tx.rollback()修改为tx.commit()即可。

a.jsp代码如下
<%@ page language="java" import="java.sql.*,java.util.*,javax.naming.*,javax.transaction.*"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<%
Context ctx = null; 
Hashtable htx = new Hashtable(); 
UserTransaction tx = null;
htx.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory"); 
htx.put(Context.PROVIDER_URL,"t3://localhost:7001");
Connection conn = null; 
Statement stmt = null; 
javax.sql.DataSource ds = null;

Connection connx = null; 
Statement stmtx = null; 
javax.sql.DataSource dsx = null;
 try{   
        ctx = new InitialContext(htx);   
        tx = (UserTransaction)  ctx.lookup("javax.transaction.UserTransaction"); 
        tx.begin();
       
        ds = (javax.sql.DataSource) ctx.lookup ("WeblogicOneSqlserverPool");   
        conn = ds.getConnection();
        stmt = conn.createStatement();       
        stmt.execute("insert into TUser values('x','x','x')");
       
       
        dsx = (javax.sql.DataSource) ctx.lookup ("WeblogicOneMysqlPool");   
        connx = dsx.getConnection();
        stmtx = connx.createStatement();       
        stmtx.execute("insert into user values('x','x','x')");
       
        tx.rollback();
 } 
 catch (Exception e) {    e.printStackTrace();   }
  finally { 
        try {     if(ctx != null)    ctx.close();     }
        catch (Exception e) {e.printStackTrace();}  
        try {     if (stmt != null) stmt.close();   }
        catch (Exception e) {       e.printStackTrace(); } 
        try {     if (conn != null) conn.close();   }
        catch (Exception e) {       e.printStackTrace(); }
        try {     if (stmtx != null) stmtx.close();   }
        catch (Exception e) {       e.printStackTrace(); } 
        try {     if (connx != null) connx.close();   }
        catch (Exception e) {       e.printStackTrace(); }
 }
%>
</body>
</html>
这只是测试,所以就简单的写在jsp页面中了,你可以根据你实际的不同需要来安排具体情况。

J2EE -- 数据库事务处理的实现

JavaBeanJavaBean是用Java语言编写的与平台无关的组件。它是描述Java的软件组件模型,有点类似于Microsoft的COM组件的概念。在 Java模型中,通过JavaBean可以无限...
  • always_my_fault
  • always_my_fault
  • 2007年11月26日 14:15
  • 860

J2EE中的不同数据库之间事务

以前知道有事务这个东西,大概用过一些,没有进行复杂的深入。今天没事,粗略的研究了一下。简单的事务可以用Connection直接来操作,复杂一些的话可以用usertransaction接口来操作。基本用...
  • baitianhai
  • baitianhai
  • 2004年10月03日 21:43
  • 2393

事务与多线程和同步之间的关系

事务为保证一个操作的原子性而设置的,一个事务必定包含多个操作,多个操作再逻辑上要保证完整一致,如果中间只要有一个操作失败,那么事务必须回滚,必须回到整个操作的初始状态 多线程为了提高应用的执行效率而...
  • H12KJGJ
  • H12KJGJ
  • 2017年03月08日 10:18
  • 351

不同数据库之间数据传输

在我们实际应用过程中会经常遇到这个问题,两个不同系统间要进行数据传输。那我现在的这个项目来说吧,我这里的基础数据是来自其他系统,这个时候我们就需要读取其他数据库表中的数据了。遇到这个问题创建dblin...
  • Phoenix_99
  • Phoenix_99
  • 2010年11月07日 10:05
  • 3001

J2EE事务(江南白衣 javaeye)

1.资料 《Java Transaction Design Strategies》  InfoQ minibook,最好的电子文档,Java事务处于懵懂状态的必读。 《Expert On...
  • eaglezhang
  • eaglezhang
  • 2008年06月23日 17:31
  • 4174

分布式系统中数据库的事务如何处理?

1、数据库拆分有垂直和水平两种方式 数据库垂直拆分会带来的影响: a、单机的ACID保证被打破。数据到了多机后,原来单机中通过事务进行处理逻辑会有很大影响,要么放弃原来的单机事务,修改实现,要么引...
  • u011393781
  • u011393781
  • 2016年10月08日 16:14
  • 2649

不同服务器数据库之间的数据操作--复制同步(整理版)

不同服务器数据库之间的数据操作--复制同步(整理版)
  • leamonjxl
  • leamonjxl
  • 2011年03月30日 10:13
  • 12466

不同数据库之间的实时同步

最近一段时间前单位的同事问我有什么方法可以实现不同数据库之间表数据的同步, 起初我 诉他可以用 DATAGURAD ...
  • weixin_36642826
  • weixin_36642826
  • 2016年11月16日 22:17
  • 1204

j2ee中在service层开启事务的思路

分析: 1.jdbc的conn对象提供了setAutoCommit方法可以关闭自动提交,在Dao层增删改查时可以方便的开事务 2.有些业务需求,如平台充值程序,需要先更新一个资金表表示支付资金,然...
  • bart2011
  • bart2011
  • 2012年03月27日 11:27
  • 1515

J2EE—JTA的认识和@Transactional

小编最近学习了SSH网上商城的诸多内容,回头看看,其实里面也用了很多的J2EE的东西,所以借此机会也来分享一下有关于spring事务和JTA事务的一些事情。 一、JTA的定义         ...
  • tr1912
  • tr1912
  • 2017年02月12日 16:37
  • 541
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2EE中的不同数据库之间事务(续)
举报原因:
原因补充:

(最多只允许输入30个字)