【问题标题】:JBoss AS 7 Datasource Configuration - Transaction not activeJBoss AS 7 数据源配置 - 事务未激活
【发布时间】:2011-12-28 14:07:44
【问题描述】:

我的 JBOSS AS 7 在standalone.xml 中有这个数据源配置:

<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();

}

【问题讨论】:

    标签: java cdi jboss7.x


    【解决方案1】:

    我认为您的问题不是数据源(这只公开它),而是登录模块似乎保持连接打开并且没有将它们返回到池中的事实。

    【讨论】:

    • 您有什么建议如何在注销后将连接返回到池中?
    • @Maistora 如果您找到了问题的解决方案,也许您也可以发布它:为了答案的完整性。
    【解决方案2】:

    由于user503413的要求,我承认我犯的错误是耻辱:我使用它后忘记关闭连接(connection.close())。如果您不关闭连接,它将不会将其返回到池中,并且由于您已限制并达到max-pool-size(在我的情况下为 7),因此不会创建新连接。所以这里的教训是一定要关闭你的connections。同时关闭你的prepared statements,否则你会得到一个内存泄漏

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2012-08-16
      • 2012-10-14
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      相关资源
      最近更新 更多