подключение к пулу не имеет свободных подключений при использовании hibernate - envers и истории? - PullRequest
0 голосов
/ 28 февраля 2019

Существует приложение для spring4 + jaxb + jpa + hibernate-envers, которое работает на websphere + oracle11g

. Существуют 2 java-метода, которые создают историю get объекта User: метод getHistoryUser вызывается из rest - controller,который находит все версии для одного идентификатора и читает из базы всех пользователей, используя этот идентификатор и версии.extractUsers - просто сопоставьте JPA - присоединяется к String

У меня есть на jbsb-ресурсе websphere с params для base и poolConnection - param.Максимальное доступное подключение к пулу по умолчанию равно 10. И у меня есть eeror на это значение - служба не отвечает, и все подключения прерываются. И я могу использовать только обходной путь для 40 подключений к пулу, и он работает.

Когда клиент вызывает метод getHistoryUser - у меня нет доступных подключений, вы можете помочь и сказать почему?

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

В моем JPA есть какие-либо поля и аннотации @Audit для использования hibernate-envers

В логах я тоже видел одно интересное предупреждение ..

[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


How to fix this issue. It just code bug or some fueture of hibernate?

1 Ответ

0 голосов
/ 11 апреля 2019

Вы пытались закрыть entityManager?

Примерно так:

EntityManager entityManager = entityManagerFactory.createEntityManager();
AuditReader auditReader = AuditReaderFactory.get(entityManager);
...
entityManager.close();

У меня тоже была такая же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...