2. Sumário
1. Introdução
2. Meus Objetivos no Projeto
3. Especificação dos requisitos
4. Arquitetura MVC
5. JSF (Java Server Faces)
6. Hibernate
7. RichFaces
8. Modificações do antigo projeto
9. Dúvidas e conflitos
3. Introdução
• Web + SiViU (Sistema de Informação sobre
Violência Urbana), ou seja, o SiViU na Web;
• É um SIG (Sistema de Informação Geográfica)
que tem como objetivo realizar a coleta, o
estudo e a análise de dados relativas às
mortes violentas ocorridas em municípios de
médio porte;
4. Meus objetivos no Projeto
• Permitir o acesso e cadastros de Boletins de
Ocorrência em uma plataforma Web usando
aplicações RIA, garantindo desempenho e
portabilidade;
• Utilizar um framework para fazer o Mapeamento
Objeto-Relacional do banco de dados, de forma a
melhorar a manutenibilidade e aumentar a
portabilidade da aplicação;
• Garantir a segurança das informações disponibilizadas,
utilizando criptografia e conceitos de segurança na
Web;
5. Especificação dos requisitos (O que o
sistema deve ser capaz de fazer?):
• Disponibilizar um local comum para cadastros de Boletins de
Ocorrência;
• Disponibilizar um local para consultar pessoas, fatos e Boletins de
Ocorrência;
• Disponibilizar um local para remover os dados (pessoas, fatos,
Boletins de Ocorrência);
• Disponibilizar um local para cadastrar, consultar e alterar usuários;
• Disponibilizar um local para gerenciar os usuários já cadastrados;
6. • Registrar os processos de utilização do sistema (log);
• Controle de autenticação do usuário, verifica o que o
usuário pode ou não fazer;
• Possibilitar alteração dos dados, para alguns usuários;
• Compartilhar os dados cadastrados entre os usuários,
visando reutilização dos dados;
• Possibilitar que cadastro do usuário seja aprovado;
7. O que vai ficar faltando?
• Disponibilizar a visualização estatística
(tabelas, gráficos, entre outros);
• A visualização do Mapa do Crime;
• Arquitetura Orientada a Serviços;
9. JSF (Java Server Faces)
• MVC para aplicações Web;
• se tornou um padrão;
• "fácil" de usar;
• componentes extensíveis;
• boa demanda do mecado e
conseqüentemente dos desenvolvedores;
• código aberto
10. O que tenho que saber para começar a
discutir e implementar?
• Orientação a Objetos e Java básico;
• Regras de navegação;
• Beans;
11. Regras de Navegação
• é o mecanismo que permite unir algum tipo de processamento
com seqüência de páginas a serem mostradas;
• quando um botão ao um link é clicado, o componente
associado gera um ActionEvent que é lançado para os seus
listeners;
•o receptor desse evento é o que chamamos de Backbean (Bean
comum), um action method nessa classe vai ser executada e o
resultado disso vai ser uma String que deve se encaixar na regra
de navegação;
13. O que é um Bean?
• são classes simples, não herdão de ninguém nem são
obrigados a implementar nenhuma interface;
• possuem nossos famosos getter e setters;
• “armazenarão” os dados que serão mostrados no
browser;
14. Exemplo
package beans;
public class exemploBean {
private String usuario;
public void setUsuario (String usuario) {
this.usuario = usuario;
}
public String getUsuario() {
return usuario;
}
//pode ter outros métodos
}
15. Beans no arquivo de configuração
<managed-bean>
<managed-bean-name>b</managed-bean-name>
<managed-bean-class>beans.exemploBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
16. Um exemplo mais completo
• em nossa index.jsp temos:
<h:inputText value = "#{b.usuario}“/>
<h:commandButton value=“OK” action="#{b.ok}“/>
• e tivessemos um método chamado “ok” na nossa classe exemploBean:
public String ok() { //sem argumentos e String
if (usuario.equals(“João Sávio”)
return “sucesso”;
else
return “falha”;
}
17. Outras considerações
• em aplicações MVC costuma-se separar os
beans (model) dos ManagedBeans
(controller);
• no exemplo anterior aquele “método ok” seria
um ManagedBean e usaríamos um objeto de
referência para “exemploBean”;
18. Utilização correta de beans no MVC
package controller.managedBeans;
//imports
public class exemploManagedBean{
private ExemploBean exBean;
public exemploManagedBean() {
exBean = new ExemploBean(); //não esquecer de instanciar
}
public String ok() {
if (usuario.equals(“João Sávio”)
return “sucesso”;
else
return “falha”;
}
//respectivos sets e gets de ExemploBean
}
20. Hibernate – framework de
mapeamento objeto-relacional
• o mapeamento objeto-relacional refere-se à técnica
de mapear os registro do banco de dados em objetos
e persistir as informações contidas nos objetos em
forma de linhas e colunas;
• assim, pode-se manipular objetos (inserir, atualizar,
consultar, remover), evitando ter que fazer queries
gigantes;
21. Vantagens
• aumento da portabilidade da aplicação;
• melhoria na manutenibilidade de código;
• redução no tamanho de código médio;
• o trabalho do desenvolvedor se torna
facilitado e reduzido;
22. Hibernate no WebSiViU
public class DAOFactory {
protected final Session session;
private Transaction transaction;
public DAOFactory() { session = HibernateUtil.getSession(); } //construtor
public Session getSession() {...}
public void beginTransaction() {...}
public void commit() {...}
public boolean hasTransaction() {...}
public void rollback() {...}
public void clear() {...}
public void close() {...}
23. O DAO Genérico
public class GenericDAO<T> extends DAOFactory {
private final Class classe;
public GenericDAO(Class classe) {this.classe = classe;}
public void adiciona(T u) {...}
public void remove(T u) {...}
public void atualiza(T u) {...}
public List<T> listaTudo() {...}
public List<T> lista(int inicio, int tam) {...}
public T buscaId(int id) {...}
25. Vantagens dessa abordagem
• extrema facilidade de expansão do sistema;
• se tivéssemos que implementar uma nova
classe por exemplo, se nossa aplicação
também fosse manipular dados de escolas,
teríamos uma classe chamada “EscolaDAO”,
que controlaria a inserção, atualização,
consulta e remoção de uma classe bean
EscolaVO:
26. public class EscolaDAO extends GenericDAO<EscolaVO> {
public EscolaDAO() {
super(EscolaVO.class);
}
...//métodos herdados + outros definidos pelo programador
}
• pronto, agora podemos fazer uma inserção no banco de dados
apenas fazendo isso:
EscolaDAO escolaDAO = new EscolaDAO();
escolaDAO.adiciona(escolaVO);
//supondo que já temos um objeto escolaVO
27. Outras considerações
• menor código fonte à custa de uma
complexidade maior;
• utilização de herança, classes genéricas e
conjuntos;
28. RichFaces
• é uma biblioteca de componentes ricas para o JSF;
• padrões W3C;
• um avançado framework para integrar facilmente as
capacidade do AJAX no desenvolvimento de aplicações
comerciais;
• riqueza;
• rapidez;