c3p0 -- ComboPooledDataSource gibt Ressourcen ( Threads ) nicht frei

Hallo,

ich erstelle mir recht simpel einen ComboPooledDataSource für MySQL mittels c3p0. Diesen versuche ich im Fehlerfall ( die Datenbank ist nicht mehr erreichbar ) wie folgt zu schließen

Code:
PooledDataSource pds = (PooledDataSource) ds;
pds.close();
ds = null;
con = null;

Starte ich nun meine Applikation, bestehen zu Beginn 17 Threads. Nach erfolgreichem Connect zur Datenbank sind es 21. Starte ich nun die Datenbank einmal neu und connecte erneut, sind es 25 Threads. Bei jedem weiteren Versuch ( stoppen, starten, verbinden ) sind es 4 neue Threads.

Mache ich nun etwas falsch, habe etwas vergessen, oder ist das durchaus normal, dass die Thread-Anzahl so in die Höhe schießt?


Gruß, KK
 
Hallo,

wie hast du C3P0 denn konfiguriert?

Bei mir hat Version 0.9.1.2 folgende defaults:
Code:
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 
[ acquireIncrement -> 3,
 acquireRetryAttempts -> 30, 
acquireRetryDelay -> 1000,
 autoCommitOnClose -> false, 
automaticTestTable -> null, 
breakAfterAcquireFailure -> false, 
checkoutTimeout -> 0, 
connectionCustomizerClassName -> null, 
connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester,
 dataSourceName -> 1hge1458bhocz98bi88vg|89fbe3, 
debugUnreturnedConnectionStackTraces -> false, 
description -> null, 
driverClass -> com.mysql.jdbc.Driver, 
factoryClassLocation -> null, 
forceIgnoreUnresolvedTransactions -> false, 
identityToken -> 1hge1458bhocz98bi88vg|89fbe3, 
idleConnectionTestPeriod -> 0, 
initialPoolSize -> 3, 
jdbcUrl -> jdbc:mysql://localhost/test, 
maxAdministrativeTaskTime -> 0,
maxConnectionAge -> 0,
 maxIdleTime -> 0, 
maxIdleTimeExcessConnections -> 0,
 maxPoolSize -> 15, 
maxStatements -> 0,
 maxStatementsPerConnection -> 0,
 minPoolSize -> 3,
 numHelperThreads -> 3,
 numThreadsAwaitingCheckoutDefaultUser -> 0, 
preferredTestQuery -> null, 
properties -> {user=******, password=******}, 
propertyCycle -> 0,
 testConnectionOnCheckin -> false, 
testConnectionOnCheckout -> false,
 unreturnedConnectionTimeout -> 0,
 usesTraditionalReflectiveProxies -> false ]

Gruß Tom
 
Hallo Tom,

konfiguriert wie folgt

acquireIncrement -> 3,
acquireRetryAttempts -> 0,
acquireRetryDelay -> 2000,
autoCommitOnClose -> false,
automaticTestTable -> null,
breakAfterAcquireFailure -> false,
checkoutTimeout -> 0,
connectionCustomizerClassName -> null,
connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester,
dataSourceName -> 1hge1it8bijtv64in05f2|81b1fb,
debugUnreturnedConnectionStackTraces -> false,
description -> null,
driverClass -> org.gjt.mm.mysql.Driver,
factoryClassLocation -> null,
forceIgnoreUnresolvedTransactions -> false,
identityToken -> 1hge1it8bijtv64in05f2|81b1fb,
idleConnectionTestPeriod -> 0,
initialPoolSize -> 3,
jdbcUrl -> jdbc:mysql://127.0.0.1:3306/test,
maxAdministrativeTaskTime -> 0,
maxConnectionAge -> 0,
maxIdleTime -> 0,
maxIdleTimeExcessConnections -> 0,
maxPoolSize -> 15,
maxStatements -> 0,
maxStatementsPerConnection -> 0,
minPoolSize -> 3,
numHelperThreads -> 3,
numThreadsAwaitingCheckoutDefaultUser -> 0,
preferredTestQuery -> null,
properties -> {user=******, password=******},
propertyCycle -> 0,
testConnectionOnCheckin -> false,
testConnectionOnCheckout -> false,
unreturnedConnectionTimeout -> 0,
usesTraditionalReflectiveProxies -> false

Habe bloß die Einstellungen für acquireRetryAttempts, acquireRetryDelay und breakAfterAcquireFailure gesetzt.... Ist das bei dir so denn nicht nachzuvollziehen?


Gruß KK
 
Zuletzt bearbeitet:
Zurück