2011-12-28 60 views
0

我有這個數據源配置對我JBOSS AS 7在standalone.xml:JBoss應用服務器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倍和相同的用戶i嘗試登錄我得到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(); 

} 

回答

1

我覺得你的問題是不太數據源(這只是暴露了它),而是登錄模塊似乎保持打開狀態,並沒有返回他們入池的事實。

+0

您有任何建議如何退出後返回連接池? – nyxz 2011-12-29 10:35:58

+0

@Maistora如果你找到你的問題的解決方案,也許你可以發佈它:爲了答案的完整性。 – 2013-03-27 09:05:49

+0

我加了答案,如果我記得賴特。希望能幫助到你。 – nyxz 2013-03-27 09:47:18

1

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