import static org.junit.Assert.fail; import java.sql.SQLException; import javax.sql.XAConnection; import javax.transaction.xa.XAException; import javax.transaction.xa.Xid; import org.junit.Test; import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource; public class MySQLDUPID { @Test public void test() throws InstantiationException, IllegalAccessException, SQLException, XAException { MysqlXADataSource dataSource = com.mysql.jdbc.jdbc2.optional.MysqlXADataSource.class .newInstance(); dataSource.setDatabaseName("foo"); dataSource.setServerName("localhost"); dataSource.setPortNumber(3306); dataSource.setUser("root"); dataSource.setPassword("password"); XAConnection connection = dataSource.getXAConnection(); XAConnection connection2 = dataSource.getXAConnection(); Xid dupId = new Xid() { @Override public byte[] getBranchQualifier() { return "1".getBytes(); } @Override public int getFormatId() { return 1; } @Override public byte[] getGlobalTransactionId() { return "1".getBytes(); } }; connection.getXAResource().start(dupId, 0); try { connection2.getXAResource().start(dupId, 0); fail(); } catch (XAException e) { if (e.errorCode != XAException.XAER_DUPID) { e.printStackTrace(); fail("Incorrect error code: " + e.errorCode); } } } }