JPAContainer使数据库连接保持开放状态

4

我希望你能够帮我翻译以下内容:我遇到了这个问题:在Vaadin 7中,我已经配置好了我的persistence.xml文件,下面是代码:

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

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">

这是一个关于Java持久化的XML文件,版本号为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并将其绑定到表格时,在MSSQL Activity Monitor上会看到我的新连接,但如果我的会话超时或注销,我仍然可以在SQL上看到连接。
如果我重新登录我的应用程序,并刷新表格,则会打开一个新连接,以此类推。
那么我的问题是,我在我的sql服务器上有大量未关闭的打开连接。
我尝试添加属性
<property name="hibernate.connection.release_mode" value="after_transaction" />

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

1个回答

3
除非你有非常充分的理由不这样做,我强烈建议使用现代的Java EE服务器,并使用其提供的JPA、事务管理和连接池。将连接定义到服务器中,并使用JTA事务(在persistence.xml中使用jta-data-source标签)。另一个选择是基于Spring构建应用程序。如果你像你似乎正在做的那样“低级”,很多事情可能会出错。如果你已经熟悉Hibernate,我会选择Wildfly,因为它是Hibernate的JPA提供者。
与其使用JPAContainer,最好通过facade(EJB)连接你的UI,如果你需要延迟加载的Vaadin容器,则可以使用Viritin的MTable或Lazy Query Container。这个webinar和例如这个example project可能会帮助你入门。
如果你真的没有其他办法,只能使用“应用程序管理的JPA会话管理”,那么你应该确保正确关闭EntityManager实例。我会创建一个辅助方法到你的UI类中,为你UI中的每个jpacontainer返回相同的EntityManager。然后在你的UI中添加DetachListener并在那里关闭entity manager。

谢谢您的时间, 我从未在JAVA EE服务器上工作过,所以我试图避免它,因为我正在处理的项目刚刚开始,我需要处理我所知道的内容。也许我已经解决了这个问题:当我启动我的UI时,我将JPAContainers使用的连接放入会话中,当会话超时时,我断开所有会话。您对这个解决方案有什么看法? 我不能点赞您的答案,因为我没有足够的声望! :P - Leviand
现在许多人因为错误的理由而避免使用Java EE服务器。它们非常轻量级,使您的任务变得更简单,而不是更复杂。Spring堆栈是另一个选择,然后您可以选择普通的tomcat或jetty。我将修改我的答案以涵盖“低级使用”,尽管我仍然不建议任何人使用这种架构。 - mstahv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接