SlideShare una empresa de Scribd logo
1 de 81
Descargar para leer sin conexión
Frameworks para
Desenvolvimento web em
Java
André Luiz Forchesatto
Apresentação
● Cursando MBA em Liderança, Inovação e Gestão 3.0
PUC-RS
● Especialista em Ciência da Computação pela UFSC;
● Graduado em Tecnologia em Informática pela Unoesc;
● Atuação
○ Sócio Camtwo Sistemas;
○ CEO Clínica nas nuvens;
○ Desenvolvedor Java desde 2002;
○ Professor;
● Contato
○ andreforchesatto@gmail.com
○ github.com/forchesatto
○ slideshare.net/andreforchesatto
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.
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 Thymeleaf
Planejamento
● Aula 03
○ Spring Web thymeleaf
● Aula 04
○ Spring Security
● Aula 05
○ Spring cloud
○ Trabalho Final
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
● 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
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
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
Estrutura Mínima (POM)
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)
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
http://search.maven.org/
Buscando libs
Herança de projetos
● Permite herdar as caracteristicas de um
projeto pai, como libs, propriedades e build.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
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
Tag Build
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
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
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 é?
● Surgiu em 2003
● 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
● É um projeto guarda-chuva para vários outros
Filosofia do framework
● Fornecer escolha em todos os níveis
● Acomodar diversas perspectivas.
● Manter forte compatibilidade com versões
anteriores
● Preocupe-se com o design da API.
● Defina altos padrões de qualidade de código.
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: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
Dynamic Factory
fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
Exemplo usando Factory
Resolvendo outras
Dependências
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
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;
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
public class CarrinhoDeCompra {
@Autowired
private PedidoRepository repositorio;
}
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
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
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();
}
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
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
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
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
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
Spring - Boot - pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
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 esta disponível com base nos controladores criados
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, mapReduce e cloud.
Além do suporte aperfeiçoado a bancos
relacionais.”
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 aplicação.
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 de esforço.
Utilizando o método:
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 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
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
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
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
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
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
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
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 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
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
Prática
Criar Services e configurar transações

Más contenido relacionado

La actualidad más candente

Desenvolvimento Web com JSF
Desenvolvimento Web com JSFDesenvolvimento Web com JSF
Desenvolvimento Web com JSFDalton Valadares
 
Aula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAndré Luiz Forchesatto
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOLeonardo Sousa
 
Desenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSFDesenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSFEmmanuel Neri
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemPetronio Candido
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 
jQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicajQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicaVictor Cavalcante
 
Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Marcos Batista
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 

La actualidad más candente (20)

Desenvolvimento Web com JSF
Desenvolvimento Web com JSFDesenvolvimento Web com JSF
Desenvolvimento Web com JSF
 
Spring data
Spring dataSpring data
Spring data
 
Aula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPR
 
Apresentação jsf 1_2
Apresentação jsf 1_2Apresentação jsf 1_2
Apresentação jsf 1_2
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAO
 
Desenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSFDesenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSF
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
 
Arquitetura do Framework Spring
Arquitetura do Framework SpringArquitetura do Framework Spring
Arquitetura do Framework Spring
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
jQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicajQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmica
 
Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)Curso Java Web (JAVA, JSF, JPA)
Curso Java Web (JAVA, JSF, JPA)
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Gradle spring-hateoas-Lombok
Gradle spring-hateoas-LombokGradle spring-hateoas-Lombok
Gradle spring-hateoas-Lombok
 
jQuery e ASP.Net mvc2
jQuery e ASP.Net mvc2jQuery e ASP.Net mvc2
jQuery e ASP.Net mvc2
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 

Similar a Framework web 01 - Aula UTFPR 2018

Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosphelypploch
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
Desenvolvimento de uma plataforma de bookmarking social com Django e TDD
Desenvolvimento de uma plataforma de bookmarking social com Django e TDDDesenvolvimento de uma plataforma de bookmarking social com Django e TDD
Desenvolvimento de uma plataforma de bookmarking social com Django e TDDRodrigo Fernandes
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com MavenEdgar Dantas
 
Curso de Java (Parte 5)
Curso de Java (Parte 5)Curso de Java (Parte 5)
Curso de Java (Parte 5)Mario Sergio
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Flávio Lisboa
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 

Similar a Framework web 01 - Aula UTFPR 2018 (20)

