亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? xatest.java

?? 開發(fā)MySql數(shù)據(jù)庫的最新JDBC驅(qū)動(dòng)。
?? JAVA
字號(hào):
/*
 Copyright (C) 2005 MySQL AB

 This program is free software; you can redistribute it and/or modify
 it under the terms of version 2 of the GNU General Public License as 
 published by the Free Software Foundation.

 There are special exceptions to the terms and conditions of the GPL 
 as it is applied to this software. View the full text of the 
 exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
 software distribution.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*/

package testsuite.simple;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.rmi.server.UID;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Savepoint;

import javax.sql.XAConnection;
import javax.transaction.xa.XAException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;

import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlXid;

import testsuite.BaseTestCase;

/**
 * Unit tests for our XA implementation.
 * 
 * @version $Id: $
 */
public class XATest extends BaseTestCase {
    MysqlXADataSource xaDs;
    
	public XATest(String name) {
		super(name);
		
		this.xaDs = new MysqlXADataSource();
		this.xaDs.setUrl(BaseTestCase.dbUrl);
		this.xaDs.setRollbackOnPooledClose(true);
	}

	/**
	 * Tests that simple distributed transaction processing works as expected.
	 * 
	 * @throws Exception
	 *             if the test fails.
	 */
	public void testCoordination() throws Exception {
		if (!versionMeetsMinimum(5, 0)) {
			return;
		}
		
		createTable("testCoordination", "(field1 int) ENGINE=InnoDB");
		
		Connection conn1 = null;
		Connection conn2 = null;
		XAConnection xaConn1 = null;
		XAConnection xaConn2 = null;
		
		try {
			xaConn1 = getXAConnection();
			XAResource xaRes1 = xaConn1.getXAResource();
			conn1 = xaConn1.getConnection();
			
			xaConn2 = getXAConnection();
			XAResource xaRes2 = xaConn2.getXAResource();
			conn2 = xaConn2.getConnection();
			
			Xid xid1 = createXid();
			Xid xid2 = createXid(xid1);
			
			xaRes1.start(xid1, XAResource.TMNOFLAGS);
			xaRes2.start(xid2, XAResource.TMNOFLAGS);
			conn1.createStatement().executeUpdate("INSERT INTO testCoordination VALUES (1)");
			conn2.createStatement().executeUpdate("INSERT INTO testCoordination VALUES (2)");
			xaRes1.end(xid1, XAResource.TMSUCCESS);
			xaRes2.end(xid2, XAResource.TMSUCCESS);
			
			xaRes1.prepare(xid1);
			xaRes2.prepare(xid2);
			
			xaRes1.commit(xid1, false);
			xaRes2.commit(xid2, false);
			
			this.rs = this.stmt.executeQuery("SELECT field1 FROM testCoordination ORDER BY field1");
			
			assertTrue(this.rs.next());
			assertEquals(1, this.rs.getInt(1));
			
			assertTrue(this.rs.next());
			assertEquals(2, this.rs.getInt(1));
			
			this.stmt.executeUpdate("TRUNCATE TABLE testCoordination");
			
			//
			// Now test rollback
			//
			
			xid1 = createXid();
			xid2 = createXid(xid1);
			
			xaRes1.start(xid1, XAResource.TMNOFLAGS);
			xaRes2.start(xid2, XAResource.TMNOFLAGS);
			conn1.createStatement().executeUpdate("INSERT INTO testCoordination VALUES (1)");
			
			// ensure visibility
			assertEquals("1", getSingleIndexedValueWithQuery(conn1, 1, "SELECT field1 FROM testCoordination WHERE field1=1").toString());
			
			conn2.createStatement().executeUpdate("INSERT INTO testCoordination VALUES (2)");
			
			// ensure visibility
			assertEquals("2", getSingleIndexedValueWithQuery(conn2, 1, "SELECT field1 FROM testCoordination WHERE field1=2").toString());
			
			xaRes1.end(xid1, XAResource.TMSUCCESS);
			xaRes2.end(xid2, XAResource.TMSUCCESS);
			
			xaRes1.prepare(xid1);
			xaRes2.prepare(xid2);
			
			xaRes1.rollback(xid1);
			xaRes2.rollback(xid2);
			
			this.rs = this.stmt.executeQuery("SELECT field1 FROM testCoordination ORDER BY field1");
			
			assertTrue(!this.rs.next());
		} finally {
			if (conn1 != null) {
				conn1.close();
			}
			
			if (conn2 != null) {
				conn2.close();
			}
			
			if (xaConn1 != null) {
				xaConn1.close();
			}
			
			if (xaConn2 != null) {
				xaConn2.close();
			}
		}
	}
	
