Невозможно получить управляемые соединения, если вы пропускаете соединения

У меня довольно много методов, которые запускают некоторые вставки и обновления. Один пример выглядит следующим образом:

@SuppressWarnings("unchecked")
public void insertStuff( String crap1, String crap2 ) throws SQLException {
   Connection conn = null;
   PreparedStatement ps1 = null;
   try
   {
      String sqlStr = " INSERT INTO ... "
                    + " VALUES (? , ? )" ;

      conn = JNDIUtil.getConnection();
      ps1 = conn.prepareStatement(sqlStr);
      ps1.setString(1, crap1);
      ps1.setString(2, crap2);
      ps1.executeUpdate();

   } catch (Exception e) {
      e.printStackTrace();
   } finally {
      DbUtils.close(ps1);
      DbUtils.close(conn);
   }
}

Мой JNDIUtil это:

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public final class JNDIUtil {

    private static final String JDBC_DB_URL = "blah";

    public static Connection getConnection() {
        Connection conn = null;

        try {
            Context ctx = (Context) new InitialContext();
            DataSource ds = (DataSource)ctx.lookup(JDBC_DB_URL);
            conn = ds.getConnection();
        } catch (final SQLException e) {
            e.printStackTrace();
        } catch (final NamingException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

Теперь это сервер jboss eap 6.4. Я ограничил максимальный размер пула, чтобы повторить ту же ошибку, которая происходит в рабочей среде:

<max-pool-size>10</max-pool-size>

Когда я запускаю нагрузочный тест с JMeter, используя одновременно 20 потоков, я получаю следующую ошибку:

Я получаю следующую ошибку:

16:05:20,018 ERROR [stderr] (http-/127.0.0.1:8085-19) java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for blah

Каждый метод имеет подготовленный оператор закрытия, набор результатов закрытия и закрытое соединение в обратном порядке их создания. Кстати, DBUtils.close() является частью Apache Commons DBUtils. Когда я смотрю на консоль управления JBoss, я вижу, что количество доступных соединений падает до 0.

Почему эти соединения не закрываются при выполнении каждого метода?

0 ответов

Другие вопросы по тегам