Назад | Перейти на главную страницу

Будет ли Tomcat 6 кэшировать в веб-приложениях?

У меня есть сервер Tomcat 6 на сервере Ubuntu 12.04 с 4 ГБ и следующими JAVA_OPTS

JAVA_OPTS = "- Djava.awt.headless = true -Xms512M -Xmx512M -XX: PermSize = 1024M -XX: MaxPermSize = 1024M -XX: + CMSClassUnloadingEnabled -XX: + CMSPermGenSweepingEnabled"

Тупой вопрос: если я разверну один и тот же веб-приложение (один и тот же файл войны) несколько раз (каждый ссылается на другую базу данных Postgres) - как server.com:8080/webapp1 server.com:8080/webapp2 и т. Д ...

Могу ли я предположить, что Tomcat будет кэшировать файлы классов один раз в нескольких веб-приложениях? Или - кэширует ли Tomcat классы для каждого веб-приложения?

Заранее спасибо Дэнни

Ответ зависит от того, где вы разместили файл (ы) класса, используемый вашим веб-приложением.

Если вы поместите данный класс в общий путь загрузчика классов Tomcat в $ CATALINA_HOME / lib, он будет доступен для всех веб-приложений. То же самое и с его кешированной формой.

Если вы используете путь к загрузчику классов веб-приложений Tomcat в webapps /webapp/ WEB-INF / классы и веб-приложения /webapp/ WEB-INF / lib классы и соответствующие кеши классов изолированы между приложениями.

Техническое образование

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

  • обработка классов в веб-приложении
  • кеширование классов для каждого веб-приложения
  • предварительная загрузка и перезагрузка классов при запуске / выполнении веб-приложения
  • безопасность в классе загрузки / ссылки

Загрузчик пользовательских классов Tomcat использует загрузчики классов Java по умолчанию Bootstrap, Extension и System, но заменяет переменную пути к классам, используемую загрузчиком классов System, на свой собственный путь к классам. Это имеет эффект:

  • замена утвержденного механизма отмены стандартов, поставляемого с Java, на собственный Tomcats.
  • добавление двух дополнительных загрузчиков классов в конце иерархии загрузки классов Java:

    • Загрузчик классов Tomcat Common
    • Отдельный загрузчик классов для каждого веб-приложения

Tomcat игнорирует исходный путь к классам.

Ключевой деталью является то, что загрузчик классов webapp не делегирует сначала загрузку класса своим родителям, а пытается загрузить каждый класс по запросу. Каждый загруженный класс впоследствии кэшируется рассматриваемым загрузчиком классов webapp. Этот уровень загрузчика классов / кеша нельзя использовать совместно с веб-приложениями.

Класс Everything, загруженный загрузчиком общих классов, становится общедоступным для всех веб-приложений, включая кеш. Расширенное размещение классов в пути к загрузчику общих классов не рекомендуется, поскольку оно:

  • нарушает переносимость
  • Требования к версии класса могут быть разными для Tomcat и разных веб-приложений.
  • обслуживание становится проблемой, какой класс к какому?

К процессу загрузки / кеширования / перезагрузки класса прилагается довольно много мелкого шрифта. Если это важно, я предлагаю прочитать замечательную главу о загрузке классов в Профессиональный Apache Tomcat 6.

Сжатая версия была написана кем-то на этот страница.