Использование пула JDBC на сервере oracle weblogic,

У меня есть вопрос, который озадачивает меня в эти дни. Я использую пул соединений JDBC на сервере oracle weblogc для вызовов REST API. Пакет был развернут и смог правильно обрабатывать входящие запросы.

Но каким-то образом после того, как будет сделан новый запрос, на уровне сеанса базы данных я получу новую строку сеанса со статусом «НЕАКТИВНО», даже если я намеренно закрыл соединение с базой данных в коде. И мне кажется, этот сеанс останется навсегда. В конце концов это убивает бассейн.

Вот пример моего кода, где «яблоко» — это имя моего пула соединений.

    Connection connection = JDBCConnection.getJDBCConnction(apple);
    Statement stmt = null;
    String query ="select name from user";
    String hosts="";
    try {
        stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        while (rs.next()) {
            name   = rs.getString("name");
        }
    } finally {
        connection.close();
    }

Есть ли что-то дополнительное, что мне нужно сделать?

Спасибо,

разъем


person user3595231    schedule 23.05.2017    source источник
comment
Это нормально иметь неактивную сессию. Когда вы закончите с подключением и закроете его, оно вернется в пул, но не будет закрыто. На самом деле он неактивен, поэтому вы видите неактивный статус. Однако, что касается вашего кода, вы должны закрыть свой Statement и ResultSet, потому что закрытие соединений в пуле просто отправило его обратно в пул.   -  person Rouliboy    schedule 23.05.2017
comment
Но поскольку они накапливаются, то каким образом мы ожидаем, что они будут переработаны?   -  person user3595231    schedule 24.05.2017
comment
Вы имеете в виду, что у вас создано больше сеансов, чем размер пула?   -  person Rouliboy    schedule 24.05.2017
comment
да. У меня проблема в том, что каждый входящий запрос добавит новую строку в таблицу сеансов. и, в конце концов, у моего сервера БД больше нет обработчика для любого соединения с БД.   -  person user3595231    schedule 24.05.2017


Ответы (1)


Вероятно, вы сталкиваетесь с проблемой, когда вы закрываете Connection, но это не приводит к закрытию ResultSet или Statement.

Эта тема была подробно объяснена здесь и здесь на SO.

person radimpe    schedule 29.05.2017