Hallo zusammen,
hab ein Problem mit einem Connection Pool, der vom Tomcat verwaltet wird.
Eigentlich ist ein Connection Pool ja eine simple Sache, bei der man nicht sooo viel falsch machen kann. Dachte ich jedenfalls bis vor kurzem... ;-)
Das eigentlich Problem ist folgendes:
- Ich starte den Tomcat
- Kann eine recht kurze Zeit normal die Anwendung nutzen (10-30 Minuten)
- Dann fliegen auf einmal "Timeout waiting for idle object" Exeptions
Folgende Eckdaten sind wohl noch relevant:
- In der MySQL Datenbank selbst als auch im Tomcat habe ich die max. Verbindungen auf 500 gesetzt habe (was ja schon weit über jeder Beispielkonfig in den verschiedenen Tutorials liegt)
- Ich mache in jeder Datenbankklasse im final Block ein con.close() -> Nach meinem Verständnis müsste an dieser Stelle doch die Verbindung zurück an den Connection Pool gehen
- Selbst wenn ich eine halbe Stunde warte, nachdem die Exceptions fliegen, besteht das Problem weiterhin. Vorallem dieser Punkt macht mich stutzig. Es scheint ja so, als würden die Verbindungen nie an den Pool zurück gehen. Ich kann mir nur überhaupt nicht erklären warum das so ist.
Hat hier vielleicht schon jemand eine grundsätzliche Idee, was solch ein Problem hervorrufen kann?
Die letzte Idee, die ich noch habe ist, dass es vielleicht an der Art und Weise liegt, wie ich den Connection Pool in meiner Webanwendung handhabe.
Aktuell sieht mein Code so aus:
Beim Start des Servers wird in einem Servlet der ConPool initiiert
In meinen Datenbankklassen holen ich die Datasource dann wie folgt (es handelt sich um eine struts2 Anwendung, darum der ActionContext)
Kann hier irgendwo was falsch laufen, bzw. irgendwas so laufen, dass der conPool die Verbindungen nicht zurück erhält?
Schönen Gruß,
oetzi
hab ein Problem mit einem Connection Pool, der vom Tomcat verwaltet wird.
Eigentlich ist ein Connection Pool ja eine simple Sache, bei der man nicht sooo viel falsch machen kann. Dachte ich jedenfalls bis vor kurzem... ;-)
Das eigentlich Problem ist folgendes:
- Ich starte den Tomcat
- Kann eine recht kurze Zeit normal die Anwendung nutzen (10-30 Minuten)
- Dann fliegen auf einmal "Timeout waiting for idle object" Exeptions
Folgende Eckdaten sind wohl noch relevant:
- In der MySQL Datenbank selbst als auch im Tomcat habe ich die max. Verbindungen auf 500 gesetzt habe (was ja schon weit über jeder Beispielkonfig in den verschiedenen Tutorials liegt)
- Ich mache in jeder Datenbankklasse im final Block ein con.close() -> Nach meinem Verständnis müsste an dieser Stelle doch die Verbindung zurück an den Connection Pool gehen
- Selbst wenn ich eine halbe Stunde warte, nachdem die Exceptions fliegen, besteht das Problem weiterhin. Vorallem dieser Punkt macht mich stutzig. Es scheint ja so, als würden die Verbindungen nie an den Pool zurück gehen. Ich kann mir nur überhaupt nicht erklären warum das so ist.
Hat hier vielleicht schon jemand eine grundsätzliche Idee, was solch ein Problem hervorrufen kann?
Die letzte Idee, die ich noch habe ist, dass es vielleicht an der Art und Weise liegt, wie ich den Connection Pool in meiner Webanwendung handhabe.
Aktuell sieht mein Code so aus:
Beim Start des Servers wird in einem Servlet der ConPool initiiert
Code:
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/conPool");
//und im servletContext gespeichert
ServletContext context = getServletContext();
context.setAttribute("conPool", ds);
In meinen Datenbankklassen holen ich die Datasource dann wie folgt (es handelt sich um eine struts2 Anwendung, darum der ActionContext)
Code:
ActionContext context = ActionContext.getContext();
Map<String,Object> appCon = context.getApplication();
ds = (DataSource) appCon.get("conPool");
con = ds.getConnection();
return con;
}
Kann hier irgendwo was falsch laufen, bzw. irgendwas so laufen, dass der conPool die Verbindungen nicht zurück erhält?
Schönen Gruß,
oetzi
Zuletzt bearbeitet: