Context ctx = getContext();
UserTransaction tx = getUserTransaction();
tx.begin();
ds = (DataSource) ctx.lookup("XAMySqlDS");
conn = ds.getConnection();
//conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.executeUpdate(sqlStr1);
stmt.executeUpdate(sqlStr2);
// if(true){
// tx.rollback();
// System.out.println("rollback");
// }
//tx.commit();这里不管是否调用commit都会执行上面的数据库语句
这是分布式数据源配置
<xa-datasource>
<jndi-name>XAMySqlDS</jndi-name>
<track-connection-by-tx>true</track-connection-by-tx>
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
<new-connection-sql>set autocommit=1</new-connection-sql>
<no-tx-separate-pools>true</no-tx-separate-pools>
<xa-datasource-property name="Url">jdbc:mysql://localhost:3306/register?autoReconnect=true</xa-datasource-property>
<xa-datasource-property name="User">root</xa-datasource-property>
<xa-datasource-property name="Password">root</xa-datasource-property>
<use-java-context>false</use-java-context>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
<type-mapping>mySQL</type-mapping>
<min-pool-size>5</min-pool-size>
<max-pool-size>100</max-pool-size>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
</xa-datasource>
开始事务不应该在得到数据库连接后面么?