Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Guice JPA -“此连接已关闭。”错误

Guice JPA -“此连接已关闭。”错误
EN

Stack Overflow用户
提问于 2012-10-16 13:08:23
回答 3查看 17.3K关注 0票数 3

在数据库丢弃空闲连接或数据库关闭并备份后,我在我的the应用程序中收到以下错误:

代码语言:javascript
运行
AI代码解释
复制
javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1365)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1293)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:265)    
... 60 more
Caused by: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:131)
    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.LogicalConnectionImpl.isAutoCommit(LogicalConnectionImpl.java:395)
    at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.afterNonTransactionalQuery(TransactionCoordinatorImpl.java:195)
    at org.hibernate.internal.SessionImpl.afterOperation(SessionImpl.java:565)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1220)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:256)
... 70 more
Caused by: org.postgresql.util.PSQLException: This connection has been closed.
    at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:712)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.getAutoCommit(AbstractJdbc2Connection.java:678)
    at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126)
    at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:99)
    at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:63)
    at $Proxy66.getAutoCommit(Unknown Source)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.isAutoCommit(LogicalConnectionImpl.java:392)

当这段代码开始时,我得到一个

代码语言:javascript
运行
AI代码解释
复制
SQL Error: 0, SQLState: 08006 - An I/O error occured while sending to the backend.

但在那之后,它只是:

代码语言:javascript
运行
AI代码解释
复制
SQL Error: 0, SQLState: 08003 - This connection has been closed.

问题是:我已经设置了testOnBorrow,所以我希望只得到开放的连接。

如果这有帮助的话: ususaly池包含好的和坏的连接,随着时间的推移,问题似乎会消失,但我让服务器运行了超过12小时,仍然有坏连接返回。重新启动后,(在一段时间内)一切正常。

我已经对这个问题进行了更多的调试,似乎池返回了错误的连接,例如,如果我在DB上杀死了所有连接,我会得到:

代码语言:javascript
运行
AI代码解释
复制
SQL Error: 0, SQLState: 57P01

然后是常见的东西--被杀死的连接从池中返回。问题是:这是一个应用程序问题吗?

我尝试通过JMX清除池,但似乎没有任何效果。另一件奇怪的事情是,即使应用程序显然没有做任何事情(通过线程转储检查),JMX bean仍然显示7个活动连接和0个空闲连接。当我执行一个需要DB访问的请求时,我立即得到一个响应(说明没有可用的空闲连接),但是JMX显示了7个活动连接和0个空闲连接。

PS。也许我遗漏了一些明显的东西,这是我的连接管理问题?我使用的是通过persistence.xml配置的JPA EntityManager,所以可能我做错了什么,使用后连接没有正确关闭(返回)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-26 12:41:37

实际上,当我怀疑是应用程序错误时,我是对的。

所有这些都在Issue 730: Automatically started UnitOfWork is never ended中进行了很好的描述

在使用JpaPersistService时,如果您尝试在active UnitOfWork之外访问EntityManager,Guice将自动为您启动一个。但是,由于Guice不知道(也不能)何时结束此UnitOfWork,因此它从不知道。

结果呢?在应用程序的整个生命周期中,违规线程将使用相同的EntityManager。对于运行应用程序来说,这是一种糟糕的状态,我们的应用程序不可避免地会在一段时间后耗尽可用内存并崩溃。

这里真正的杀手是,当你犯了这个错误时,它一点都不明显。唯一真正的提示是,您在不同的线程之间从数据库中获得了不一致的数据(由于EM一级缓存),或者应用程序的内存消耗持续增长。在我的例子中,是池中的活动连接让我怀疑它,然后,当我打开详细的日志记录时,我注意到应用程序根本没有从池中借用连接,而是重用了已由未关闭的EntityManager持有的连接。

实际上,这个问题有相当多的副本报道:http://code.google.com/p/google-guice/issues/list?can=1&q=UnitOfWork

票数 6
EN

Stack Overflow用户

发布于 2012-10-16 20:10:29

一个离奇的想法:here建议的代码也检查validationInterval中是否有testOnBorrow

由于您将此值从30秒的默认值设置为5分钟,这意味着在DB断开连接后的5分钟内,您仍然可以获得那个陈旧的连接。如果您的数据库超时小于5分钟...真不走运。

为了测试这个理论,您可以将validationInterval设置为一个可笑的低值。

如果这有帮助(阅读:我们找到了正确的旋钮),您应该至少将其设置为比DB超时更短的时间。因此,当DB决定丢弃空闲连接时,较低的validationInterval将确保在下一次借用之前检查该连接。由于数据库服务器重新启动(即没有超时)而关闭的连接不会受到此解决方案的影响,但至少恢复到正常状态的时间也会更短。

注意:我刚刚向谷歌要了代码。我不知道这是真正的代码还是古老的代码。

票数 5
EN

Stack Overflow用户

发布于 2012-10-16 14:30:57

如果您已经修改了META-INF/context.xml以包含validationQuery,那么Tomcat很可能会在conf/engine/host/webapp.xml下缓存旧的定义。关闭Tomcat,删除该文件,然后重新启动Tomcat。在Tomcat关闭的时候删除work目录也没什么坏处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12915427

