Цитата:
Сообщение от
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-й сессии. Попробуйте так.