Aula 01 Frameworks para desenvolvimento web em java - UTFPR - 2016

1.144 visualizações

Publicada em

Publicada em: Educação
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.144
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
75
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aula 01 Frameworks para desenvolvimento web em java - UTFPR - 2016

  1. 1. Frameworks para Desenvolvimento web em Java André Luiz Forchesatto
  2. 2. Apresentação ● Especialista em Ciência da Computação pela UFSC; ● Graduado em Tecnologia em Informática pela Unoesc; ● Atuação ○ Sócio Camtwo Sistemas; ○ Desenvolvedor Java desde 2002; ○ Professor; ● Contato ○ andreforchesatto@gmail.com ○ github.com/forchesatto ○ slideshare.net/andreforchesatto ○ @forchesatto
  3. 3. Ementário Evolução do desenvolvimento de aplicações WEB. Introdução ao Desenvolvimento RAD para WEB. Visão geral das ferramentas e frameworks para desenvolvimento de aplicações WEB. Gerenciamento de dependências e deploy com maven. Injeção de dependência com Spring ou CDI. Padrão de Desenvolvimento WEB Action Based e Component Based.
  4. 4. Planejamento ● Aula 01 ○ Maven ○ Injeção de dependência ○ Introdução ao Spring ○ Spring IoC ○ Introdução Spring Boot ○ Introdução Spring Data ○ Spring Test ● Aula 02 ○ Spring MVC ○ Spring Rest ○ Spring Data ○ Spring Web com HTML
  5. 5. Planejamento ● Aula 03 ○ Spring Web com outros template ○ Spring MVC ● Aula 04 ○ Spring Security ● Aula 05 ○ Spring micro-serviço ○ Trabalho Final
  6. 6. Maven
  7. 7. Problema Gestão de Dependência
  8. 8. Problema Gestão de Dependência ● Múltiplos Componentes ● Componentes dependem de outros componentes ● Múltiplas versões
  9. 9. Inferno dos Jars
  10. 10. Conceito ● Ferramenta para gerenciamento, construção e implantação de projetos; ● Simplifica o processo de Build ● Organiza e compartilha as Libs dos projetos ● Fornece orientação para as melhores práticas de projeto e programação ● Gera relatórios e documentação sobre o projeto
  11. 11. Características ● Builds automatizados ● Ciclo de vida bem definido (lifecycle) ● Repositório de artefatos ● Gestão de Dependências ● Definição de Projetos declarativa (POM) ● Plugins como peça fundamental ● Quickstart rápido de projetos ● Site de projetos facilmente acessível ● Integração com controle de versão
  12. 12. Project Object Model (POM) ● Definições do projeto ● Configurações de dependências de componentes(lib) ● Customizações (definições de plugin, repositorios, etc..) ● Herança e agregação de projetos
  13. 13. Estrutura Mínima (POM)
  14. 14. Propriedades (POM) ● groupId (nome do package - empresa) ● artifactId (identificador do projeto) ● packaging (pom, war, jar, etc. - default jar) ● version (versão de release ou SNAPSHOT)
  15. 15. Dependências <project> ... <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> ... </project> compile (default) provided runtime test system
  16. 16. http://search.maven.org/
  17. 17. Buscando libs
  18. 18. Herança de projetos ● Permite herdar as caracteristicas de um projeto pai, como libs, propriedades e build.
  19. 19. Tag Build Tag do pom.xml onde definimos parâmetros de compilação, como versão do Java, diretórios de resources e vários outros plug-ins que podem ser utilizados
  20. 20. Tag Build
  21. 21. Instalação ● Devemos ter uma instalação quando desejamos rodar os comandos pelo prompt. ● Linux ○ sudo apt-get install maven2 ● Windows ○ Efetuar o download (http://maven.apache.org/download.html) ○ Descompactar em uma pasta ○ Criar uma variável de ambiente M2_HOME com o caminho da pasta ○ Adicionar no classpath esta variável com o bin
  22. 22. Testando ● Testar no console mvn -v ● Criar um projeto simples no console: mvn archetype:create -DgroupId=br.com.camtwo -DartifactId=exemplo ● Verificar se criou a estrutura de diretórios ● Verificar se criou a pasta .m2
  23. 23. Estrutura Projeto Maven
  24. 24. Novo projeto: Maven + Eclipse File->New Project
  25. 25. Novo projeto: Maven + Eclipse
  26. 26. Novo projeto: Maven + Eclipse
  27. 27. Build no projeto
  28. 28. Spring framework
  29. 29. O que é? ● Framework open-source criado por Rod Johnson ● Container leve com inversão de controle e programação orientada a aspecto ● Criado para simplificar o desenvolvimento enterprise
  30. 30. Alguns princípios ● O Código de sua aplicação não deve depender da API do Spring ● Spring não deve competir com boas soluções existentes mas sim promover integração ● Escrever código testável é crítico e o container deve ajudar(não interferir) nesse objetivo ● Usar o Spring deve ser um prazer!
  31. 31. Módulos
  32. 32. Uso completo
  33. 33. Spring IO - http://spring.io/platform
  34. 34. Todos os componentes do sistema são gerenciados pelo Spring utilizando IoC e Injeção de dependência.
  35. 35. "A primeira pergunta a ser respondida é: como obter um objeto sem depender direta ou indiretamente de sua classe?" fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
  36. 36. Dynamic Factory fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
  37. 37. IOC (Inversão de controle) ● Delegação de tarefas de construção para frameworks ● O objeto perde o controle sobre sua construção ● Possibilita menor acoplamento entre as dependências
  38. 38. Exemplo usando Factory Resolvendo outras Dependências
  39. 39. Exemplo usando IoC Injetando a dependência
  40. 40. Injeção de dependência ● Design pattern que visa desacoplar os componentes da aplicação; ● Injeta através de construtor, setters ou atributos o valor de dependência para a classe a ser construída;
  41. 41. Injeção de dependência fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
  42. 42. Injeção de dependência PedidoRepository ConexaoBanco CarrinhoDeCompra ProdutoRepository ClienteRepositoryContainer IoC public class CarrinhoDeCompra { @Autowired private PedidoRepository repositorio; }
  43. 43. Spring e IoC ● Tudo passa pelo Container de Beans ● É o núcleo do Spring famework ● Usa IOC para gerenciar os componentes que compõem uma aplicação ● Componentes são expressos como simples Java Beans ● O Container gerencia as relações entre os Beans e é responsável por sua configuração ● O Container gerencia o ciclo de vida dos Beans
  44. 44. Tipos de Container ● Bean Factory ○ Dá suporte básico a injeção de dependência ○ Configuração e gerenciamento do ciclo de vida ● Application Context ○ Construído sobre o Bean Factory adicionando serviços de: ■ Resolução “mensagens” através de arquivos de propriedades para internacionalização ■ Carregamento de recursos genéricos ■ Publicação de eventos
  45. 45. Exemplo Bean Factory @Service(value="mensagemBean") public class MensagemImpl implements Mensagem { private String mensagem = “Olá”; public void setMensagem(String mensagem){ this.mensagem = mensagem; } public String getMensagem() { return mensagem; } } public interface Mensagem { String getMensagem(); }
  46. 46. Características dos managed beans ● Singletons por default ● Propriedades setadas por Dependency Injection ○ Referência para outros managed beans ○ Strings ○ Tipos primitivos ○ Coleções (lists, sets, map, props) ● Parâmetros podem ser extraídos para arquivos de propriedades
  47. 47. Tipos de anotações ● @Component - Componente genérico da aplicação ● @Service – Anotação camada de serviço ● @Repository – Anotação para DAO ● @Controller – Anotação para camada web ● @Autowired – Injeção de dependência ● @Qualifier – Qualificar o nome do bean a ser injetado
  48. 48. Spring - Boot ● Novo projeto da Pivot para simplificar o inicio do desenvolvimento de aplicações Spring. ● Elimina todos os xmls e configurações básicas para uma aplicação Spring. ● Ganhou fama com o post no twitter: https://twitter.com/rob_winch/status/3648716 58483351552
  49. 49. Spring - Boot ● Desenvolvido em Grovy ● Já configura todas as libs necessárias ● Não é um novo framework e um bootstrap para Spring ● Configuração básica pronta ● Disponibiliza servidor tomcat ou jetty embutido
  50. 50. Spring - Boot - Java 1. Criar um novo projeto Maven 2. Configurar pom.xml 3. Criar classe main 4. Criar classes de negócio da aplicação
  51. 51. Spring - Boot - pom.xml
  52. 52. Spring - Boot - pom.xml ● Dependência Web Básica
  53. 53. Classe Main Básica Spring-boot
  54. 54. Spring-boot Serviço Web Ao rodar o tomcat/jetty embutido é iniciado e basta acessar http://localhost:8080/ que a app web esta disponível com base nos controladores criados
  55. 55. Prática Injeção de dependência com Spring
  56. 56. Spring-Data
  57. 57. Realidade Banco de dados
  58. 58. Spring Data
  59. 59. Realidade Persistência Java
  60. 60. Spring Data “Simplifica o desenvolvimento de aplicações que usam novas tecnologias de acesso a dados como: noSql, mapReduce e cloud. Além do suporte aperfeiçoado a bancos relacionais.”
  61. 61. Spring Data SubProjetos ●JPA ●JDBC Extensions ●Hadoop ●GemFire ●Redis ●Riak ●MongoDB ●Neo4j ●Blob ●Commons
  62. 62. Spring Data - COMMONS Conceito utilizado por todos os outros subprojetos, é utilizado como core do projeto Spring Data.
  63. 63. Spring Data - COMMONS Uma interface principal denominada CrudRepository que deve ser herdada para cada Model Class da aplicação.
  64. 64. Spring Data - CrudRepository
  65. 65. Spring Data – JPARepository
  66. 66. Configuração Spring-boot
  67. 67. Prática
  68. 68. Spring Data - Query Builder Construção de query utilizando somente o nome do método.
  69. 69. Spring Data - Query Builder
  70. 70. Spring Data - @Query Para aplicações que utilizam JPA, ainda é possível criar as query utilizando JPAQL
  71. 71. Spring Data - Paginação Utilizando as classes Page e Pageable do Spring é possível fazer paginação na query com o minimo de esforço. Utilizando o método:
  72. 72. Mais Spring Data-JPA Repositórios Customizados Query DSL Specification Auditing StoreProcedures WebSuport
  73. 73. Prática Criar repositórios, entidades e testar.
  74. 74. Transações Spring ● Suporte para gerenciamento programático e declarativo de transações ● Transações locais são delegadas pelo Spring para o gerente de transações do data-source ● Quando múltiplos recursos estão envolvidos (transações distribuídas), Spring delega para o gerente de transações JTA obtido através do JNDI ● Apenas algumas pequenas mudanças são necessárias para trocar entre local e JTA
  75. 75. Transações Spring ● Gerenciamento Declarativo (+) ○ Usa AOP para encapsular chamadas a objetos transacionais com código de begin e commit de transações ● Comportamento de propagação ○ Mandatory, Never, Not Supported, Required, Requires New, Support, Nested ● Também suporta níveis de isolação ○ Default, Read Uncommitted, Read Committed, Repeatable Read, Serializable
  76. 76. Modelo transacional ● Normalmente o modelo flat transactions ● Se método é chamado dentro de uma transação, ele pode continuar transação anterior ● Se ele falhar, transação inteira é revertida ● Se nova transação for iniciada no método que já faz parte de uma transação, ela é independente ● Se falhar, pode sinalizar rollback() para desfazer transação externa (ou não, e permitir que transação externa continue) ● O possível rollback da transação externa não afetará outras transações (T2) cujos resultados já foram cometidos
  77. 77. Modelo transacional T1 Suspensa T1 T2 Suspensa T1 T3 Início A=0 B=0 C=0 A=5 sucesso A=5 B=3 falha C=8 C=0 Fim A=5 B=0 C=0 B=0
  78. 78. Comportamento de propagação ● Mandatory ○ Indica que o método só pode ser chamado no escopo de uma transação do cliente ○ Se o método for chamado fora de uma transação, ele causará uma exceção ● Never ○ Indica que o método nunca pode estar dentro de uma transação ○ Se o cliente que chama o método for parte de uma transação, ele causará uma exceção
  79. 79. Comportamento de propagação ● NotSupported ○ Indica que o método não suporta transações ○ Se o método for chamado pelo cliente no escopo de uma transação, a mesma será suspensa enquanto durar a chamada do método (não haverá propagação de transações do cliente) ● Required ○ Indica que o escopo de uma transação é requerido pelo método ○ Se não existe transação, uma nova é criada e dura até que o método termine (é propagada para todos os métodos chamados) ○ Se já existe uma transação iniciada pelo cliente, o bean é incluído no seu escopo durante a chamada do método
  80. 80. Comportamento de propagação ● Requires New ○ Indica que o método requer uma nova transação ○ Estando ou não o cliente no escopo de uma transação, o bean irá iniciar uma nova transação que iniciará e terminará no bean. ● Support ○ Indica que o método suporta transações ○ Será incluído no escopo da transação do cliente se existir ○ Se ele for chamado fora do escopo de uma transação ele realizará suas tarefa sem transações e pode chamar objetos que não suportam transações
  81. 81. E como fazer? ● Anotando as transações ○ A anotação pode ser no começo da classe ou acima de um método
  82. 82. E como fazer? ● @Transactional ○ Indica que a classe ou o método esta envolvido em uma transação ○ Se estiver sobre a classe indica que todos os métodos terão o mesmo comportamento transacional; ○ Os métodos anotados com @Transactional desconsideram a anotação da classe ● ReadOnly ○ Indica que o método ou classe poderá ou não alterar os dados contidos na transação
  83. 83. E como fazer? ● Propagation ● Indica o tipo de propagação da transação ○ PROPAGATION_MANDATORY ○ PROPAGATION_NESTED ○ PROPAGATION_NEVER ○ PROPAGATION_NOT_SUPPORTED ○ PROPAGATION_REQUERED ○ PROPAGATION_REQUERED_NEW ○ PROPAGATION_SUPPORTS
  84. 84. Prática Criar Services e configurar transações

×