	protected XAConnection getXAConnection() throws Exception {
		return this.xaDs.getXAConnection();
	}
	
	/**
	 * Tests that XA RECOVER works as expected.
	 * 
	 * @throws Exception
	 *             if test fails
	 */
	public void testRecover() throws Exception {
		if (!versionMeetsMinimum(5, 0)) {
			return;
		}

		XAConnection xaConn = null, recoverConn = null;
		
		try {			
			xaConn = getXAConnection();
			
			Connection c = xaConn.getConnection();
			Xid xid = createXid();
			
			XAResource xaRes = xaConn.getXAResource();
			xaRes.start(xid, XAResource.TMNOFLAGS);
			c.createStatement().executeQuery("SELECT 1");
			xaRes.end(xid, XAResource.TMSUCCESS);
			xaRes.prepare(xid);
			
			// Now try and recover
			recoverConn = getXAConnection();
			
			XAResource recoverRes = recoverConn.getXAResource();
			
			Xid[] recoveredXids = recoverRes.recover(XAResource.TMSTARTRSCAN | XAResource.TMENDRSCAN);
			
			assertTrue(recoveredXids != null);
			assertTrue(recoveredXids.length > 0);
			
			boolean xidFound = false;
			
			for (int i = 0; i < recoveredXids.length; i++) {
				if (recoveredXids[i] != null &&
					recoveredXids[i].equals(xid)) {
					xidFound = true;
					
					break;
				}
			}
			
			assertTrue(xidFound);

			recoverRes = recoverConn.getXAResource();

			recoveredXids = recoverRes.recover(XAResource.TMSTARTRSCAN);

			assertTrue(recoveredXids != null);
			assertTrue(recoveredXids.length > 0);

			xidFound = false;

			for (int i = 0; i < recoveredXids.length; i++) {
				if (recoveredXids[i] != null &&
						recoveredXids[i].equals(xid)) {
					xidFound = true;

					break;
				}
			}

			assertTrue(xidFound);
				
			// Test flags
			recoverRes.recover(XAResource.TMSTARTRSCAN);
			recoverRes.recover(XAResource.TMENDRSCAN);
			recoverRes.recover(XAResource.TMSTARTRSCAN | XAResource.TMENDRSCAN);
			
			// This should fail
			try {
				recoverRes.recover(XAResource.TMSUCCESS);
				fail("XAException should have been thrown");
			} catch (XAException xaEx) {
				assertEquals(XAException.XAER_INVAL, xaEx.errorCode);
			}
		} finally {
			if (xaConn != null) {
				xaConn.close();
			}
			
			if (recoverConn != null) {
				recoverConn.close();
			}
		}
	}

