2010-06-26 4 views
1

일주일 동안 Hibernate 및 Mysql 시간 초과 오류가 발생했습니다. 분명히, 내 Hibernate/MySQL이 8 시간 (MySQL의 디폴트 타임 아웃 값) 후에 실행 되었다면 예외가 있습니다. 나는 또한 c3p0을 추가했다. 그러나 도움이되지 않습니다.최대 절전 모드와 MySQL의 시간 초과 문제가 c3p0에서 작동하지 않습니다.

여기

내 최대 절전 모드 설정입니다 당신에게 너무 감사 조언을 주시기 바랍니다 : 여기에

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<!--Account MYSQL Username Info--> 
<property name="hibernate.connection.url">jdbc:mysql://localhost/reddragon_test?autoReconnect=true</property> 
<property name="hibernate.show_sql">true</property> 
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
<property name="current_session_context_class">thread</property> 

<property name="hibernate.c3p0.acquire_increment">3</property> 
<property name="hibernate.c3p0.idle_test_period">10</property> 
<property name="hibernate.c3p0.timeout">10</property> 
<property name="hibernate.c3p0.max_size">15</property> 
<property name="hibernate.c3p0.min_size">3</property> 
<property name="hibernate.c3p0.max_statements">0</property> 
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property> 

하면 추적입니다 :

org.hibernate.exception.JDBCConnectionException: could not execute query 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
    at org.hibernate.loader.Loader.doList(Loader.java:2223) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
    at org.hibernate.loader.Loader.list(Loader.java:2099) 
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) 
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 
    at com.billing.dao.VmplanDAO.findByExample(VmplanDAO.java:178) 
    at com.billing.action.getVmplans.processRequest(getVmplans.java:37) 
    at com.billing.action.getVmplans.doGet(getVmplans.java:91) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    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:390) 
    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.Http11Processor.process(Http11Processor.java:852) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

Last packet sent to the server was 0 ms ago. 
    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.reuseAndReadPacket(MysqlIO.java:2985) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2871) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3414) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) 
    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 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) 
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:674) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    at org.hibernate.loader.Loader.doList(Loader.java:2220) 
    ... 25 more 
Caused by: java.net.SocketException: Software caused connection abort: recv failed 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:129) 
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113) 
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160) 
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188) 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2428) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2882) 
    ... 38 more 
java.lang.NullPointerException 
java.lang.NullPointerException 
    at com.billing.action.getVmplans.processRequest(getVmplans.java:38) 
    at com.billing.action.getVmplans.doGet(getVmplans.java:91) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    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:390) 
    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.Http11Processor.process(Http11Processor.java:852) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:619) 
+0

참조 http://stackoverflow.com/questions/730827/hibernate-c3p0-mysql-broken-pipe – nos

+0

여전히 작동하지 않습니다. – leon

+0

설정이 멋지게 보입니다. Hibernate가 사용하고있는 cfg 파일을 사용하고 있는지 확신합니까? – BalusC

답변

1

이 세 가지 솔루션가있다 아주 솔직히 말해서 당신의 문제. 나는 당신의 연결 시간이 초과되어 있는지 확인하기 위해 MySQL의의 my.ini 파일 (마지막에 귀하의 경우에 올 것이다)

  1. 구성 wait_time_out 속성을 모든 솔루션의 각 솔루션과 장단점을 설명합니다. 이 접근법은 확실히 효과가 있지만 좋은 해결책은 아닙니다. 때때로 데이터베이스에 대한 많은 제어권을 갖지 않거나 다른 응용 프로그램이 동일한 데이터베이스를 사용하고있을 수 있으므로 데이터베이스보다는 응용 프로그램에서이 항목을 처리하는 것이 좋습니다.

  2. c3p0 대신 apache dbcp를 사용하십시오. 데이터베이스 이름을 지정하는 서버의 context.xml에 dbcp를 구성 할 수 있습니다. 이 접근법은 효과가 있지만이 접근법의 문제점은 JBOSS를 미래에 말할 다른 애플리케이션 서버로 전환 할 계획이 있다는 것입니다.이 경우에는 아파치 dbcp가 작동하지 않을 수도 있습니다. 나는 jboss와 함께 시도하지 않았지만 그렇지 않다고 생각합니다. 지금까지 당신이 당신의 서버 시작시

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

    을 발견해야합니다

  3. 세 번째 방법은 당신이 하나 개의 속성 누락 귀하의 경우에는

선택 하셨을 것입니다, 즉 그 C3P0 초기화되지 않았습니다. 글쎄,이 속성을 설정 한 후에 코드가 작동한다면, 유감스럽게 생각합니다.

이것은 스프링 코드의 버그로 인한 것입니다. LocalSessionFactoryBean의 소스 코드를 살펴보면 위의 속성 집합 값을 무시하고 LocalDataSourceConnectionProvider로 설정하면 c3p0이 초기화되지 않습니다.

Providers 클래스를 C3P0ConnectionProvider로 하드 코딩 할 수있는 LocalSessionFactoryBean의 사용자 지정 구현을 제공 할 수 있습니다.

이제 서버를 다시 시작하고 c3p0이 초기화되어 c3p0 세부 사항을 처리 할 수 ​​있습니다.

문제는 지금까지 c3p0이 초기화되지 않고 그림이 흐려 있다는 것입니다.

희망이 도움이됩니다.

관련 문제