package com.frameworkset;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import javax.transaction.RollbackException;
import javax.transaction.Status;
import org.junit.Test;
import com.frameworkset.common.poolman.DBUtil;
import com.frameworkset.common.poolman.SQLExecutor;
import com.frameworkset.common.poolman.monitor.AbandonedTraceExt;
import com.frameworkset.common.poolman.util.SQLManager;
import com.frameworkset.orm.transaction.JDBCTransaction;
import com.frameworkset.orm.transaction.TransactionException;
import com.frameworkset.orm.transaction.TransactionManager;
import com.frameworkset.sqlexecutor.ListBean;
public class TestTransaction {
public static void testLocalThread()
{
ThreadLocal local1 = new ThreadLocal();
ThreadLocal local2 = new ThreadLocal();
Object object1 = new Object();
Object object2 = new Object();
local1.set(object1);
local2.set(object2);
System.out.println(local1.get());
System.out.println(local2.get());
TransactionManager tm = new TransactionManager();
try {
tm.begin(tm.NO_TRANSACTION);
// tm.getTransaction().getConnection(dbName);
DBUtil dbUtil = new DBUtil();
// dbUtil.getConection();
dbUtil.executeDelete("dbname","sql");
dbUtil.executeDelete("dbname1","sql");
throw new Exception("");
}
catch(Exception e)
{
}
finally
{
tm.release();
}
}
@Test
public void testDestroyTX()
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
Connection con = DBUtil.getConection();
con.createStatement();
con.prepareStatement("select 1 from dual");
con = DBUtil.getConection("bspf");
con.prepareStatement("select 1 from dual");
tm.rollback();
List objects = DBUtil.getTraceObjects();
tm.destroyTransaction();
} catch (Exception e) {
}
finally
{
tm.release();
}
}
@Test
public void testNullDestroyTX()
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
// Connection con = DBUtil.getConection();
// con.createStatement();
// con.prepareStatement("select 1 from dual");
// con = DBUtil.getConection("bspf");
// con.prepareStatement("select 1 from dual");
// List objects = DBUtil.getTraceObjects();
tm.destroyTransaction();
} catch (Exception e) {
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
tm.release();
}
}
public static void testTraceObjects()
{
Traces t = new Traces();
t.start();
LeakTraces l = new LeakTraces();
l.start();
l = new LeakTraces();
l.start();
l = new LeakTraces();
l.start();
}
static class Traces extends Thread
{
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
while(true)
{
List<AbandonedTraceExt> objects = DBUtil.getTraceObjects();
printTrace( objects);
try {
synchronized(this)
{
sleep(10);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void printTrace( List objects)
{
if(objects == null)
return;
for(Object obj : objects)
{
AbandonedTraceExt trace = (AbandonedTraceExt)obj;
System.out.println("CreateTime:" + trace.getCreateTime());
System.out.println("Stack:" );
trace.printStackTrace();
List subtraces = trace.getTraces();
printTrace( subtraces);
}
}
}
static class LeakTraces extends Thread
{
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
boolean flag = false;
while(true)
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
Connection con = DBUtil.getConection();
con.createStatement().close();
con.prepareStatement("select 1 from dual").close();
con = DBUtil.getConection("mq");
con.prepareStatement("select 1 from dual").close();
//tm.destroyTransaction();
if(flag)
tm.commit();
else
flag = true;
try {
synchronized(this)
{
sleep(5);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
public void testTX11() throws Exception
{
TransactionManager tm = new TransactionManager();
try {
tm.begin();
//进行一系列db操作
//必须调用commit
tm.commit();
}
catch (Exception e) {
throw e;
}
finally
{
tm.release();
}
}
public void testTX() throws Exception
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
//进行一系列db操作
//注意对于RW_TRANSACTION事务可以不调用commit方法,tm.releasenolog()
//方法会释放事务,调用commit也可以
tm.commit();
}
catch (Exception e) {
throw e;
}
finally
{
tm.releasenolog();
}
}
@Test
public void testNoCompaintRWTX() throws Exception
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
Connection con = DBUtil.getConection();
log("0",tm.getStatus());
System.out.println("con.getAutoCommit():"+con.getAutoCommit());
testInnerStatus();
// tm.begin(tm.NEW_TRANSACTION);
// DBUtil dbUtil = new DBUtil();
// dbUtil.executeDelete("sql");
// innerTest();
// dbUtil.executeDelete("sql");
tm.commit();
// tm.commit();
log("1",tm.getStatus());
} catch (Exception e) {
e.printStackTrace();
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
throw e;
}
}
@Test
public void testRWTX() throws Exception
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
Connection con = DBUtil.getConection();
log("0",tm.getStatus());
System.out.println("testRWTX con.getAutoCommit():"+con.getAutoCommit());
tm.commit();
log("1",tm.getStatus());
} catch (Exception e) {
e.printStackTrace();
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
throw e;
}
}
@Test
public void testRollbackRWTX() throws Exception
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
Connection con = DBUtil.getConection();
log("0",tm.getStatus());
System.out.println("testRWTX con.getAutoCommit():"+con.getAutoCommit());
if(true)
throw new Exception();
tm.commit();
log("1",tm.getStatus());
} catch (Exception e) {
log("2",tm.getStatus());
e.printStackTrace();
try {
tm.rollback();
log("3",tm.getStatus());
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
throw e;
}
}
public void innerRWTX() throws Exception
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
Connection con = DBUtil.getConection();
log("0",tm.getStatus());
System.out.println("innerRWTX con.getAutoCommit():"+con.getAutoCommit());
tm.commit();
log("1",tm.getStatus());
} catch (Exception e) {
log("2",tm.getStatus());
e.printStackTrace();
try {
tm.rollback();
log("3",tm.getStatus());
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
throw e;
}
}
@Test
public void testInnerRWTX() throws Exception
{
TransactionManager tm = new TransactionManager();
try {
tm.begin(TransactionManager.RW_TRANSACTION);
Connection con = DBUtil.getConection();
log("0",tm.getStatus());
System.out.println("testRWTX con.getAutoCommit():"+con.getAutoCommit());
innerRWTX();
tm.commit();
log("1",tm.getStatus());
} catch (Exception e) {
log("2",tm.getStatus());
e.printStackTrace();
try {
tm.rollback();
log("3",tm.getStatus());
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
throw e;
}
}
/**
*
* @param beans
* @return
*/
public void stringarraytoList(List<ListBean> beans) {
String sql = "INSERT INTO LISTBEAN (ID,FIELDNAME,FIELDLABLE,FIELDTYPE,SORTORDER,"
+ " ISPRIMARYKEY,REQUIRED,FIELDLENGTH,ISVALIDATED)VALUES(#[id],#[fieldName],#[fieldLable],#[fieldType],#[sortorder]"
+ ",#[isprimaryKey],#[required],#[fieldLength],#[isvalidated])";
TransactionManager tm = new TransactionManager();
try {
tm.begin();
SQLExecutor.delete("delete from LISTBEAN");
SQLExecutor.insertBeans(sql, beans);
innertxoperation();
tm.commit();
} catch (Exception e) {
try {
tm.rollback();
} catch (RollbackException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
public void innertxoperation() {
TransactionManager tm = new TransactionManager();
try {
tm.begin();
String id = SQLExecutor.queryField("select id from LISTBEAN where filename=?","dupduo");
SQLExecutor.delete("delete from LISTBEAN where id=?", id);
tm.commit();
} catch (Exception e) {
try {
tm.rollback();
} catch (RollbackException e1) {
e1.printStackTrace();
}
}
}
public static void testStatus()
{
TransactionManager tm = new TransactionManager();
try {
tm.begin();
DBUtil.getConection();
log("0",tm.getStatus());
testInnerStatus();
// tm.begin(tm.NEW_TRANSACTION);
// DBUtil dbUtil = new DBUtil();
// dbUtil.executeDelete("sql");
// innerTest();
// dbUtil.executeDelete("sql");
tm.commit();
// tm.commit();
log("1",tm.getStatus());
} catch (Exception e) {
e.printStackTrace();
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testInnerStatus()
{
TransactionManager tm = new TransactionManager();
try {
tm.begin();
log("inner",tm.getStatus());
// DBUtil dbUtil = new DBUtil();
// dbUtil.executeDelete("sql");
// dbUtil.executeDelete("sql");
tm.commit();
log("inner1",tm.getStatus());
} catch (Exception e) {
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void testDeleteTx()
{
TransactionManager tm = new TransactionManager();
try {
tm.begin();
log("delete befer" ,tm.getStatus());
DBUtil dbUtil = new DBUtil();
dbUtil.executeDelete("delete from test");
JDBCTransaction tx = tm.suspend();
dbUtil.executeDelete("delete from test1");
tm.resume(tx);
log("delete after" ,tm.getStatus());
tm.commit();
log("delete commit after" ,tm.getStatus());
} catch (TransactionException e) {
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
try {
tm.commit();
} catch (RollbackException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
}
public static void log(String action,int status)
{
switch(status)
{
case Status.STATUS_ACTIVE:
System.out.println(action + "-事务状态:Status.STATUS_ACTIVE" );
break;
case Status.STATUS_COMMITTED:
System.out.println(action + "-事务状态:Status.STATUS_COMMITTED" );
break;
case Status.STATUS_COMMITTING:
System.out.println(action + "-事务状态:Status.STATUS_COMMITTING" );
break;
case Status.STATUS_MARKED_ROLLBACK:
System.out.println(action + "-事务状态:Status.STATUS_MARKED_ROLLBACK" );
break;
case Status.STATUS_NO_TRANSACTION:
System.out.println(action + "-事务状态:Status.STATUS_NO_TRANSACTION" );
break;
case Status.STATUS_ROLLEDBACK:
System.out.println(action + "-事务状态:Status.STATUS_ROLLEDBACK" );
break;
case Status.STATUS_ROLLING_BACK:
System.out.println(action + "-事务状态:Status.STATUS_ROLLING_BACK" );
break;
case Status.STATUS_UNKNOWN:
System.out.println(action + "-事务状态:Status.STATUS_UNKNOWN" );
break;
}
}
public static void testConnection() throws SQLException
{
Connection con = null;
Connection con1 = null;
Statement stmt = null;
Statement stmt1 = null;
try {
con = SQLManager.getInstance().requestConnection();
con1 = SQLManager.getInstance().requestConnection();
con.setAutoCommit(false);
stmt = con.createStatement();
stmt1 = con1.createStatement();
stmt.executeQuery("select * from test where name='biaoping.yinfasdfasdf' for update");
//stmt.execute("commit");
// stmt1.execute("delete from test where name='biaoping.yinfasdfasdf'");//stmt1将导致系统挂起
stmt.execute("delete from test where name='biaoping.yinfasdfasdf'");//stmt1将导致系统挂起
//stmt.execute("commit");
con.commit();
//con1.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
if(stmt != null)
stmt.close();
}
catch(Exception e)
{
}
try
{
if(stmt1 != null)
stmt1.close();
}
catch(Exception e)
{
}
try
{
if(con != null)
{
con.setAutoCommit(true);
con.close();
}
}
catch(Exception e)
{
}
try
{
if(con1 != null)
{
con1.setAutoCommit(true);
con1.close();
}
}
catch(Exception e)
{
}
}
}
public static void testCommitStatement()
{
// nextStatement = conn.prepareStatement("COMMIT");
TransactionManager tm = new TransactionManager();
try {
tm.begin();
log("inner1 bef",tm.getStatus());
//System.out.println(tm.getTransaction().getConnection());
DBUtil dbUtil = new DBUtil();
dbUtil.executeDelete("delete from test");
dbUtil.executeInsert("insert into test(name) values('biaoping.yinfasdfasdf')");
dbUtil.executeSql("commit");
// log("inner1 after",tm.getStatus());
//
// dbUtil.executeInsert("insert into test1(name) values('biaoping.yin1')");
// log("inner2 after",tm.getStatus());
//
//
// tm.commit();
// log("commit",tm.getStatus());
//
tm.commit();
} catch (TransactionException e) {
log("rollback1",tm.getStatus());
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("rollback1 after",tm.getStatus());
e.printStackTrace();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log("rollback2",tm.getStatus());
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("rollback2 after",tm.getStatus());
}
}
public static void testInsertTx()
{
TransactionManager tm = new TransactionManager();
try {
tm.begin();
log("insert bef",tm.getStatus());
System.out.println(tm.getTransaction().getConnection());
DBUtil dbUtil = new DBUtil();
dbUtil.executeDelete("delete from test");
dbUtil.executeDelete("delete from test1");
JDBCTransaction tx = tm.suspend();
try
{
dbUtil.executeInsert("insert into test(name) values('biaoping.yin1111')");
log("insert after",tm.getStatus());
dbUtil.executeInsert("insert into test1(name) values('biaoping.yin12222')");
}
catch(Exception e)
{
e.printStackTrace();
}
tm.resume(tx);
log("insert after",tm.getStatus());
tm.commit();
log("insert commit",tm.getStatus());
} catch (TransactionException e) {
log("rollback1",tm.getStatus());
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("rollback1 after",tm.getStatus());
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log("rollback2",tm.getStatus());
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("rollback2 after",tm.getStatus());
}
}
public static void testPreparedDeleteTx()
{
TransactionManager tm = new TransactionManager();
try {
//开始事务,在begin和commit之间的各种数据库操作都包含在事务中,除非中间有事务的挂起和中断,但是中断恢复后事务将继续,
//或者另外在事务执行过程如果开启了新的事务,则当前事务将被中断
tm.begin();
log("delete before",tm.getStatus());
DBUtil dbUtil = new DBUtil();
//执行两个删除操作,如果一个失败整个事务就回滚
dbUtil.executeDelete("delete from test");
dbUtil.executeDelete("delete from test1");
//挂起事务,挂起后的数据库操作将不受事务控制直到事务被恢复
JDBCTransaction tx = tm.suspend();
try
{
dbUtil.executeInsert("insert into test1(name) values('biaoping.yin')");
}
catch(Exception e)
{
}
//恢复事务,之后的事务将加入之前被中断的事务当中
tm.resume(tx);
log("delete after",tm.getStatus());
dbUtil.executeInsert("insert into test1(name) values('biaoping.yin1')");
//提交事务
tm.commit();
log("delete commit",tm.getStatus());
} catch (TransactionException e) {
log("delete rollback before",tm.getStatus());
try {
//回滚事务
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("delete rollback after",tm.getStatus());
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log("delete rollback1 before",tm.getStatus());
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("delete rollback1 after",tm.getStatus());
}
finally
{
try {
tm.commit();
} catch (RollbackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void testInnerInsertTx()
{
TransactionManager tm = new TransactionManager();
try {
tm.begin();
log("insert bef",tm.getStatus());
DBUtil dbUtil = new DBUtil();
dbUtil.executeDelete("delete from test");
dbUtil.executeDelete("delete from test1");
JDBCTransaction tx = tm.suspend();
TransactionManager tm1 = new TransactionManager();
try
{
tm1.begin();
dbUtil.executeInsert("insert into test(name) values('biaoping.yin1111')");
log("insert after",tm.getStatus());
dbUtil.executeInsert("insert into test1(name) values('biaoping.yin12222')");
tm1.commit();
}
catch(Exception e)
{
try
{
tm1.rollback();
}
catch(Exception e1)
{
}
}
tm.resume(tx);
log("insert after",tm.getStatus());
tm.commit();
log("insert commit",tm.getStatus());
} catch (TransactionException e) {
log("rollback1",tm.getStatus());
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("rollback1 after",tm.getStatus());
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
log("rollback2",tm.getStatus());
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log("rollback2 after",tm.getStatus());
}
}
public static void testNestDoubleTX()
{
TransactionManager tm = new TransactionManager();
try{
tm.begin();
System.out.println("testNestDoubleTX():" + tm.getTransaction().getConnection());
testDoubleTX();
tm.commit();
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testNestDoubleTXRollbackOne()
{
TransactionManager tm = new TransactionManager();
try{
tm.begin();
System.out.println("testNestDoubleTX():" + tm.getTransaction().getConnection());
testDoubleTX_RollbackOne();
tm.commit();
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testNestDoubleTXRollbackTwo()
{
TransactionManager tm = new TransactionManager();
try{
tm.begin();
System.out.println("testNestDoubleTX():" + tm.getTransaction().getConnection());
testDoubleTX_RollbackTwo();
tm.commit();
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testNestDoubleTXRollbackThree()
{
TransactionManager tm = new TransactionManager();
try{
tm.begin();
System.out.println("testNestDoubleTX():" + tm.getTransaction().getConnection());
testDoubleTX_RollbackTwo();
tm.rollback();
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testDoubleTX()
{
TransactionManager tm = new TransactionManager();
try{
tm.begin();
System.out.println("testDoubleTX() 1:" + tm.getTransaction().getConnection());
tm.commit();
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
TransactionManager tm1 = new TransactionManager();
try{
tm1.begin();
System.out.println("testDoubleTX() 2:" + tm1.getTransaction().getConnection());
tm1.commit();
}
catch(Exception e)
{
try {
tm1.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testDoubleTX_RollbackOne()
{
TransactionManager tm = new TransactionManager();
try{
tm.begin();
System.out.println("testDoubleTX() 1:" + tm.getTransaction().getConnection());
tm.rollback();
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
TransactionManager tm1 = new TransactionManager();
try{
tm1.begin();
System.out.println("testDoubleTX() 2:" + tm1.getTransaction().getConnection());
tm1.commit();
}
catch(Exception e)
{
try {
tm1.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testDoubleTX_RollbackTwo()
{
TransactionManager tm = new TransactionManager();
try{
tm.begin();
System.out.println("testDoubleTX() 1:" + tm.getTransaction().getConnection());
tm.rollback();
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
TransactionManager tm1 = new TransactionManager();
try{
tm1.begin();
System.out.println("testDoubleTX() 2:" + tm1.getTransaction().getConnection());
tm1.rollback();
}
catch(Exception e)
{
try {
tm1.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testReadRollbackTX()
{
TransactionManager tm = new TransactionManager();
try
{
tm.begin();
DBUtil dbUtil = new DBUtil();
String id = String.valueOf(dbUtil.executeInsert("insert into test(name) values('biaoping.yin1111')"));
dbUtil.executeSelect("select * from test where id='" + id +"'");
System.out.println("before rollback size:" + dbUtil.size());
tm.rollback();
dbUtil.executeSelect("select * from test where id='" + id +"'");
System.out.println("after rollbacke size:" + dbUtil.size());
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void testReadCommitTX()
{
TransactionManager tm = new TransactionManager();
try
{
tm.begin();
DBUtil dbUtil = new DBUtil();
String id = String.valueOf(dbUtil.executeInsert("insert into test(name) values('biaoping.yin1111')"));
dbUtil.executeSelect("select * from test where id='" + id +"'");
System.out.println("before commit size:" + dbUtil.size());
tm.commit();
dbUtil.executeSelect("select * from test where id='" + id +"'");
System.out.println("after commit size:" + dbUtil.size());
}
catch(Exception e)
{
try {
tm.rollback();
} catch (RollbackException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
static boolean flag = false;
public static void main(String[] args)
{
// int i = DBUtil.getNumActive();
// MainMonitor m = new MainMonitor();
// m.start();
// try
// {
// testLocalThread();
// testStatus();
// testDeleteTx();
// testInsertTx();
// testCommitStatement();
// try {
// testConnection();
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// catch(Exception e)
// {
// e.printStackTrace();
// }
// try
// {
// TestTransaction.testNestDoubleTX();
// TestTransaction.testNestDoubleTXRollbackOne();
// TestTransaction.testNestDoubleTXRollbackTwo();
// TestTransaction.testNestDoubleTXRollbackThree();
// }
// catch(Exception e)
// {
// e.printStackTrace();
// }
//
// testReadCommitTX();
testTraceObjects();
flag = true;
}
static class MainMonitor extends Thread {
public void run() {
while (true) {
int i = DBUtil.getNumActive();
int j = DBUtil.getNumIdle();
System.out.println("DBUtil.getNumIdle():" + j);
System.out.println("DBUtil.getNumActive():" + i);
System.out.println("flag :" + flag );
if(flag && i == 0)
break;
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
int i = DBUtil.getNumActive();
int j = DBUtil.getNumIdle();
System.out.println("DBUtil.getNumIdle():" + j);
System.out.println("DBUtil.getNumActive():" + i);
}
}
}