aula 01 frameworks para desenvolvimento web em java - utfpr
TRANSCRIPT
![Page 1: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/1.jpg)
Frameworks para Desenvolvimento web em
JavaAndré Luiz Forchesatto
![Page 2: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/2.jpg)
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○ http://about.me/andreforchesatto○ [email protected]○ @forchesatto
![Page 3: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/3.jpg)
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.
![Page 4: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/4.jpg)
Planejamento
● Aula 01○ Maven○ Injeção de dependência○ Introdução ao Spring○ Spring IoC○ Spring Boot○ Spring Data
● Aula 02○ Spring Test○ Spring MVC○ Spring Rest○ Spring Web com HTML
![Page 5: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/5.jpg)
Planejamento
● Aula 03○ Spring Web com JSF○ Spring MVC○ Spring Web
● Aula 04○ Spring Security○ CDI
● Aula 05○ CDI○ Trabalho Final
![Page 6: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/6.jpg)
Maven
![Page 7: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/7.jpg)
Problema Gestão de Dependência
![Page 8: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/8.jpg)
Problema Gestão de Dependência
● Múltiplos Componentes● Componentes dependem de outros componentes● Múltiplas versões
![Page 9: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/9.jpg)
Inferno dos Jars
![Page 10: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/10.jpg)
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
![Page 11: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/11.jpg)
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
![Page 12: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/12.jpg)
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
![Page 13: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/13.jpg)
Estrutura Mínima (POM)
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.camtwo.cursoJava</groupId>
<artifactId>exemplo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>exemplo</name>
</project>
![Page 14: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/14.jpg)
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)
![Page 15: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/15.jpg)
Propriedades (POM)
![Page 16: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/16.jpg)
Dependências
<project>...<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency></dependencies>...</project>
compile (default)providedruntime
testsystem
![Page 17: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/17.jpg)
http://search.maven.org/
![Page 18: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/18.jpg)
Buscando libs
![Page 19: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/19.jpg)
Herança de projetos
● Permite herdar as caracteristicas de um projeto pai, como libs, propriedades e build.
Exemplo de Projeto Pai
![Page 20: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/20.jpg)
Tag Build
Tag do pom.xml onde definimos parametros de compilação, como versão do Java, diretorios de resources e vários outros plug-ins que podem ser utilizados
![Page 21: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/21.jpg)
Tag Build
<build><finalName>exemploioc</finalName><plugins>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration>
<compilerVersion>1.8</compilerVersion><source>1.8</source>
<target>1.8</target> </configuration>
</plugin></plugins></build>
● Exemplo Build definição do nome final e versão do Java
![Page 22: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/22.jpg)
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
![Page 23: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/23.jpg)
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
![Page 24: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/24.jpg)
Estrutura Projeto Maven
![Page 25: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/25.jpg)
Eclipse + Maven
● A versão Kepler+ já vem com o Maven nativo.
● Versões anteriores:○ Instalação do Plug-in m2 help/install new software○ m2eclipse Core Update - http://m2eclipse.sonatype.
org/sites/m2e○ m2eclipse Extras Update - http://m2eclipse.sonatype.
org/sites/m2e-extras
![Page 26: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/26.jpg)
Novo projeto: Maven + EclipseFile->New Project
![Page 27: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/27.jpg)
Novo projeto: Maven + Eclipse
![Page 28: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/28.jpg)
Novo projeto: Maven + Eclipse
![Page 29: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/29.jpg)
Build no projeto
![Page 30: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/30.jpg)
Spring framework
![Page 31: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/31.jpg)
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
![Page 32: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/32.jpg)
Alguns principios
● 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 mais 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!
![Page 33: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/33.jpg)
Módulos
![Page 34: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/34.jpg)
Uso completo
![Page 35: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/35.jpg)
Spring IO - http://spring.io/platform
![Page 36: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/36.jpg)
Todos os componentes do sistema são gerenciados pelo Spring utilizando IoC e Injeção de dependência.
![Page 37: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/37.jpg)
"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
![Page 38: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/38.jpg)
Dynamic Factory
fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
![Page 39: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/39.jpg)
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
![Page 40: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/40.jpg)
Exemplo IoC
public class TesteIOC {
private static TesteIOC testeIOC;
public static TesteIOC getInstance(){ if(testeIOC == null){ testeIOC = new TesteIOC(); } return testeIOC; }}
@Service(value=”testeIOC”)public class TesteIOC {
}
SEM IoC utilizando Singleton COM IoC - Exemplo Spring
![Page 41: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/41.jpg)
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;
![Page 42: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/42.jpg)
Injeção de dependência
fonte: GUERRA, Eduardo, Designer Pattern com Java. Ed.: Casa do Código - SP
![Page 43: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/43.jpg)
Injeção de dependência
PedidoRepository
ConexaoBanco CarrinhoDeCompra
ProdutoRepository
ClienteRepositoryContainer IoC
public class CarrinhoDeCompra {
@Autowiredprivate PedidoRepository repositorio;
}
![Page 44: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/44.jpg)
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
![Page 45: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/45.jpg)
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
![Page 46: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/46.jpg)
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();}
![Page 47: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/47.jpg)
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
![Page 48: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/48.jpg)
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
![Page 49: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/49.jpg)
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/364871658483351552
![Page 50: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/50.jpg)
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
![Page 51: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/51.jpg)
Spring - Boot - Java1. Criar um novo projeto Maven2. Configurar pom.xml3. Criar classe main4. Criar classes de negócio da aplicação
![Page 52: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/52.jpg)
Spring - Boot - pom.xml<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.8.RELEASE</version></parent>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
![Page 53: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/53.jpg)
Spring - Boot - pom.xml
● Dependência Web Básica
![Page 54: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/54.jpg)
Classe Main Básica Spring-boot
![Page 55: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/55.jpg)
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
![Page 56: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/56.jpg)
Prática
Injeção de dependência com Spring
![Page 57: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/57.jpg)
Spring-Data
![Page 58: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/58.jpg)
Realidade Banco de dados
![Page 59: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/59.jpg)
![Page 60: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/60.jpg)
Spring Data
![Page 61: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/61.jpg)
Realidade Persistência Java
![Page 62: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/62.jpg)
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.”
![Page 63: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/63.jpg)
Spring Data
SubProjetos
●JPA●JDBC Extensions●Hadoop●GemFire●Redis●Riak●MongoDB●Neo4j●Blob●Commons
![Page 64: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/64.jpg)
Spring Data - COMMONS
Conceito utilizado por todos os outros subprojetos, é utilizado como core do projeto Spring Data.
![Page 65: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/65.jpg)
Spring Data - COMMONS
Uma interface principal denominada CrudRepository que deve ser herdada para cada Model Class da aplicação.
![Page 66: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/66.jpg)
Spring Data - CrudRepository
![Page 67: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/67.jpg)
Spring Data – JPARepository
![Page 68: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/68.jpg)
Configuração Spring-bootArquivo resources/application.properties
spring.jpa.hibernate.ddl-auto:updatespring.jpa.show-sql: truespring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialectspring.datasource.url=jdbc:postgresql://localhost:5432/utfprspring.datasource.username=postgresspring.datasource.password=spring.datasource.driverClassName=org.postgresql.Driver
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency>
<groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.3-1100-jdbc41</version> </dependency>
![Page 69: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/69.jpg)
Prática
![Page 70: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/70.jpg)
Spring Data - Query Builder
Construção de query utilizando somente o nome do método.
![Page 71: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/71.jpg)
Spring Data - Query Builder
![Page 72: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/72.jpg)
Spring Data - @Query
Para aplicações que utilizam JPA, ainda é possível criar as query utilizando JPAQL
![Page 73: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/73.jpg)
Spring Data - PaginaçãoUtilizando as classes Page e Pageable do Spring é possível fazer paginação na query com o minimo de esforço.
Utilizando o método:
![Page 74: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/74.jpg)
Mais Spring Data-JPA
Repositórios CustomizadosQuery DSLSpecificationAuditingStoreProceduresWebSuport
![Page 75: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/75.jpg)
Prática
Criar repositórios, entidades e testar.
![Page 76: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/76.jpg)
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
![Page 77: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/77.jpg)
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
![Page 78: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/78.jpg)
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
![Page 79: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/79.jpg)
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=5B=0
C=0B=0
![Page 80: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/80.jpg)
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
![Page 81: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/81.jpg)
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
![Page 82: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/82.jpg)
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
![Page 83: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/83.jpg)
E como fazer?
● Anotando as transações○ A anotação pode ser no começo da classe ou
acima de um método
![Page 84: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/84.jpg)
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
![Page 85: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/85.jpg)
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
![Page 86: Aula 01 Frameworks para desenvolvimento web em java - UTFPR](https://reader030.vdocuments.net/reader030/viewer/2022013111/556456f9d8b42a951e8b4706/html5/thumbnails/86.jpg)
Prática
Criar Services e configurar transações