Django
DjangoDjango
Django
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Desenvolvimento de uma plataforma de bookmarking social com Django e TDD
Desenvolvimento de uma plataforma de bookmarking social com Django e TDDDesenvolvimento de uma plataforma de bookmarking social com Django e TDD
Desenvolvimento de uma plataforma de bookmarking social com Django e TDD
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
Curso de Java (Parte 5)
Curso de Java (Parte 5)Curso de Java (Parte 5)
Curso de Java (Parte 5)
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Spring boot
Spring bootSpring boot
Spring boot
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
Java web
Java webJava web
Java web
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Cloudformation
CloudformationCloudformation
Cloudformation
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 

Último

PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 

Último (20)

PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 

Framework web 01 - Aula UTFPR 2018

  • 1. Frameworks para Desenvolvimento web em Java André Luiz Forchesatto
  • 2. Apresentação ● Cursando MBA em Liderança, Inovação e Gestão 3.0 PUC-RS ● Especialista em Ciência da Computação pela UFSC; ● Graduado em Tecnologia em Informática pela Unoesc; ● Atuação ○ Sócio Camtwo Sistemas; ○ CEO Clínica nas nuvens; ○ Desenvolvedor Java desde 2002; ○ Professor; ● Contato ○ andreforchesatto@gmail.com ○ github.com/forchesatto ○ slideshare.net/andreforchesatto
  • 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. 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 Thymeleaf
  • 5. Planejamento ● Aula 03 ○ Spring Web thymeleaf ● Aula 04 ○ Spring Security ● Aula 05 ○ Spring cloud ○ Trabalho Final
  • 7. Problema Gestão de Dependência
  • 8. Problema Gestão de Dependência ● Múltiplos Componentes ● Componentes dependem de outros componentes ● Múltiplas versões
  • 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. 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. 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
  • 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)
  • 18. Herança de projetos ● Permite herdar as caracteristicas de um projeto pai, como libs, propriedades e build. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent>
  • 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
  • 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. 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
  • 24. Novo projeto: Maven + Eclipse File->New Project
  • 25. Novo projeto: Maven + Eclipse
  • 26. Novo projeto: Maven + Eclipse
  • 29. O que é? ● Surgiu em 2003 ● 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 ● É um projeto guarda-chuva para vários outros
  • 30. Filosofia do framework ● Fornecer escolha em todos os níveis ● Acomodar diversas perspectivas. ● Manter forte compatibilidade com versões anteriores ● Preocupe-se com o design da API. ● Defina altos padrões de qualidade de código.
  • 31. Todos os componentes do sistema são gerenciados pelo Spring utilizando IoC e Injeção de dependência.
  • 32. "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
  • 33. Dynamic Factory fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
  • 34. Exemplo usando Factory Resolvendo outras Dependências
  • 35. 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
  • 36. 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;
  • 37. Injeção de dependência fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
  • 38. Injeção de dependência PedidoRepository ConexaoBanco CarrinhoDeCompra ProdutoRepository ClienteRepositoryContainer IoC public class CarrinhoDeCompra { @Autowired private PedidoRepository repositorio; }
  • 39. 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
  • 40. 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
  • 41. 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(); }
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. Spring - Boot - pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent>
  • 48. Spring - Boot - pom.xml ● Dependência Web Básica
  • 49. Classe Main Básica Spring-boot
  • 50. 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
  • 54.
  • 57. 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.”
  • 59. Spring Data - COMMONS Conceito utilizado por todos os outros subprojetos, é utilizado como core do projeto Spring Data.
  • 60. Spring Data - COMMONS Uma interface principal denominada CrudRepository que deve ser herdada para cada Model Class da aplicação.
  • 61. Spring Data - CrudRepository
  • 62. Spring Data – JPARepository
  • 65. Spring Data - Query Builder Construção de query utilizando somente o nome do método.
  • 66. Spring Data - Query Builder
  • 67. Spring Data - @Query Para aplicações que utilizam JPA, ainda é possível criar as query utilizando JPAQL
  • 68. 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:
  • 69. Mais Spring Data-JPA Repositórios Customizados Query DSL Specification Auditing StoreProcedures WebSuport
  • 71. 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
  • 72. 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
  • 73. 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
  • 74. 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
  • 75. 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
  • 76. 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
  • 77. 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
  • 78. E como fazer? ● Anotando as transações ○ A anotação pode ser no começo da classe ou acima de um método
  • 79. 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
  • 80. 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
  • 81. Prática Criar Services e configurar transações