长事务监控

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@862 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-09-19 07:29:35 +00:00
parent 8c54f409f4
commit 2d72077a14
3 changed files with 13 additions and 8 deletions
@@ -583,7 +583,7 @@ public class PoolableConnection implements PooledConnection, Connection {
} catch (SQLException ex) {
handleException(ex);
} finally {
handleEndTransaction();
handleEndTransaction(dataSource);
}
}
@@ -593,11 +593,11 @@ public class PoolableConnection implements PooledConnection, Connection {
@Override
public void rollback() throws SQLException {
checkOpen();
if (transactionInfo == null) {
return;
}
checkOpen();
DruidAbstractDataSource dataSource = holder.getDataSource();
dataSource.incrementRollbackCount();
@@ -607,7 +607,7 @@ public class PoolableConnection implements PooledConnection, Connection {
} catch (SQLException ex) {
handleException(ex);
} finally {
handleEndTransaction();
handleEndTransaction(dataSource);
}
}
@@ -630,14 +630,12 @@ public class PoolableConnection implements PooledConnection, Connection {
} catch (SQLException ex) {
handleException(ex);
} finally {
handleEndTransaction();
handleEndTransaction(dataSource);
}
}
private void handleEndTransaction() {
private void handleEndTransaction(DruidAbstractDataSource dataSource) {
if (transactionInfo != null) {
DruidAbstractDataSource dataSource = holder.getDataSource();
long currentTimeMillis = System.currentTimeMillis();
transactionInfo.setEndTimeMillis(currentTimeMillis);
@@ -249,6 +249,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement {
@Override
public final boolean execute(String sql) throws SQLException {
checkOpen();
transactionRecord(sql);
try {
return stmt.execute(sql);
@@ -5,6 +5,7 @@ import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -497,6 +498,10 @@ public class ConnectionTest4 extends TestCase {
public void test_rollback() throws Exception {
PoolableConnection conn = dataSource.getConnection().unwrap(PoolableConnection.class);
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
stmt.execute("SELECT 1");
conn.getConnection().close();
{
SQLException error = null;