日期:2014-05-16 浏览次数:20601 次
测试环境:mysql-5.5.14,Oracle 10g Express,ow2-jotm-dist-2.1.9,JDK7,Win7
CREATE TABLE TUSER ( id INT, name VARCHAR(10) NOT NULL, PRIMARY KEY (id) )
create table TUSER ( id int primary key, name VARCHAR2(10 CHAR) not null )?系统要求同时保存用户信息到这两个数据库中的用户表中。

package com.tanlan.jta.entity;
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.tanlan.jta.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.tanlan.jta.entity.User;
public class UserDAO {
/**
* 增加用户信息到MySQL数据库中
*
* @param user
* @param connection
* @throws SQLException
*/
public void addUserToMySQL(User user, Connection connection)
throws SQLException {
String sql = "insert into TUser values(?,?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, user.getId());
pstmt.setString(2, user.getName());
pstmt.execute();
}
/**
* 增加用户信息到Oracle数据库中
*
* @param user
* @param connection
* @throws SQLException
*/
public void addUserToOracle(User user, Connection connection)
throws SQLException {
String sql = "insert into TUser values(?,?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, user.getId());
pstmt.setString(2, user.getName());
pstmt.execute();
}
}
?package com.tanlan.jta.dao;
import java.sql.Connection;
import javax.naming.NamingException;
import javax.sql.XAConnection;
import javax.transaction.UserTransaction;
import org.enhydra.jdbc.standard.StandardXADataSource;
import org.objectweb.jotm.Jotm;
import org.objectweb.transaction.jta.TMService;
public class JotmHelper {
private TMService jotm;
private UserTransaction userTransaction;
/**
* 启动事务管理服务
*/
public void startTMService() {
try {
jotm = new Jotm(true, false);
userTransaction = jotm.getUserTransaction();
} catch (NamingException e1) {
e1.printStackTrace();
}
}
/**
* 取得数据库连接
*
* @param db
* @return
* @throws Exception
*/
public Connection getConnection(String db) throws Exception {
StandardXADataSource xads = new StandardXADataSource();
XAConnection xaconn = null;
if ("mysql".equals(db)) {
xads.setDriverName("com.mysql.jdbc.Driver");
xads.setUrl("jdbc:mysql://localhost/test");
xads.setTransactionManager(jotm.getTransactionManager());
xaconn = xads.getXAConnection("root", "root");
} else if ("oracle".equals(db)) {
xads.setDriverName("oracle.jdbc.driver.OracleDriver");
xads.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
xads.setTransactionManager(jotm.getTransactionManager());
xaconn = xads.getXAConnection("tanlan", "tanlan");
} else {
}
return xaconn.getConnection();
}
public void begin() {
try {
userTransaction.begin();
} catch (Exception e) {
e.printStackTrace();
}
}
public void commit() {
try {
userTransaction.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
public void rollback() {
try {
userTransaction.rollback();
} catch (Exception e) {
e.printStackTrace();
}
}
/