Construindo um micro-serviço Java 100% funcional em 15 minutos
Transcript of Construindo um micro-serviço Java 100% funcional em 15 minutos
![Page 1: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/1.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/2.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/3.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/4.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/5.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/6.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/7.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/8.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/9.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/10.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/11.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/12.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/13.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/14.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/15.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/16.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/17.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/18.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/19.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/20.jpg)
Globalcode – Open4education
A aplicação exemplo:Máquinas de estados
![Page 21: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/21.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/22.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/23.jpg)
Globalcode – Open4education
Atributos
![Page 24: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/24.jpg)
Globalcode – Open4education
Atributos em entidades JPA
![Page 25: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/25.jpg)
Globalcode – Open4education
Relacionamentos
![Page 26: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/26.jpg)
Globalcode – Open4education
Relacionamentos em entidades JPA
![Page 27: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/27.jpg)
Globalcode – Open4education
Ações
![Page 28: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/28.jpg)
Globalcode – Open4education
Ações em entidades JPA
![Page 29: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/29.jpg)
Globalcode – Open4education
Ações em resources JAX-RS
![Page 30: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/30.jpg)
Globalcode – Open4education
Consultas
![Page 31: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/31.jpg)
Globalcode – Open4education
Consultas em serviços JPA
![Page 32: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/32.jpg)
Globalcode – Open4education
Consultas em resources JAX-RS
![Page 33: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/33.jpg)
Globalcode – Open4education
Consultas em resources JAX-RS
![Page 34: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/34.jpg)
Globalcode – Open4education
Máquinas de estado
![Page 35: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/35.jpg)
Globalcode – Open4education
Máquinas de estado em entidade JPA
![Page 36: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/36.jpg)
Globalcode – Open4education
Permissões
![Page 37: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/37.jpg)
Globalcode – Open4education
Permissões em entidade JPA
![Page 38: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/38.jpg)
Globalcode – Open4education
Permissões em resource JAX-RS
![Page 39: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/39.jpg)
Globalcode – Open4education
Casos de teste
![Page 40: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/40.jpg)
Globalcode – Open4education
Casos de teste em JUnit
![Page 41: Construindo um micro-serviço Java 100% funcional em 15 minutos](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/41.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/42.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/43.jpg)
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](https://reader031.fdocumentos.tips/reader031/viewer/2022021502/587992381a28ab95318b5cd9/html5/thumbnails/44.jpg)
Globalcode – Open4education
Construindo um microserviço Java 100% funcional em 15 minutos
Rafael Chaves - [email protected]