日期:2014-05-16 浏览次数:20644 次
package ro.kifs.diagnostic;
import java.io.PrintStream;
import java.sql.CallableStatement;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Savepoint;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
public class Connection
implements java.sql.Connection
{
private static HashMap _openedConnections = new HashMap();
java.sql.Connection _conn;
private String _connid;
private static SimpleDateFormat sdf = new SimpleDateFormat("MM/DD HH:mm:ss");
public static String getGUID()
{
String ret = UUID.randomUUID().toString();
return ret;
}
public void registerOpenedConnection()
{
_openedConnections.put(getConnectionId(), whoCalledMe());
}
public static String getStillOpenedConnsStackTraces() {
StringBuffer sb = new StringBuffer(5000);
try
{
sb.append("<br>\n Who calls the unclosed connections: <BR>\n");
Iterator it = _openedConnections.entrySet().iterator();
Map.Entry me = null;
while (it.hasNext()) {
me = (Map.Entry)it.next();
sb.append("<BR>\n");
sb.append("" + me.getValue());
}
}
catch (Exception ex)
{
sb.append("ex when iterating the connection stacktraces: " + ex.getMessage());
}
return sb.toString();
}
private void $init$() {
this._connid = null; }
public String getConnectionId() {
return this._connid;
}
public String whoCalledMe()
{
StringBuffer ret = new StringBuffer(300);
StackTraceElement[] trace = new Throwable().getStackTrace();
for (int i = 0; i < trace.length - 1; ++i) {
ret.append(trace[i].getClassName());
ret.append(".");
ret.append(trace[i].getMethodName());
ret.append("() line:");
ret.append("() line:");
ret.append(trace[i].getLineNumber());
ret.append("<BR>\n");
}
ret.append(sdf.format(new Date()));
return ret.toString(); }
public Connection(java.sql.Connection wrappedConnection) {
$init$();
this._conn = wrappedConnection;
this._connid = getGUID();
registerOpenedConnection();
}
public Statement createStatement() throws SQLException {
return this._conn.createStatement();
}
public PreparedStatement prepareStatement(String sql) throws SQLException {
return this._conn.prepareStatement(sql); }
public CallableStatement prepareCall(String sql) throws SQLException {
return this._conn.prepareCall(sql); }
public String nativeSQL(String sql) throws SQLException {
return this._conn.nativeSQL(sql); }
public void setAutoCommit(boolean autoCommit) throws SQLException {
this._conn.setAutoCommit(autoCommit); }
public boolean getAutoCommit() throws SQLException {
return this._conn.getAutoCommit(); }
public void commit() throws SQLException {
this._conn.commit(); }
public void rollback() throws SQLException {
this._conn.rollback();
}
public void close() throws SQLException {
try {
this._conn.close();
this._conn = null;
_openedConnections.remove(getConnectionId());
}
catch (Exception x) {
System.out.println(">>>>>>>>>>EX la wrapper.close(): " + x.getMessage());
x.printStackTrace();
}
}
public boolean isClosed() throws SQLException {
return