Le chargement de pilote jdb a chaque demande de connexion est couteuse. il revient donc d’utiliser un pool de connexion qui est un mécanisme permettant de créer un ensemble de connexion (instancier les connexion une fois pour toute) et de les réutiliser a la demande par un utilisateur. Hibernate vient avec un mécanisme de gestion de pool très basique. Il est est donc conseillé d’utiliser des pools performant afin de remplacer celui d’hibernate. Parmi les pools de connexion, nous pouvons citer entre autre :
- c3p0
-DBCP
et j’en passe.
Le but de cet article est de vous présenter le pool de connexon c3p0 et l’ensemble des paramètres permettant une meilleur configuration. Actuellement nous utilisons la version
c3p0-0.9.1.2. Vous pourrez toujours utiliser une version supérieure s’il y en a.
Hibernate configuration
Avant de donner dans les détails la signification des différents paramètres de configuration, nous vous donnons un exemple de configuration hibernate.
Certains paramètres sont à inclures dans le fichier hibernate.hbm.xml qui est le fichier de configuration par défaut, et d’autres paramètres eux se trouvent dans un fichier c3p0.properties. Il faut souligner que ces deux fichiers doivent se situer a la racine du classpath (Dans notre cas, ces fichiers se trouvaient ensemble dans le même répertoire)
hibernate.cfg.xml
< name=”c3p0.acquire_increment”>3< /property>
< name=”hibernate.c3p0.min_size”>2< /property>
< name=”hibernate.c3p0.max_size”>50< /property>
< name=”hibernate.c3p0.timeout”>3600< /property>
< name=”hibernate.c3p0.max_statements”>0< /property>
< name=”hibernate.c3p0.idle_test_period”>3600< /property>
c3p0.properties
c3p0.automaticTestTable =c3p0Test
c3p0.testConnectionOnCheckin=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=60
c3p0.breakAfterAcquireFailure=false
Basic Pool Configuration
initialPoolSize, minPoolSize, maxPoolSize definit le nombre de connexion qui seront en pool de connexion
il faut savoir que le nombre de connexion augmente lorsque les utilisateurs en demande. Si le maxPoolSize n’est pas précisé,
ce nombre va augmenter jusqu’a faire tomber le système. Lorsqu’on se rend compte qu’on aurra beaucoup d’utilisateur, il est toujours
intéressant d’augmenter le maxPoolSize, au lieu de demande au client d’attendre une nouvelle connexion.
acquireIncrement determine combien de clients peuvent etre en attente de connexion s’il n’ya plus de connexion
Le nombre de connexion diminue quant le pool test une connexion et trouve qu’il doit etre rendu ou lorsque le temps d’attente
d’une connexion est expirée
Managing Pool Size and Connection Age
Par défaut une connexion n’expire jamais. Si vous voulez que les connexions puisse s’expirer durant le temps dans le but
de les rafraichir, positionner maxIdleTime and/or maxConnectionAge.
maxIdleTime définit combien de seconde une connexion peut etre dite unitilisée avant de le remettre dans le pool de
connexion.
Quant à maxConnexionAge (?????)
maxIdleTimeExcessConnections permet de minimizer le nombre de connexion conservée par c3p0 lorsque le pool n’est
pas sous la charge. Par défaut le pool c3p0 augmente, et seulement diminue lorsqu’il ya echec de connexion ou une connexion qui
s’expire. Certains utilisateurs veulent que les pool rapidement libère les connexions après un pic (charge) dans l’usage qui force un pool large.
Vous pouvez y arriver en fixant une valeur de maxIdleTimeExcessConnections plus petit que maxIdleTime, forcant le nombre de connexions
supérieur au maximum à être rapidement libérée
Des conseils généraux par rapport aux paramètre de timeout : doucement. Le but du pool de connexion est de réduire le cout d’acquisiton
ds connexion; Il s’agit donc d’acquérir les connexions une seule fois et de les réutiliser autant de fois que possible. La plupart des bases de
données supportent des connexions qui restent ouvertes pendant des heures. Positionner maxConnectionAge or maxIdleTime to 1800 (30 minutes)
est très agressive. Pour la plupart des bases de données, plusieurs heures seront plus appropriées; vous pouvez vous assurer de la fiabilité
des connexions en les testant Plutôt que de les jeter. Le seul paramètre qui peut positionne en des minutes or moins est maxIdleTimeExcessConnections.
Configuring Connection Testing
C3p0 peut etre configuré pour tester les différentes connexion de plusieurs manirères.Cela afin de minisimer les pertes de connexion
Les connexions du pool peuvent être dénaturé pour plusieurs raison : Certains drivers jdbc intentionnellement “time-out” certaines longues connexions sur la base
de données.Connexion peuvent etre corrompus par des bugs des drivers, lors de multiples utilisation dans le temps, ou pour des raisons diverses. On peut configurer le
test via les configuration suivantes :
* automaticTestTable
* connectionTesterClassName
* idleConnectionTestPeriod (c3p0 testera toutes les connexions toutes les nombres de seconde précisee dans le paramètre, et “uncheck-out”
* preferredTestQuery
* testConnectionOnCheckin (si vrai une opeation sera effectuee par c3p0 a chaque demande de connexion pour s’assurer que la connexion est valide.
A utiliser en conjonction avec idleConnectionTestPeriod )
* testConnectionOnCheckout (à utliser si nécessaire. c3p0 fera des tests a chaque fin d’utilisation d’une connexion pour s’assurer qu’elle est valide. Un choix
plus judicieux est de vérifier chaque connexion avec le paramètre idleConnectionTestPeriod
idleConnectionTestPeriod, testConnectionOnCheckout, and testConnectionOnCheckin controle quant les connexion doivent etre testees.
Lorsqu’on configure le test des connexions, essayez de minimiser en premier le cout de chaque test. Par défaut, les connexions sont testes en appelant
la méthode getTables() de l’objet DatabaseMetaData d’une connexion. Cela a un avantage de fonctionner avec n’importe quel base de données. Mais
empiriquement, on a constate que l’appel de getTables() est toujours plus lent qu’une simple requete. La facon la plus convenable d’augmenter la rapidité
des tests est de définir le parametre automaticTestTable. Utilisant le nom que vous mettez c3p0 créera une table vide et fera pour tester une simple requete
sur la cette table vide.
Pour tester, vous pouvez aussi definir une requete sql de test qui va etre execute par c3p0 afin de s’assurer que la connexion fonctionne. Cette requete est
definie par preferredTestQuery
Attestation une erreur sql sera généree si la requete est incorrecte ou si la table n’existe pas.
Les utilisateus avancées peuvent définir tout autre type de test qu’ils veulent en implementer l’interface ConnectionTester et en fournissant le nom de cette classe
par connectionTesterClassName.
Configuring Statement Pooling
c3p0 implémente une gestion transparente des pools de connexion des PrepareStament comme définir dans la spécification jdbc. Dans certaines circonstante
le pooling des statement peut améliorer considérablement les performances des applications. Dans d’autres circonstances au contraire, elle peut entrainer des freins
On configure le pool des des statements avec les paramètres suivants :
maxStatements
maxStatementsPerConnexion
maxStatements défini le nombre total de PreparedStatements un dataSource peut mettre en cache. Le pool detruise le moins recemment utilise lorsqu’il atteinte
cette limite.
maxStatementsPerConnection est une configuratino non standard. Elle defini le nombre de PreparedStatements par connexion à pooler.
CONFIGURATION DES PROPRIETES C3P0 avec Hibernate
Annexe A: Configuration PropertiesGo de page
c3p0 propriétés de configuration peut être divisé en JavaBeans style propriétés et d’autres propriétés.
JavaBeans style Propriétés Revenir en haut
Les propriétés suivantes peuvent être définies directement dans le code en tant que propriétés JavaBeans, via un système de propriétés ou d’un fichier c3p0.properties (avec c3p0. Préfixé au nom de la propriété), ou dans un fichier c3p0-config.xml. Voir la section sur la configuration ci-dessus. Cliquez sur le nom de propriété pour une description complète.
acquireIncrement
acquireRetryAttempts
acquireRetryDelay
autoCommitOnClose
automaticTestTable
breakAfterAcquireFailure
checkoutTimeout
connectionCustomizerClassName
connectionTesterClassName
debugUnreturnedConnectionStackTraces
factoryClassLocation
forceIgnoreUnresolvedTransactions
idleConnectionTestPeriod
initialPoolSize
maxAdministrativeTaskTime
maxConnectionAge
maxIdleTime
maxIdleTimeExcessConnections
MaxPoolSize
maxStatements
maxStatementsPerConnection
MinPoolSize
numHelperThreads
overrideDefaultUser
overrideDefaultPassword
Mot de passe
preferredTestQuery
propertyCycle
testConnectionOnCheckin
testConnectionOnCheckout
unreturnedConnectionTimeout
l’utilisateur
usesTraditionalReflectiveProxies
acquireIncrement
Par défaut: 3
Détermine le nombre de connexions à un moment c3p0 vais essayer d’acquérir lorsque la piscine est épuisé. [Voir «Configuration de pool de base"]
acquireRetryAttempts
Par défaut: 30
Définit combien de fois c3p0 vais essayer d’acquérir une nouvelle connexion de la base de données avant d’abandonner. Si cette valeur est inférieure ou égale à zéro, c3p0 va continuer à essayer de chercher une connexion indéfiniment. [Voir «Configuration de la récupération des pannes de base de données"]
acquireRetryDelay
Par défaut: 1000
Millisecondes, le temps d’attente entre c3p0 va acquérir tentatives. [Voir «Configuration de la récupération des pannes de base de données"]
autoCommitOnClose
Défaut: faux
La spécification JDBC est impardonnable silence sur ce qui devrait arriver en suspens, les transactions en attente à la fermeture de connexion. la politique par défaut C3P0 est de retour en arrière tout solde non engagé, le travail en cours. (Je pense que c’est absolument, indéniablement la bonne politique, mais il n’y a pas de consensus parmi les fournisseurs de pilotes JDBC.) Cadre autoCommitOnClose de vraies causes non engagés l’attente de travaux à engager, plutôt que restaurée sur près de connexion. [Note:. Depuis la spec est ridiculement peu claire sur cette question, les auteurs d'applications qui souhaitent éviter les bogues et des comportements incompatibles devrait s'assurer que toutes les transactions sont explicitement validée ou restaurée-back avant la clôture est appelée] [Voir «Configuration de la gestion des transactions en suspens" ]
automaticTestTable
Par défaut: null
Si cela est prévu, c3p0 va créer une table vide avec le nom indiqué, et l’utilisation des requêtes sur la table pour tester la connexion. Si automaticTestTable est fourni, c3p0 va générer sa requête propre test, donc tout ensemble preferredTestQuery seront ignorées. Vous ne devriez pas travailler avec la table nommée après c3p0 elle crée, elle doit être strictement c3p0 les utiliser dans les tests de votre connexion. (Si vous définissez votre propre ConnectionTester, il doit implémenter l’interface QueryConnectionTester pour ce paramètre pour être utile.) [Voir «Configuration d'une connexion d'essai"]
breakAfterAcquireFailure
Défaut: faux
Si cela est vrai, une mise en commun DataSource se déclarera cassé et être définitivement fermés si une connexion ne peut être obtenu à partir de la base de données après avoir fait acquireRetryAttempts d’acquérir une. Si elle est fausse, l’impossibilité d’obtenir une connexion entraînera tous les threads en attente pour le pool d’acquérir une connexion à lever une exception, mais la source de données restent valables, et tenter d’obtenir à nouveau suite à un appel à getConnection (). [Voir «Configuration de la récupération des pannes de base de données"]
checkoutTimeout
Par défaut: 0
Le nombre de millisecondes une getConnection client appelant () attend une connexion à être enregistrés ou acquis lorsque la piscine est épuisé. Zéro veut dire attendre indéfiniment. Cadre toute valeur positive fera l’getConnection () pour time-out et de rompre avec une SQLException après le nombre spécifié de millisecondes.
connectionCustomizerClassName
Par défaut: null
La classe entièrement qualifié-nom d’un implememtation de l’interface ConnectionCustomizer, les utilisateurs peuvent mettre en œuvre pour établir des connexions quand ils sont acquis à partir de la base de données, ou lors du check-out, et potentiellement à nettoyer les choses au check-in et la destruction de connexion. Si les propriétés de connexion standard (holdability, en lecture seule, ou TransactionIsolation) sont définies dans la onAcquire ConnectionCustomizer () de méthode, elles seront prioritaires sur les valeurs par défaut de connexion.
connectionTesterClassName
Par défaut: com.mchange.v2.c3p0.impl.DefaultConnectionTester
La classe entièrement qualifié-nom d’un implememtation de l’interface ConnectionTester, ou QueryConnectionTester si vous souhaitez cas d’avoir accès à un utilisateur-preferredTestQuery configuré. Cela peut être utilisé pour personnaliser la manière dont c3p0 Connexions DataSources test, mais avec l’introduction des paramètres de configuration et automaticTestTable preferredTestQuery », créez vos propres" devrait être excessif pour la plupart des utilisateurs. [Voir «Configuration de test de connexion"]
debugUnreturnedConnectionStackTraces
Défaut: faux
Si c’est vrai, et si unreturnedConnectionTimeout est fixé à une valeur positive, alors la piscine de capture trace de la pile (via une exception) de toutes les caisses de connexion, et les traces de la pile sera imprimée lorsque non restitués check-out Connections timeout. Cette mesure vise à déboguer des applications à des fuites de connexion, qui est des applications qui parfois ne parviennent pas à revenir Connexions, conduisant à une croissance de piscine et, finalement, l’épuisement (lorsque les hits piscine MaxPoolSize avec toutes les connexions check-out et a perdu). Ce paramètre ne doit être réglé pendant le débogage, comme la capture de la trace de la pile va ralentir chaque connexion check-out.
Ne prend pas en charge les remplacements par utilisateur.
factoryClassLocation
Par défaut: null
Sources de données qui sera engagée par JNDI et l’utilisation de cette interface API référençable à eux-mêmes magasin peut spécifier une URL à partir de laquelle la classe capable de déréférencement d’un entre eux peuvent être chargés. Si (comme c’est généralement le cas), les bibliothèques c3p0 sera disponible sur place pour le service JNDI, laissez cette option configurée comme nulle.
Ne prend pas en charge les remplacements par utilisateur.
forceIgnoreUnresolvedTransactions
Défaut: faux
Fortement disrecommended. Ce paramètre à true peut conduire à des bugs subtils et bizarre. Ce paramètre est terrible, le laisser seul, sauf si absolument nécessaire. Il est ici pour contourner les bases de données ventilées / drivers JDBC qui ne sont pas correctement en charge les transactions, mais qui permettent les connexions "autoCommit drapeaux pour aller à de fausses indépendamment. Si vous utilisez une base de données qui prend en charge les transactions «en partie» (c’est un oxymore, comme le point de l’ensemble des transactions est d’effectuer des opérations de manière fiable et complète, mais néanmoins de nature bases de données sont là-bas), si vous vous sentez à l’aise en ignorant le fait que les connexions avec autoCommit == false peut être au milieu des transactions et des verrous peuvent et d’autres ressources, vous pouvez désactiver le comportement par défaut c3p0 sage, qui est de se protéger, ainsi que la convivialité et la cohérence de la base de données, soit par roulement en arrière ( par défaut) ou de commettre (voir ci-dessus c3p0.autoCommitOnClose) les transactions non résolues. Cela ne devrait être défini à true lorsque vous êtes sûr que vous utilisez une base de données qui permet drapeau Connections ‘autoCommit pour aller à faux, mais n’offre pas de soutien significatif d’autres des transactions. Sinon, ce paramètre à true est juste une mauvaise idée. [Voir «Configuration des transactions non résolues de manutention"]
idleConnectionTestPeriod
Par défaut: 0
S’il s’agit d’un nombre supérieur à 0, c3p0 permettra de tester tous ralenti, mais les connexions regroupées décochée-out, le nombre de secondes. [Voir «Configuration de test de connexion"]
initialPoolSize
Par défaut: 3
Nombre de connexions d’une piscine vais essayer d’acquérir au démarrage. Doit se situer entre MinPoolSize et MaxPoolSize. [Voir «Configuration de pool de base"]
maxAdministrativeTaskTime
Par défaut: 0
Secondes avant de pool de threads c3p0 va essayer d’interrompre une tâche apparemment pendu. Rarement utile. Beaucoup de c3p0 les fonctions ne sont pas effectuées par des fils de client, mais de manière asynchrone par un pool de threads internes. c3p0 de asynchronisme améliore les performances du client directement, et minimise la longueur du temps que des verrous critiques sont détenues par s’assurer que les opérations lente jdbc sont effectuées dans les discussions non-lock-exploitation. Si, toutefois, certaines de ces tâches se "bloque", c’est qu’ils ne réussissent ni échouer avec une exception pour une période de temps prolongée, pool de threads c3p0 peuvent s’épuiser et les tâches administratives sauvegardés. Si les tâches sont simplement ralentir, la meilleure façon de résoudre le problème est d’augmenter le nombre de threads, via numHelperThreads. Mais si les tâches parfois bloquer indéfiniment, vous pouvez utiliser ce paramètre pour forcer un appel à la méthode interrupt () le fil tâche si une tâche dépasse un délai fixé.
[C3p0 finira par récupérer des tâches suspendues de toute façon en signalant une "impasse apparente" (vous le verrez comme un avertissement dans les journaux), remplaçant les fils du pool de threads de travail et d'interruption () uant les fils d'origine. Mais laisser la piscine aller dans impasse apparente, puis récupérer signifie que, pour certaines périodes, c3p0 la performance sera compromise. Donc, si vous voyez ces messages, l'augmentation et la mise en numHelperThreads maxAdministrativeTaskTime pourrait aider. maxAdministrativeTaskTime devrait être assez grand pour que toute tentative resonable d'acquérir une connexion à partir de la base de données, de tester une connexion, ou deux de détruire une connexion, on peut s'attendre à réussir ou d'échouer dans le délai. Zero (par défaut) signifie tâches ne sont jamais interrompus, qui est la meilleure politique la plus sûre et la plupart des circonstances. Si les tâches sont simplement lent, allouer davantage de discussions. Si les tâches sont suspendus à jamais, essayer de comprendre pourquoi, et peut-être mise en maxAdministrativeTaskTime peut aider dans l'intervalle.
Ne prend pas en charge les remplacements par utilisateur.
maxConnectionAge
Par défaut: 0
Secondes, de manière efficace un temps pour vivre. Une connexion de plus de maxConnectionAge seront détruits et éliminés de la piscine. Cela diffère de maxIdleTime en ce qu'il renvoie à l'âge absolu. Même une connexion qui n'a pas été beaucoup ralenti seront éliminés de la piscine si elle dépasse maxConnectionAge. Zéro veut dire pas d'âge maximum absolu est appliquée.
maxIdleTime
Par défaut: 0
Secondes, une connexion peut rester groupés mais non utilisés avant d'être jetés. Zéro veut dire que les connexions inactives n'expirent jamais. [Voir «Configuration de pool de base"]
maxIdleTimeExcessConnections
Par défaut: 0
Nombre de secondes que les connexions au-delà de MinPoolSize devraient être autorisés à rester les bras croisés dans la piscine avant d’être abattus. Destiné aux applications qui souhaitent agressive minimiser le nombre de connexions ouvertes, la réduction de la piscine en arrière vers MinPoolSize si, après un pic, le niveau de charge diminue et Connexions acquis ne sont plus nécessaires. Si maxIdleTime est fixé, maxIdleTimeExcessConnections devrait être plus petit si le paramètre est d’avoir un quelconque effet. Zéro veut dire que ne sont pas appliquées, Connexions excès ne sont pas ralenti à.
MaxPoolSize
Par défaut: 15
Le nombre maximum de connexions d’une piscine se maintenir à un moment donné. [Voir «Configuration de pool de base"]
maxStatements
Par défaut: 0
La taille du cache de c3p0 PreparedStatement mondiale. Si les deux maxStatements et maxStatementsPerConnection sont nuls, la mise en cache déclaration ne sera pas activée. Si maxStatements est nul mais maxStatementsPerConnection est une valeur différente de zéro, la mise en cache déclaration sera permis, mais pas de limite globale sera appliquée, que le maximum par connexion. maxStatements contrôle le nombre total de déclarations en cache, pour toutes les connexions. S’il est défini, il devrait être un assez grand nombre, comme chaque connexion commun exige de ses propres, distincts des états troupeau mis en cache. Comme un guide, pensez à combien de PreparedStatements distinctes sont utilisées fréquemment dans votre application, et multipliez ce nombre par MaxPoolSize pour arriver à une valeur appropriée. Bien maxStatements est le paramètre JDBC standard pour la mise en cache déclaration de contrôle, les utilisateurs peuvent trouver c3p0 de maxStatementsPerConnection alternative plus intuitive à utiliser. [Voir «Configuration Déclaration de mise en commun"]
maxStatementsPerConnection
Par défaut: 0
Le nombre de PreparedStatements c3p0 cache pour une connexion unique mis en commun. Si les deux maxStatements et maxStatementsPerConnection sont nuls, la mise en cache déclaration ne sera pas activée. Si maxStatementsPerConnection est nul mais maxStatements est une valeur non nulle, la mise en cache déclaration sera activé, et une limite globale appliquée, mais sinon pas de limite sera fixée sur le nombre de déclarations en cache pour une connexion unique. S’il est défini, maxStatementsPerConnection devrait être fixé à environ le nombre PreparedStatements distincts qui sont utilisés fréquemment dans votre application, plus deux ou trois supplémentaires si rarement des déclarations ne pas forcer les déclarations plus fréquentes mises en cache pour être abattus. Bien maxStatements est le paramètre JDBC standard pour la mise en cache déclaration de contrôle, les utilisateurs peuvent trouver maxStatementsPerConnection plus intuitif à utiliser. [Voir «Configuration Déclaration de mise en commun"]
MinPoolSize
Par défaut: 3
nombre minimum de connexions d’une piscine se maintenir à un moment donné. [Voir «Configuration de pool de base"]
numHelperThreads
Par défaut: 3
C3P0 est très asynchrone. Slow opérations JDBC sont généralement effectuées par des fils d’assistance qui ne détiennent pas de serrures soutenu. La diffusion de ces opérations sur plusieurs threads peuvent améliorer sensiblement la performance en permettant à de multiples opérations à effectuer simultanément.
Ne prend pas en charge les remplacements par utilisateur.
overrideDefaultUser
Par défaut: null
Forces le nom d’utilisateur qui doit par PooledDataSources lorsqu’un utilisateur appelle la méthode getConnection () par défaut de méthode. Ceci est principalement utile lorsque les applications sont la mise en commun des connexions d’une non-c3p0 mis en commun DataSource. Les applications qui utilisent ComboPooledDataSource, ou qui enveloppent tout c3p0 mises en œuvre non mis en commun DataSource pouvez utiliser la propriété d’utilisateur simple.
Ne prend pas en charge les remplacements par utilisateur.
overrideDefaultPassword
Par défaut: null
Forces le mot de passe doit par PooledDataSources lorsqu’un utilisateur appelle la méthode getConnection () par défaut de méthode. Ceci est principalement utile lorsque les applications sont la mise en commun des connexions d’une non-c3p0 mis en commun DataSource. Les applications qui utilisent ComboPooledDataSource, ou qui enveloppent tout c3p0 mises en œuvre non mis en commun DataSource pouvez utiliser la propriété simple mot de passe.
Ne prend pas en charge les remplacements par utilisateur.
Mot de passe
Par défaut: null
Pour les applications utilisant ComboPooledDataSource ou tout c3p0 mises en œuvre par DataSources mis en commun – DriverManagerDataSource ou la source de données retourné par DataSources.unpooledDataSource (…) – définit le mot de passe qui sera utilisé pour getConnection par défaut la source de données () de la méthode. (Voir également à l’utilisateur.)
Ne prend pas en charge les remplacements par utilisateur.
preferredTestQuery
Par défaut: null
Définit la requête qui sera exécutée pour tous les tests de connexion, si la valeur par défaut (ou une autre implémentation de QueryConnectionTester, ou mieux encore FullQueryConnectionTester) ConnectionTester est utilisé. Définition d’un preferredTestQuery qui exécutera rapidement dans votre base de données peut accélérer considérablement tests de connexion. (. Si aucun preferredTestQuery est défini, le ConnectionTester défaut exécute une getTables () sur DatabaseMetaData de la connexion en fonction de votre base de données, ce qui peut exécuter plus lentement que d’une requête de base de données “normale”.) NOTE: Le tableau sur lequel votre preferredTestQuery sera exécuter doit exister dans le schéma de base de données avant l’initialisation de votre de votre DataSource. Si votre application définit son propre schéma, essayez automaticTestTable lieu. [Voir «Configuration de test de connexion"]
propertyCycle
Par défaut: 0
Temps maximum en secondes avant que les contraintes de configuration utilisateur sont appliquées. Détermine la fréquence maxConnectionAge, maxIdleTime, maxIdleTimeExcessConnections, unreturnedConnectionTimeout sont appliquées. c3p0 vérifie périodiquement l’âge de connexions pour voir si ils ont expiré. Ce paramètre détermine la période. Zéro veut dire automatique: Une période appropriée sera déterminée par C3P0. [Vous pouvez appeler des méthodes getEffectivePropertyCycle ...() sur un PooledDataSource c3p0 de trouver automatiquement la période choisie.]
testConnectionOnCheckin
Défaut: faux
Si cela est vrai, une opération sera effectuée de façon asynchrone à chaque checkin connexion pour vérifier que la connexion est valide. Utiliser en combinaison avec idleConnectionTestPeriod pour tout à fait fiables, les tests de connexion toujours asynchrone. En outre, la fixation d’un automaticTestTable ou preferredTestQuery habituellement d’accélérer tous les tests de connexion. [Voir «Configuration de test de connexion"]
testConnectionOnCheckout
Défaut: faux
Utilisez uniquement si nécessaire. Coûteux. Si cela est vrai, une opération sera effectuée lors de chaque caisse connexion pour vérifier que la connexion est valide. Meilleur choix: vérifier les connexions périodiquement à l’aide idleConnectionTestPeriod. En outre, la fixation d’un automaticTestTable ou preferredTestQuery habituellement d’accélérer tous les tests de connexion. [Voir «Configuration de test de connexion"]
unreturnedConnectionTimeout
Par défaut: 0
Secondes. S’il est défini, si une application vérifie les mais ne parvient pas à check-in
d’une connexion dans le délai prescrit de temps, la piscine sera sans ménagement destroy () de la connexion. Ceci permet aux applications avec des fuites de connexion occasionnelle pour survivre, au lieu de finir épuiser le pool de connexion. Et c’est une honte. Zéro signifie pas de limite, les demandes devraient close () de leurs propres connexions. Évidemment, si une valeur non nulle est définie, elle doit être à une valeur plus que n’importe quelle connexion devrait raisonnablement être extrait. Sinon, la piscine sera l’occasion tuer Connexions dans l’utilisation active, ce qui est mauvais. Il s’agit essentiellement d’une mauvaise idée, mais c’est une caractéristique fréquemment demandées. Fixez vos applications $%!@% de sorte qu’ils n’ont pas les connexions de fuite! Utilisez ce temporairement en combinaison avec debugUnreturnedConnectionStackTraces de comprendre où les connexions sont en cours de vérification, que ne le font pas dans la piscine!
l’utilisateur
Par défaut: null
Pour les applications utilisant ComboPooledDataSource ou tout c3p0 mises en œuvre par DataSources mis en commun – DriverManagerDataSource ou la source de données retourné par DataSources.unpooledDataSource () – définit le nom d’utilisateur qui sera utilisé pour getConnection par défaut la source de données () de la méthode. (Voir aussi le mot de passe.)
Ne prend pas en charge les remplacements par utilisateur.
usesTraditionalReflectiveProxies
Défaut: faux
c3p0 utilisé à l’origine de réflexion dynamique procurations pour les implémentations de connexions et d’autres interfaces JDBC. En c3p0-0.8.5, non-réfléchissant, l’implémentation du code généré est utilisé à la place. Comme il s’agissait d’un changement majeur, et la base de code ancien a été largement utilisé et testé, ce paramètre a été ajouté pour permettre aux utilisateurs de revenir d’avoir eu des problèmes. La nouvelle, la mise en œuvre non-réflexive est plus rapide, et a maintenant été largement déployé et testé, il est peu probable que ce paramètre sera utile. Les anciennes et les nouvelles bases de codes de réflexion non-réfléchissantes sont maintenues, mais le support de l’ancienne base de code peut (ou non) être abandonnées à l’avenir.
&lt;div id=”_mcePaste” style=”position: absolute; left: -10000px; top: 2226px; width: 1px; height: 1px; overflow: hidden;”&gt;Annexe A: Configuration PropertiesGo de page
c3p0 propriétés de configuration peut être divisé en JavaBeans style propriétés et d’autres propriétés.
JavaBeans style Propriétés Revenir en haut
Les propriétés suivantes peuvent être définies directement dans le code en tant que propriétés JavaBeans, via un système de propriétés ou d’un fichier c3p0.properties (avec c3p0. Préfixé au nom de la propriété), ou dans un fichier c3p0-config.xml. Voir la section sur la configuration ci-dessus. Cliquez sur le nom de propriété pour une description complète.
acquireIncrement
acquireRetryAttempts
acquireRetryDelay
autoCommitOnClose
automaticTestTable
breakAfterAcquireFailure
checkoutTimeout
connectionCustomizerClassName
connectionTesterClassName
debugUnreturnedConnectionStackTraces
factoryClassLocation
forceIgnoreUnresolvedTransactions
idleConnectionTestPeriod
initialPoolSize
maxAdministrativeTaskTime
maxConnectionAge
maxIdleTime
maxIdleTimeExcessConnections
MaxPoolSize
maxStatements
maxStatementsPerConnection
MinPoolSize
numHelperThreads
overrideDefaultUser
overrideDefaultPassword
Mot de passe
preferredTestQuery
propertyCycle
testConnectionOnCheckin
testConnectionOnCheckout
unreturnedConnectionTimeout
l’utilisateur
usesTraditionalReflectiveProxies
acquireIncrement
Par défaut: 3
Détermine le nombre de connexions à un moment c3p0 vais essayer d’acquérir lorsque la piscine est épuisé. [Voir «Configuration de pool de base&amp;amp;quot;]
acquireRetryAttempts
Par défaut: 30
Définit combien de fois c3p0 vais essayer d’acquérir une nouvelle connexion de la base de données avant d’abandonner. Si cette valeur est inférieure ou égale à zéro, c3p0 va continuer à essayer de chercher une connexion indéfiniment. [Voir «Configuration de la récupération des pannes de base de données&amp;amp;quot;]
acquireRetryDelay
Par défaut: 1000
Millisecondes, le temps d’attente entre c3p0 va acquérir tentatives. [Voir «Configuration de la récupération des pannes de base de données&amp;amp;quot;]
autoCommitOnClose
Défaut: faux
La spécification JDBC est impardonnable silence sur ce qui devrait arriver en suspens, les transactions en attente à la fermeture de connexion. la politique par défaut C3P0 est de retour en arrière tout solde non engagé, le travail en cours. (Je pense que c’est absolument, indéniablement la bonne politique, mais il n’y a pas de consensus parmi les fournisseurs de pilotes JDBC.) Cadre autoCommitOnClose de vraies causes non engagés l’attente de travaux à engager, plutôt que restaurée sur près de connexion. [Note:. Depuis la spec est ridiculement peu claire sur cette question, les auteurs d'applications qui souhaitent éviter les bogues et des comportements incompatibles devrait s'assurer que toutes les transactions sont explicitement validée ou restaurée-back avant la clôture est appelée] [Voir «Configuration de la gestion des transactions en suspens&amp;amp;quot; ]
automaticTestTable
Par défaut: null
Si cela est prévu, c3p0 va créer une table vide avec le nom indiqué, et l’utilisation des requêtes sur la table pour tester la connexion. Si automaticTestTable est fourni, c3p0 va générer sa requête propre test, donc tout ensemble preferredTestQuery seront ignorées. Vous ne devriez pas travailler avec la table nommée après c3p0 elle crée, elle doit être strictement c3p0 les utiliser dans les tests de votre connexion. (Si vous définissez votre propre ConnectionTester, il doit implémenter l’interface QueryConnectionTester pour ce paramètre pour être utile.) [Voir «Configuration d'une connexion d'essai&amp;amp;quot;]
breakAfterAcquireFailure
Défaut: faux
Si cela est vrai, une mise en commun DataSource se déclarera cassé et être définitivement fermés si une connexion ne peut être obtenu à partir de la base de données après avoir fait acquireRetryAttempts d’acquérir une. Si elle est fausse, l’impossibilité d’obtenir une connexion entraînera tous les threads en attente pour le pool d’acquérir une connexion à lever une exception, mais la source de données restent valables, et tenter d’obtenir à nouveau suite à un appel à getConnection (). [Voir «Configuration de la récupération des pannes de base de données&amp;amp;quot;]
checkoutTimeout
Par défaut: 0
Le nombre de millisecondes une getConnection client appelant () attend une connexion à être enregistrés ou acquis lorsque la piscine est épuisé. Zéro veut dire attendre indéfiniment. Cadre toute valeur positive fera l’getConnection () pour time-out et de rompre avec une SQLException après le nombre spécifié de millisecondes.
connectionCustomizerClassName
Par défaut: null
La classe entièrement qualifié-nom d’un implememtation de l’interface ConnectionCustomizer, les utilisateurs peuvent mettre en œuvre pour établir des connexions quand ils sont acquis à partir de la base de données, ou lors du check-out, et potentiellement à nettoyer les choses au check-in et la destruction de connexion. Si les propriétés de connexion standard (holdability, en lecture seule, ou TransactionIsolation) sont définies dans la onAcquire ConnectionCustomizer () de méthode, elles seront prioritaires sur les valeurs par défaut de connexion.
connectionTesterClassName
Par défaut: com.mchange.v2.c3p0.impl.DefaultConnectionTester
La classe entièrement qualifié-nom d’un implememtation de l’interface ConnectionTester, ou QueryConnectionTester si vous souhaitez cas d’avoir accès à un utilisateur-preferredTestQuery configuré. Cela peut être utilisé pour personnaliser la manière dont c3p0 Connexions DataSources test, mais avec l’introduction des paramètres de configuration et automaticTestTable preferredTestQuery », créez vos propres&amp;amp;quot; devrait être excessif pour la plupart des utilisateurs. [Voir «Configuration de test de connexion&amp;amp;quot;]
debugUnreturnedConnectionStackTraces
Défaut: faux
Si c’est vrai, et si unreturnedConnectionTimeout est fixé à une valeur positive, alors la piscine de capture trace de la pile (via une exception) de toutes les caisses de connexion, et les traces de la pile sera imprimée lorsque non restitués check-out Connections timeout. Cette mesure vise à déboguer des applications à des fuites de connexion, qui est des applications qui parfois ne parviennent pas à revenir Connexions, conduisant à une croissance de piscine et, finalement, l’épuisement (lorsque les hits piscine MaxPoolSize avec toutes les connexions check-out et a perdu). Ce paramètre ne doit être réglé pendant le débogage, comme la capture de la trace de la pile va ralentir chaque connexion check-out.
Ne prend pas en charge les remplacements par utilisateur.
factoryClassLocation
Par défaut: null
Sources de données qui sera engagée par JNDI et l’utilisation de cette interface API référençable à eux-mêmes magasin peut spécifier une URL à partir de laquelle la classe capable de déréférencement d’un entre eux peuvent être chargés. Si (comme c’est généralement le cas), les bibliothèques c3p0 sera disponible sur place pour le service JNDI, laissez cette option configurée comme nulle.
Ne prend pas en charge les remplacements par utilisateur.
forceIgnoreUnresolvedTransactions
Défaut: faux
Fortement disrecommended. Ce paramètre à true peut conduire à des bugs subtils et bizarre. Ce paramètre est terrible, le laisser seul, sauf si absolument nécessaire. Il est ici pour contourner les bases de données ventilées / drivers JDBC qui ne sont pas correctement en charge les transactions, mais qui permettent les connexions &amp;amp;quot;autoCommit drapeaux pour aller à de fausses indépendamment. Si vous utilisez une base de données qui prend en charge les transactions «en partie» (c’est un oxymore, comme le point de l’ensemble des transactions est d’effectuer des opérations de manière fiable et complète, mais néanmoins de nature bases de données sont là-bas), si vous vous sentez à l’aise en ignorant le fait que les connexions avec autoCommit == false peut être au milieu des transactions et des verrous peuvent et d’autres ressources, vous pouvez désactiver le comportement par défaut c3p0 sage, qui est de se protéger, ainsi que la convivialité et la cohérence de la base de données, soit par roulement en arrière ( par défaut) ou de commettre (voir ci-dessus c3p0.autoCommitOnClose) les transactions non résolues. Cela ne devrait être défini à true lorsque vous êtes sûr que vous utilisez une base de données qui permet drapeau Connections ‘autoCommit pour aller à faux, mais n’offre pas de soutien significatif d’autres des transactions. Sinon, ce paramètre à true est juste une mauvaise idée. [Voir «Configuration des transactions non résolues de manutention&amp;amp;quot;]
idleConnectionTestPeriod
Par défaut: 0
S’il s’agit d’un nombre supérieur à 0, c3p0 permettra de tester tous ralenti, mais les connexions regroupées décochée-out, le nombre de secondes. [Voir «Configuration de test de connexion&amp;amp;quot;]
initialPoolSize
Par défaut: 3
Nombre de connexions d’une piscine vais essayer d’acquérir au démarrage. Doit se situer entre MinPoolSize et MaxPoolSize. [Voir «Configuration de pool de base&amp;amp;quot;]
maxAdministrativeTaskTime
Par défaut: 0
Secondes avant de pool de threads c3p0 va essayer d’interrompre une tâche apparemment pendu. Rarement utile. Beaucoup de c3p0 les fonctions ne sont pas effectuées par des fils de client, mais de manière asynchrone par un pool de threads internes. c3p0 de asynchronisme améliore les performances du client directement, et minimise la longueur du temps que des verrous critiques sont détenues par s’assurer que les opérations lente jdbc sont effectuées dans les discussions non-lock-exploitation. Si, toutefois, certaines de ces tâches se &amp;amp;quot;bloque&amp;amp;quot;, c’est qu’ils ne réussissent ni échouer avec une exception pour une période de temps prolongée, pool de threads c3p0 peuvent s’épuiser et les tâches administratives sauvegardés. Si les tâches sont simplement ralentir, la meilleure façon de résoudre le problème est d’augmenter le nombre de threads, via numHelperThreads. Mais si les tâches parfois bloquer indéfiniment, vous pouvez utiliser ce paramètre pour forcer un appel à la méthode interrupt () le fil tâche si une tâche dépasse un délai fixé.
[C3p0 finira par récupérer des tâches suspendues de toute façon en signalant une "impasse apparente" (vous le verrez comme un avertissement dans les journaux), remplaçant les fils du pool de threads de travail et d'interruption () uant les fils d'origine. Mais laisser la piscine aller dans impasse apparente, puis récupérer signifie que, pour certaines périodes, c3p0 la performance sera compromise. Donc, si vous voyez ces messages, l'augmentation et la mise en numHelperThreads maxAdministrativeTaskTime pourrait aider. maxAdministrativeTaskTime devrait être assez grand pour que toute tentative resonable d'acquérir une connexion à partir de la base de données, de tester une connexion, ou deux de détruire une connexion, on peut s'attendre à réussir ou d'échouer dans le délai. Zero (par défaut) signifie tâches ne sont jamais interrompus, qui est la meilleure politique la plus sûre et la plupart des circonstances. Si les tâches sont simplement lent, allouer davantage de discussions. Si les tâches sont suspendus à jamais, essayer de comprendre pourquoi, et peut-être mise en maxAdministrativeTaskTime peut aider dans l'intervalle.
Ne prend pas en charge les remplacements par utilisateur.
maxConnectionAge
Par défaut: 0
Secondes, de manière efficace un temps pour vivre. Une connexion de plus de maxConnectionAge seront détruits et éliminés de la piscine. Cela diffère de maxIdleTime en ce qu'il renvoie à l'âge absolu. Même une connexion qui n'a pas été beaucoup ralenti seront éliminés de la piscine si elle dépasse maxConnectionAge. Zéro veut dire pas d'âge maximum absolu est appliquée.
maxIdleTime
Par défaut: 0
Secondes, une connexion peut rester groupés mais non utilisés avant d'être jetés. Zéro veut dire que les connexions inactives n'expirent jamais. [Voir «Configuration de pool de base"]
maxIdleTimeExcessConnections
Par défaut: 0
Nombre de secondes que les connexions au-delà de MinPoolSize devraient être autorisés à rester les bras croisés dans la piscine avant d’être abattus. Destiné aux applications qui souhaitent agressive minimiser le nombre de connexions ouvertes, la réduction de la piscine en arrière vers MinPoolSize si, après un pic, le niveau de charge diminue et Connexions acquis ne sont plus nécessaires. Si maxIdleTime est fixé, maxIdleTimeExcessConnections devrait être plus petit si le paramètre est d’avoir un quelconque effet. Zéro veut dire que ne sont pas appliquées, Connexions excès ne sont pas ralenti à.
MaxPoolSize
Par défaut: 15
Le nombre maximum de connexions d’une piscine se maintenir à un moment donné. [Voir «Configuration de pool de base"]
maxStatements
Par défaut: 0
La taille du cache de c3p0 PreparedStatement mondiale. Si les deux maxStatements et maxStatementsPerConnection sont nuls, la mise en cache déclaration ne sera pas activée. Si maxStatements est nul mais maxStatementsPerConnection est une valeur différente de zéro, la mise en cache déclaration sera permis, mais pas de limite globale sera appliquée, que le maximum par connexion. maxStatements contrôle le nombre total de déclarations en cache, pour toutes les connexions. S’il est défini, il devrait être un assez grand nombre, comme chaque connexion commun exige de ses propres, distincts des états troupeau mis en cache. Comme un guide, pensez à combien de PreparedStatements distinctes sont utilisées fréquemment dans votre application, et multipliez ce nombre par MaxPoolSize pour arriver à une valeur appropriée. Bien maxStatements est le paramètre JDBC standard pour la mise en cache déclaration de contrôle, les utilisateurs peuvent trouver c3p0 de maxStatementsPerConnection alternative plus intuitive à utiliser. [Voir «Configuration Déclaration de mise en commun"]
maxStatementsPerConnection
Par défaut: 0
Le nombre de PreparedStatements c3p0 cache pour une connexion unique mis en commun. Si les deux maxStatements et maxStatementsPerConnection sont nuls, la mise en cache déclaration ne sera pas activée. Si maxStatementsPerConnection est nul mais maxStatements est une valeur non nulle, la mise en cache déclaration sera activé, et une limite globale appliquée, mais sinon pas de limite sera fixée sur le nombre de déclarations en cache pour une connexion unique. S’il est défini, maxStatementsPerConnection devrait être fixé à environ le nombre PreparedStatements distincts qui sont utilisés fréquemment dans votre application, plus deux ou trois supplémentaires si rarement des déclarations ne pas forcer les déclarations plus fréquentes mises en cache pour être abattus. Bien maxStatements est le paramètre JDBC standard pour la mise en cache déclaration de contrôle, les utilisateurs peuvent trouver maxStatementsPerConnection plus intuitif à utiliser. [Voir «Configuration Déclaration de mise en commun"]
MinPoolSize
Par défaut: 3
nombre minimum de connexions d’une piscine se maintenir à un moment donné. [Voir «Configuration de pool de base"]
numHelperThreads
Par défaut: 3
C3P0 est très asynchrone. Slow opérations JDBC sont généralement effectuées par des fils d’assistance qui ne détiennent pas de serrures soutenu. La diffusion de ces opérations sur plusieurs threads peuvent améliorer sensiblement la performance en permettant à de multiples opérations à effectuer simultanément.
Ne prend pas en charge les remplacements par utilisateur.
overrideDefaultUser
Par défaut: null
Forces le nom d’utilisateur qui doit par PooledDataSources lorsqu’un utilisateur appelle la méthode getConnection () par défaut de méthode. Ceci est principalement utile lorsque les applications sont la mise en commun des connexions d’une non-c3p0 mis en commun DataSource. Les applications qui utilisent ComboPooledDataSource, ou qui enveloppent tout c3p0 mises en œuvre non mis en commun DataSource pouvez utiliser la propriété d’utilisateur simple.
Ne prend pas en charge les remplacements par utilisateur.
overrideDefaultPassword
Par défaut: null
Forces le mot de passe doit par PooledDataSources lorsqu’un utilisateur appelle la méthode getConnection () par défaut de méthode. Ceci est principalement utile lorsque les applications sont la mise en commun des connexions d’une non-c3p0 mis en commun DataSource. Les applications qui utilisent ComboPooledDataSource, ou qui enveloppent tout c3p0 mises en œuvre non mis en commun DataSource pouvez utiliser la propriété simple mot de passe.
Ne prend pas en charge les remplacements par utilisateur.
Mot de passe
Par défaut: null
Pour les applications utilisant ComboPooledDataSource ou tout c3p0 mises en œuvre par DataSources mis en commun – DriverManagerDataSource ou la source de données retourné par DataSources.unpooledDataSource (…) – définit le mot de passe qui sera utilisé pour getConnection par défaut la source de données () de la méthode. (Voir également à l’utilisateur.)
Ne prend pas en charge les remplacements par utilisateur.
preferredTestQuery
Par défaut: null
Définit la requête qui sera exécutée pour tous les tests de connexion, si la valeur par défaut (ou une autre implémentation de QueryConnectionTester, ou mieux encore FullQueryConnectionTester) ConnectionTester est utilisé. Définition d’un preferredTestQuery qui exécutera rapidement dans votre base de données peut accélérer considérablement tests de connexion. (. Si aucun preferredTestQuery est défini, le ConnectionTester défaut exécute une getTables () sur DatabaseMetaData de la connexion en fonction de votre base de données, ce qui peut exécuter plus lentement que d’une requête de base de données "normale".) NOTE: Le tableau sur lequel votre preferredTestQuery sera exécuter doit exister dans le schéma de base de données avant l’initialisation de votre de votre DataSource. Si votre application définit son propre schéma, essayez automaticTestTable lieu. [Voir «Configuration de test de connexion"]
propertyCycle
Par défaut: 0
Temps maximum en secondes avant que les contraintes de configuration utilisateur sont appliquées. Détermine la fréquence maxConnectionAge, maxIdleTime, maxIdleTimeExcessConnections, unreturnedConnectionTimeout sont appliquées. c3p0 vérifie périodiquement l’âge de connexions pour voir si ils ont expiré. Ce paramètre détermine la période. Zéro veut dire automatique: Une période appropriée sera déterminée par C3P0. [Vous pouvez appeler des méthodes getEffectivePropertyCycle ...() sur un PooledDataSource c3p0 de trouver automatiquement la période choisie.]
testConnectionOnCheckin
Défaut: faux
Si cela est vrai, une opération sera effectuée de façon asynchrone à chaque checkin connexion pour vérifier que la connexion est valide. Utiliser en combinaison avec idleConnectionTestPeriod pour tout à fait fiables, les tests de connexion toujours asynchrone. En outre, la fixation d’un automaticTestTable ou preferredTestQuery habituellement d’accélérer tous les tests de connexion. [Voir «Configuration de test de connexion"]
testConnectionOnCheckout
Défaut: faux
Utilisez uniquement si nécessaire. Coûteux. Si cela est vrai, une opération sera effectuée lors de chaque caisse connexion pour vérifier que la connexion est valide. Meilleur choix: vérifier les connexions périodiquement à l’aide idleConnectionTestPeriod. En outre, la fixation d’un automaticTestTable ou preferredTestQuery habituellement d’accélérer tous les tests de connexion. [Voir «Configuration de test de connexion"]
unreturnedConnectionTimeout
Par défaut: 0
Secondes. S’il est défini, si une application vérifie les mais ne parvient pas à check-in
d’une connexion dans le délai prescrit de temps, la piscine sera sans ménagement destroy () de la connexion. Ceci permet aux applications avec des fuites de connexion occasionnelle pour survivre, au lieu de finir épuiser le pool de connexion. Et c’est une honte. Zéro signifie pas de limite, les demandes devraient close () de leurs propres connexions. Évidemment, si une valeur non nulle est définie, elle doit être à une valeur plus que n’importe quelle connexion devrait raisonnablement être extrait. Sinon, la piscine sera l’occasion tuer Connexions dans l’utilisation active, ce qui est mauvais. Il s’agit essentiellement d’une mauvaise idée, mais c’est une caractéristique fréquemment demandées. Fixez vos applications $%!@% de sorte qu’ils n’ont pas les connexions de fuite! Utilisez ce temporairement en combinaison avec debugUnreturnedConnectionStackTraces de comprendre où les connexions sont en cours de vérification, que ne le font pas dans la piscine!
l’utilisateur
Par défaut: null
Pour les applications utilisant ComboPooledDataSource ou tout c3p0 mises en œuvre par DataSources mis en commun – DriverManagerDataSource ou la source de données retourné par DataSources.unpooledDataSource () – définit le nom d’utilisateur qui sera utilisé pour getConnection par défaut la source de données () de la méthode. (Voir aussi le mot de passe.)
Ne prend pas en charge les remplacements par utilisateur.
usesTraditionalReflectiveProxies
Défaut: faux
c3p0 utilisé à l’origine de réflexion dynamique procurations pour les implémentations de connexions et d’autres interfaces JDBC. En c3p0-0.8.5, non-réfléchissant, l’implémentation du code généré est utilisé à la place. Comme il s’agissait d’un changement majeur, et la base de code ancien a été largement utilisé et testé, ce paramètre a été ajouté pour permettre aux utilisateurs de revenir d’avoir eu des problèmes. La nouvelle, la mise en œuvre non-réflexive est plus rapide, et a maintenant été largement déployé et testé, il est peu probable que ce paramètre sera utile. Les anciennes et les nouvelles bases de codes de réflexion non-réfléchissantes sont maintenues, mais le support de l’ancienne base de code peut (ou non) être abandonnées à l’avenir.