ConnectionPooling Tomcat

xrax

Aktives Mitglied
Hallo zusammen,

ich verwende bei einem Servlet auf einem (neu installierten) Tomcat 8.x das ConnectionPooling zu einer MySQL-DB.
Ich habe das schon bei einem älteren Tomcat gemacht, bei dem es funktionierte.

Jetzt bleibt aber das Servlet alle 7-8 Zugriffe stehen und wirft beim Reload die Message das die Connection nicht zurück gegeben wurde.
Code:
org.apache.tomcat.dbcp.pool2.impl.DefaultPooledObject$AbandonedObjectCreatedException: Pooled object created 2017-03-20 09:17:45 +0100 by the following code has not been returned to the pool:
    at org.apache.tomcat.dbcp.pool2.impl.DefaultPooledObject.allocate(DefaultPooledObject.java:192)
Die Rückgabe der Connection sollte doch beim Pooling von allein erfolgen. Oder sehe ich das falsch ?
Wenn ich die Connection jeweils close , dann läuft der Code. Aber das ist ja nicht der Sinn des Pooling. Oder ist das aus Performancesicht egal ?

Sehe ich es richtig das beim Connectionpooling jeweils eine vorbereitete Connection verwendet wird und dann diese Connection für einen weiteren Process wieder freigegeben wird ?
Warum könnte diese Freigabe dann nicht klappen ?

Besten Dank
xrax
 
Zuletzt bearbeitet:

stg

Top Contributor
Wenn ich die Connection jeweils close , dann läuft der Code. Aber das ist ja nicht der Sinn des Pooling. Oder ist das aus Performancesicht egal ?

Rufst du #close() auf einer Connection aus dem Pool auf, dann wird die Verbindung zur Datenbank aus Sicht der Anwendung logisch geschlossen. Physisch geschlossen sollte sie aber nur werden, wenn zu viele ungenutzte Verbindungen im Pool umhergeistern. Darum kümmerst du dich in deinem Projekt allerdings nicht selbst, sondern das geschieht transparent im Pool selbst.
Wenn du also selbst aktiv eine Verbindung anfragst, dann solltest du diese auch selbst wieder schließen, ob Pooling oder nicht ist egal. Wenn du einen ConnectionPool im hintergrund hast, dann wird die tatsächliche physische Verbindung zur Datenbank geschlossen oder auch nicht ... und das ist der Anwendung auch egal.
 

Ähnliche Java Themen


Oben