Desenvolvimento JBoss Seam no Tomcat Passo-A-Passo

JBoss Seam (http://www.seamframework.org), é uma poderosa plataforma open source de desenvolvimento web  para construção de aplicações ricas de internet, em Java.

Esse post foca no desenvolvimento com Seam, utilizando o container web Tomcat, sem utilização de EJB, mas utilizando Seam com POJO e JPA+Hibernate como provedor de persistência. Ele foca na configuração do Seam no Tomcat.

Não vou explicar os conceitos implementados pelo Seam (como conversação e segurança, por exemplo),  usados nessa aplicação. Isso fica para um outro post. ;)

Na documentação do Seam existem todos os passos de configuração para utilização do Seam no Tomcat e em outros servidores.

Antes de tudo, baixe o Seam. Vou usar o release 2.1.1.GA. Vou considerar que o Seam, após ser descompactado em alguma pasta, está em $SEAM_HOME.

Pasta onde o seam foi descopactado

Pasta onde o seam foi descopactado

Vou usar um exemplo que já vem com o Seam. É uma aplicação de Reservas de Hotel (BookingHotel), que faz consultas em hotéis para se hospedar, faz reserva de quartos, e o cadastro de usuário (no caso, o hóspede solicitante da reserva). Essa aplicação exige um usuário logado.

Sendo bem direto, vou mostrar os passos e depois comentá-los.
De acordo com a documentação:

•    Instale Tomcat 5.5 ou Tomcat 6
•    Copie a lib do banco de dados embutido que vem com o download do Seam que está em $SEAM_HOME/lib/hsqldb.jar para $TOMCAT_HOME/common/lib (no Tomcat 5.5) e
$TOMCAT_HOME/lib (no Tomcat 6)
•    Entre na pasta $SEAM_HOME/examples/jpa pelo console e execute:
Para  Tomcat 5.5
# ant tomcat55
Para  Tomcat6
# ant tomcat6

Pasta de exemplo com JPA do Seam

Pasta de exemplo com JPA do Seam

executando o build do ANT no console

executando o build do ANT no console

•    Copie o .war gerado que deverá estar na pasta $SEAM_HOME/examples/jpa/dist-tomcat6/jboss-seam-jpa.war para a pasta $TOMCAT_HOME/webapps

Aplicação gerada para deploy no Tomcat

Aplicação gerada para deploy no Tomcat

•    Inicie o tomcat
•    Acesse a aplicação em http://localhost:8080/jboss-seam-jpa/

Nesse momento, a aplicação já deve estar funcionando. Com o arquivo .war, fica fácil de importá-lo para o Eclipse/MyEclipse. Essa explicação também fica para outro post. ;)

Agora, como prometido, explicando os passos, após instalar o Tomcat:
•     A aplicação de exemplo BookingHotel usa um banco de dados livre, o HSQLDB. As entidades dessa aplicação já criam as tabelas necessárias. Não é necessário se preocupar com configurações do banco. Leia esse artigo sobre ele.
•    No passo 3, o building do exemplo é feito como Ant. O Apache ANT é uma ferramenta de automação de builds bem conhecida. Mais informações nesse artigo.
•    Esse comando do ant chama o arquivo build-tomcat55.xml ou build-tomcat6.xml dependendo do comando. Perceba que, na pasta da aplicação existem outros arquivos de build, como o build-glassfish, o build-jboss, o build-websphere61. Ou seja, presumimos que para usar o seam em outros servidores, os passos devem ser semelhantes. A documentação que vem com o download do Seam explica tudo isso no arquivo $SEAM_HOME/examples/jpa/readme.txt
•    Os demais passos são simplesmente o deploy (copiar o .war) para a pasta webapps do Tomcat, iniciá-lo e acessar o endereço.

Perceba que o Tomcat não necessita de nenhuma configuração a mais. Digo isso, pois já vi muita coisa complicada sobre rodar o seam no tomcat.

Espero que esse tutorial sirva como base para projetos baseados em Seam com POJO+JPA+Hibernate.

Compartilhe suas idéias.

Tags: , , , , , ,

