AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.03.2009, 12:56   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Работа при принудительном завершении аксапты
давно интересует этот вопрос. Что, если идет какая-то операция, а мы снимаем клиента (процесс) диспетчером задач.
Если код выполнялся в этот момент на клиенте, то транзакция не завершится и изменений в базе не произодет. Что станет с транзакцией, так и будет висеть?
Если код в этот момент выполняется на сервере приложения, то вообще не понятно....
Старый 04.03.2009, 13:34   #2  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Если код выполняется на сервере, то сервер узнает что клиент отвалился только когда код доработает соответственно если транзакция на сервере то она завершиться если на клиенте то нет
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 04.03.2009, 13:47   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Спасибо. Как-то это не радует....

upd.
Цитата:
транзакция на сервере то она завершиться
не обязательно, судя по всему
X++:
static server void serverrun()
{
    table1 table1;
    table1 t;
    int i;
    ;

    select count(RecId) from t;

    ttsbegin;


    sleep(20000);

    table1.Field1 = t.RecId;
    table1.insert();


    ttscommit;
}
X++:
static server void serverrun()
{
    table1 table1;
    table1 t;
    int i;
    ;

    select count(RecId) from t;

    ttsbegin;



    for (i = 1; i <= 10; i++)
    {
    sleep(2000);

    table1.Field1 = t.RecId;
    table1.insert();
    }

    ttscommit;
}
Первый код вставляет запись. Второй нет.

Последний раз редактировалось Eldar9x; 04.03.2009 в 14:06.
Старый 04.03.2009, 14:22   #4  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
замечал что если убить сессию на клиенте, то в БД сессия остается и дорабатывает если её не грохнуть
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 04.03.2009, 14:43   #5  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Первый код вставляет запись. Второй нет.
чудес небывает) должны доработать оба...
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 04.03.2009, 15:23   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Спасибо. Как-то это не радует....

upd.

не обязательно, судя по всему
X++:
static server void serverrun()
{
    table1 table1;
    table1 t;
    int i;
    ;

    select count(RecId) from t;

    ttsbegin;


    sleep(20000);

    table1.Field1 = t.RecId;
    table1.insert();


    ttscommit;
}
X++:
static server void serverrun()
{
    table1 table1;
    table1 t;
    int i;
    ;

    select count(RecId) from t;

    ttsbegin;



    for (i = 1; i <= 10; i++)
    {
    sleep(2000);

    table1.Field1 = t.RecId;
    table1.insert();
    }

    ttscommit;
}
Первый код вставляет запись. Второй нет.
если это имеются ввиду джобы (serverrun), то они вроде как всегда работают на клиенте, даже если явно написать модификатор server...
__________________
Zhirenkov Vitaly
Старый 04.03.2009, 15:26   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
если это имеются ввиду джобы (serverrun), то они вроде как всегда работают на клиенте, даже если явно написать модификатор server...
не, не. Это статический метод на классе, разумеется

Цитата:
чудес небывает) должны доработать оба...
согласен. Но строки не создаются. Это еще ладно, пусть бы не создавались, помоему это как раз правильное поведение. Плохо то, что в зависимости от кода они могут и создаться....

Последний раз редактировалось Eldar9x; 04.03.2009 в 15:33.
Старый 04.03.2009, 15:53   #8  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
а так? на каком шаге вылетает?
X++:
tatic server void serverrun()
{
    table1 table1;
    table1 t;
    int i;
    ;

    select count(RecId) from t;

    for (i = 1; i <= 10; i++)
    {
         sleep(2000);
         ttsbegin;
         table1.Field1 = t.RecId + i;
         table1.doInsert();
         ttscommit;
    }
}
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 04.03.2009, 16:06   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
а так?
успело вставиться 7 записей. И не вылетает, а сам убиваю процесс.
Старый 04.03.2009, 16:48   #10  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
успело вставиться 7 записей. И не вылетает, а сам убиваю процесс.
хм...
какоето нехорошее поведение( ладно бы 0, 1 или 10 а тут 7...
надо звать гуру)
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 04.03.2009, 18:30   #11  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от ivas Посмотреть сообщение
хм...
какоето нехорошее поведение( ладно бы 0, 1 или 10 а тут 7...
Ничего удивительного, на мой взгляд. Полная корреляция со вторым примером Эльдара. Просто во втором примере транзакция одна, и поэтому когда где-то в середине слетает, то не вставляется ничего. А в данном случае что-то успевает вставиться...

Цитата:
Сообщение от ivas Посмотреть сообщение
Если код выполняется на сервере, то сервер узнает что клиент отвалился только когда код доработает соответственно если транзакция на сервере то она завершиться если на клиенте то нет
Из всего вышесказанного можно сделать вывод, что это не совсем так. На самом деле, похоже, сервер проверяет активность клиента с какой-то периодичностью, и это может происходить прямо посреди исполнения метода на сервере (и вне зависимости от транзакции). Единственное, что я точно замечал, что это (проверка активности клиента) никогда не происходит, когда сервер выполняет какую-то долгоиграющую операцию с БД, типа большого селекта, например, или висящего заблокированного апдэйта. В этой ситуации клиента можно снять, но операция на сервере останется висеть очень долго, пока не отработает, либо не кильнёшь сессию на БД. Вот.
__________________
Zhirenkov Vitaly
Старый 04.03.2009, 19:10   #12  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Из всего вышесказанного можно сделать вывод, что это не совсем так. На самом деле, похоже, сервер проверяет активность клиента с какой-то периодичностью, и это может происходить прямо посреди исполнения метода на сервере (и вне зависимости от транзакции). Единственное, что я точно замечал, что это (проверка активности клиента) никогда не происходит, когда сервер выполняет какую-то долгоиграющую операцию с БД, типа большого селекта, например, или висящего заблокированного апдэйта. В этой ситуации клиента можно снять, но операция на сервере останется висеть очень долго, пока не отработает, либо не кильнёшь сессию на БД. Вот.
это понятно что сервер проверяет наличие клиента

интересно можно ли заставить сервер не опрашивать клиента?
может обрамить вызов метода startLenghtyOperation(), endLenghtyOperation()?
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 05.03.2009, 00:01   #13  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от ivas Посмотреть сообщение
может обрамить вызов метода startLenghtyOperation(), endLenghtyOperation()?
Эти методы infolog всего-навсего приводят к тому, что курсор мыши устанавливается в "часики" и, соотв., обратно в стрелку.
Старый 05.03.2009, 11:04   #14  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от ivas Посмотреть сообщение
интересно можно ли заставить сервер не опрашивать клиента?
Помойму это несколько лишнее - перегиб палки.
В каких случаях это может быть полезно, можете предложить?

Просто нужно все подобные операции по возможности делать в одной транзакции, тогда в случае обрыва либо отработает всё, если успеет, либо ничего...
__________________
Zhirenkov Vitaly
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сильно модифицировано ваше приложение Аксапты? mazzy DAX: Прочие вопросы 30 14.04.2011 17:26
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
работа 1С из Аксапты через COM _scorp_ DAX: Программирование 7 22.08.2008 15:45
Совместная работа заказчика и исполнителя в разных или одном слое? Кузин Владимир В. DAX: Программирование 6 08.08.2006 10:02
Экспорт / импорт Help topics и запуск второй сессии Аксапты из-под себя DmitrySt DAX: Программирование 0 25.11.2004 00:22

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:52.