Мы используем Spring & Hibernate в JBoss 4.2.3 и вызываем внешнюю систему, которая может занять некоторое время, как часть обработки запросов. Чтобы устранить долгоживущие блокировки базы данных, мы не будем писать в нашу базу данных до тех пор, пока не будет возвращен внешний вызов.
Но Hibernate не любит быть без транзакции, поэтому у нас есть транзакция только для чтения, начатая Spring, пока мы не сделаем наши записи (в новой субтранзакции чтения-записи). К сожалению, это все еще означает, что мы сохраняем ресурсы во время внешнего вызова, выделенное соединение из пула.
Есть ли способ сделать внешний вызов без текущей транзакции, когда остальная часть выполнения (до и после) нужна?
Есть ли лучший способ отложить реальную транзакцию до тех пор, пока она нам действительно не понадобится, и при этом сохранить Hibernate счастливым?