Что лучше, транзакция SQL или сторонняя транзакция Java для банковского приложения?

Я делаю банковское приложение и не могу решить, какой подход будет лучше для обработки транзакций по переводу средств. Использование SQL может потребовать перезаписи кода, если база данных изменится. Использование чистой Java для обработки немного усложнит блокировку учетных записей для транзакций. Что лучше всего подходит для этого сценария?
PS. В этом случае рассмотрите возможность использования распределенного сервера приложений.


person Bhabani Sankar Mishra    schedule 12.10.2014    source источник
comment
Лучше как? Спектакль? Ремонтопригодность? Надежность?   -  person T.J. Crowder    schedule 12.10.2014
comment
Использование чистой Java: что вы имеете в виду? Java — это не база данных. Ничего не сохраняется. запуск/фиксация транзакции с использованием JDBC — это то же самое, что запуск/фиксация транзакции с использованием SQL.   -  person JB Nizet    schedule 12.10.2014
comment
Имейте в виду транзакцию в java-коде - бизнес-логику.   -  person Bhabani Sankar Mishra    schedule 12.10.2014
comment
Под «лучше» я подразумеваю целостность транзакций — правильность.   -  person Bhabani Sankar Mishra    schedule 12.10.2014
comment
Вы не можете ничего гарантировать относительно целостности состояния вашей базы данных, используя чистую Java. Базы данных являются транзакционными по уважительной причине. Конечно, вам абсолютно необходимо использовать транзакции SQL.   -  person JB Nizet    schedule 12.10.2014


Ответы (2)


Любое приложение, которое оставляет БД в возможно несогласованном состоянии при серьезном сбое, непригодно для банковского использования. Приложения, использующие так называемые «транзакции Java», являются частью этой группы.

Любое серьезное банковское приложение будет иметь все процессы записи, инкапсулированные в капсулу на стороне сервера (читай: хранимую процедуру) и не разрешать доступ для записи к какой-либо таблице. Доступ для чтения будет обслуживаться сочетанием хранимых процедур и представлений.

В сочетании с отказоустойчивой СУБД это гарантирует обработку заданий по принципу «все или ничего».

person Eugen Rieck    schedule 12.10.2014

Все участвующие ресурсы (включая вашу базу данных, а также любую другую конечную точку или промежуточное ПО) также должны присоединиться к одной и той же транзакции. Транзакция не заканчивается на границах компонента, она охватывает все задействованные компоненты в системе. В противном случае это не транзакция. Должен быть управляющий компонент, который обычно является вашим собственным кодом или промежуточным программным обеспечением, который запускает и фиксирует/откатывает транзакцию. Кто-то еще присоединяется. Их идея транзакции состоит в том, чтобы отменить действия всех вовлеченных компонентов, если что-то не удается (и скрыть уже выполненные действия для всех, кто не входит в транзакцию, пока она не будет успешно зафиксирована). Мой ответ будет таков: вам нужны транзакции как на уровне базы данных, так и на уровне приложения, потому что транзакция включает все участвующие компоненты.

person Robin479    schedule 12.10.2014