O Tomcat 6 armazenará cache em aplicativos da Web?

O Tomcat 6 armazenará cache em aplicativos da Web?

Tenho um servidor Tomcat 6 em um servidor Ubuntu 12.04 com 4GB e o seguinte JAVA_OPTS

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

Pergunta idiota: se eu implantar o mesmo webapp (mesmo arquivo war) várias vezes (cada um faz referência a um banco de dados Postgres diferente) - como server.com:8080/webapp1 server.com:8080/webapp2 etc ...

posso presumir que o Tomcat armazenará em cache os arquivos de classe uma vez em vários aplicativos da web? Ou - o Tomcat armazena em cache classes por Webapp?

Desde já agradeço Dani

Responder1

A resposta depende de onde você localizou os arquivos de classe usados ​​pelo seu webapp.

Se você colocar uma determinada classe no caminho do carregador de classes comum do Tomcat $CATALINA_HOME/lib, ela será disponibilizada para todos os aplicativos da web. O mesmo vale para seu formato em cache.

Se você usar o caminho do carregador de classes do aplicativo da web Tomcat de webapps/aplicativo web/WEB-INF/classes e aplicativos web/aplicativo web/WEB-INF/lib as classes e os caches de classe correspondentes são isolados entre aplicativos.

Formação técnica

O Tomcat não está em conformidade com a maneira como o Java processa classes nativamente, mas usa um carregador de classes Java personalizado. Isso é para impor uma série de recursos relacionados a:

  • processamento de classe dentro de um webapp
  • cache de classe por webapp
  • pré-carregamento e recarregamento de classes na inicialização/tempo de execução do aplicativo web
  • segurança no carregamento/referência de classe

O carregador de classes customizado do Tomcat usa os carregadores de classes padrão Java Bootstrap, Extension e System, mas substitui a variável classpath usada pelo carregador de classes System por seu próprio caminho de classe. Isto tem o efeito de:

  • substituindo o mecanismo de substituição de padrões endossados ​​fornecido com Java, pelo próprio Tomcats.
  • adicionando dois carregadores de classes adicionais no final da hierarquia de carregamento de classes Java:

    • O carregador de classe comum do Tomcat
    • Um carregador de classes separado por webapp

O classpath original é ignorado pelo Tomcat.

Um detalhe importante é que um carregador de classes webapp não delega primeiro o carregamento de classes aos seus pais, mas tenta carregar cada classe conforme solicitado. Cada classe carregada é posteriormente armazenada em cache pelo carregador de classes webapp em questão. Este nível de carregador de classe/cache não pode ser compartilhado entre aplicativos da web.

Todas as classes carregadas pelo carregador de classes Common são disponibilizadas publicamente para todos os aplicativos da web, incluindo o cache. A colocação extensiva de classes no caminho do carregador de classes Common é desencorajada, pois:

  • quebra a portabilidade
  • os requisitos de versão da classe podem ser diferentes entre o Tomcat e diferentes aplicativos da web.
  • a manutenção se torna um problema, qual classe pertencia a quê?

Há muitas letras miúdas anexadas ao processo de carregamento/armazenamento em cache/recarregamento da classe. Se isso for importante, minha sugestão seria ler o excelente capítulo sobre carga de classe noProfissional Apache Tomcat 6.

Uma versão compactada foi escrita por alguém emessepágina.

informação relacionada