当前位置: 首页 > 知识库问答 >
问题:

JPAContainer保持数据库的连接打开

杜经艺
2023-03-14

我遇到了这个问题:对于Vaadin7,我已经配置了我的持久性。xml,下面是代码

<?xml version="1.0" encoding="UTF-8"?>

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“version=“2.0”

<persistence-unit name="xxxx">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
    <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://xxxxx;databaseName=xxxx;"/>
    <property name="javax.persistence.jdbc.user" value="xxxx"/>
    <property name="javax.persistence.jdbc.password" value="xxxx"/>
    <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
    <property name="hibernate.connection.release_mode" value="after_transaction" />
    </properties>
</persistence-unit>

当我创建一个新的JPA容器并将其绑定到一个表时,我会在MSSQL活动监视器上看到我的新连接,但如果会话超时或注销,我仍然会在SQL上看到连接。

如果我在应用程序中重新登录,并刷新表,则会打开一个新连接,依此类推。

我的问题是,我的sql服务器上有很多打开的连接,从来没有关闭过。

我已尝试添加属性

<property name="hibernate.connection.release_mode" value="after_transaction" />

但什么都没变。你能帮帮我吗?我错过了什么?太感谢了

共有1个答案

蔚学真
2023-03-14

除非您有充分的理由不这样做,否则我建议您使用一个现代的JavaEE服务器,并使用它提供的JPA、事务管理和连接池。定义到服务器的连接并使用JTA事务(persistence.xml中的JTA数据源标记)。另一种选择是将应用程序基于Spring。如果你像看上去那样“低水平”,很多事情都会出错。如果您已经熟悉Hibernate,我会选择Wildfly,因为它有Hibernate作为其JPA提供程序。

与其使用JPAContainer,不如通过facade(EJB)连接UI,如果需要延迟加载的Vaadin容器,可以使用来自Viritin的MTable或延迟查询容器。本网络研讨会和本示例项目可能有助于您开始学习。

如果您真的没有解决方案,只能使用低级的“应用程序管理的JPA会话管理”,那么您应该确保正确关闭EntityManager实例。我将为UI类创建一个helper方法,该方法为UI中的每个JPA容器返回相同的EntityManager。然后将DetachListener添加到您的UI并关闭那里的实体管理器。

 类似资料:
  • 问题内容: 在许多使用MongoDB的入门示例中,您将看到类似以下的代码: 如果MongoDB与任何其他数据库系统一样,并且操作通常在时间上很昂贵。 所以,我的问题是这样的:只需执行一次,将返回值分配给某个全局模块即可,模块中具有各种功能就可以进行各种与数据库相关的工作(将文档插入集合,更新文档等)。 ),然后由应用程序的其他部分调用它们(从而重新使用该值),然后,在应用程序完成后,才执行。 换句

  • 问题内容: 我正在使用JBoss AS 7.1作为服务器,并且我的DataSource配置有缓冲池。我对此很陌生,所以请原谅任何菜鸟错误…毕竟我是来这里学习的。 客户端登录时,它将获得与数据库的连接,我需要保持该连接(从池中)处于打开状态,直到用户注销或HttpSession过期为止。这是来自数据库管理员的绝对要求。谁说他需要 数据库会话变量。 我正在为此使用 servlet 。 我在尝试各种可能

  • 我正在尝试修复与MySQL数据库的连接问题。几个小时后,我的服务器意外地关闭了与MySQL数据库的连接。 这是我的错误代码: 通用域名格式。mysql。jdbc。例外。jdbc4。CommunicationsException:从服务器成功接收到的最后一个数据包是37521865毫秒前。最后一个成功发送到服务器的数据包是37521865毫秒前。长于服务器配置的“等待超时”值。在应用程序中使用之前,

  • 问题内容: 我目前正在以内存模式测试H2 DB。我建立了一个连接 我想使用dbunit进行一些导入并设置dbUnits db连接 还有我想稍后查询的导入 所以我的问题是,在内存模式下,什么时候可以关闭连接?通常我会做这样的事情 但是在内存中,如果连接关闭,我会丢失数据吗?那么在我结束程序之前,它应该保持打开状态吗? 问题答案: 从H2文档中: 默认情况下,关闭与数据库的最后一个连接会关闭数据库。对

  • 我想在整个camel路由中保持数据库连接。我已经在路由上定义了名为“stageDataSource”的数据源。如何在处理器“MyDBStageProcessor”中使用相同的数据源,或者更确切地说,使用相同的数据库连接? 我在MyDBStageProcencer中创建了一个新的连接并关闭了它。但是,它在Postgres中最大限度地耗尽了我的连接。因此,我想在整个路由中使用单个连接。 我可以从Exc

  • 问题内容: 我在apache和mod_wsgi和PostgreSQL中使用django(都在同一主机上),并且我需要处理很多简单的动态页面请求(每秒数百个)。我面临的问题是,瓶颈是django没有持久的数据库连接,并在每个请求上重新连接(大约需要5毫秒)。在进行基准测试时,我得到了持久连接,我可以处理近500 r / s,而没有连接时,我只能得到50 r / s。 有人有什么建议吗?如何修改Dja