JavaEE 5, WAS 6.0 Странная проблема с JSP включает - PullRequest
1 голос
/ 30 апреля 2009

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

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

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

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

Любые идеи, почему это может происходить.

- Ashish

1 Ответ

1 голос
/ 30 апреля 2009

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

Таким образом, файлы JAR в WEB-INF / lib не были видны загрузчику классов уровня EAR. Когда вы перемещаете эти банки вверх, вы решаете проблему. Это делает все эти JAR-файлы видимыми и для всех WAR в вашем EAR.

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

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

...