Hibernate/MySQL Délai D'Attente De Connexion
J'ai écrit une application côté serveur que les pouvoirs d'un site web et mobiles multiples clients. J'ai utilisé Hibernate pour accéder aux données. J'ai découvert plus tard que l'application échoue après un jour! Quand j'ai regardé autour de ligne, je trouve que ses un problème avec MySQL mettre fin à un "vicié" connexion au bout de 8 heures. Afin d'éviter cela, j'ai trouvé beaucoup de suggestions comme y compris ?autoReconnect=true
, à l'aide de c3P0
, etc.
Depuis autoReconnect
est officiellement déconseillée (en particulier dans l'environnement de production) et aussi parce qu'il n'a pas eu d'effet que lorsque j'ai appliqué, j'ai décidé d'aller pour c3p0
. Malheureusement, après la présentation de la c3p0
de configuration dans mon hibernate.cfg.xml
fichier, l'application commence à jeter un NullPointerException
quelque part dans mon code où j'ai appelé dbSession.close()
Cela signifie que le HibernateUtil.getSessionFactory()
renvoie en fait null
. J'ai ajouté le nécessaire pots (pots de c3p0-0.9.2-pre2.jar, hibernate-core-3.3.1.GA.jar, hibernate-c3p0-3.3.2.GA.jar, mchange-commons-java-0.2.1.jar et c3p0-oracle-thin-extras-0.9.2-pre2.jar) même si je ne pense pas que son tous ceux qui sont requis.
Je suis passé par beaucoup de pages qui parle de ce problème mais je ne suis pas encore en mesure de le configurer correctement. De bien vouloir m'aider avec un "débutant-friendly" facile à mettre en œuvre, étape par étape la procédure pour la configuration de c3p0
avec mise en veille prolongée. Je suis de l'utilisation d'Hibernate 3.3.6 sur JDK 1.6, MySQL 5.5 et je suis en développement dans Netbeans 7.0.
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.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/religion_app</property>
<property name="hibernate.connection.username">*****</property>
<property name="hibernate.connection.password">*****</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="connection.autoReconnect">true</property>
<property name="connection.autoReconnectForPools">true</property>
<property name="connection.is-connection-validation-required">true</property>
<!-- configuration pool via c3p0-->
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.idle_test_period">120</property> <!-- seconds -->
<property name="c3p0.max_size">100</property>
<property name="c3p0.max_statements">0</property>
<property name="c3p0.min_size">10</property>
<property name="c3p0.timeout">180</property> <!-- seconds -->
<property name="c3p0.preferredTestQuery">select 1;</property>
<!--Mappings go here-->
</session-factory>
</hibernate-configuration>
Voici ce que j'ai obtenu après l'ajout de c3p0 (sans slf4j):
May 23, 2012 2:42:14 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet LoginChurch threw exception
java.lang.NullPointerException
at com.pacesolutions.religionapp.services.LoginChurch.processRequest(LoginChurch.java:109)
at com.pacesolutions.religionapp.services.LoginChurch.doPost(LoginChurch.java:138)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:722)
May 23, 2012 2:45:13 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet LoginChurch threw exception
java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
at org.hibernate.connection.C3P0ConnectionProvider.<clinit>(C3P0ConnectionProvider.java:52)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:73)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
at com.pacesolutions.religionapp.HibernateUtil.<clinit>(HibernateUtil.java:23)
at com.pacesolutions.religionapp.services.LoginChurch.processRequest(LoginChurch.java:68)
at com.pacesolutions.religionapp.services.LoginChurch.doPost(LoginChurch.java:143)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
La plupart de mes Hibernate fichiers de configuration où généré par Netbeans. J'ai eu de la base de données sur le terrain, puis j'ai utilisé Hibernate assistants de Netbeans pour générer les fichiers de configuration, les classes d'entités et des fichiers de mappage. Ces fonctionnait correctement avant que j'ai présenté c3p0 (mais ils ne parviennent pas au bout de 8 heures).
J'utilise Mecurial avec mon projet et en retournant l'ensemble du projet à un moment avant le moment où j'ai présenté c3p0, il fonctionne à nouveau (pendant 8 heures). Même la main-suppression de toutes les configurations dans c3p0 hibernate.cfg.xml fait que l'application fonctionne à nouveau. Que pouvais-je fait de mal?
OriginalL'auteur Sayo Oladeji | 2012-05-22
Vous devez vous connecter pour publier un commentaire.
Les pots nécessaires pour C3P0 de configuration sont c3p0-0.9.2-pre2.jar & mchange-commons-java-0.2.1.jar. Aussi, en plus, vous devez mettre c3p0.propriétés dans le classpath.
Ci-dessous sont les propriétés qui doivent être configurées en utilisant C3P0 avec Hibernate.
hibernate.cfg.xml
c3p0.propriétés
Vous pouvez valider la connexion sur chaque caisse
c3p0.testConnectionOnCheckout=true
, mais c'est cher à l'opération.D'autre, vous pouvez réessayer pour établir la connexion périodiquement.
Cette nouvelle tentative 4 fois avec un retard de 5 secondes entre chaque consécutives tentative.
c3p0.acquireRetryAttempts = 4
c3p0.acquireRetryDelay=5000
aller?Cela ne semble pas fonctionner non plus. Puis-je demander ce mon HibernateUtil.java devrait ressembler?
Ces deux propriétés mentionnées doit être placé dans c3p0.fichier de propriétés. Probablement, il n'y a pas d'effet à HibernateUtil.java il n'est pas affecté. Vous pouvez soit essayer
testConnectionOnCheckout
ou de ces deux propriétés.Mon c3p0.fichier de propriétés est maintenant dans le même répertoire avec hibernate.cfg.xml et j'ai toujours l'exception NullPointerException.
Édité hibernate.cfg.xml contenu, essayez aussi de débogage supplémentaires, est sessionFactory retourner null ou dbSession est null. Ces fichiers de configuration doit être dans le classpath du projet
OriginalL'auteur Nayan Wadekar
c3p0 a pas de dépendance sur SLF4J. Si l'ajout de cette bibliothèque à votre classpath résolu votre problème, c'est intéressant, mais pas si facile à expliquer.
Une trace de la pile de l'original NPE tomcat enregistré lorsque vous avez eu des problèmes serait utile. (Je suis c3p0 du développeur.)
Noter que c3p0.propriétés de besoins pour être au top niveau de la variable CLASSPATH de votre application, ce qui peut ne pas être là où d'autres fichiers de configuration sont situés. c3p0.propriétés est chargé comme un chargeur de classe de ressource.
OriginalL'auteur Steve Waldman
Le bug peut être corrigé à l'aide commerciale mise en commun des bibliothèques comme suggéré ci-dessus. J'ai utilisé c3p0 exactement comme suggéré par @NayanWadekar.
Veuillez noter que c3p0 dépend de SLF4J. Donc, à la suite notamment de c3p0 pots dans votre classpath, vous devez aussi ajouter le SLF4J pots dans votre classpath. Le truc à propos de cette chose, c'est que, si ces SLF4J pots ne sont pas présents, le compilateur ne parvenez toujours pas à vous plaindre, vous obtenez seulement les erreurs après le déploiement de l'application.
Aussi, si vous êtes à l'aide de Netbeans, éviter de créer un SLF4J bibliothèque de tous les pots regroupés ici à slf4.org. La raison en est que certains de ces vases ne sont pas destinés à être utilisés ensemble dans le même projet. Juste deux pots seul à partir de la bibliothèque: slf4j-api-1.6.4.jar et slf4j-jdk14-1.6.4.jar. Vous pouvez visiter http://www.slf4j.org pour plus de détails.
OriginalL'auteur Sayo Oladeji