package com.alipay.zdal; import javax.sql.DataSource; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import com.alipay.zdal.datasource.LocalTxDataSourceDO; import com.alipay.zdal.datasource.ZDataSource; /** * oracle transaction test * @author sicong.shou * @version $Id: ZdsTest1.java, v 0.1 2012-11-21 ����04:53:45 sicong.shou Exp $ */ public class ZdsTestOracleTx { protected static DataSource dataSource = null; protected static JdbcTemplate jt = null; static DataSourceTransactionManager tm = null; static TransactionTemplate tt = null; @BeforeClass public static void setUp() throws Exception { LocalTxDataSourceDO dsDo = new LocalTxDataSourceDO(); dsDo.setDsName("test"); dsDo.setConnectionURL("jdbc:oracle:oci:@perf6.lab.alipay.net:1521:perfdb6"); dsDo.setUserName("Acm"); dsDo.setPassWord("ali88"); dsDo.setDriverClass("oracle.jdbc.OracleDriver"); dsDo.setMinPoolSize(0); dsDo.setMaxPoolSize(5); dsDo .setExceptionSorterClassName("com.alipay.zdal.datasource.resource.adapter.jdbc.vendor.OracleExceptionSorter"); dsDo.setPreparedStatementCacheSize(0); dataSource = new ZDataSource(dsDo); jt = new JdbcTemplate(dataSource); tm = new DataSourceTransactionManager(dataSource); tt = new TransactionTemplate(tm); jt.execute("insert into testcase (id,name) values (1,'sb')"); } @AfterClass public static void tearDown() { jt.execute("delete from testcase"); } /** * �ɹ������� update */ @Test public void test1() { tt.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { jt.execute("UPDATE testcase SET name = 'diao' WHERE id = 1"); System.err.print(jt.queryForList("select * from testcase where id =1")); return null; } }); } /** * �ɹ������� insert */ @Test public void test4() { tt.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { jt.execute("insert into testcase (id,name) values(3,'ttttttttt')"); return null; } }); System.err.print(jt.queryForList("select * from testcase")); } /** * �ɹ������� delete */ @Test public void test5() { tt.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { jt.execute("delete from testcase"); return null; } }); System.err.print(jt.queryForList("select count(*) from testcase")); } /** * ʧ�ܵ����񣬿��Ƿ�rollback */ @Test public void test2() { System.out.println(jt.update("UPDATE testcase SET name = 'before' WHERE id = 1")); System.out.println(jt.queryForList("select name from testcase where id =1")); try { tt.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { jt.execute("UPDATE zdstest SET name = 'after' WHERE id = 1"); System.err.print(jt.queryForList("select * from sb where id =1"));//�����ڵı� return null; } }); } catch (Exception e) { } Assert.assertTrue("[{name=before}]".equalsIgnoreCase(jt.queryForList( "select name from testcase where id =1").toString())); } }