O cache do Tomcat 6 será usado em aplicativos da Web?

2

Eu tenho um servidor Tomcat 6 em um servidor Ubuntu 12.04 com 4 GB e os seguintes 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 de guerra) várias vezes (cada um referencia um banco de dados Postgres diferente) - como server.com:8080/webapp1 server.com:8080/webapp2 etc ...

posso supor que o Tomcat armazenará em cache os arquivos de classe uma vez nas várias aplicações web? Ou - as classes de cache do Tomcat por Webapp?

Obrigado antecipadamente Danny

    
por Danny Lieberman 07.12.2013 / 17:52

1 resposta

2

A resposta depende de onde você localizou o (s) arquivo (s) de classe usado (s) pelo seu webapp.

Se você colocar uma determinada classe no caminho do carregador de classes comum do Tomcat de $ CATALINA_HOME / lib, ela ficará disponível para todas as aplicações web. O mesmo vale para o formulário em cache.

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

Histórico técnico

O Tomcat não está de acordo com a forma como o Java processa nativamente as classes, mas usa um carregador de classes Java personalizado. Isso é para impor vários 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 webapplication
  • segurança no carregamento / referência de classe

O carregador de classes personalizado Tomcat usa os carregadores de classe Bootstrap, Extensão e Sistema padrão Java, mas substitui a variável de caminho de classe usada pelo carregador de classes do Sistema para seu próprio caminho de classe. Isso tem o efeito de:

  • substituindo o Mecanismo de Substituição de Padrões Aprovados fornecido com Java, com os próprios Tomcats.
  • adicionando dois carregadores de classes adicionais no final da hierarquia de carregamento de classes Java:

    • O carregador de classes 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 primeiramente o carregamento de classes aos seus pais, mas tenta carregar cada classe conforme solicitado. Cada classe carregada é subsequentemente armazenada em cache pelo carregador de classes webapp em questão. Este nível de cache / carregador de classe não pode ser compartilhado entre aplicativos da Web.

Todas as classes carregadas pelo carregador de classes comuns são disponibilizadas publicamente para todas as aplicações web, incluindo o cache. A colocação extensiva de classes no caminho do carregador de classes comuns é desencorajada da seguinte forma:

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

Há um bom número de letras pequenas anexadas ao processo de carregamento / armazenamento / carregamento de classes. Se isso for importante, minha sugestão seria ler o capítulo pendente sobre carregamento de classes no Apache Tomcat profissional 6 .

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

    
por 07.12.2013 / 20:12