У меня есть следующий код в Spring:
@Transactional(readOnly = true)
public List<SchedulingReportData> getSchedulingReport(String startDate, String endDate, boolean includeArchivedShipments) {
requireNonNull(startDate);
requireNonNull(endDate);
Timestamp start = dateConvert.decodeToTimestamp(startDate);
Timestamp end = dateConvert.decodeToTimestamp(endDate);
List resultList = entityManager.createNativeQuery(GET_SCHEDULING_REPORT)
.setParameter("startDate", start)
.setParameter("endDate", end)
.setParameter("includeArchivedShipments", includeArchivedShipments)
.getResultList();
return reportLoaderDelegate.buildSchedulingReportData(resultList);
}
В редких случаях при выполнении этого метода я получаю следующее исключение:
org.hibernate.SessionException: Session is closed!
at org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:132)
at org.hibernate.internal.SessionImpl.setFlushMode(SessionImpl.java:1478)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect$SessionTransactionData.resetSessionState(HibernateJpaDialect.java:361)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.cleanupTransaction(HibernateJpaDialect.java:227)
at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:594)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1017)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:811)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:504)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:292)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
at com.nap.shipment.delegate.ReportDelegate$$EnhancerBySpringCGLIB$$754b3a3d.getSchedulingReport(<generated>)
at com.nap.shipment.controller.ReportController$16.run(ReportController.java:240)
at com.nap.shipment.utils.controller.ApiResponse.call(ApiResponse.java:20)
at com.nap.shipment.utils.controller.ApiResponse.call(ApiResponse.java:1)
at org.springframework.web.context.request.async.WebAsyncManager$4.run(WebAsyncManager.java:317)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:748)
Я не знаю, если этосвязано или нет, но это происходит только тогда, когда я запрашиваю много данных (то есть тысячи строк) одновременно. Я думал, что это может быть связано с тайм-аутами при доступе к источнику данных, но я увеличил значения тайм-аута, и проблема все еще возникает.