Ich bin eine dynamische Java Web Application (Tomcat 8.0.15, Java EE 7 Web) mit einem SQL Server 2008 und nach der Warnung/Ausnahme bekommtListe nicht getrennt oder nicht richtig getrennt Datenbank-Verbindungen
WARNING [Tomcat JDBC Pool Cleaner[510210701:1481713957404]] org.apache.tomcat.jdbc.pool.ConnectionPool.suspect Connection has been marked suspect, possibly abandoned PooledConnection[[email protected]][67975 ms.]:java.lang.Exception
ziemlich oft frage ich mich irgendwo in den Tiefen meines Quellcodes habe ich vergessen, eine JDBC oder Hibernate Connection mit der Datenbank zu trennen. Ich würde sie gerne auflisten.
Ein regelmäßiges
static
{
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/sqlserv");
} catch (NamingException ex) {
Logger.getLogger(Basisverbindung.class.getName()).log(Level.SEVERE, null, ex);
}
}
macht diesen Job und in meinem hibernate.cfg.xml ist es das gleiche:
<property name="hibernate.connection.datasource">java:comp/env/jdbc/sqlserv</property>
ich durch Stackoverflow gesucht und gefunden nur wenige Einträge, die ich bereits angehören (und sogar upvoted):
- Tomcat 7 connection pooling error
- WebApp (Tomcat-jdbc) Pooled DB connection throwing abandon exception
- https://dba.stackexchange.com/questions/114759/tomcat7-jdbc-connection-pool-connection-has-been-abandoned
Aber das Problem weiterhin besteht oder kommt nach einer Weile wieder so würde Ich mag einen Weg finden, wie man auf der Spur, wo ich die Verbindung schließen vergessen. Auf meinem Tomcat läuft auch eine PSI Probe, die mir mitteilt, dass einige Fehler in den Anfragen auftauchen und manchmal die Reaktionszeit ausschöpfen. Ich sehe dort eine nette Liste von Anfragen, weiß aber nicht, welche aufgegeben werden.
Der ActivityMonitor im SQL-Server Management Studio ist nicht zu viel Hilfe entweder es listet einige Prozesse auf, von denen ich weiß, dass sie geschlossen sind (oder gut, sollte sein).
Was ist der beste Weg, um diese Art von Problem zu analysieren?
Ich benutze tomcat-jdbc und habe beide Optionen – Qohelet
... gesetzt und Sie sehen keine Stack-Traces für wo Ihre 'Connection' oder' Statement' Objekte nicht richtig geschlossen sind? –
Ich verwende eine statische Klasse, die die Verteilung von Verbindungen behandelt (ich kann den Rest des Codes, aber es ist nicht zu grandios). Also bezieht sich der Stack meistens nur auf diese Klasse ... – Qohelet