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

Framework web 01 - Aula UTFPR 2018

  • 1.
    Frameworks para Desenvolvimento webem Java André Luiz Forchesatto
  • 2.
    Apresentação ● Cursando MBAem 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 desenvolvimentode 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
  • 6.
  • 7.
    Problema Gestão deDependência
  • 8.
    Problema Gestão deDependência ● Múltiplos Componentes ● Componentes dependem de outros componentes ● Múltiplas versões
  • 9.
  • 10.
    Conceito ● Ferramenta paragerenciamento, 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
  • 13.
  • 14.
    Propriedades (POM) ● groupId(nome do package - empresa) ● artifactId (identificador do projeto) ● packaging (pom, war, jar, etc. - default jar) ● version (versão de release ou SNAPSHOT)
  • 15.
  • 16.
  • 17.
  • 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 dopom.xml onde definimos parâmetros de compilação, como versão do Java, diretórios de resources e vários outros plug-ins que podem ser utilizados
  • 20.
  • 21.
    Instalação ● Devemos teruma 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 noconsole mvn -v ● Criar um projeto simples no console: mvn archetype:create -DgroupId=br.com.camtwo -DartifactId=exemplo ● Verificar se criou a estrutura de diretórios ● Verificar se criou a pasta .m2
  • 23.
  • 24.
    Novo projeto: Maven+ Eclipse File->New Project
  • 25.
  • 26.
  • 27.
  • 28.
  • 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 componentesdo sistema são gerenciados pelo Spring utilizando IoC e Injeção de dependência.
  • 32.
    "A primeira perguntaa 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.
  • 35.
    IOC (Inversão decontrole) ● 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 ConexaoBancoCarrinhoDeCompra 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") publicclass 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.
  • 50.
    Spring-boot Serviço Web Aorodar o tomcat/jetty embutido é iniciado e basta acessar http://localhost:8080/ que a app web esta disponível com base nos controladores criados
  • 51.
  • 52.
  • 53.
  • 55.
  • 56.
  • 57.
    Spring Data “Simplifica odesenvolvimento 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.”
  • 58.
  • 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
  • 63.
  • 64.
  • 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óriosCustomizados Query DSL Specification Auditing StoreProcedures WebSuport
  • 70.
  • 71.
    Transações Spring ● Suportepara 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 ● GerenciamentoDeclarativo (+) ○ 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 ● Normalmenteo 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 SuspensaT1 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 econfigurar transações