public String getStackTrace() { return new StackTraceStringBuilder(connection.getStackTraceOnOpen()).toString(); } }
public void reset() { for(int i=0;i<length;i++) { StatementProxy stmt = array[i]; if(null != stmt) { try { log.warn("A potential statement leak detected, force to close it, sql ({}), stack trace -> \n{}", stmt.getLastExecutingSql(), new StackTraceStringBuilder(null, stmt.getStackTraceOnOpen()).toString(Pool.FRAMEWORK_PACKAGE)); closeStatementOnly(stmt); } catch (SQLException e) { } finally { array[i] = null; } } } if(array.length > MAX_CAPACITY) { array = new StatementProxy[DEFAULT_CAPACITY]; } this.length = 0; } }
protected void printConnections() { if(log.isInfoEnabled()) { int maxPrint = 20; int count = 0; for (PooledConnection conn : syncPool.connections()) { count++; if (count == maxPrint) { break; } if (conn.isActive()) { log.info("Connection busy duration {}seconds\n{}", conn.getBusyDurationMs() / 1000, new StackTraceStringBuilder(conn.getStackTraceOnOpen()).toString(FRAMEWORK_PACKAGE)); } } } }
ss.getDurationMs(), ss.getSql(), new StackTraceStringBuilder(ss.getStackTraceElements()).toString()); ss.getDurationMs(), ss.getSql(), new StackTraceStringBuilder(ss.getStackTraceElements()).toString());
log.error("A potential connection leak detected (busy {}ms)\n{}", conn.getBusyDurationMs(), new StackTraceStringBuilder(conn.getStackTraceOnOpen()).toString(FRAMEWORK_PACKAGE)); conn.markLeak(); continue;