JavaEE 5, БЫЛА 6.0 Странная проблема с JSP, включающая

StackOverflow https://stackoverflow.com/questions/804537

  •  03-07-2019
  •  | 
  •  

Вопрос

В настоящее время мы находимся в процессе переноса нашего приложения из нашей производственной среды в совершенно новый центр обработки данных.

  • Текущая производственная среда :Java 1.4, Java EE 3, БЫЛ 5.1, JSF 2.1
  • Новая среда Центра обработки данных:Java 1.5, Java EE 5, БЫЛ 6.1, JSF 2.1
Наше приложение построено на JSF 2.1 и содержит приведенный ниже код в одном из вызовов AJAX:
request.getSession().getServletContext().getRequestDispatcher(
                    "/results.faces").include(request, response);
И вот тут-то мы и сталкиваемся с проблемами.

Случай 1:Структура УХА в соответствии со стандартными характеристиками
.EAR -> WAR -> WEB-INF -> lib -> *.jar (все банки, относящиеся к конкретному приложению, находятся в WEB-INF /lib).Это не работает, и мы продолжаем получать исключения для класса, не найденного загрузчиком классов.Кроме того, приведенный выше AJAX-вызов завершается с ошибкой (выходные данные не генерируются).

Случай 2:EAR содержит все файлы JAR приложения в корневом каталоге (путь к классу MANIFEST.MF указан вручную).
Такой подход работает отлично, и все файлы JAR загружаются без каких-либо проблем.Более того, вызов AJAX также проходит нормально.

Есть какие-нибудь идеи, почему это могло произойти?

- Ашиш

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

Решение

Да, это потому, что серверы приложений Java EE имеют иерархию загрузчиков классов, которая выглядит примерно так:сначала вызывается загрузчик класса bootstrap;далее идет загрузчик классов уровня EAR, затем загрузчик классов уровня WAR.Загрузчики классов более высокого уровня не будут искать нужные им классы ниже.Если они не найдут то, что им нужно, будет выдано ClassNotFoundException.

Таким образом, банки в WEB-INF / lib не были видны загрузчику классов на уровне УХА.Когда вы поднимаете эти банки вверх, вы решаете проблему.Это делает все эти банки видимыми для всех, кто находится у вас в УХЕ.

Одна вещь, которую вы, возможно, захотите проверить, - это спецификация для вашего web.xml и других файлов.Спецификации servlet и JSP изменились где-то на этом пути, поэтому JAR, такие как JSTL и подобные, перешли с версии 1.0 на 1.1.Возможно, вам захочется тщательно проверить свой web.xml и все JAR-файлы, чтобы убедиться, что они соответствуют спецификациям, поддерживаемым вашим сервером приложений Java EE.

К сожалению, обновить сервер приложений не так просто, как вставить EAR или WAR.

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