Tomcat is deprecated

3 Oct
2008

Marky is frustrated by Hockey.Lover
Tomcat is deprecated. Use Jetty instead.

É exatamente esse a impressão que eu tenho depois de migrar os nossos servidores para o Jetty. Depois de ver muita gente reclamando de OutOfMemory no Tomcat, inclusive aqui da empresa, resolvemos tentar o Jetty.

A tempo que escutava o pessoal da Caelum (e principalmente o Kung) falando bem do Jetty, mas só quando se começa a usar que se percebe as vantagens. Como temos várias aplicações rodando (diferente do GUJ, que era só o JForum, acredito), imaginei que a troca não seria tão smooth assim.

Claro que antes de sair trocando tudo, fizemos alguns testes pra ter certeza que tudo ia ocorrer bem. Por sinal, a troca foi bem tranquila do ponto de vista da aplicação, só tivemos que fazer alguns ajustes:

  • o Jetty lança java.util.Collections$UnmodifiableMap ao tentar modificar diretamente o (Hash)Map devolvido com request.getParameterMap() ao invés de usar o método setAttribute() do request – coisa que o Tomcat deixa;
  • Diferenças ao tentar recuperar um resource do sistema utilizando como pasta base “.”, ou usar “..” pra navegar na estrutura de pastas. Para resolver, basta usar como pasta base “/” (ex: “/com/foo/resources/xpto.xml”) e colocar dentro do WEB-INF/classes;
  • E a última, mas simples de resolver, é que o Jetty deixa habilitado listagem de diretórios. Você pode alterar isso no etc/webdefault.xml, trocando o atributo dirAllowed para false;

Feitos esses ajustes, chegou a vez de configurar o Jetty para atender aos diferentes domínios. E é aqui que vi uma das grandes vantagens do Jetty. A parte de configuração dele fica muito organizada. Fizemos da seguinte forma:

  • Para cada aplicação (pra cada .war na pasta /webapps do Jetty), criamos um arquivo de contexto no /contexts (não é necessário, mas como temos urls diferentes e contextos diferentes, tivemos que customizar – e acabamos ganhando um brinde que conto depois)
  • Cada arquivo de context tem uma estrutura estupidamente simples:


    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
    <Configure class="org.mortbay.jetty.webapp.WebAppContext">
      <Set name="contextPath">/</Set>
      <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/demo_foo.war</Set>
      <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>

      <Set name="virtualHosts">
        <Array type="String">
          <Item>demo.foo.com</Item>
        </Array>
      </Set>

    </Configure>

Explicando por partes:

  • WebAppContext é o tipo de contexto que você vai usar, estamos usando esse pois permite o hotdeploy
  • contextPath serve para dizer (óbvio) o contexto que quer que a aplicação fique disponível. Aqui prefirimos colocar todas no contexto / e configurar diferentes Virtual Hosts pra cada aplicação.
  • a propriedade war só diz qual .war (que pode ser um exploded war também) que vai ser deployado naquele contexto
  • na seção que diz virtualHosts, você pode configurar todos os endereços que quer que sua aplicacão responda. Para ela aceitar mais de um endereço, basta ir adicionando Item’s com as outras URLs. Aproveitando, no Jetty 7 será possível usar wildcards!

Com isso feito, ficou muito fácil configurar o deploy automático de todas nossas aplicações, pois basta substituir o arquivo .war e dar um touch no arquivo de contexts que o Jetty faz reload do contexto (e esse é o brinde! )! Agora, com o Jetty combinado ao Hudson, com um clique podemos fazer deploy de qualquer uma das nossas aplicações em um ambiente específico ou mesmo em todos, automaticamente. Mas isso já é assunto para um outro post.

Links Relacionados

Popularity: 6% [?]

by-nc-nd

14 Responses to Tomcat is deprecated

Avatar

Rafael Ponte

October 3rd, 2008 at 2:09 pm

Muito interessante!

Tenho ouvido muita gente falando bem do Jetty, mas ainda não tive oportunidade para efetuar alguns testes.

Depois de alguns depoimentos, como este, acredito que me sinto mais confiável e motivado a efetuar alguns testes e quem sabe até alguma substituição se assim for necessário.

Abraços.

Avatar

Fabio Kung

October 3rd, 2008 at 5:45 pm

Eu te disse, eu te disse… ;-)

ps.: no servidor do guj, a home do guj e o jforum rodam no jetty. Mas rodam no mesmo contexto!

Avatar

gustavo

October 6th, 2008 at 1:49 pm

já utilizou o jbossweb?

Avatar

Diego Plentz

October 6th, 2008 at 1:49 pm

Nunca usei Gustavo.

Avatar

Christiano Milfont

October 8th, 2008 at 3:38 pm

Bacana, mas sobre esse ponto:
“Depois de ver muita gente reclamando de OutOfMemory no Tomcat, inclusive aqui da empresa, resolvemos tentar o Jetty”
Vocês guardaram as estatísticas de profiler do uso de memória no tomcat para compararem com o Jetty?
Curioso! :)

Avatar

Tomcat: Rest in Peace? - CMilfont Tech

October 10th, 2008 at 12:42 pm

[...] de software do Brasil) de quedas e lentidão. Há poucos dias o Diego Plentz também publicou sobre experiência recente, até citando o artigo do Kung e dando explicações sobre as mudanças necessárias que teve que [...]

Avatar

Rafael Rocha

October 13th, 2008 at 9:17 am

Vocês atualizaram o tomcat a partir do changelog e releases de correções que eles disponibilizaram.

Vi que várias correções de memory leaks foram feitas.
Qual a versão do tomcat exata que vocês utilizavam?

Avatar

Diego Plentz

October 13th, 2008 at 9:20 am

5.5.26 se não me engano.

Avatar

mmrack

November 26th, 2008 at 11:47 pm

Hei Plentz, que area de memoria estava dando OutOfMemory? Nao vai me dizer que era a PermaGen, “pela amor”, né, hahaha?!

Mas o Jetty (…Li, ahahah) é bom mesmo.

Avatar

Sued

January 9th, 2009 at 6:44 am

Diego…li seu artigo sobre intregração de Apache com IIS. Alguma chance de integrar Jetty com IIS?

Avatar

Diego Plentz

January 9th, 2009 at 7:28 am

@Sued Acredito que não seja complicado integrar com o IIS, mas sinceramente, se puder coloque um Nginx ou mesmo o Apache que você será bem mais feliz :)

Avatar

Marcos de Sousa

May 17th, 2009 at 3:09 pm

Bom saber disso, mas acho que o comentário de Christiano Milfont deve ter-se em conta.

Por outro lado, ficou mais rápido utilizando jetty? Que percentagem?

Avatar

Vinícius Pádua

March 31st, 2011 at 3:20 pm

Aqui na empresa estou querendo migrar pelo mesmo problema!
ainda indica o Jetty? Como esta seu desempenho?
Estou com dificuldade inicial na instalação do jetty como services no windows

Avatar

Diego Plentz

March 31st, 2011 at 4:24 pm

Sim, continuo usando jetty para apps Java. Desempenho ótimo(apesar que não acredito que haja super diferenças entre os 2). Nunca usei o jetty com windows, mas essa informação deve estar disponível no wiki deles http://docs.codehaus.org/display/JETTY/Jetty+Wiki

Comment Form

top