2012-05-18 3 views
0

Я получаю эту ошибку случайным образом при доступе к веб-службе. Трудно реплицироваться, и как только я обновляю его, все работает так, как ожидалось.jdbc begin failed

 

    Caused by: org.hibernate.exception.JDBCConnectionException: could not execute query 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
     at org.hibernate.loader.Loader.doList(Loader.java:2235) 
     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129) 
     at org.hibernate.loader.Loader.list(Loader.java:2124) 
     at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118) 
     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1597) 
     at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306) 
     at edu.asd.myproj.hibernate.adapter.CriteriaAdapter.list(CriteriaAdapter.java:380) 
     at edu.asd.myproj.DaoHibernateImpl.findByCriteria(DaoHibernateImpl.java:778) 
     at edu.asd.myproj.DaoHibernateImpl.findByCriteria(DaoHibernateImpl.java:765) 
     at edu.asd.myproj.DaoHibernateImpl.findByProperty(DaoHibernateImpl.java:361) 
     at edu.asd.myproj.ProfilesDaoImpl.count(ProfilesDaoImpl.java:81) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
     at $Proxy27.count(Unknown Source) 
     at edu.asd.myproj.ResourceProfileLoaderNew.loadProfiles(ResourceProfileLoaderNew.java:66) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:297) 
     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:250) 
     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:144) 
     ... 50 more 
    Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was44323 seconds ago.The last packet sent successfully to the server was 44323 seconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) 
     at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3246) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1917) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) 
     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) 
     at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885) 
     at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93) 
     at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 
     at org.hibernate.loader.Loader.getResultSet(Loader.java:1812) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:697) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 
     at org.hibernate.loader.Loader.doList(Loader.java:2232) 
     ... 79 more 
    Caused by: java.net.SocketException: Broken pipe 
     at java.net.SocketOutputStream.socketWrite0(Native Method) 
     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) 
     at java.net.SocketOutputStream.write(SocketOutputStream.java:136) 
     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) 
     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) 
     at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3227) 
     ... 90 more 

Это мой hibernate.properties файл

# Turn on for SQL debugging 
hibernate.show_sql=true 

# Generate schema? 
hibernate.hbm2ddl.auto=validate 

#============================================================ 
# C3P0 connection pool configuration 
#============================================================ 
#changed to default values 
c3p0.acquireIncrement=hibernate.c3p0.acquire_increment 
c3p0.idleConnectionTestPeriod=hibernate.c3p0.idle_test_period 
c3p0.initialPoolSize=10 
c3p0.maxIdleTime=hibernate.c3p0.timeout 
c3p0.maxPoolSize=hibernate.c3p0.max_size 
c3p0.maxStatements=hibernate.c3p0.max_statements 
c3p0.minPoolSize=hibernate.c3p0.min_size 
c3p0.testConnectionsOnCheckout=hibernate.c3p0.validate 

рассматривается ошибка случайным образом один раз, и это занимает много времени, прежде чем он reappears.It уходит, как только обновляется.

ответ

4

Просьба отправить полную трассировку стека исключений для лучшего понимания читателя.

Это исключение происходило обычно, когда DB Connection устарел.

Stale означает: соединение убито сервером, но все еще считается живым у бассейна. Вам необходимо настроить тестирование соединения в соединении. При таком подходе в C3P0 вы должны с помощью следующей конфигурации:

c3p0.testConnectionOnCheckin = true 
testConnectionOnCheckout= true 

и для более увеличения проверки расчетного времени ожидания следующим образом:

c3p0.checkoutTimeout = 0 

и проверить еще один тест вариантов в C3P0, такие как:

  • connectionTesterClassName
  • idleConnectionTestPeriod
  • automaticTestTable
  • preferredTestQuery

Другой способ для испытания написания образец кода и подключения к базе данных через JDBC pure кодов. (По DriverManager и Connection и т.д.)

+0

Даже после добавления c3p0.testConnectionOnCheckin = верно Я получаю ту же ошибку. Я также добавил autoReconnect? = True для URL-адреса базы данных. Но все та же ошибка. – icedek

+1

Извините за задержку в ответе на ваш комментарий и спасибо за добавление трассировки стека исключений. Когда возникло исключение 'java.net.SocketException: Broken pipe', его причина, возможно, в стороне« База данных », пожалуйста, измените поставщика базы данных, для примера используйте« MySql »или« Derby »или другие для тестирования. – MJM

Смежные вопросы