java - JPAContainer 保持数据库的连接打开

标签 java sql-server hibernate vaadin jpacontainer

我遇到了这个问题:使用 vaadin 7,我已经配置了我的 persistence.xml,这是代码

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

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 版本="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>

当我创建一个新的 JPAContainer 并将其绑定(bind)到一个表时,我会在 MSSQL Activity 监视器上看到我的新连接,但如果我的 session 超时或注销,我仍然会在 SQL 上看到该连接。

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

我的问题是我的 sql server 上有大量打开的连接,这些连接从未关闭过。

我已经尝试添加属性

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

但没有任何改变。 你能帮我吗?我缺少什么? 非常感谢

最佳答案

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

与其使用 JPAContainer,不如通过外观 (EJB) 连接您的 UI,如果您需要延迟加载的 Vaadin 容器,请使用例如来自 Viritin 或 Lazy Query Container 的 MTable。这webinar和例如这个example project可能会帮助您入门。

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

关于java - JPAContainer 保持数据库的连接打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564882/

相关文章:

java - 内存不足错误,我的应用程序的错?

java - do-while 循环跳过代码

java - 从 SQL Server 检索与 Android Studio 中的 Edittext 值相对应的数据

asp.net - 日期在不同的数据库上表现不同?

java - Hibernate + Oracle IN 子句限制,如何解决?

java - MQ : Connection to host rejected | Channel negotiation failed

java - Jersey 多个构造函数@inject

sql-server - XQuery 计划复杂性

在 grails 中 hibernate NonUniqueObjectException

mysql - Fetch 仅返回集合中的一项