• Java tomcat j2ee Есть здесь гуру Tomcat? Deploy занимает секунд 20, в это время хотелось бы отдавать страницу "подождите, обновляем" с кодом 503. В настоящее время отдается 404 и не могу найти где это исправить. Сервлет ROOT, mapping в корень.

Replies (24)

  • @ugnich, На жуйке аналогичная проблема, пока не нашёл решения
  • @vt, У меня проблема в том, что часто индексатор Гугла заходит в это время и успевает нахвататься 404 ошибок, потом ругается. Очень хочу исправить.
  • @ugnich, Тут вот пишут что это уже чинили bz.apache.org — видимо снова сломали
  • @vt, Уже два раза чинили, что интересно!
  • @vt, Будь добр — дай знать, если найдешь как починить.
  • @ugnich, Частично проблема решена проксированием томката. Наружу смотрит nginx, на нём же основная статика. И в нём прописаны error_page
    Работает отлично в момент рестарта томката, если настроить таймаут у модуля прокси то не будет ждать и при проксировании
  • @AlexVK, пока всё завязано на 6й томкат, в котором есть не решённый баг с утечкой памяти. 6й томкат уже устарел и это испраляться не будет. Поэтому деплой редко, чаще полный рестарт, и он как раз в этих пределах (20 с).
    При рестарте и показывает, что мол ошибка. идут технические работы, щаз запустится, подождите чуть.
    nginx не получил ответ в заданное время и тут же выдал 50x, которая как раз задана для своего location
  • @AlexVK, Или health check из триального плюса
  • @oxpa, nginx + ?
  • @oxpa, лол, там еще триал есть, баннеры показывает?
  • @vt, реклама в http headers же, ну
  • @AlexVK, tomcat-7.0.76-3.el7
    "деплой редко" — это не решение.
    Когда много сайтов, рестарт всех занимает куда больше времени, чем редеплой одного.
    nginx проксирует, но ему нужна ошибка отличная от 404 во время редеплоя.
  • @ugnich, А что если добавить свой фильтр в томкат и в фильтре проверять, задеплойен ли сервлет? Если не задеплоен — возвращать 503.
  • @ugnich, Окей, пустой фильтр готов и работает. Теперь надо найти, где есть инфа о запущенных сервлетах. :)
  • @ugnich, Инфа есть, показывает 3 сервлета: default, jsp, MyServletName.
    Однако, когда нет моего сервлета, до фильтра дело не доходит.
    Рассматриваю два варианта: попробовать убрать default и попробовать Valve вместо фильтра.
  • @AlexVK, Понятно что можно 404 на 503 подменить, но настоящие 404 тоже нужны
  • @ugnich, Удаление default и jsp ничего не дало.
  • @ugnich, Всё, сдаюсь. Tomcat — говно.
    P.S. stackoverflow.com — это не работает для ROOT.war
  • @ugnich, Ну по ссылке какой-то парад борьбы со следствием, а не причиной, но именно томкат же фиксить
  • @vt, Да пофиг уже, лишь бы работало. Но и оно не работает. Такое ощущение, что в момент редеплоя ROOT.war оно "перезагружает" весь Host со всеми сервлетами, фильтрами и прочей фигней.
    Скорее всего, Valve будет работать, но меня не хватило терпения узнать.
  • @ugnich, Кажется у меня починилось, я просто прописал существующий defaultHost вместо несуществующего localhost
  • @vt, А что на том хосте?
    Показывает 503 при редеплое? Или зависает?
  • @ugnich, Напрямую не пробовал, нгинкс держит тайм-аут и плавно открывает страницу без ошибок. Что будет если выйдет тайм-аут я не знаю, деплоится быстрее
  • @vt, Нет, не починилось, я проверял на перезапуске сервлета (touch web.xml), а на деплое снова 404 вылезает