Здравствуйте, Sinclair, Вы писали:
S>1. Что такое "изменился пользователь"? Во время операции ему (в другом потоке) изменили список ролей/привилегий? Или просто он отключился от "соединения"?
Это актуально не для того типа приложений, которое вы представили.
В моем случае программа десктопная (или мобильная), вход осуществлен под одним пользователем всегда. Одна база открывается в при открытии программы. При этом пользователь может выйти и зайти под другим никнеймом, в то время как некие операции продолжат выпоняться и запишут результат своей работы (после запроса к серверу) — уже на имя нового пользователя.
Варианты решений?
S>2. Что значит "применять результаты"? Операция — это, как правило, атомарное действие, у которого может быть результат (который просто возвращается, как результат вычисления выражения 2*3), а может быть эффект (который влияет на состояние, как результат выполнения стейтмента x = 2*3). Может быть и то и другое. В итоге, "не применять результаты" — это какой-то оксюморон: результат и так никуда не "применяют". А "не применять эффект" нужно детализировать: то ли разрешать частичное выполнение, то ли нет.
1. Сделал запрос к серверу — получил данные от сервера. Раз.
2. Внес новые данные от сервера в таблицу.
Какая тут может быть атомарность?
S>Вот, к примеру, MS SQL Server поддерживает heartbeet даже во время выполнения длинного запроса, который не предусматривает коммуникации с клиентом в процессе.
Это другая ситуация.
S>3. Зачем генерировать исключение, которое вы не собираетесь ни вносить в лог, ни показывать кому-то?