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
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
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
• 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: java server faces, jboss, JBoss Seam, jsf, passoapasso, seam, tomcat
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!
Muito bom Galba… ótimo material pra quem vai começar a ter contato com o Seam.
Parabéns!
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.
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
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.
Muito fixe!!
Até antes de ler este post estava muito confuso. Pensava até em desistir do seam!
Valeu!
@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é.
Parabéns pelo post, segui seus passos e funcionou perfeitamente. Um abraço!
Galba, muito bom e didático. Pra quem tá começando (eu) tá ótimo!!
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
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é.
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
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.
[...] http://rodrigogalba.com.br/2009/04/12/desenvolvimento-jboss-seam-no-tomcat-passo-a-passo/ [...]
Ola, estou tentando configurar o Seam 3.0 no eclipse utilizando o tomcat 7 mas está uma dificuldade. Alguem sabe como fazer?