	/**
	 * Tests operation of local transactions on XAConnections when global
	 * transactions are in or not in progress (follows from BUG#17401).
	 * 
	 * @throws Exception
	 *             if the testcase fails
	 */
	public void testLocalTransaction() throws Exception {

		if (!versionMeetsMinimum(5, 0) || isRunningOnJdk131()) {
			return;
		}

		createTable("testLocalTransaction", "(field1 int) ENGINE=InnoDB");

		Connection conn1 = null;

		XAConnection xaConn1 = null;

		try {
			xaConn1 = getXAConnection();
			XAResource xaRes1 = xaConn1.getXAResource();
			conn1 = xaConn1.getConnection();
			assertEquals(false, conn1.getAutoCommit());
			conn1.setAutoCommit(true);
			conn1.createStatement().executeUpdate(
					"INSERT INTO testLocalTransaction VALUES (1)");
			assertEquals("1", getSingleIndexedValueWithQuery(conn1, 1,
					"SELECT field1 FROM testLocalTransaction").toString());

			conn1.createStatement().executeUpdate(
					"TRUNCATE TABLE testLocalTransaction");
			conn1.setAutoCommit(false);
			conn1.createStatement().executeUpdate(
					"INSERT INTO testLocalTransaction VALUES (2)");
			assertEquals("2", getSingleIndexedValueWithQuery(conn1, 1,
					"SELECT field1 FROM testLocalTransaction").toString());
			conn1.rollback();
			assertEquals(0, getRowCount("testLocalTransaction"));

			conn1.createStatement().executeUpdate(
					"INSERT INTO testLocalTransaction VALUES (3)");
			assertEquals("3", getSingleIndexedValueWithQuery(conn1, 1,
					"SELECT field1 FROM testLocalTransaction").toString());
			conn1.commit();
			assertEquals("3", getSingleIndexedValueWithQuery(conn1, 1,
					"SELECT field1 FROM testLocalTransaction").toString());
			conn1.commit();
			
			Savepoint sp = conn1.setSavepoint();
			conn1.rollback(sp);
			sp = conn1.setSavepoint("abcd");
			conn1.rollback(sp);
			Savepoint spSaved = sp;
			
			Xid xid = createXid();
			xaRes1.start(xid, XAResource.TMNOFLAGS);

			try {
				try {
					conn1.setAutoCommit(true);
				} catch (SQLException sqlEx) {
					// we expect an exception here
					assertEquals("2D000", sqlEx.getSQLState());
				}

				try {
					conn1.commit();
				} catch (SQLException sqlEx) {
					// we expect an exception here
					assertEquals("2D000", sqlEx.getSQLState());
				}

				try {
					conn1.rollback();
				} catch (SQLException sqlEx) {
					// we expect an exception here
					assertEquals("2D000", sqlEx.getSQLState());
				}
				
				try {
					sp = conn1.setSavepoint();
				} catch (SQLException sqlEx) {
					// we expect an exception here
					assertEquals("2D000", sqlEx.getSQLState());
				}
			
				try {
					conn1.rollback(spSaved);
				} catch (SQLException sqlEx) {
					// we expect an exception here
					assertEquals("2D000", sqlEx.getSQLState());
				}
				
				try {
					sp = conn1.setSavepoint("abcd");
				} catch (SQLException sqlEx) {
					// we expect an exception here
					assertEquals("2D000", sqlEx.getSQLState());
				}
				
				try {
					conn1.rollback(spSaved);
				} catch (SQLException sqlEx) {
					// we expect an exception here
					assertEquals("2D000", sqlEx.getSQLState());
				}
			} finally {
				xaRes1.forget(xid);
			}
		} finally {
			if (xaConn1 != null) {
				xaConn1.close();
			}
		}
	}
	
	public void testSuspendableTx() throws Exception {
		if (!versionMeetsMinimum(5, 0) || isRunningOnJdk131()) {
			return;
		}
		
		Connection conn1 = null;

		MysqlXADataSource suspXaDs = new MysqlXADataSource();
		suspXaDs.setUrl(BaseTestCase.dbUrl);
		suspXaDs.setPinGlobalTxToPhysicalConnection(true);
		suspXaDs.setRollbackOnPooledClose(true);
		
		XAConnection xaConn1 = null;
		
		Xid xid = createXid();
		
		try {
			/*
			  	-- works using RESUME
				xa start 0x123,0x456;
				select * from foo;
				xa end 0x123,0x456;
				xa start 0x123,0x456 resume;
				select * from foo;
				xa end 0x123,0x456;
				xa commit 0x123,0x456 one phase;
			 */
			
			xaConn1 = suspXaDs.getXAConnection();
			XAResource xaRes1 = xaConn1.getXAResource();
			conn1 = xaConn1.getConnection();
			xaRes1.start(xid, XAResource.TMNOFLAGS);
			conn1.createStatement().executeQuery("SELECT 1");
			xaRes1.end(xid, XAResource.TMSUCCESS);
			xaRes1.start(xid, XAResource.TMRESUME);
			conn1.createStatement().executeQuery("SELECT 1");
			xaRes1.end(xid, XAResource.TMSUCCESS);
			xaRes1.commit(xid, true);
			
			xaConn1.close();
			
			/*

				-- fails using JOIN
				xa start 0x123,0x456;
				select * from foo;
				xa end 0x123,0x456;
				xa start 0x123,0x456 join;
				select * from foo;
				xa end 0x123,0x456;
				xa commit 0x123,0x456 one phase;
				*/
		
			xaConn1 = suspXaDs.getXAConnection();
			xaRes1 = xaConn1.getXAResource();
			conn1 = xaConn1.getConnection();
			xaRes1.start(xid, XAResource.TMNOFLAGS);
			conn1.createStatement().executeQuery("SELECT 1");
			xaRes1.end(xid, XAResource.TMSUCCESS);
			xaRes1.start(xid, XAResource.TMJOIN);
			conn1.createStatement().executeQuery("SELECT 1");
			xaRes1.end(xid, XAResource.TMSUCCESS);
			xaRes1.commit(xid, true);
		} finally {
			if (xaConn1 != null) {
				xaConn1.close();
			}
		}
	}

