connection - pool заполнен при попытке чтения истории?

171
01 ноября 2019, 19:10

Приложение на spring4+jaxb+jpa+hibernate-envers работающие с websphere и oracle11g

Два java-метода, которые нужны для получения истории изменения сущности: первый вызывается из рест-контоллера, находятся все версии для определенного id и потом они вызываются из базы на чтение. extractUsers - просто преобраазует прочитанные jpa сущности в строку.

При работе клиента(одного) при действиях, связанных с вызовом этих методов, Сервера перестает отвечать. Сервер - webshpere с jdbc - ресурсами. PoolConnections = 10

-Я ловлю баг того, что все коннекшены заняты. Через 3 минуты они освобождаются системой и сервис вновь доступен. -Если увеличить poolconnection до 40 - проблема не воспроизводится -Если посмотреть диспетчер коннекшенов, то видно, что за миллисекунды, кол-во ожидающих коннекшенов растет от 1 до 10.

Что это может быть и с чем свяазано?

public String getHistoryUser(String id) {
        logger.log(Level.INFO, "get history id=" + id);
        AuditReader auditReader = AuditReaderFactory.get(entityManagerFactory.createEntityManager());
        List<Number> auditVersions = auditReader.getRevisions(UserRecord.class, id);
        List<UserRecord> userRecords = auditVersions.stream().map(item -> {
            UserRecord elem = auditReader.find(UserRecord.class, id, item.intValue());
            elem.setVersion(item.intValue());
            return elem;
        }).collect(Collectors.toList());
        StringBuilder result = new StringBuilder();
        extractUsers(UserRecords).stream().forEach(item -> {
            result.append(item);
        });
        return result.toString();
    }

    private List<String> extractUsers(List<UserRecord> userRecords) {
        logger.log(Level.INFO, "extractUserRecords..");
        if (CollectionUtils.isEmpty(userRecords) || userRecords.stream().allMatch(x -> x == null)) {
            return new ArrayList<>();
        }
        return riskMetricRecords.stream().map(userRecord -> {
            String userRecord = (String) deserialize(userRecord.getUser());
            return appendMetaInfoInEntity(user, "<User>", userRecord.getPrKey(), Integer.toString(userRecord.getVersion()));
        }).collect(Collectors.toList());
    }

Использую @Audit для hibernate. В логах еще видел такую фразу, но не знаю связана ли она с проблемой.

[2/27/19 10:50:32:516 MSK] 00000103 SystemOut     O [2019-02-27 10:50:32.516] WARN  ework.orm.jpa.vendor.HibernateJpaDialect JDBC Connection to reset not identical to originally prepared Connection - please make sure to use connection release mode ON_CLOSE (the default) and to run against Hibernate 4.2+ (or switch HibernateJpaDialect's prepareConnection flag to false
READ ALSO
Как очистить историю чата в Telegram? (TelegramBots)

Как очистить историю чата в Telegram? (TelegramBots)

Я использую библиотеку https://githubcom/rubenlagus/TelegramBots

223
Суммирование вводимых чисел и выход с цикла словом

Суммирование вводимых чисел и выход с цикла словом

Задача такова: вводи числа с клавиатуры, плюсуй их, при написании слова "сумма" выводить суммуКомпилится, запускается, но после ввода слова,...

192
digest авторизация (rtsp) vlc

digest авторизация (rtsp) vlc

День добрыйПри запросе по протоколу rtsp к камере сервер требует digest-авторизацию

303
Спецификация версии Java в .gitlab-ci.yml

Спецификация версии Java в .gitlab-ci.yml

Описываю pipeline в Gitlab, как мне явно указать используемую версию Java вgitlab-ci

179