|
![]() |
#1 |
Участник
|
насколько я понял нужна целостность уникального по ключу процесса, который может быть запущен на нескольких клиентах, при этом если по ключу процесс выполнен, то не запускать процесс на другом клиенте. Тогда:
1. проверять дубликат до запуска процесса - а где-же еще 2. первый клиент может не завершить транзакцию, тогда отказ второго клиента от процесса - ошибка - то есть надо подождать разрешения ситуации 3. нужен некий семафор реальный или виртуальный - имеет статусы - выполняется, завершен - это и есть информация о том, что происходит алгоритм вырисовывается такой - ключ - уникальный индекс 1. пока чужой семафор есть и статус = выполняется и время < тайм аута - ждем чем все кончится 2 если чужой семафор - завершено - выход 3. если нет чужого семафора - создать свой = выполняется 4. процесс до 5. лог 6. процесс после 7. семафор = завершено технически наиболее близкое решение - это код выделения номеров по номерным сериям - 3 пункт это и есть выделить номер (ключ), только я имею ввиду не создавать номерную серию, а взять блоки кода по транзакциям - при разноске, например, документов сам процесс разноски еще не закоммичен, а вот номер уже использован и закоммичен!!! и другие клиенты об этом знают, там же есть моменты на предмет разрулить ситуацию, когда два клиента почти одновременно выполнят 3 пункт. Если 6 пункт не достигнут - надо в catch сбросить свой семафор. семафором можно сделать саму таблицу логов - добавить статус или - ADOConnection - читать незакомиченные (установить в команде уровень изоляции) записи лога (семафоры) другого клиента - а что?! здесь нет минуса первого варианта, а именно - если выключить комп на пункте 4, то .... семафор придеться чистить ручками или ваять нечто. по любому главное - проверять процесс на запуск другим клиентом и ждать чем все там завершиться - придеться! Последний раз редактировалось titov; 25.08.2010 в 17:06. |
|
Теги |
try/catch, исключения, как правильно, транзакции |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|