16.07.2013, 12:04 | #17 |
Участник
|
Мне кажется, лучше копать в этом направлении:
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. |
|
Теги |
ttscomit, best practice |
|
|