#java #spring #hibernate #transactions
#java #весна #спящий режим #транзакции
Вопрос:
Наличие следующей реализации сервиса:
@Transactional
public Void process(Data data)
{
ExecutorService executorService = Executors.newSingleThreadExecutor();
Connection connection = HibernateUtil.getConnection(sessionFactory.getCurrentSession());
future = executorService.submit(new ProcessJob(connection));
return null;
}
Поток запускается успешно, но вскоре завершается сбоем с исключением:
прокси-сервер подключения недоступен после завершения транзакции org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:42)
Есть ли какой-либо способ предотвратить закрытие транзакции до завершения запущенного потока?
Комментарии:
1. Вы не должны совместно использовать соединение или транзакцию между потоками. Также, если вам нужно подождать (потому что это то, что вы в конечном итоге делаете), какова цель асинхронного материала. Кроме того, ваш код также выглядит так, как будто вы работаете с Spring и Hibernate, создаете свои собственные потоки, а также сохраняете состояние в одноэлементном коде, что вам вообще не следует делать.
2. Если вы получите другое соединение, используя SessionFactory.OpenSession() вместо SessionFactory.getCurrentSession(), это может решить вашу проблему.