Цитата:
Сообщение от
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;
}
}