Показать сообщение отдельно
Старый 16.07.2013, 12:04   #21  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Мне кажется, лучше копать в этом направлении:
1. Поставить в настройках АОСа галку "Разрешить точки останова для отладки кода Х++, выполняемого на этом сервере.

2. После этого в классе Application начнут автоматически вызываться методы ttsNotifyBegin при начале транзакции и ttsNotifyCommit при завершении транзакции.

3. Модифицируйте эти методы так, чтобы записывать логи. В лог записывайте стек вызовов и значение уровня вложенности транзакции.

4. Анализируйте лог, проверяя стек вызовов и уровень вложенности транзаций, чтобы понять, где непарные ttsbegin\ttscommit

Я данный код написал на коленке прямо в редакторе сообщений.
X++:
void ttsNotifyBegin()
{
             container stackTrace;
             int i;
             str s="";
             UserConnection          userConnection;
             MyLogTable                 MyLogTable;
  ..........................

             if (!inLog) //добавленная в класс Application переменная, чтобы не попасть в рекурсию при вызове userConnection.ttsbegin()
             {
                  inLog = true;
                 stackTrace = xSession::xppCallStack();
                 for(i = 7; i<=conLen(stackTrace); i+=2)
                     s+=strFmt("%1:%2\r\n", conPeek(stackTrace, i), conPeek(stackTrace, i+1));

                 userConnection = new UserConnection();
                 userConnection.ttsbegin();

                 MyLogTable.setConnection(userConnection);

                 MyLogTable.TTSLevel = appl.ttsLevel();
                 MyLogTable.CallStack =  s;
                 MyLogTable.insert();
                 userConnection.ttscommit();
                 inLog = false;
        }
}

Последний раз редактировалось Ace of Database; 16.07.2013 в 12:09.