ViTr - 2018-01-12

Краткое описание проблем, возникавших при фунционировании модуля Навигации:
1. После смены пароля пользователя во время перестроения структуры меню возникала ошибка Uncaught exception: com.google.gwt.core.client.JavaScriptException: (NotFoundError) : Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
2. На Tomcat 8.5.23 подгрузка структуры подключаемых навигаций становилась невозможной.

Описание первой проблемы:
При перенаправлении на форму смены пароля структура меню не перестраивалась до тех пор, пока пользователь не введет валидный пароль. Однако после успешной смены пароля флаг авторизации выставлялся некорректным образом, что приводило к двукратному перестроению дерева.

Решение первой проблемы:
Корректное выставления флага успешной авторизации.

Описание проблемы второй задачи:
Получение информации о структуре меню "подключаемых" навигаций осуществлялось средствами класса java.io.File с доступом к ресурсу по полному пути, полученного посредством вызова метода getRealPath. Этот метод в последних версиях Tomcat возвращал значение null и приводило к ошибке.

Решение второй проблемы:
В качестве решения был использован механизм кросс-контекстного обращения к ресурсам другого модуля. Эта возможность отключена по умолчанию и для ее включения необходимо в файле META-INF/context.xml прикладного модуля (в данном случае, Navigation) указать:
<Context **crossContext="true" **="">
...
</Context>
В прикладном коде при обращении к ресурсу другого модуля используется вызов:
ServletContext sc = request.getServletContext().getContext(extModule);
sc - контекст "соседнего" модуля (если аттрибут crossContext не указан или имеет значение false, то sc будет иметь значение null).

Преимущества:
Обращение к ресурсам осуществляется по относительному пути контекста стороннего модуля

Обратить внимание: -

Подробное описание: -