复制
相关文章
小程序云开发五:从云数据库读取数据
1:接着昨天的《小程序云开发四:向云数据库插入一条数据》,今天要写的是读取那条插入的数据。
王小婷
2018/12/28
5.4K0
【硬货】Oracle数据库出现问题时,这十个脚本帮你快速定位原因
墨墨导读:本文讲述各种场景下的通用处理思路,分享用到的一些脚本,帮助大家快速定位问题并解决,减少业务的中断事件。
数据和云
2019/07/17
1.3K0
【硬货】Oracle数据库出现问题时,这十个脚本帮你快速定位原因
【说站】PDF“文档无法保存,读取本文档时出现问题(109)解决方案
今天去掉了一个pdf文件的水印,但却发现去除水印以后pdf文件另存为pdf文档时,提示“文档无法保存,读取本文档时出现问题109”的错误(如上图)。品自行想了想,有两种方法可以解决这个问题。
很酷的站长
2022/11/24
11K0
【说站】PDF“文档无法保存,读取本文档时出现问题(109)解决方案
python读取数据库
import pandas as pd import pymysql #连接数据库 dbconn=pymysql.connect( host="0.0.0.0",#ip database="stockdb", user="cueb",#用户名 password="cueb",#密码 port=3306,#端口号 charset='utf8' ) s = "select * from user"; data = pd.read_sql(s, dbconn)
week
2018/08/24
1.8K0
Shiro 进阶之从数据库读取过滤器链
我们之前使用过滤器链都是在 XML 中手动添加和维护的,本章我们来介绍下如何从数据库读取这些过滤器配置,这样做的好处是便于维护,且可以通过程序来添加过滤器配置,因为我们只需要添加一条记录到数据库即可。
一份执着✘
2018/10/08
2.3K1
漫谈可视化Prefuse(一)---从SQL Server数据库读取数据
本文通过介绍如何利用Prefuse库连接数据库,介绍了可视化工具Prefuse在Java环境中的实现方式,并提供了具体的代码示例。通过这些代码,用户可以快速掌握如何使用Prefuse库进行图形可视化。
JackieZheng
2018/01/08
1.4K0
漫谈可视化Prefuse(一)---从SQL Server数据库读取数据
activiti 整合瀚高数据库流程发布出现问题
用户9131103
2023/07/17
2590
activiti 整合瀚高数据库流程发布出现问题
从天擎读取EC数据
最近我们在试用天擎,测试了从天擎读取EC数据,请求数据的程序来自天擎网站(见下图),数据传输的速度和稳定度都相当不错,尤其是可以按需求请求数据,避免了“一个馒头搭块糕”式的打包式下载数据对于时间和存储空间的极大浪费。请求江苏地区要素场时,数据基本秒出,感觉畅爽无比
郭好奇同学
2021/03/25
2.1K0
从天擎读取EC数据
python从txt文件读取数据
  (作为一个python初学者,记录一点学习期间的笔记,方便日后查阅,若有错误或者更加便捷的方法,望指出!)
py3study
2020/01/19
4.1K0
python从txt文件读取数据
易语言读取数据库
我们先用SQLiteStudio建表以及表中字段(SQLiteStudio工具可百度下载); 写程序之前对支持库进行配置,勾选Sqlite3数据库支持库而不是Sqlite数据库支持库,因为选用后者会出现一些打不开表之类的问题
用户2590762
2021/08/11
8.1K0
JMeter 参数化之利用JDBCConnectionConfiguration从数据库读取数据并关联变量
http://dev.mysql.com/downloads/connector/j/
授客
2019/09/11
8940
JMeter 参数化之利用JDBCConnectionConfiguration从数据库读取数据并关联变量
Python可视化工具plotly从数据库读取数据作图示例
本人在学习使用Python数据可视化工具plotly的过程中,实际的需求是将数据库中的数据展示出来,经过尝试终于完成了第一步,把数据库某列数据取出来,然后再在本地生成html文件。下面分享一下代码,供大家参考。
FunTester
2019/09/17
1.4K0
Python可视化工具plotly从数据库读取数据作图示例
matlab读取mnist数据集(c语言从文件中读取数据)
mnist database(手写字符识别) 的数据集下载地:http://yann.lecun.com/exdb/mnist/。
全栈程序员站长
2022/08/01
5.2K0
matlab读取mnist数据集(c语言从文件中读取数据)
在各种场景下Oracle数据库出现问题时,这十个脚本帮你快速定位原因
.原文:https://www.enmotech.com/web/detail/1/763/1.html
数据和云01
2019/08/01
9750
java读取数据库_jsp怎么显示数据库数据
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
2.9K0
java读取数据库_jsp怎么显示数据库数据
Python Numpy 从文件中读取数据
测试文件内容(test1.txt) hello,123,nihao 8,9,10 io,he,no 测试代码 import numpy # dtype:默认读取数据类型,delimiter:分隔符 world_alcohol = numpy.genfromtxt("test1.txt", dtype=str, delimiter=",") # 数据结构 print(type(world_alcohol)) # 数据内容 print(world_alcohol) # 帮助文档 print(help(nump
山海散人
2021/03/03
4.5K0
读取本地数据库文件[通俗易懂]
有时候我们能够将类似省份城市的数据库文件存放在assets/目录名/××.sql下。当程序在创建数据库时读取该数据库文件,并运行其内的sql语句
全栈程序员站长
2022/07/08
9.8K0
读取本地数据库文件[通俗易懂]
数据库读取速度与文件IO读取速度比较
本文来源于之前做的一个小程序科技爱好者周刊在文章数据存储上的技术选型思考。 当时想着后期把文章 markdown 文件内容迁移到云数据库通过云函数查询出来显示。后来想想为什么非要这么做呢,数据库存取就一定好吗??
薛定喵君
2020/10/23
3.1K0
Android数据读取之Sqlite数据库操作
咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作。以一个实例开始吧:
牛老师讲GIS
2018/10/23
1.5K0
Android数据读取之Sqlite数据库操作
点击加载更多

相似问题

Django创建ManyToMany关系

10

Django |通过实例查询ManyToMany关系

124

如何删除Django中ManyToMany字段的实例

11

同时创建多个实例Django Rest框架

21

Django表单: ManyToMany内联创建

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档