git-svn-id: http://code.alibabatech.com/svn/druid/trunk@540 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-08-30 04:35:52 +00:00
parent 26673b292f
commit dd4ba99f91
6 changed files with 66 additions and 12 deletions
@@ -18,6 +18,7 @@ package com.alibaba.druid.filter.stat;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.util.Date;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentMap;
@@ -50,6 +51,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
public final static String ATTR_SQL = "stat.sql";
public final static String ATTR_UPDATE_COUNT = "stat.updteCount";
public final static String ATTR_TRANSACTION = "stat.tx";
protected JdbcDataSourceStat dataSourceStat;
@@ -91,6 +93,26 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
}
this.dataSourceStat = stat;
}
@Override
public void connection_setAutoCommit(FilterChain chain, ConnectionProxy connection, boolean autoCommit)
throws SQLException {
Map<String, Object> attributes = connection.getAttributes();
if (!autoCommit) {
TransactionInfo transInfo = (TransactionInfo) attributes.get(ATTR_TRANSACTION);
if (transInfo == null) {
long transactionId = connection.getDirectDataSource().createTransactionId();
transInfo = new TransactionInfo(transactionId);
attributes.put(ATTR_TRANSACTION, transInfo);
dataSourceStat.getConnectionStat().incrementConnectionCommitCount();
}
} else {
attributes.remove(ATTR_TRANSACTION);
}
chain.connection_setAutoCommit(connection, autoCommit);
}
public ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException {
ConnectionProxy connection = null;
@@ -154,14 +176,27 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
@Override
public void connection_commit(FilterChain chain, ConnectionProxy connection) throws SQLException {
super.connection_commit(chain, connection);
handleEndTransaction(connection);
connectStat.incrementConnectionCommitCount();
dataSourceStat.getConnectionStat().incrementConnectionCommitCount();
}
private void handleEndTransaction(ConnectionProxy connection) {
Map<String, Object> attributes = connection.getAttributes();
TransactionInfo transInfo = (TransactionInfo) attributes.remove(ATTR_TRANSACTION);
if (transInfo != null) {
transInfo.setEndTimeMillis(System.currentTimeMillis());
}
}
@Override
public void connection_rollback(FilterChain chain, ConnectionProxy connection) throws SQLException {
super.connection_rollback(chain, connection);
handleEndTransaction(connection);
connectStat.incrementConnectionRollbackCount();
dataSourceStat.getConnectionStat().incrementConnectionRollbackCount();
@@ -173,6 +208,8 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
public void connection_rollback(FilterChain chain, ConnectionProxy connection, Savepoint savepoint)
throws SQLException {
super.connection_rollback(chain, connection, savepoint);
handleEndTransaction(connection);
connectStat.incrementConnectionRollbackCount();
dataSourceStat.getConnectionStat().incrementConnectionRollbackCount();