Как сгруппировать запись в базу данных и запись в электронную таблицу в одну «транзакцию» - PullRequest
3 голосов
/ 05 мая 2010

У меня есть Java-программа, которая записывает результаты как в БД (SQL Server), так и в электронную таблицу (POI), и было бы лучше, если ни один из них не был записан в случае ошибки с любым из них.

Было бы намного хуже, если бы была создана электронная таблица, а затем произошла ошибка при сохранении в БД, поэтому я сначала делаю запись в БД. Несмотря на это, мне интересно, знает ли кто-нибудь способ гарантировать, что они оба преуспеют или потерпят неудачу как единое целое.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 05 мая 2010

Рассмотрим общую транзакцию Java, в которой есть компонент транзакции файла .

Если бы вы могли обернуть вызов базы данных и запись файла в транзакцию файла в более крупную транзакцию, возможно, у вас есть то, что вы ищете.

Больше на http://commons.apache.org/transaction/file/index.html

1 голос
/ 10 февраля 2012

Использование транзакций XA для включения операций файловой системы и операций с базой данных в одну транзакцию (что делает их атомарными). SQL Server уже поддерживает XA; используйте XADisk для транзакций файловой системы, включенных с XA.

0 голосов
/ 05 мая 2010

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

...