На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Отмена транзакции

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Отмена транзакции, Восстанавливается объект, который не должен был восстановиться
 
Вернулся на Panorama GIS Server 8.7.4.

Чтобы не заводить новую тему, здесь же вопрос, но о другом факте:

Выписка из log файла:
    09:44:15   [001] Connection with a server is open. Free memory (Kb) = 14937904
    09:44:15   [001] Begin registration of the user. User = 1@GEO24
    09:44:15   [001] Registration of the user. User = 1@GEO24
    09:44:20   [001] User = 1. Open map. Name = AB7CC3DC-0F62-49E9-850D-3
    09:44:20   [001] [01] Open map. number = 1. Path = D:\Karta\AB7CC3DC-0F62-49E9-850D-3\Karta\Karta.sit
    09:44:20   [001] [01] Open map. Rsc = D:\Karta\AB7CC3DC-0F62-49E9-850D-3\Karta\Uzor.rsc
    09:44:41   [001] [01] Append object successful, object number = 4290, key = 6564 // Здесь добавили первый площадной объект

Программный код:
If MapEditMetric1.EditMode = emCreate and
begin
 form_main.MapObj1.Semantic.Delete(-1);
 form_main.MapObj1.Semantic.Add(10);
 form_main.MapObj1.Semantic.SemanticValue[1] := IDObject;
 form_main.MapObj1.Commit;

 form_main.MapObj1.Style := OS_SELECT;
 mapLogCommitAction(form_main.mvMap.MapHandle, form_main.mvMap.MapSites[0].SiteHandle);
 MapEditMetric1.StopAction;
 mvMap.AdjustData;
 form_main.mvMap.Repaint;

    09:45:24   [001] [01] Append object successful, object number = 4291, key = 6565 // Здесь добавили второй площадной объект
    09:45:57   [001] [01] Append object successful, object number = 4292, key = 6566 // Здесь добавили третий площадной объект

    // Здесь выполнили три раза отмены транзакции
    09: 46:56   [001] Delete object - key: 6566, number: 4292 // Здесь удалился третий площадной объект

Программный код:
mapLogUndoAction(mvMap.MapHandle, mvMap.MapSites[0].SiteHandle, 1);
MapObj1.Style := OS_NORMAL;
MapObj1.Repaint;
mvMap.Repaint;

    09:46:57   [001] Delete object - key: 6565, number: 4291 // Здесь удалился второй площадной объект
    09:46:58   [001] Delete object - key: 6564, number: 4290 // Здесь удалился первый площадной объект
    09:47:05   [001] [01] Append object successful, object number = 4293, key = 6567 // Здесь снова добавили четвертый площадной объект
   // Здесь выполнили один раз отмену транзакции
    09:47:35   [001] Delete object - key: 6567, number: 4293 // Ожидалось удаление из карты четвертого площадного объекта, по факту четвертый площадной объект удалился, но при этом на карте восстановился и третий площадной объект и больше ничего по отмене транзакции не происходит, сколько бы не вызывали эту функцию
    09:47:40   [001] [01] Close map, number = 1
---> 09:47:40   [001] Read socket error. An existing connection was forcibly closed by the remote host
    09:47:40   [001] Connection with a server is close. force = 0
>>>> 09:48:09   All maps closed because count of connections is null. GIS Server x64 v.8.7.4

Что я делаю не правильно или что не сделал, т.е. не добавил в программу?
 
Цитата
Сергей Викторович написал:
Что я делаю не правильно или что не сделал, т.е. не добавил в программу?
При отмене транзакции отменяются все операции, которые в нее вошли. Если транзакция включала удаление одного объекта и создание второго, то ее отмена приведет к восстановлению первого и удалению второго.
 
Цитата
Елена Кузнецова написал:
При отмене транзакции отменяются все операции, которые в нее вошли. Если транзакция включала удаление одного объекта и создание второго, то ее отмена приведет к восстановлению первого и удалению второго.
Если я правильно понял, код программы написан верно и ничего тут добавить уже нельзя?
 
Цитата
Елена Кузнецова написал:
Цитата
Сергей Викторович написал:
Что я делаю не правильно или что не сделал, т.е. не добавил в программу?
При отмене транзакции отменяются все операции, которые в нее вошли. Если транзакция включала удаление одного объекта и создание второго, то ее отмена приведет к восстановлению первого и удалению второго.
Нас такой ответ не устроил.
Просьба подключиться Денису Вицко или Железнякову А.В.
Пользователь такой ответ не принимает.
Тритий объект не должен был восстановиться.
 
Цитата
Сергей Викторович написал:
Если я правильно понял, код программы написан верно и ничего тут добавить уже нельзя?

Трудно судить о правильности кода по отдельным его фрагментам.

По целостности транзакций Вам ответили верно.
Транзакция и отменяется, и восстанавливается целиком.
Транзакции отменяются последовательно, то есть если надо отменить третью с конца транзакцию, то будут отменены и две, следующие за ней.

При этом, отмена транзакции не должна затрагивать объекты, не входящие в неё.
Поэтому ситуации при которой объект восстанавливает своё состояние, измененное не в рамках отменяемой транзакции, быть не должно.

Исключение - карты, размещенные в БД. Там имеются дополнительные факторы - ссылочная целостность, триггерная логика, правила и т.д.
В результате, например, при удалении из карты одного объекта, в БД это может повлечь множество других изменений - удаление связанных объектов, создание или изменение новых записей в триггерах.
Эти второстепенные изменения будут обработаны ГИС Сервером уже в отдельной транзакции.

Чтобы понять, что именно происходит, необходимо проанализировать следующую информацию:
- лог ГИС Сервера (полный, с включенной печатью диагностических сообщений);
- Журнал транзакций карты (выгрузить в человекочитаемом виде можно с помощью прикладной задачи "Просмотр журнала транзакций");
- версия ГИС-ядра (версия файла gis64acces.dll - в свойствах файла);
- версия ГИС Сервера.







Цитата

Сергей Викторович написал:
Чтобы не заводить новую тему, здесь же вопрос, но о другом факте

Не стоит "экономить" место на форуме, если вопросы тематически не связаны.
Вопрос вынесен в отдельную тему.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности