Posts Tagged ‘tutorial’

Estrutura de um projeto Seam

August 30th, 2008

O seam-gen é um gerador de scaffolding muito útil para quem programa em Seam. O seam-gen em si é uma ferramenta CLI, mas o JBoss Tools nos dá uma GUI para facilitar nossa vida. Bom, então o primeiro passo é instalar o plugin do JBoss Tools. É só baixar do site deles e descompactar no diretório do Eclipse, nada de mais.

Você notará que serão adicionadas várias perspectivas, entre elas, a Seam. Vamos selecionar essa perspectiva e criar um novo Seam Project. Com isso já temos um projeto funcional com segurança, apresentação de erros, e conexão com banco de dados. Também é criado um projeto <projeto>-Test para testes. Vamos entender um pouco do que nos foi gerado.

  1. classe usada pelo Seam para autenticaçãoseam-gen-structure
  2. arquivo chave. Indica ao Seam que ele deve procurar nesse diretório por componentes
  3. persistence.xml do JPA
  4. arquivo com algumas propriedados a serem substituidas pelo Ant no components.xml
  5. import.sql do Hibernate
  6. mensagens para internacionalização
  7. arquivo Drools com regras de autorização
  8. datasource gerado para o JBoss
  9. arquivo de configuração do Seam (componentes, integração)
  10. arquivo de configuração WAR do JBoss
  11. arquivo de configuração do Seam (regras de fluxo, segurança, controle de conversação)
  12. similar ao arquivo pages.xml, mas específico para o login.xhtml
  13. arquivo de configuração do plugin Hibernate Console

Vamos ver por alto algumas configurações interessantes. Na parte de segurança temos no components.xml:

<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>

O Seam possui o conceito de eventos. Eventos são mensagens que podem ser capturadas ou lançadas, no estilo broadcast. O Seam em si lança vários eventos e podemos capturar esses eventos através de XML, como no exemplo acima. O trecho acima está invocando métodos do componente built-in #{redirect} quando eventos de segurança forem lançados. Ele especifica que a view id JSF deve ser salva quando o usuário não-logado tentar acessar uma página restrita e que essa view id deve ser restaurada uma vez que ele se autentique.
Um outro trecho especifica que componente é responsável pela autenticação:

<security:identity authenticate-method="#{authenticator.authenticate}"
security-rules="#{securityRules}"
remember-me="true"/>

E no pages.xml dizemos que página deve ser utilizada para login:

<exception class="org.jboss.seam.security.NotLoggedInException">
<redirect view-id="/login.xhtml">
<message>Please log in first</message>
</redirect>
</exception>

Aqui temos um tratamento de exceção bem parecido com o de servlets que definimos no web.xml. O usuário será redirecionado para a página login.xhtml e uma mensagem JSF será adicionada.
Se olharmos no login.pages.xml vemos ainda:

<navigation from-action="#{identity.login}">
<rule if="#{identity.loggedIn}">
<redirect view-id="/home.xhtml"/>
</rule>
</navigation>

O que nos lembra bastante as navigation rules JSF. De fato parecem muito, mas as extendem em funcionalidade, podendo não só enviar o usuário para outra página como também lançar um evento, executar um método para avaliar qual será a próxima página, e algumas coisas mais avançadas.

O objetivo desse post é apenas nos familiarizar mais com o Seam e dar uma visão sobre o scaffold que nos foi gerado de base e que iremos usar para desenvolver nossa aplicação. Ainda vamos falar com mais detalhes de eventos, componentes e configurações.

Parte I: O que é Seam?

August 12th, 2008

Como recebo vários hints no post JBoss Seam no Tomcat, resolvi escrever mais sobre Seam. Esse post abre uma série de tutoriais de Seam.

Seam é um framework muito amplo. Pegue alguns dos frameworks mais representativos, ponha algumas práticas de desenvolvimento e misture: assim que vejo o Seam. O Seam em sua plenitude usa os frameworks: EJB3, JSF, Facelets, Hibernate, Hibernate Validations, Richfaces, Ajax4JSF, jBPM, Drools (qualquer associação ao nome JBoss é mera coincidência). É muita coisa. Mas ele não só usa esses frameworks, ele também provê uma integração entre eles, disponibiliza componentes built-in (à la Spring, cujo qual inclusive pode-se integrar) e introduz algumas melhorias sobre eles. Além disso ele apregoa algumas práticas como desenvolvimento orientado a componentes e desencoraja outras, como desenvolvimento em camadas.

Vou deixar de lado o que cada framework faz, pois não entra no mérito do que o Seam tem a oferecer. Dando um enfoque bem prático, o Seam:

  • Reduz plumbing code do JSF. Quem já programou com JSF sabe do que estou falando (Não? FacesContext? faces-config.xml?).
  • Resolve o infame problema do “back button” em JSF. E reload, e bookmarking, e …
  • Facilita o uso de JPA. Tem um código cheio de merges()? Usa uma long-running transaction num page flow?
  • Possibilita page flows usando o jBPM.
  • Permite aplicações multi-windows. E finalmente poder clicar “Abrir em nova janela” nos links!
  • Permite o uso de workspaces. Como no Linux.
  • Faz uso extensivo de anotações. Mas também permiti o uso de XML.
  • Possui uma penca de tags JSF. Uns muito úteis, uns bem exóticos…
  • E muito mais!

Dada essa introdução, vou detalhar nos próximos posts cada um desses itens dizendo como realizamos eles com o uso so Seam. Esse blog não é sobre Seam, então esperem outros posts no meio. Até mais!

referência: http://docs.jboss.com/seam/latest/reference/en-US/html/Book-Preface.html