JBoss AS 7 Конфигурация источника данных - транзакция не активна - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть эта конфигурация источника данных на моем 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();

}

Ответы [ 2 ]

1 голос
/ 27 марта 2013

Из-за запроса user503413 я признаю допущенную мной ошибку с позором: я забыл закрыть соединение после его использования (connection.close()).Если вы не закроете свое соединение, оно не вернет его в пул, и, поскольку вы ограничены и достигли max-pool-size (в моем случае 7), новое соединение не будет создано.Так что урок здесь всегда обязательно закрывайте connections.Также закройте prepared statements, иначе вы получите утечка памяти .

1 голос
/ 28 декабря 2011

Я думаю, что ваша проблема не в источнике данных (это только раскрывает его), а в том, что модуль входа в систему, кажется, поддерживает соединения открытыми и не возвращает их в пул.

...