15 Responses to “Desenvolvimento JBoss Seam no Tomcat Passo-A-Passo”

  1. Rafael Ponte says:

    Bacana, muito bom Galba!

    A maioria das aplicações web que vejo realmente não precisam de um servidor de aplicações tão robusto (JBoss, Glassfish etc). Muitas vezes o bom e velho Tomcat ou mesmo o famoso Jetty resolvem.

    Eu sou fã de light-weight container, e acredito que Seam+Tomcat funciona muito bem.
    Enfim, vê se continua postando mais sobre JSF (em especial sobre Seam), pois está escasso *ainda* o número de blogs nacionais sobre o assunto.

    Abraços, e parabens pelo post!

  2. Igo Coelho says:

    Muito bom Galba… ótimo material pra quem vai começar a ter contato com o Seam.
    Parabéns!

  3. João says:

    A aplicação funciona perfeitamente, testei usando o Tomcat6. Muito parecido com este passo a passo neste link:

    http://techieexchange.wordpress.com/2007/11/11/rad-seam-development-with-eclipse-and-tomcat-step-by-step-tutorial-screencast

    Consegui importar o projeto no Eclipse para ter um ambiente configurado para desenvolvimento. Porém, vocês conseguiram rodar os testes que vêm com o exemplo? Aparece a seguinte exceção (sem mexer em nenhuma configuração ou código):

    java.lang.NullPointerException
    at java.lang.String.startsWith(String.java:1252)
    at java.lang.String.startsWith(String.java:1281)
    at org.ajax4jsf.webapp.WebXml.getFacesResourceKey(WebXml.java:189)
    at org.ajax4jsf.webapp.WebXml.getFacesResourceKey(WebXml.java:222)
    at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:139)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:500)
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    at org.jboss.seam.mock.AbstractSeamTest$Request.run(AbstractSeamTest.java:491)
    at org.jboss.seam.example.jpa.test.LoginTest.testLogin(LoginTest.java:52)

    Pelo link

    http://www.seamframework.org/Community/TestNGOfSeamEmailFails

    percebe-se que outras pessoas tiveram o mesmo problema. Podem contribuir com alguma dica? Grato pela atenção.

    João.

  4. Odilio Noronha Filho says:

    Muito bom :) so faltou mostrar como configurar o ant pra ficar perfeito pra qualquer iniciante

    criar o ant_home
    SET ANT_HOME=C:\\ant

    e configurar o path
    SET PATH=%PATH%;%ANT_HOME%\bin

  5. Flavio says:

    Estava tentando rodar usando só o tomcat com aquele codigo que é gerado pelo jboss tools, foi só dor de cabeça. Perfeita sua dica, agora posso iniciar o projeto, valeu.

  6. Zebel says:

    Muito fixe!!
    Até antes de ler este post estava muito confuso. Pensava até em desistir do seam!

    Valeu!

  7. admin says:

    @Odilio, @Flavio, @Zebel
    Legal esse post ter ajudado voces.
    É algo simples, que vem na propria documentação do seam. E bastante útil.
    Obrigado pelos comentários. Eu devia ter respondido antes. Até. :D

  8. Parabéns pelo post, segui seus passos e funcionou perfeitamente. Um abraço!

  9. Ahdail Netto says:

    Galba, muito bom e didático. Pra quem tá começando (eu) tá ótimo!!

  10. Lelo De Pieri says:

    Rodrigo,

    Estou trabalhando em uma aplicação que até o momento estávamos utilizando JBoss, mas como o tomcat nos é suficiente estamos querendo migrar para o mesmo.
    Fiz um projeto de teste utilizando o JBossTools selecionando como servidor o Tomcat 6 que instalei aqui.
    Configurei o arquivo de contexto, tudo tranquilo, mas quando o tomcat tenta subir o contexto do meu teste:

    SEVERE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
    java.lang.NoClassDefFoundError: javax/servlet/jsp/JspFactory
    at com.sun.faces.config.ConfigureListener.isJspTwoOne(ConfigureListener.java:523)

    Tem alguma ideia de oque possa estar ocorrendo?

    Grato

  11. admin says:

    Oi Lelo,
    te respondi em PVT por email, mas basicamente esse erro ocorreu porque o servidor não conseguiu encontrar o servlet.jar
    Verifica novamente o classpath do servidor.

    Até.

  12. Lelo De Pieri says:

    Rodrigo,

    Antes de mais nada, muito obrigado pela resposta.

    Incluí o jar sugerido por você mas o erro continua o mesmo.
    Vasculhei nos demais jars e encontrei a classe no jsp-api.jar. Teoricamente então nem precisaria do servlet.jar.
    Será que pode estar faltando alguma configuração?

    Grato

  13. Josue says:

    Oi Rodrigo Galba,

    Gostaria de saber como você executaria um rollback na conexão. Por exemplo persistir (inserir ou atualizar) uma entidade mas durante o fluxo você decide desfazer as alterações. Como você faria isso?

    Grato.

  14. Thiago says:

    Ola, estou tentando configurar o Seam 3.0 no eclipse utilizando o tomcat 7 mas está uma dificuldade. Alguem sabe como fazer?

Leave a Reply