Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouThomas Pao Alterado mais de 9 anos atrás
1
Seam Framework Básico Cleverson Sacramento cleverson.sacramento@avansys.com.br \\ZYCNOTE\Seam\
2
Agenda Ambiente Introdução Componentes Contextuais Mapeamento Objeto-Relacional Seam Application Framework
3
Objetivo Conhecer o básico do SEAM Overview quase completo Desmistificar o SEAM
4
Ambiente C:\lab-01 eclipse-3.4 jboss-4.2.3.GA jboss-seam-2.1.0.SP1 squirrel-sql-2.6.8 workspace reference lab01
5
Ambiente Iniciar Executar cmd cd \lab \jbo c:\lab-01\jboss-seam-2.1.0.SP1>_ seam setup
6
Ambiente seam-gen Criador automatizado de projetos Seam...
7
Ambiente seam-gen 01. Enter your Java project workspace 02. Enter your JBoss home directory 03. Enter the project name 04. Do you want to use ICEfaces instead of RichFaces 05. Select a RichFaces skin 06. Is this project deployed as an EAR 07. Enter the Java package name for your session beans 08. Enter the Java package name for your entity beans 09. Enter the Java package name for your test cases 10. What kind of database are you using? 11. Enter the Hibernate dialect for your database
8
seam-gen 12. Enter the filesystem path to the JDBC driver jar 13. Enter JDBC driver class for your database 14. Enter the JDBC URL for your database 15. Enter database username 16. Enter database password 17. Enter the database schema name 18. Enter the database catalog name 19. 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
9
seam-gen BUILD SUCCESSFUL Total time: X minutes Y second c:\lab-01\jboss-seam-2.1.0.SP1>_ seam create-project
10
Introdução Conceito Tradução de seam: costura Costura diversas tecnologias: JSP + JSF + RichFaces + Facelets + EJB + JPA + Hibernate + WS +...
11
Componentes Contextuais Componentes Componentes Seam Classes do Seam Classes suas Tipos primitivos do Seam Tipos primitivos seus
12
Componentes Componentes Seam Componentes Contextuais seam aplicação @Name (“a”) X @Entity (“c”) @Name (“b”) @Name (“d”) “a”“b”“d”
13
Componentes Contextuais Componentes O Seam invoca o construtor, você não! seam aplicação AB new seam aplicação AB new X X “b”
14
Componentes Ciclo 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 exista fim se entrega a instância do componente “a” para quem pediu
15
Componentes Anotaçõ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
16
Componentes Prá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: Componentes Contextuais
17
Contexto Stateless context Event (or request) context Page context Conversation context Session context Business process context Application context
18
Componentes Contextuais Contexto Stateless: não guarda estado Stateful: guarda estado. Todos os outros contextos guardam contexto, mas por quanto tempo?
19
Contexto Anotações @Begin inicia um novo contexto de conversação flushMode = FlushModeType.MANUAL @End finaliza o contexto de conversação TAG flush-mode="MANUAL“ Componentes Contextuais
20
Contexto Finalizando 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
21
Contexto Finalizando conversações: @End public String test1() { return “” }; @End public void test2() {}; public void test3() {}; @End public String test4() { throw new RuntimeException(“pam!”); return “oi”; }; Componentes Contextuais
22
Contexto Prá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
23
Mapeamento Objeto Relacional Configuração *-ds.xml Configuração do banco de dados persistence.xml Configuração do JPA (Hibernate 3) components.xml Configuração do Seam import.sql Script de carga inicial
24
Mapeamento Objeto Relacional Configuração components.xml persistence.xml *-ds.xml jndi factory UsuarioDAO @In (“entityManager”) entityManager
25
Mapeamento Objeto Relacional Entidade É um DTO (Data Transfer Object) que será persistido. TelefoneUsuario * 1 Tipo * 1 0..
26
Entidade Anotaçõ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
27
Entidade Prá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
28
Seam Application Framework Introdução Abstrações que o Seam traz 1.Query Objects 2.Home Objects 3.Controller Objects
29
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;
30
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;
31
Query Objects Prática 1.Crie o componente UsuarioQuery, que lista todos os usuários; 2.Crie a view listUsuarios.xhtml, use o ou o ; 3.Crie o botão remover, para cada elemento da lista, que exclui o elemento. Use o 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
32
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
33
Seam Application Framework [OFF-TOPIC] Validators Executa validações de propriedades Não serve somente para Entity
34
[OFF-TOPIC] Validators Anotaçõ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
35
Home Objects Prática 1.Crie o componente UsuarioHome; 2.Modifique a view editUsuario.xhtml para utilizar o helper UsuarioHome; 3.Utilize validadores; Mapeamento Objeto Relacional
36
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!
37
Controller Objects Prá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
38
Fim
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.