«org.hibernate.SessionException: сессия закрыта» в редких случаях - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть следующий код в 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)

Я не знаю, если этосвязано или нет, но это происходит только тогда, когда я запрашиваю много данных (то есть тысячи строк) одновременно. Я думал, что это может быть связано с тайм-аутами при доступе к источнику данных, но я увеличил значения тайм-аута, и проблема все еще возникает.

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