簡體   English   中英

JPAContainer保持數據庫的連接打開

[英]JPAContainer keeps database's connections open

我遇到了這個問題:使用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“>

<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活動監視器上看到我的新連接,但如果我的會話超時或注銷,我仍然看到SQL上的連接。

如果我重新登錄我的應用程序,並刷新表格,則會打開一個新連接,依此類推。

我的問題是,我的SQL服務器上有大量已打開的連接,從未關閉。

我試圖添加屬性

<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的MTable或Lazy Query Container。 網絡研討會和此示例項目可能有助於您開始使用。

如果您真的沒有解決方案,但要使用低級“應用程序管理的JPA會話管理”,則應確保正確關閉EntityManager實例。 我將為您的UI類創建一個輔助方法,為您的UI中的每個jpacontainer返回相同的EntityManager。 然后將DetachListener添加到UI並關閉實體管理器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM