Top Banner
Seam Framework Básico Cleverson Sacramento [email protected] \\ZYCNOTE\Seam\
38

Seam Framework Básico Cleverson Sacramento [email protected] \\ZYCNOTE\Seam\

Apr 07, 2016

Download

Documents

Thomas Pao
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Seam FrameworkBásico

Cleverson [email protected]

\\ZYCNOTE\Seam\

Page 2: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Agenda

• Ambiente

• Introdução

• Componentes Contextuais

• Mapeamento Objeto-Relacional

• Seam Application Framework

Page 3: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Objetivo

• Conhecer o básico do SEAM

• Overview quase completo

• Desmistificar o SEAM

Page 4: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Ambiente

C:\lab-01eclipse-3.4jboss-4.2.3.GAjboss-seam-2.1.0.SP1squirrel-sql-2.6.8workspace

reference

lab01

Page 5: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Ambiente

Iniciar Executarcmd<ENTER>

cd \lab<TAB>\jbo<TAB><TAB><ENTER>c:\lab-01\jboss-seam-2.1.0.SP1>_

seam setup<ENTER>

Page 6: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Ambiente

• seam-gen

Criador automatizado de projetos Seam

<ENTER><ENTER><ENTER><ENTER><ENTER><ENTER><ENTER><ENTER><ENTER><ENTER>...

Page 7: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Ambiente

• seam-gen

01. Enter your Java project workspace02. Enter your JBoss home directory03. Enter the project name04. Do you want to use ICEfaces instead of RichFaces05. Select a RichFaces skin06. Is this project deployed as an EAR07. Enter the Java package name for your session beans08. Enter the Java package name for your entity beans09. Enter the Java package name for your test cases10. What kind of database are you using?11. Enter the Hibernate dialect for your database

Page 8: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• seam-gen

12. Enter the filesystem path to the JDBC driver jar13. Enter JDBC driver class for your database14. Enter the JDBC URL for your database15. Enter database username16. Enter database password17. Enter the database schema name18. Enter the database catalog name19. Are you working with tables that already exist in the

database?20. Do you want to drop and recreate the database

tables and data in import.sql each time you deploy?

Ambiente

Page 9: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Ambiente

• seam-gen

BUILD SUCCESSFULTotal time: X minutes Y second

c:\lab-01\jboss-seam-2.1.0.SP1>_

seam create-project<ENTER>

Page 10: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Introdução

• Conceito

Tradução de seam: costura

Costura diversas tecnologias:JSP + JSF + RichFaces + Facelets +EJB + JPA + Hibernate + WS + ...

Page 11: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Componentes Contextuais

• ComponentesComponentes Seam

Classes do Seam

Classes suas

Tipos primitivos do Seam

Tipos primitivos seus

Page 12: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• ComponentesComponentes Seam

Componentes Contextuais

seam

aplicação

@Name (“a”)

X

@Entity (“c”)

@Name (“b”)

@Name(“d”)

“a” “b” “d”

Page 13: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Componentes Contextuais

• ComponentesO Seam invoca o construtor, você não!

seam

aplicação

A Bnew

seam

aplicação

A Bnew

X

X“b”

Page 14: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• ComponentesCiclo de vida

Componentes Contextuais

alguém invoca o componente “a”

se o componente “a” não existir então se existir fábrica para “a” então invoca a fábrica e recebe uma instância de “a” senão invoca o construtor padrão da classe de “a” fim se

guarda a instância de “a” criada injeta na instância tudo que for necessário executa o método anotado com @Create, caso existafim se

entrega a instância do componente “a” para quem pediu

Page 15: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• ComponentesAnotações

@Name rotula uma classe como um componente@Factory define uma fábrica para um componente@Create define o método do componente que será invocado imediatamente após a sua criação@AutoCreate indica que o componente será criado assim que for chamado, sem a necessidade de tornar explícito com o create=true

@In injeta na classe um componente@Out ejeta para o Seam um novo componente

Componentes Contextuais

Page 16: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• ComponentesPrática

1. Criar uma classe UsuarioAction e rotulá-la como um componente;

2. Criar uma classe UsuarioService e rotulá-la como um componente;

3. Criar o método boolean autenticar(String login, String senha) em UsuarioService;

4. Criar um método String autenticar() em UsuarioAction, que invoque o Service passando valores fixos;

5. Invoque o método autenticar() do componente da classe UsuarioAction;

ex: no home.xhtml faça assim:<s:button value="autenticar" action="#{usuarioAction.autenticar}" />

Componentes Contextuais

Page 17: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Componentes Contextuais

• Contexto

Stateless contextEvent (or request) contextPage contextConversation contextSession contextBusiness process contextApplication context

Page 18: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Componentes Contextuais

• Contexto

Stateless: não guarda estado

Stateful: guarda estado. Todos os outros contextos guardam contexto, mas por quanto tempo?

Page 19: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• Contexto

Anotações@Begin inicia um novo contexto de conversação

flushMode = FlushModeType.MANUAL@End finaliza o contexto de conversação

TAG<begin-conversation />

flush-mode="MANUAL“<end-conversation />

Componentes Contextuais

Page 20: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• ContextoFinalizando conversações:

• Marks a method as ending a conversation, if the method returns a non-null outcome without throwing an exception. (…)

• A null outcome never ends the conversation.

• If the method is of type void, the conversation always ends.

Componentes Contextuais

