2016-04-13 8 views
0

Ich arbeite an einem Java-Projekt mit Hibernate, Spring und MySQL. Mein System funktioniert perfekt in localhost mit XAMPP, aber wenn ich es auf einen Remote-Server hochladen, hat es ein seltsames Verhalten. In dem Moment, in dem ich meine Anwendung bereitstelle, funktioniert es gut (ich kann mich auf meiner Website anmelden), aber nach ein paar Sekunden Inaktivität (ich glaube 20 Sekunden mehr oder weniger) kann ich keine Verbindung mehr zu meiner Datenbank herstellen. Dies ist der Fehler im catalina Protokoll angezeigt:Hibernate/Mysql, Verbindung verloren

Apr 12, 2016 5:55:54 PM org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter doFilter 
SEVERE: An internal error occurred while trying to authenticate the user. 
org.springframework.security.authentication.InternalAuthenticationServiceException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 31,464 milliseconds ago. The last packet sent successfully to the server was 24 milliseconds ago. 
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:126) 
    at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:143) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:167) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:192) 
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:93) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:120) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.persistence.PersistenceException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 31,464 milliseconds ago. The last packet sent successfully to the server was 24 milliseconds ago. 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1700) 
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:48) 
org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:114) 
    ... 40 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 31,464 milliseconds ago. The last packet sent successfully to the server was 24 milliseconds ago. 
    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:526) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:981) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3465) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3365) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3805) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) 
    at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4874) 
    at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:912) 
    at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.begin(AbstractLogicalConnectionImplementor.java:67) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:238) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:214) 
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:52) 
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1512) 
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:45) 
    ... 45 more 
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2957) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3375) 
    ... 58 more 

Die Konfiguration in einer ‚persistence.xml‘ genannt Datei ausgeführt wird, ist dies die Konfiguration in dieser Datei:

<persistence-unit name="project" transaction-type="RESOURCE_LOCAL"> 
     <description>My Persistence Unit</description> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" 
       value="jdbc:mysql://127.0.0.1:3306/my_db" /> 

      <property name="javax.persistence.jdbc.user" value="MyUser" /> 
      <property name="javax.persistence.jdbc.password" value="MyPass" /> 

      <property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider"/> 

      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.hbm2ddl.auto" value="validate" /> 

      <property name="hibernate.c3p0.max_statements" value="50" /> 
      <property name="hibernate.cache.use_query_cache" value="false" /> 
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.use_sql_comments" value="true" /> 
      <property name="hibernate.c3p0.timeout" value="1800" /> 
      <property name="hibernate.c3p0.testConnectionOnCheckout" value="true" /> 
      <property name="hibernate.c3p0.initialPoolSize" value="3" /> 
      <property name="hibernate.c3p0.acquire_increment" value="3" /> 
     </properties> 
    </persistence-unit> 

ich nicht tat schreibe diesen Code, dies wurde von einem Kollegen gemacht, daher weiß ich nicht, ob etwas im Code bezüglich der Konfiguration fehlt. Vielleicht liegt das Problem in der Serverkonfiguration.

Jede Hilfe wäre willkommen.

+0

einmal ändern provider_class Wert versuchen und überprüfen und entfernen Sie diese Zeile

+0

@PiyushGupta Ich finde diese Datei in meinem Projekt nicht, alles ist in der Datei persistence.xml. Ist diese Winterschlafdatei absolut notwendig? Ich habe keine Erfahrung mit Winterschlaf. Ich habe auch versucht, die von Ihnen erwähnte Codezeile zu ändern, aber derselbe Fehler bleibt bestehen. –

+0

Nach dieser Änderung müssen Sie das Projekt erneut säubern und erstellen, dann überprüfen, ob es funktioniert oder nicht? ... oder noch eine Sache, überprüfen Sie die Verbindung auch mit dem Ping-Befehl –

Antwort

1

Endlich habe ich es geschafft, dieses Problem zu lösen. Hibernate-Konfiguration war gut, das Problem lag in den MySQL-Parametern im Server-Provider. Ich sprach mit ihnen und der 'wait_timeout'-Parameter war 20 Sekunden (es passt total zu meiner Berechnung), also bat ich sie, dieses Timeout auf 28800 Sekunden zu erhöhen und jetzt funktioniert es richtig.

Verwandte Themen