Hibernate, C3P0, Mysql - Pipe brisée
MySQL semble avoir 8 heures de temps sur ses connexions. Je suis à cours multiples Guerres dans Tomcat utilisant Hibernate pour l'ORM. Après 8 heures (c'est à dire la nuit), j'ai cassé les canaux lorsqu'il capte une connexion inactive.
J'ai déjà tracées par le code et fait doublement sûr que je commit ou rollback toutes les transactions.
Voici mon hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5MyISAMDialect</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
<!--property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property-->
<property name="c3p0.min_size">3</property>
<property name="c3p0.max_size">5</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.preferredTestQuery">SELECT 1</property>
<property name="c3p0.testConnectionOnCheckout">true</property>
<property name="c3p0.idle_test_period">100</property> <!-- seconds -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="cache.use_query_cache">false</property>
<property name="cache.use_minimal_puts">false</property>
<property name="max_fetch_depth">10</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- classes removed -->
</session-factory>
Le paramètre j'ai pensé aurait fixe c'était la c3p0.idle_test_period
-- la valeur par défaut est 0. Toutefois, nous avons encore le Broken Pipe problème après 8 heures de course. Bien qu'il existe plusieurs billets d'index via Google, aucun d'arriver à une réponse satisfaisante.
source d'informationauteur Mark
Vous devez vous connecter pour publier un commentaire.
Ainsi, il s'avère qu'il me manquait une ligne de clé qui a permis à c3p0 (le c3p0 paramètres j'ai été peaufinage ont eu aucun effet, parce que Hibernate utilise intégré dans le pool de connexion -- qui il avertit de façon appropriée n'est pas adapté pour la production). Dans hibernate 2.x, réglage de la
hibernate.c3p0.max_size
bien activé c3p0 le regroupement de connexion. Toutefois, en 3.x, vous devez spécifier la propriété suivante --De plus, voici ma dernière paramètres de configuration --
Il est assez regrettable que les deux Hibernate et c3p0 ont insondable de la documentation à cet égard.
Il y a deux choses qui se passent ici. Vous devriez lire cet article pour plus de détails, mais les cadeaux sont:
hibernate.c3p0.idle_test_period
au lieu de simplementc3p0.idle_test_period
C'est une solution quand vous avez une canalisation rompue en raison de la combinaison de tomcat wait_timeout=28800 sec(8h) et maxIdleTime=0 dans c3p0:
J'ai changé les locaux de tomcat wait_timeout via mon.fichier ini pour 120sec (2 min). Et j'ai placé les points suivants:
maxIdleTime=100
idleConnectionTestPeriod=0 (même en tant que par défaut/comme si elle n'existait pas)
autres:
acquireIncrement=2
minPoolSize=2
maxPoolSize=5
maxIdleTimeExcessConnections=10
Je n'avais pas de problèmes avec cette configuration.
Je n'ai pas besoin d'utiliser idleConnectionTestPeriod!
Si tomcat est wait_timeout est 28800 sec, et maxIdleTime est 25200, cela signifie que c3p0 va fermer la connexion inactive dans 3600sec (1h) plus tôt, avant de tomcat lance un "broken pipe" l'exception". N'est-ce pas?!
Comme vous pouvez le voir, je n'ai aucun problème avec le fournir uniquement maxIdleTime.
Malheureusement, ces:
maxIdleTime
idleConnectionTestPeriod
configuring_connection_testing
testConnectionOnCheckin
n'expliquez pas trop le coin des cas.
Et, d'ailleurs, ici, est de savoir comment ouvrir le fichier tomcat est mon.fichier ini avec Notepad++:
http://drupal.org/node/32715#comment-4907440
Acclamations,
Despote
J'ai plusieurs problème
- C3P0ConnectionProvider n'a pas été trouvé
- Je le résoudre en utilisant hibernate c3p0 version
- Je n'ai que wait_timeout question sur mysql. J'ai d'abord mis dans /etc/my.cnf wait_timeout=10
puis j'ai changé le temps d'Inactivité valeur à la baisse de la wait_timeout valeur < 10
Qui a résolu mon problème.
J'ai fait le même problème et il a fallu du temps pour trouver la solution.
J'utilise Hibernate 4.0.1 et mysql 5.1(pas de ressort), et un cadre, j'ai été confronté à la question. D'abord assurez-vous que vous avez configuré le c3p0 pots correctement, ce qui est essentiel.
J'ai utilisé ces propriétés dans hibernate.cfg.xml
Mais il ne sert à rien " cause C3p0 toujours les propriétés par défaut de ne pas les propriétés que j'ai mis dans hibernate.cfg.xml Vous pouvez le vérifier dans les journaux. Donc, j'ai cherché sur de nombreux sites web pour le droit de solution et finalement, je suis venu avec cette. supprimer la C3p0 propriétés dans cfg.xml et créer c3p0-config.xml dans le chemin de la racine(avec cfg.xml) et de définir les propriétés comme suit.
mais, si vous exécutez, ORM prend de la connexion jdbc, mais pas C3p0 pool de connexion " on doit ajouter ces propriétés dans hibernate.cfg.xml
maintenant tout fonctionne très bien(Au moins il a bien fonctionné pour moi) et le problème est résolu.
vérifiez les éléments suivants pour les références.
http://www.mchange.com/projects/c3p0/index.html#configuring_connection_testing
https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool
J'espère que cela résout votre problème.