Показать сообщение отдельно
Старый 31.01.2019, 12:16   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,873 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
Что получилось исследовать на ax2009:
...
  • Application.new() вызывается и при старте AOS (isServer() == true в этот момент).
    • Но в этот момент еще не определены глобальные переменные appl, infolog, classFactory. Соответственно, не работают транзакции, нет глобальных кэшей, не работают infolog-сообщения (что запрещает использование огромной кучи стандартного функционала).
    • А самое главное, в этот момент еще не заполнены таблицы SysClientSessions, SysServerSessions, SysClientServerSessions, а методы класса Session возвращают левую дичь. например, xSession.serverId возвращает идентификатор, которого нет в SysServerConfig.

получается, что в Application.new() вставится можно. Но в этом месте аксапта еще не инициализирована, поэтому в этом месте слишком много ограничений.

В общем,
Куда вставить свой код инициализации/обновления так, чтобы он сработал после инициализации AOS, но до запуска остальных сессий?
В 2009-й при поиске пакетов роняющих аос я делал логирование старта аоса.
В Application.new в конце писал код

X++:
if (session.clientKind() == ClientType::Server && session.sessionId() == 2)
{
    ... // мой код
}
2-я служебная сессия обслуживает пакеты (все пакетные сессии - дочерние к ней). Она всегда есть, даже если аос непакетный. При этом она свободна от многих описанных вами багов 1-й сессии. Попробуйте так.
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (3).