在websphere + oracle11g上有spring4+jaxb+jpa+hibernate-envers的应用。
有两个java方法,用于获取用户实体的历史记录:从rest - controller调用的方法getHistoryUser,它查找一个id的所有版本,并从基础中读取使用该id和版本的所有用户。extractUsers -只需将JPA - enities映射到字符串
我在websphere jdbc-resource上有base和poolConnection - param的参数。默认情况下,最大可用池连接数为10。我对此值有一个错误-服务不响应,所有连接都会中断。我可以对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 enity中,有用于使用hibernate envers的任何字段和@Audit注释
在日志中我也看到了一个有趣的警告..
[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?
发布于 2019-04-11 11:12:20
您是否尝试过关闭entityManager?
如下所示:
EntityManager entityManager = entityManagerFactory.createEntityManager();
AuditReader auditReader = AuditReaderFactory.get(entityManager);
...
entityManager.close();
我也有同样的问题。
https://stackoverflow.com/questions/54930415
复制