Java Hibernate无法提取结果集异常
我在Tomcat服务器上部署了一个GWT应用程序。一切正常,但有时我会遇到以下例外:Java Hibernate无法提取结果集异常,java,hibernate,tomcat,gwt,Java,Hibernate,Tomcat,Gwt,我在Tomcat服务器上部署了一个GWT应用程序。一切正常,但有时我会遇到以下例外: org.hibernate.exception.JDBCConnectionException: could not extract ResultSet at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389) at com.google.gwt.user.server.rpc.RPC
org.hibernate.exception.JDBCConnectionException: could not extract ResultSet
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.hibernate.exception.JDBCConnectionException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2040)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1837)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816)
at org.hibernate.loader.Loader.doQuery(Loader.java:900)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342)
at org.hibernate.loader.Loader.doList(Loader.java:2526)
at org.hibernate.loader.Loader.doList(Loader.java:2512)
如您所见,我使用Hibernate通过以下配置管理数据库:
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://server:3306/db</property>
<property name="connection.username">username</property>
<property name="connection.password">password</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_size">15</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- SQL dialect -->
<property name="dialect">com.ohapp.webtattoon.server.service.Mysql5BitBooleanDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">validate</property>
com.mysql.jdbc.Driver
jdbc:mysql://server:3306/db
用户名
密码
1.
15
300
50
3000
com.ohapp.web纹身n.server.service.mysql5bitboolean方言
线
org.hibernate.cache.NoCacheProvider
假的
验证
我不知道为什么会这样。我真的很感谢你的帮助
谢谢连接池的配置似乎不完整。连接超时设置为300秒
<property name="hibernate.c3p0.timeout">300</property>
300
因此,连接可能会变得无效。在指定如何处理这些连接的规则之前,不会从连接池中丢弃这些无效连接
通过添加以下行,将在每次连接签出时执行连接测试,以验证连接是否有效:
<property name="hibernate.c3p0.testConnectionOnCheckout" value="true" />
有关连接测试的更多信息:
编辑:还有一个非常重要的属性,它不在您的配置中:
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
org.hibernate.connection.C3P0ConnectionProvider
如果没有此属性,则根本不使用c3p0。Sry,我没有看到这一点。j.s为我指明了正确的方向,但没有解决我的问题 因此,根据j.s给出的答案,我将hibernate配置更改为:
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://server:3306/db?autoReconnect=true</property>
<property name="connection.username">user</property>
<property name="connection.password">password</property>
<!-- C3P0 connection pool -->
<property name="hibernate.c3p0.timeout">600</property>
<property name="hibernate.c3p0.maxIdleTimeExcessConnections">20</property>
<!-- Connection testing settings -->
<property name="hibernate.c3p0.validate">false</property>
<property name="hibernate.c3p0.idle_test_period">30</property>
<property name="hibernate.c3p0.automaticTestTable">conTestTable</property>
<!-- SQL dialect -->
<property name="dialect">com.ohapp.webtattoon.server.service.Mysql5BitBooleanDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">validate</property>
com.mysql.jdbc.Driver
jdbc:mysql://server:3306/db?autoReconnect=true
使用者
密码
600
20
假的
30
可竞争的
com.ohapp.web纹身n.server.service.mysql5bitboolean方言
线
org.hibernate.cache.NoCacheProvider
假的
验证
关键区别在于属性“hibernate.c3p0.idle\u test\u period”和“hibernate.c3p0.automaticTestTable”。确保我的池中的连接仍然有效的设置,防止错误使用死连接。谢谢。我将测试它并将结果发布在这里。它实际上不起作用,但你为我指出了正确的方向,现在我的项目工作没有问题。谢谢。我也面临着类似的问题,belyid,你能分享一下你使用的技巧吗?