2011-12-28 36 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,否则您将得到内存泄漏