Тема: TTS и try..catch
Показать сообщение отдельно
Старый 14.02.2009, 01:28   #5  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Цитата:
Сообщение от EVGL Посмотреть сообщение
Потому. Стоит принять как данность.
Небольшой уточняющий комментарий, чтобы удостовериться
правильно ли я понимаю данную ситуацию (если где не прав - прошу поправить/дополнить):

1. В DAX 4.0 перехват ошибки в try/catch подразумевает неявный вызов ttsabort (кроме перехвата исключения Exception::UpdateConflict).

2. В DAX 4.0 "откат" любой вложенной транзакции всегда означает откат всей цепочки транзакций.

3. Учитывая вышесказанное имеем текущую реализацию: при возникновении исключения оно эскалируется "не перехваченным" вплоть до обработчика исключений самой внешней транзакции. При этом все транзакции, включая вложенные, откатываются.

X++:
static void Test_TTS_1(Args _args)
{
    ;

    try
    {
        ttsbegin; //tts level 1

	//Action block level 1
	//..
         
        try
        {
            ttsbegin; //tts level 2

            try
            {
                throw error("my exception");
            }
            catch //implicit ttsabort
            {
                error("level 3 catched");
            }
            
            ttscommit;
            
            info("level 3 completed");
        }
        catch //implicit ttsabort
        {
            error("level 2 catched");
        }
        
	//Action block level 2
	//..        

	ttscommit;
        
        info("level 2 completed");
    }
    catch //implicit ttsabort
    {
        error("level 1 catched");
    }

    info("level 1 completed");

}

Error Сообщение (01:26:29) my exception
Error Сообщение (01:26:29) level 1 catched
Info Сообщение (01:26:29) level 1 completed
За это сообщение автора поблагодарили: Товарищ ♂uatr (1).