Aula 01 Frameworks para desenvolvimento web em java - UTFPR

86
Frameworks para Desenvolvimento web em Java André Luiz Forchesatto

Transcript of Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Page 1: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Frameworks para Desenvolvimento web em

JavaAndré Luiz Forchesatto

Page 2: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

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

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

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

Maven

Page 7: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Problema Gestão de Dependência

Page 8: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

Inferno dos Jars

Page 10: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

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

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

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

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

Propriedades (POM)

Page 16: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

http://search.maven.org/

Page 18: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Buscando libs

Page 19: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

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

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

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

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

Estrutura Projeto Maven

Page 25: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

Novo projeto: Maven + EclipseFile->New Project

Page 27: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Novo projeto: Maven + Eclipse

Page 28: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Novo projeto: Maven + Eclipse

Page 29: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Build no projeto

Page 30: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Spring framework

Page 31: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

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

Módulos

Page 34: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Uso completo

Page 35: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Spring IO - http://spring.io/platform

Page 36: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

"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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Spring - Boot - pom.xml

● Dependência Web Básica

Page 54: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Classe Main Básica Spring-boot

Page 55: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

Prática

Injeção de dependência com Spring

Page 57: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Spring-Data

Page 58: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Realidade Banco de dados

Page 59: Aula 01 Frameworks para desenvolvimento web em java - UTFPR
Page 60: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Spring Data

Page 61: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Realidade Persistência Java

Page 62: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

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

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

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

Spring Data - CrudRepository

Page 67: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Spring Data – JPARepository

Page 68: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

Prática

Page 70: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

Spring Data - Query Builder

Page 72: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

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

Mais Spring Data-JPA

Repositórios CustomizadosQuery DSLSpecificationAuditingStoreProceduresWebSuport

Page 75: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

Prática

Criar repositórios, entidades e testar.

Page 76: Aula 01 Frameworks para desenvolvimento web em java - UTFPR

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

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

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

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

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

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

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

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

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

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

Prática

Criar Services e configurar transações