使用hibernate时,池连接没有空闲连接 - envers并获取历史记录?

问题描述 投票:0回答:1

spring4 + jaxb + jpa + hibernate-envers上的应用程序可以在websphere + oracle11g上运行

有两个java方法,它们可以获取用户实体的历史记录:方法getHistoryUser从rest-controller调用,它查找一个id的所有版本,并使用此id和版本从基本读取所有用户。 extractUsers - 只是将JPA - enities映射到String

我在websphere jdbc-resource上有params for 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?
java hibernate hibernate-envers
1个回答
0
投票

你试过关闭entityManager吗?

像这样的东西:

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

我也有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.