Вопрос

В приложении XPages периодически возникали исключения:

родовое слово

Оба упомянутых класса одинаковы, это класс, используемый как сессионный компонент.Мне не удалось найти в Google ничего, касающееся моей проблемы.Обычно это объясняется изменением элементов дизайна, а не моим случаем.

Приложение XPage стало непригодным для использования (страницы, использующие сессионный компонент someClass) с этого момента, до перезапуска задачи http или до повторного сохранения faces-config.xml.

В некоторых случаях это связано с другим исключением:

родовое слово

Что стоит за этим поведением?

Это было полезно?

Решение

Филипп Рианд объяснил это по электронной почте:

<цитата>

Это приведение класса происходит из-за того, что один и тот же класс был загружен дважды двумя разными загрузчиками классов. Таким образом, с точки зрения Java, они разные, и приведение не выполняется.

Теперь каждое приложение XPages имеет собственный загрузчик классов. Но этот загрузчик классов удаляется каждый раз, когда в приложении происходит изменение дизайна, например, через Domino Designer. Это требуется, так как изменение XPages создает новый класс Java, который затем должен быть загружен вместо предыдущего. Когда это происходит, загрузчик классов удаляется и создается новый. Затем все классы, связанные с приложением, перезагружаются по мере необходимости, даже если они не изменились. Это обычное поведение, реализуемое серверами J2EE. Тем не менее, если ваш код кэширует объект в области, которая не отбрасывается при изменении дизайна, то это, скорее всего, произойдет. Например, applicationScope и sessionScope в настоящее время не сбрасываются, когда происходит изменение дизайна, которое может привести к этой проблеме. Это был выбор дизайна, так как отказ от областей видимости иногда создает неудобства для разработчиков, но с этим недостатком.

Наконец, сохранение faces-config.xml работает как временное решение. Когда этот файл сохраняется, весь модуль удаляется из памяти, включая области видимости. Это объясняет, почему он работает. Внесение изменений в собственный класс Java должно перезагрузить модуль и устранить проблему.

Таким образом, кажется, что причиной является помещение beans (даже косвенно) в sessionScope или applicationScope.

Другие советы

Если один и тот же файл класса загружается в разные загрузчики классов, два результирующих класса Java не являются одним и тем же классом;вам не разрешат передавать экземпляры одного в функции, ожидающие другого.Как правило, если вы сталкиваетесь с такой проблемой, это потому, что у вас есть несколько дочерних загрузчиков классов, которые могут получить доступ к файлу jar, который не виден их общему родительскому загрузчику классов.Возможно, вам потребуется переместить банку, содержащую someclass, в общий каталог библиотеки вместо (например) определенного каталога веб-приложений.

Просто поделитесь своим опытом.

Я запускал свое приложение в среде CAT с несколькими JVM, когда столкнулся с этой проблемой.Поскольку та же сборка успешно выполнялась для меня в среде ITG, я перезапустил обе JVM в CAT, и ошибка была устранена.Не совсем понимаю, чем это было вызвано.

Очистка проекта тоже работает!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top