наше устаревшее приложение использует JDBC 3.0. он поддерживает транзакции, реализуя собственный менеджер транзакций, который способен возвращать одно и то же соединение JDBC для каждого потока. Проблема, которую я недавно обнаружил, заключается в том, что она не поддерживает вложенные транзакции: если транзакция запускается внутри другой транзакции, то каждый SQL-запрос, выполняемый в контексте внутренней транзакции, будет выполняться с использованием того же соединения с БД, а когда он будет зафиксирован или откат будет автоматически подтвержден или откатит все изменения, начиная с внешней транзакции.
Насколько я понимаю, я могу реализовать поддержку вложенной транзакции, используя точки сохранения JDBC 3.0: всякий раз, когда вложенная транзакция запускается, я могу установить новую точку сохранения для текущего соединения. После этого, если вложенная транзакция откатывается, я просто вернусь к этой точке сохранения. Если, с другой стороны, это будет зафиксировано, я просто ничего не буду делать. Только фиксация самой внешней транзакции сохранит изменения в БД.
Это правильно? Есть ли у этого подхода недостатки? Если да, каковы мои возможности?
Спасибо.