В исключительном случае ваша транзакция не разрешена. В конце концов, это истечет время ожидания, и, как вы говорите, откат. Но до тех пор (что может занять несколько минут) все блокировки, принятые вашей транзакцией, будут удерживаться. Соединение не может понять, что вы можете не только совершить коммит (). Удержание замков в течение длительного периода времени очень похоже на параллелизм.
Добавьте откат к вашему случаю исключения.
Может показаться, что закрытие вашего соединения также прекратит преобразование. При использовании простого JDBC, однако, при наличии пула соединений, как это реализовано на серверах приложений, закрытие соединения имеет семантику «возврат в пул» и , пул соединений будет сохранять связь соединения с текущей транзакцией. Если позже в вашем коде, все еще в рамках той же транзакции, вы попросите соединение, пул вернет вам то же самое соединение. Это действительно очень удобно для написания приложений Moular, но есть штраф, который нельзя допустить, чтобы закрытие соединения разрешало транзакцию.
begin tran
// call a method
get connection
work
close connection
// call another method
get connection // you get the **same** connection still associated with the tran
work
close connection
commit