Page 21: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• ContextoFinalizando conversações:

@Endpublic String test1() { return “” };

@Endpublic void test2() {};

public void test3() {};

@Endpublic String test4() {

throw new RuntimeException(“pam!”); return “oi”;};

Componentes Contextuais

Page 22: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• ContextoPrática

1. Crie duas páginas: passo1.xhtml e passo2.xhtml;2. Crie as seguintes propriedades na classe UsuarioAction:

1. String login; String senha;2. String email;3. Date nascimento;4. boolean ativo;

3. Em passo1.xhtml crie dois campos do tipo texto para guardar informações de nome e email. Crie um botão próximo que faz link com passo2.xhtml;

4. Em passo2.xhtml crie dois campos para guardar as informações de nascimento e ativo. Crie um botão anterior que faz link com passo1.xhtml;

5. Crie um botão finalizar em passo2.xhtml que finaliza a conversação;

6. Acesse passo1.xhtml pela barra de endereços do browser;

Componentes Contextuais

Page 23: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Mapeamento Objeto Relacional

• Configuração

*-ds.xmlConfiguração do banco de dados

persistence.xmlConfiguração do JPA (Hibernate 3)

components.xmlConfiguração do Seam

import.sqlScript de carga inicial

Page 24: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Mapeamento Objeto Relacional

• Configuração

components.xml

persistence.xml

*-ds.xmljndi

factory

UsuarioDAO

@In (“entityManager”)

entityManager

Page 25: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Mapeamento Objeto Relacional

• EntidadeÉ um DTO (Data Transfer Object) que será persistido.

TelefoneUsuario *1

Tipo

*10 ..

Page 26: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• EntidadeAnotações

@Entity indica que uma classe é uma entidade@Id define o campo ID da entidade@GeneratedValue gera valores automaticamente@NotNull define o atributo como obrigatório@Length define o tamanho do campo

Mapeamento Objeto Relacional

Page 27: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• EntidadePrática

1. Crie a classe Usuario e coloque os seguintes atributos:1. Long id;2. String login;3. String senha;4. String email;5. Date nascimento;6. boolean ativo;

2. Crie uma propriedade Usuario instance na classe UsuarioAction;

3. Remova os demais atributos da classe UsuarioAction;4. Faça o exercício anterior funcionar com esta nova estrutura;5. Persista a entidade ao clicar em Finalizar;6. Insira 5 usuários no script de carga inicial;

Mapeamento Objeto Relacional

Page 28: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Seam Application Framework

• Introdução

Abstrações que o Seam traz

1. Query Objects

2. Home Objects

3. Controller Objects

Page 29: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Seam Application Framework

• Query Objects

Utilizado para telas de listagem;

Utiliza recursos do JSF, tais como DataModel e DataModelSelection;

Pode-se incluir restrições às consultas;

Pode-se incluir ordenação às consultas;

Page 30: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Seam Application Framework

• Query Objects

Utilizado para telas de listagem;Utiliza recursos do JSF, tais como DataModel e DataModelSelection;Pode-se incluir restrições às consultas;Pode-se incluir ordenação às consultas;Pode ser feito via XML ou herdando a classe EntityQuery;

Page 31: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• Query ObjectsPrática

1. Crie o componente UsuarioQuery, que lista todos os usuários;

2. Crie a view listUsuarios.xhtml, use o <h:dataTable /> ou o <rich:dataTable />;

3. Crie o botão remover, para cada elemento da lista, que exclui o elemento. Use o <h:commandButton /> invocando o método #{usuarioQuery.remover} exatamente desta forma: sem parâmetros e sem parênteses;

4. Crie a view editUsuarios.xhtml e deixe-a vazia;5. Crie um link em listUsuarios.xhtml, para cada elemento da

lista, que invoca a view “/editUsuarios.xhtml” passando como parâmetro o ID da entidade.

Mapeamento Objeto Relacional

Page 32: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Seam Application Framework

• Home Objects

Utilizado para telas CRUD: Create, Read, Update e Delete;

Espera um parâmetro ID;

Persiste uma entidade;

Geralmente faz uso dos validators

Page 33: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Seam Application Framework

• [OFF-TOPIC] Validators

Executa validações de propriedades

Não serve somente para Entity

Page 34: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• [OFF-TOPIC] ValidatorsAnotações

@Length valida o tamanho do campo.@Pest a data está no passado?@Future a data está no futuro? @Email verifica se é um e-mail válido. @Digits verifica se é somente dígito.

Seam Application Framework

Page 35: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• Home ObjectsPrática

1. Crie o componente UsuarioHome;2. Modifique a view editUsuario.xhtml para utilizar o helper

UsuarioHome;3. Utilize validadores;

Mapeamento Objeto Relacional

Page 36: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Seam Application Framework

• Controller Objects

É um componente Seam para a camada de apresentação, ou seja, é um Action;

Disponibiliza métodos para acessar o FacesMessages e o Log;

Só isso!

Page 37: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

• Controller ObjectsPrática

1. Modifique a classe UsuarioAction, fazendo-a herdar de Controller;

2. Faça que ela se comporte de forma idêntica ao UsuarioHome;

3. Retire a anotação @Name do UsuarioHome;4. Anote UsuarioAction com @Name ("usuarioHome");5. Teste novamente seu CRUD e faça-o funcionar!

Mapeamento Objeto Relacional

Page 38: Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\

Fim