我是java新手,现在在做个web方面的工程,其中要求两个数据库同步操作,失败时同时回滚。我用的数据库连接池代码是
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="F:\eclipse\workspace\web\WebRoot" path="/web" workDir="work\Catalina\localhost\web">
<Resource auth="Container" name="jdbc/mysql" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/mysql">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>password</name>
<value>1111</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://192.168.0.113:5432/zddb</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>username</name>
<value>postgres</value>
</parameter>
</ResourceParams>
</Context>java文件中的连接连接池的代码是package dao.database.Bean;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;import org.apache.log4j.Logger;
public class DBconnection {
private Connection conn = null;
PreparedStatement ps=null;
ResultSet rs=null;
DataSource ds=null;
private Logger log = Logger.getLogger(DBconnection.class.getName());
public DBconnection() throws Exception
{
try{
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
ds = (javax.sql.DataSource) ctx
.lookup("jdbc/mysql");
conn= ds.getConnection();
log.debug("数据库连接成功");
}
catch(Exception e)
{
log.error("数据库连接失败");
throw e;
}
}
public Connection getConn() {
return conn;
}
public DataSource getDataSource()
{
return ds;
}
public void close() throws Exception
{
this.conn.close();
}}
执行sql的java文件代码是应用DbUtils来执行
public List queryAll(String flag) throws Exception{
List list=new ArrayList();
DBconnection dbc=new DBconnection();
try
{ QueryRunner qr=new QueryRunner(dbc.getDataSource());
String selSql=new String();
selSql=selSql+" SELECT DWBH AS VALUE,";
selSql=selSql+" DWMC AS NAME";
selSql=selSql+" FROM T_DWXX";
if(!"1".equals(flag))
{
selSql=selSql+" WHERE DWBH <> '000'";
}
selSql=selSql+" ORDER BY DWBH";
list=(List)qr.query(selSql, new BeanListHandler(ValueGet.class));
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
dbc.getConn().close();
}
return list;
}
现在要同步两个数据库中的数据应该是应用同一事务一起提交一起回滚,网上都说应用JTA,请高手赐教,请帖出详细的代码,谢谢各位了
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="F:\eclipse\workspace\web\WebRoot" path="/web" workDir="work\Catalina\localhost\web">
<Resource auth="Container" name="jdbc/mysql" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/mysql">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>password</name>
<value>1111</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://192.168.0.113:5432/zddb</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>username</name>
<value>postgres</value>
</parameter>
</ResourceParams>
</Context>java文件中的连接连接池的代码是package dao.database.Bean;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;import org.apache.log4j.Logger;
public class DBconnection {
private Connection conn = null;
PreparedStatement ps=null;
ResultSet rs=null;
DataSource ds=null;
private Logger log = Logger.getLogger(DBconnection.class.getName());
public DBconnection() throws Exception
{
try{
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
ds = (javax.sql.DataSource) ctx
.lookup("jdbc/mysql");
conn= ds.getConnection();
log.debug("数据库连接成功");
}
catch(Exception e)
{
log.error("数据库连接失败");
throw e;
}
}
public Connection getConn() {
return conn;
}
public DataSource getDataSource()
{
return ds;
}
public void close() throws Exception
{
this.conn.close();
}}
执行sql的java文件代码是应用DbUtils来执行
public List queryAll(String flag) throws Exception{
List list=new ArrayList();
DBconnection dbc=new DBconnection();
try
{ QueryRunner qr=new QueryRunner(dbc.getDataSource());
String selSql=new String();
selSql=selSql+" SELECT DWBH AS VALUE,";
selSql=selSql+" DWMC AS NAME";
selSql=selSql+" FROM T_DWXX";
if(!"1".equals(flag))
{
selSql=selSql+" WHERE DWBH <> '000'";
}
selSql=selSql+" ORDER BY DWBH";
list=(List)qr.query(selSql, new BeanListHandler(ValueGet.class));
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
dbc.getConn().close();
}
return list;
}
现在要同步两个数据库中的数据应该是应用同一事务一起提交一起回滚,网上都说应用JTA,请高手赐教,请帖出详细的代码,谢谢各位了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货