Я делаю банковское приложение и не могу решить, какой подход будет лучше для обработки транзакций по переводу средств. Использование SQL может потребовать перезаписи кода, если база данных изменится. Использование чистой Java для обработки немного усложнит блокировку учетных записей для транзакций. Что лучше всего подходит для этого сценария?
PS. В этом случае рассмотрите возможность использования распределенного сервера приложений.
Что лучше, транзакция SQL или сторонняя транзакция Java для банковского приложения?
Ответы (2)
Любое приложение, которое оставляет БД в возможно несогласованном состоянии при серьезном сбое, непригодно для банковского использования. Приложения, использующие так называемые «транзакции Java», являются частью этой группы.
Любое серьезное банковское приложение будет иметь все процессы записи, инкапсулированные в капсулу на стороне сервера (читай: хранимую процедуру) и не разрешать доступ для записи к какой-либо таблице. Доступ для чтения будет обслуживаться сочетанием хранимых процедур и представлений.
В сочетании с отказоустойчивой СУБД это гарантирует обработку заданий по принципу «все или ничего».
Все участвующие ресурсы (включая вашу базу данных, а также любую другую конечную точку или промежуточное ПО) также должны присоединиться к одной и той же транзакции. Транзакция не заканчивается на границах компонента, она охватывает все задействованные компоненты в системе. В противном случае это не транзакция. Должен быть управляющий компонент, который обычно является вашим собственным кодом или промежуточным программным обеспечением, который запускает и фиксирует/откатывает транзакцию. Кто-то еще присоединяется. Их идея транзакции состоит в том, чтобы отменить действия всех вовлеченных компонентов, если что-то не удается (и скрыть уже выполненные действия для всех, кто не входит в транзакцию, пока она не будет успешно зафиксирована). Мой ответ будет таков: вам нужны транзакции как на уровне базы данных, так и на уровне приложения, потому что транзакция включает все участвующие компоненты.