Показать сообщение отдельно
Старый 30.11.2016, 14:53   #7  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от konfet Посмотреть сообщение
Вопрос к гуру: есть ли, например, возможность окружить метод run() соответствующего класса скобками типа

PHP код:
try
{
  
run();
}
catch(
Exception::<что-то>)
{
  
//  если время выполнения джоба больше заданного значения, то 
  //  заканчивать/перезапускать/выполнять другие действия 
  //  типа записи обстоятельств зависона в лог. В идеале - выплевывать 
  // в инфолог информацию, на какой именно строке кода зависон произошел.  

или же, может быть, есть и другой рациональный подход к решению такой задачи? Профайлер?
Попробуйте использовать подобную конструкцию. Желательно, чтобы вы не пихали метод run() внутрь защищенной секции, а саму секцию делали внутри конкретного метода, где находится CRUD-операция. На выбросе исключения можете вывести конкретное сообщение в инфолог.
X++:
    #OCCRetryCount
    ;

    try
    {
        ttsbegin;

        // ...
        
        ttscommit;
    }
    catch (Exception::Deadlock)
    {
        retry;
    }
    catch (Exception::UpdateConflict)
    {
        if (appl.ttsLevel() == 0)
        {
            if (xSession::currentRetryCount() >= #RetryNum)
            {
                throw Exception::UpdateConflictNotRecovered;
            }
            else
            {
                retry;
            }
        }
        else
        {
            throw Exception::UpdateConflict;
        }
    }
__________________
// no comments