44
Globalcode – Open4education Construindo um microserviço Java 100% funcional em 15 minutos Rafael Chaves - [email protected]

Construindo um micro-serviço Java 100% funcional em 15 minutos

Embed Size (px)

Citation preview

Page 1: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Construindo um microserviço Java 100% funcional em 15 minutos

Rafael Chaves - [email protected]

Page 2: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

PalestranteFormação: bacharel (2000) e mestre (2004) em Computação pela UFSC

Experiência:

• OTI/IBM Canada: Eclipse (2002-2005)• IBM Canada: Jazz/Team Concert (2005-2006) • Genologics: Desenvolvedor Senior/Arquiteto (2008-2012)

Hoje:

• Desenvolvendo Cloudfier (2012-)• Consultor em Engenharia de Software e Modernização de Software (2013-)

Page 3: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Objetivo

Construir features para um back-end / micro-serviço / self-contained-system simples com JavaEE

• API REST usando JAX-RS• Persistência em BD relacional usando JPA• Testes em JUnit• Bônus: GUI “admin” em Angular

Page 4: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Como?

Não vamos escrever nenhuma linha de código Java (ou JavaScript) “no braço”

Solução conceitual em uma linguagem de mais alto nível que Java (ou Ruby, Python, Scala, Javascript...)

Implementação em JavaEE gerada via tradução automática

Page 5: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Por quê?

Abstração mais alta permite foco no problema do cliente

Automação aumenta produtividade, evita inconsistência

Acelerar o desenvolvimento inicial é um bônus

Mais sobre motivações ao longo da apresentação

Page 6: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Em busca de uma linguagem melhorQue forneça mecanismos que permitam modelar o domínio do problema de forma mais natural

Que permitam criar soluções independentes de arquitetura

Que ofereça boa usabilidade para programadores

Page 7: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Tempo de desenvolvimento vs. tempo de implantação• Nem sempre podemos escolher a plataforma de

implementação• Mas deveríamos ter liberdade sobre a linguagem

usada em tempo de desenvolvimento• A melhor plataforma de implementação hoje não

será a mesma em um ano

Page 8: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Que linguagem suporta...

• Classes, atributos, operações?• Comportamento imperativo?• Eventos, comunicação por mensagens?• Relacionamentos?• Atributos derivados?• Restrições: pré-condições, invariantes?• Máquinas de estado?

Page 9: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Java?

• Classes, atributos, operações? ✔• Comportamento imperativo? ✔• Eventos, comunicação por mensagens? ✘• Relacionamentos? ✘• Atributos derivados? ✘• Restrições: pré-condições, invariantes? ✘• Máquinas de estado? ✘

Page 10: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

UML!

• Classes, atributos, operações ✔• Comportamento imperativo ✔• Eventos, comunicação por mensagens ✔• Relacionamentos ✔• Atributos derivados ✔• Restrições: pré-condições, invariantes ✔• Máquinas de estado ✔

Page 11: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

UML?!

“Mas UML não é aquela linguagem gráfica que o analista de negócios e a arquiteta vivem insistindo para que a gente use mas que eu sei que é uma grande perda de tempo?!”

- O programador pragmático

Page 12: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Em busca de uma linguagem melhor: UML?Que forneça mecanismos que permitam modelar o domínio do problema de forma mais natural ✔

Que permitam criar soluções independentes de arquitetura ✔

Que ofereça boa usabilidade para programadores ✘

Diagramas são insuficientes para especificar comportamento

Page 13: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

UML e múltiplas notações

Sintaxe abstrata

Semântica

Sintaxeconcreta A

Sintaxeconcreta B

Sintaxeconcreta C

Sintaxeconcreta Z

...

Page 14: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

TextUML: sintaxe UML para programadoresPor que textual? Texto é a melhor notação para modelar comportamento (ok para outras áreas)

Mesmo nível de abstração que a notação gráfica (mesma semântica/sintaxe abstrata)

Apenas elementos úteis para construção de software (classes, máquinas de estado, atividades)

Page 15: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

A aplicação: pesquisa social

1. Usuários criam pesquisas simples (concorda/discorda)✔

2. Outros usuários votam (apenas uma vez)✔3. Contabiliza número de votos para cada opção4. Apenas votante pode ver seus votos5. Pesquisa pode ser encerrada pelo autor6. Teste de contagem de votos

Page 16: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Outra aplicação exemplo: Reembolso de Despesas

1. Reembolso de despesas para empregados2. Empregados reportam despesas3. Aprovadores aprovam/rejeitam4. Despesas baixas têm aprovação automática5. Empregados podem disputar rejeição6. Despesas aprovadas são enviadas para

sistema de pagamento

Page 17: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

A aplicação exemplo:Papéis de usuáriosEmpregado

Aprovador

Administrador

Page 18: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

A aplicação exemplo:Casos de uso/estóriasEmpregador reporta despesas

Aprovador processa despesas

Despesas aprovadas são repassadas para sistema de pagamento

Page 19: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

A aplicação exemplo:EntidadesPapéis: Empregado, Aprovador, Administrador

Despesa

Categoria de despesa

Page 20: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

A aplicação exemplo:Máquinas de estados

Page 21: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

A aplicação exemplo:PermissõesEmpregado pode ver somente suas próprias despesas; aprovadores podem ver todas

Somente o próprio empregado pode submeter as despesas que criar

Somente aprovadores podem processar despesas

Aprovadores não podem processar suas despesas

Page 22: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Gerando a aplicação: entidades• Entidade -> entidade JPA (elementos de

instância)• Entidade -> serviço JPA (CRUD e elementos de

classe)• Entidade -> resource JAX-RS• Entidade -> serializador entidade JPA como

Map/JSON

Page 23: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Atributos

Page 24: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Atributos em entidades JPA

Page 25: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Relacionamentos

Page 26: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Relacionamentos em entidades JPA

Page 27: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Ações

Page 28: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Ações em entidades JPA

Page 29: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Ações em resources JAX-RS

Page 30: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Consultas

Page 31: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Consultas em serviços JPA

Page 32: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Consultas em resources JAX-RS

Page 33: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Consultas em resources JAX-RS

Page 34: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Máquinas de estado

Page 35: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Máquinas de estado em entidade JPA

Page 36: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Permissões

Page 37: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Permissões em entidade JPA

Page 38: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Permissões em resource JAX-RS

Page 39: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Casos de teste

Page 40: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Casos de teste em JUnit

Page 41: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Cloudfier

• Ambiente de modelagem TextUML na web• Prototipação, testes, geração de código

http://github.com/abstratt/cloudfier

http://cloudfier.com

Page 42: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Xtend

• Linguagem para JVM• Excelente para implementar geradores de código

https://www.eclipse.org/xtend/

Page 43: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

kirra-angular

• Biblioteca Javascript standalone• GUI dinâmica para APIs REST

http://github.com/abstratt/kirra-angular

Page 44: Construindo um micro-serviço Java 100% funcional em 15 minutos

Globalcode – Open4education

Construindo um microserviço Java 100% funcional em 15 minutos

Rafael Chaves - [email protected]