	private Xid createXid() throws IOException {
		ByteArrayOutputStream gtridOut = new ByteArrayOutputStream();
		DataOutputStream dataOut = new DataOutputStream(gtridOut);
		new UID().write(dataOut);
		
		final byte[] gtrid = gtridOut.toByteArray();
		
		ByteArrayOutputStream bqualOut = new ByteArrayOutputStream();
		dataOut = new DataOutputStream(bqualOut);
		
		new UID().write(dataOut);
		
		final byte[] bqual = bqualOut.toByteArray();
		
		Xid xid = new MysqlXid(gtrid, bqual, 3306);
		return xid;
	}

	private Xid createXid(Xid xidToBranch) throws IOException {
		ByteArrayOutputStream bqualOut = new ByteArrayOutputStream();
		DataOutputStream dataOut = new DataOutputStream(bqualOut);
		
		new UID().write(dataOut);
		
		final byte[] bqual = bqualOut.toByteArray();
		
		Xid xid = new MysqlXid(xidToBranch.getGlobalTransactionId(), bqual, 3306);
		
		return xid;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av电影在线| 亚洲少妇30p| 日韩一区二区精品葵司在线| 91麻豆精东视频| 91蜜桃网址入口| 一本一本大道香蕉久在线精品| 成人av网站免费观看| 国产91对白在线观看九色| 国产成人aaa| 成人免费高清在线| 91在线免费看| 精品视频全国免费看| 欧美日韩亚洲丝袜制服| 在线电影欧美成精品| 欧美一区二区在线播放| 日韩亚洲欧美中文三级| 精品国产一区二区在线观看| 精品国产91九色蝌蚪| 国产欧美视频一区二区三区| 中文字幕乱码日本亚洲一区二区| 国产精品久久久久久久久快鸭| 日韩美女精品在线| 亚洲线精品一区二区三区八戒| 亚洲一二三区不卡| 蜜臀久久99精品久久久画质超高清| 日韩av一级片| 国产一区二区三区国产| 成人97人人超碰人人99| 欧美天堂一区二区三区| 欧美放荡的少妇| 精品国产3级a| 亚洲精品国产精华液| 天堂av在线一区| 国产真实乱对白精彩久久| 成人午夜视频福利| 欧美日韩夫妻久久| 亚洲精品一区二区三区四区高清| 中文字幕 久热精品 视频在线| 一区二区三区不卡在线观看| 天堂成人国产精品一区| 国产伦精品一区二区三区免费| 99视频在线精品| 911精品产国品一二三产区| 久久人人爽爽爽人久久久| 亚洲欧美一区二区不卡| 日韩电影免费在线| 成人av在线电影| 日韩一区二区在线免费观看| 国产农村妇女毛片精品久久麻豆| 亚洲国产成人av好男人在线观看| 精品影院一区二区久久久| www.欧美色图| 日韩一区二区三区免费看| 亚洲欧洲另类国产综合| 亚洲1区2区3区4区| 成人性生交大片| 91麻豆精品国产91久久久更新时间| 久久亚洲一级片| 天堂在线一区二区| 91在线观看污| 精品国产乱码久久久久久图片| 一区二区三区国产精品| 国产a视频精品免费观看| 3d动漫精品啪啪1区2区免费| 中文字幕亚洲视频| 国产一区二区三区黄视频| 欧美人伦禁忌dvd放荡欲情| 国产精品久久久久四虎| 狠狠狠色丁香婷婷综合激情| 欧美亚洲另类激情小说| 国产精品欧美极品| 久热成人在线视频| 欧美人妖巨大在线| 一区二区三区加勒比av| 成人免费高清视频| 久久色.com| 精品一区二区三区欧美| 欧美日韩日日摸| 亚洲精品免费电影| 成人精品视频一区二区三区尤物| 精品少妇一区二区三区日产乱码| 亚洲高清久久久| 色拍拍在线精品视频8848| 欧美国产国产综合| 国产99久久久久久免费看农村| 日韩一区二区视频| 日韩精品视频网| 欧美日韩亚洲综合在线| 一卡二卡欧美日韩| 91蜜桃网址入口| 亚洲欧美日韩综合aⅴ视频| 风间由美中文字幕在线看视频国产欧美 | 美脚の诱脚舐め脚责91| 欧美三级蜜桃2在线观看| 一区二区三区四区精品在线视频| 成人黄色777网| 国产精品福利av| 99久久er热在这里只有精品66| 国产日韩欧美麻豆| 国产成人免费网站| 国产日韩欧美综合在线| 国产精品99久久久久久有的能看 | 久久久av毛片精品| 精彩视频一区二区三区| 欧美mv日韩mv国产网站app| 美女国产一区二区三区| 日韩一区二区三区免费看| 蜜臀av一区二区在线免费观看| 欧美一区二区视频在线观看| 日韩av一级片| 精品免费日韩av| 成人在线视频一区二区| 综合激情成人伊人| 欧美羞羞免费网站| 午夜影院在线观看欧美| 7777精品伊人久久久大香线蕉经典版下载 | 3d动漫精品啪啪| 日本伊人午夜精品| 日韩精品最新网址| 国产在线不卡视频| 国产精品久久久久毛片软件| 成人av资源网站| 亚洲综合男人的天堂| 欧美人动与zoxxxx乱| 久国产精品韩国三级视频| www精品美女久久久tv| 成人免费黄色在线| 亚洲一区二区3| 日韩精品一区二区三区视频在线观看| 久久不见久久见免费视频1| 久久日韩精品一区二区五区| 床上的激情91.| 亚洲黄色小说网站| 日韩一区二区免费高清| 国产激情一区二区三区| 亚洲欧美一区二区三区久本道91 | 久久久亚洲精品一区二区三区| 国产91露脸合集magnet| 一区二区三区 在线观看视频| 欧美男生操女生| 国产高清精品在线| 亚洲综合小说图片| 欧美成人精品福利| av在线播放一区二区三区| 亚洲国产综合在线| 久久久91精品国产一区二区三区| 91麻豆产精品久久久久久| 欧美a级一区二区| 国产精品久久久久久户外露出| 欧美日韩一区二区三区视频| 国产乱码一区二区三区| 亚洲精品美腿丝袜| 精品国内片67194| 在线中文字幕不卡| 国产高清在线观看免费不卡| 亚洲主播在线观看| 久久―日本道色综合久久| 欧美性受xxxx黑人xyx性爽| 国内精品自线一区二区三区视频| 一区二区久久久久| 久久免费看少妇高潮| 欧美日韩日日摸| 成人av网站免费| 久久se精品一区二区| 亚洲最快最全在线视频| 久久亚洲精品国产精品紫薇| 日本精品一区二区三区四区的功能| 免费在线欧美视频| 夜夜嗨av一区二区三区中文字幕| 久久先锋资源网| 日韩一区二区在线看片| 在线免费精品视频| 国产电影精品久久禁18| 日本在线不卡视频| 一区二区欧美视频| 中文字幕中文在线不卡住| 亚洲精品一区二区三区精华液| 欧美色男人天堂| 色婷婷综合久久久久中文 | 精品国产污污免费网站入口 | 国产在线不卡一卡二卡三卡四卡| 亚洲午夜视频在线观看| 国产精品久久久久久久第一福利| 久久综合久久综合久久综合| 在线成人免费视频| 欧美色图在线观看| 色网站国产精品| 91香蕉视频污| 国产.精品.日韩.另类.中文.在线.播放| 三级亚洲高清视频| 亚洲a一区二区| 亚洲成人自拍偷拍| 亚洲国产日韩av| 一区二区三区在线播| 国产精品国产馆在线真实露脸| 日本一区二区三区在线不卡| 久久影院午夜论| 欧美不卡123| 日韩欧美国产一区在线观看| 欧美一区二区三区男人的天堂|