簡體   English   中英

JBoss AS 7數據源配置 - 事務未激活

[英]JBoss AS 7 Datasource Configuration - Transaction not active

我在standalone.xml中的JBOSS AS 7上有這個數據源配置:

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
            <datasources>
                <datasource jndi-name="java:jboss/MyJndiDS" pool-name="MyPoolDS" enabled="true" jta="true" use-java-context="false" use-ccm="true">
                    <connection-url>
                        jdbc:postgresql://192.168.2.125:5432/t_report
                    </connection-url>
                    <driver>
                        org.postgresql
                    </driver>
                    <transaction-isolation>
                        TRANSACTION_READ_COMMITTED
                    </transaction-isolation>
                    <pool>
                        <min-pool-size>
                            3
                        </min-pool-size>
                        <max-pool-size>
                            7
                        </max-pool-size>
                        <prefill>
                            true
                        </prefill>
                        <use-strict-min>
                            false
                        </use-strict-min>
                        <flush-strategy>
                            FailingConnectionOnly
                        </flush-strategy>
                    </pool>
                    <security>
                        <user-name>
                            my_user
                        </user-name>
                        <password>
                            my_pass
                        </password>
                    </security>
                    <statement>
                        <prepared-statement-cache-size>
                            32
                        </prepared-statement-cache-size>
                    </statement>
                </datasource>
...
...
            </datasources>
</subsystem>

當我在下次嘗試登錄時登錄並注銷7次與同一個用戶時,我得到了Transaction not active錯誤。 我怎樣才能解決這個問題? 我不想增加max-pool-size 這是我的注銷方法:

import javax.faces.context.ExternalContext;
@Inject ExternalContext ec;

public void validateUserLogOut() {

    HttpServletRequest request = (HttpServletRequest)ec.getRequest();
    request.getSession().invalidate();
    this.setUserLoggedIn(false);
    navigation.logout();

}

由於user503413要求,我承認我犯了一個恥辱的錯誤:我忘了在使用它之后關閉連接( connection.close() )。 如果你沒有關閉你的連接,它將不會將它返回到池中,因為你已經限制並達到max-pool-size (在我的情況下為7),不會創建新的連接。 所以這里的教訓總是要確保關閉你的connections 也關閉你prepared statements ,否則你會得到內存泄漏

我認為你的問題不是數據源(這只是暴露它),而是登錄模塊似乎保持連接打開而不是將它們返回池中這一事實。

暫無
暫無

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

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