Frameworks para
Desenvolvimento web em
Java
André Luiz Forchesatto
Apresentação
● Especialista em Ciência da Computação pela UFSC;
● Graduado em Tecnologia em Informática pela Unoesc;
● Atu...
Ementário
Evolução do desenvolvimento de aplicações WEB. Introdução
ao Desenvolvimento RAD para WEB. Visão geral das
ferra...
Planejamento
● Aula 01
○ Maven
○ Injeção de dependência
○ Introdução ao Spring
○ Spring IoC
○ Introdução Spring Boot
○ Int...
Planejamento
● Aula 03
○ Spring Web com outros template
○ Spring MVC
● Aula 04
○ Spring Security
● Aula 05
○ Spring micro-...
Maven
Problema Gestão de Dependência
Problema Gestão de Dependência
● Múltiplos Componentes
● Componentes dependem de outros componentes
● Múltiplas versões
Inferno dos Jars
Conceito
● Ferramenta para gerenciamento, construção e
implantação de projetos;
● Simplifica o processo de Build
● Organiz...
Características
● Builds automatizados
● Ciclo de vida bem definido (lifecycle)
● Repositório de artefatos
● Gestão de Dep...
Project Object Model (POM)
● Definições do projeto
● Configurações de dependências de
componentes(lib)
● Customizações (de...
Estrutura Mínima (POM)
Propriedades (POM)
● groupId (nome do package - empresa)
● artifactId (identificador do projeto)
● packaging (pom, war, ja...
Dependências
<project>
...
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4....
http://search.maven.org/
Buscando libs
Herança de projetos
● Permite herdar as caracteristicas de um
projeto pai, como libs, propriedades e build.
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 ou...
Tag Build
Instalação
● Devemos ter uma instalação quando
desejamos rodar os comandos pelo prompt.
● Linux
○ sudo apt-get install mav...
Testando
● Testar no console mvn -v
● Criar um projeto simples no console:
mvn archetype:create
-DgroupId=br.com.camtwo
-D...
Estrutura Projeto Maven
Novo projeto: Maven + Eclipse
File->New Project
Novo projeto: Maven + Eclipse
Novo projeto: Maven + Eclipse
Build no projeto
Spring framework
O que é?
● Framework open-source criado por Rod
Johnson
● Container leve com inversão de controle e
programação orientada ...
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ç...
Módulos
Uso completo
Spring IO - http://spring.io/platform
Todos os componentes do sistema
são gerenciados pelo Spring
utilizando IoC e Injeção de
dependência.
"A primeira pergunta a ser respondida é:
como obter um objeto sem depender
direta ou indiretamente de sua classe?"
fonte: ...
Dynamic Factory
fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
IOC (Inversão de controle)
● Delegação de tarefas de construção para
frameworks
● O objeto perde o controle sobre sua
cons...
Exemplo usando Factory
Resolvendo outras
Dependências
Exemplo usando IoC
Injetando a dependência
Injeção de dependência
● Design pattern que visa desacoplar os
componentes da aplicação;
● Injeta através de construtor, s...
Injeção de dependência
fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
Injeção de dependência
PedidoRepository
ConexaoBanco CarrinhoDeCompra
ProdutoRepository
ClienteRepositoryContainer IoC
pub...
Spring e IoC
● Tudo passa pelo Container de Beans
● É o núcleo do Spring famework
● Usa IOC para gerenciar os componentes ...
Tipos de Container
● Bean Factory
○ Dá suporte básico a injeção de dependência
○ Configuração e gerenciamento do ciclo de ...
Exemplo Bean Factory
@Service(value="mensagemBean")
public class MensagemImpl implements Mensagem {
private String mensage...
Características dos managed
beans
● Singletons por default
● Propriedades setadas por Dependency
Injection
○ Referência pa...
Tipos de anotações
● @Component - Componente genérico da
aplicação
● @Service – Anotação camada de serviço
● @Repository –...
Spring - Boot
● Novo projeto da Pivot para simplificar o
inicio do desenvolvimento de aplicações
Spring.
● Elimina todos o...
Spring - Boot
● Desenvolvido em Grovy
● Já configura todas as libs necessárias
● Não é um novo framework e um bootstrap
pa...
Spring - Boot - Java
1. Criar um novo projeto Maven
2. Configurar pom.xml
3. Criar classe main
4. Criar classes de negócio...
Spring - Boot - pom.xml
Spring - Boot - pom.xml
● Dependência Web Básica
Classe Main Básica Spring-boot
Spring-boot Serviço Web
Ao rodar o tomcat/jetty embutido é iniciado e basta acessar http://localhost:8080/
que a app web e...
Prática
Injeção de dependência com Spring
Spring-Data
Realidade
Banco de dados
Spring Data
Realidade Persistência Java
Spring Data
“Simplifica o desenvolvimento de aplicações
que usam novas tecnologias de acesso a
dados como: noSql, mapReduc...
Spring Data
SubProjetos
●JPA
●JDBC Extensions
●Hadoop
●GemFire
●Redis
●Riak
●MongoDB
●Neo4j
●Blob
●Commons
Spring Data - COMMONS
Conceito utilizado por todos os outros
subprojetos, é utilizado como core do
projeto Spring Data.
Spring Data - COMMONS
Uma interface principal denominada
CrudRepository que deve ser herdada para
cada Model Class da apli...
Spring Data - CrudRepository
Spring Data – JPARepository
Configuração Spring-boot
Prática
Spring Data - Query Builder
Construção de query utilizando somente
o nome do método.
Spring Data - Query Builder
Spring Data - @Query
Para aplicações que utilizam JPA, ainda é
possível criar as query utilizando JPAQL
Spring Data - Paginação
Utilizando as classes Page e Pageable do
Spring é possível fazer paginação na query
com o minimo d...
Mais Spring Data-JPA
Repositórios Customizados
Query DSL
Specification
Auditing
StoreProcedures
WebSuport
Prática
Criar repositórios, entidades e testar.
Transações Spring
● Suporte para gerenciamento programático e
declarativo de transações
● Transações locais são delegadas ...
Transações Spring
● Gerenciamento Declarativo (+)
○ Usa AOP para encapsular chamadas a objetos
transacionais com código de...
Modelo transacional
● Normalmente o modelo flat transactions
● Se método é chamado dentro de uma transação, ele
pode conti...
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
...
Comportamento de propagação
● Mandatory
○ Indica que o método só pode ser chamado no
escopo de uma transação do cliente
○ ...
Comportamento de propagação
● NotSupported
○ Indica que o método não suporta transações
○ Se o método for chamado pelo cli...
Comportamento de propagação
● Requires New
○ Indica que o método requer uma nova transação
○ Estando ou não o cliente no e...
E como fazer?
● Anotando as transações
○ A anotação pode ser no começo da classe ou
acima de um método
E como fazer?
● @Transactional
○ Indica que a classe ou o método esta envolvido em
uma transação
○ Se estiver sobre a clas...
E como fazer?
● Propagation
● Indica o tipo de propagação da transação
○ PROPAGATION_MANDATORY
○ PROPAGATION_NESTED
○ PROP...
Prática
Criar Services e configurar transações
Aula 01 Frameworks para desenvolvimento web em java - UTFPR - 2016
Próximos SlideShares
Carregando em…5
×

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

1.188 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.188
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
77
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

×