Globalcode – Open4education
Construindo um microserviço
JavaEE 100% funcional em 30
minutos
Rafael Chaves
rafael@abstratt....
Globalcode – Open4education
Palestrante
Formação: bacharel (2000) e mestre (2004) em Computação pela UFSC
Passado:
• OTI/I...
Globalcode – Open4education
Objetivo
Construir um back-end / micro-serviço / “self-contained-system”
simples com JavaEE
• ...
Globalcode – Open4education
Arquitetura-alvo
Globalcode – Open4education
A aplicação exemplo:
Tarefas do time
1. Tarefas e Colaboradores✔
2. Colaboradores podem comple...
Globalcode – Open4education
DEMO 1
Aplicação exemplo
Globalcode – Open4education
Como?
Usando uma linguagem de mais alto nível que Java (ou Ruby,
Python, Scala, Javascript...)...
Globalcode – Open4education
Por quê?
Abstração mais alta ⇒ melhor compreensão do negócio do
cliente
Separação negócio/tecn...
Globalcode – Open4education
Completando a aplicação exemplo
1. Tarefas e Colaboradores✔
2. Colaboradores podem completar t...
Globalcode – Open4education
Tempo de desenvolvimento vs.
tempo de implantação
• Nem sempre podemos escolher a plataforma d...
Globalcode – Open4education
Em busca de uma linguagem
para aplicações de negócios
Que forneça mecanismos que permitam mode...
Globalcode – Open4education
Que linguagem suporta...
• Classes, atributos, operações?
• Comportamento imperativo?
• Evento...
Globalcode – Open4education
Java?
Globalcode – Open4education
Java
• Classes, atributos, operações? ✔
• Comportamento imperativo? ✔
• Eventos, comunicação p...
Globalcode – Open4education
Python?
Globalcode – Open4education
Ruby?
Globalcode – Open4education
Scala?
Globalcode – Open4education
C#?
Globalcode – Open4education
UML!
Globalcode – Open4education
UML?!
“Mas UML não é aquela linguagem gráfica que o analista de
negócios e a arquiteta vivem i...
Globalcode – Open4education
UML
• Classes, atributos, operações ✔
• Comportamento imperativo ✔
• Eventos, comunicação por ...
Globalcode – Open4education
UML: uma linguagem superior para
aplicações de negócios?
Que forneça mecanismos que permitam m...
Globalcode – Open4education
Para “visão geral”
Texto < Diagramas
Globalcode – Open4education
Para detalhes
Texto > Diagramas
Globalcode – Open4education
Para programadores
Texto > Diagramas
Globalcode – Open4education
UML e múltiplas notações
Sintaxe abstrata
Semântica
Sintaxe
concreta A
Sintaxe
concreta B
Sint...
Globalcode – Open4education
TextUML: sintaxe UML para
programadores
Por que textual? Texto é a melhor notação para modelar...
Globalcode – Open4education
Geração de código JavaEE
Globalcode – Open4education
Gerando a aplicação: entidades
• Entidade -> entidade JPA (elementos de instância)
• Entidade ...
Globalcode – Open4education
Atributos
Globalcode – Open4education
Atributos em entidades JPA
Globalcode – Open4education
Relacionamentos
Globalcode – Open4education
Relacionamentos em entidades JPA
Globalcode – Open4education
Ações
Globalcode – Open4education
Ações em entidades JPA
Globalcode – Open4education
Ações em resources JAX-RS
Globalcode – Open4education
Consultas
Globalcode – Open4education
Consultas em serviços JPA
Globalcode – Open4education
Consultas em resources JAX-RS
Globalcode – Open4education
Consultas em resources JAX-RS
Globalcode – Open4education
Máquinas de estado
Globalcode – Open4education
Máquinas de estado
Globalcode – Open4education
Máquinas de estado em entidade JPA
Globalcode – Open4education
Permissões
Globalcode – Open4education
Permissões em entidade JPA
Globalcode – Open4education
Permissões em resource JAX-RS
Globalcode – Open4education
Casos de teste
Globalcode – Open4education
Casos de teste em JUnit
Globalcode – Open4education
Bônus: documentação para analistas de negócio
Globalcode – Open4education
Bônus: documentação para analistas de negócio
Globalcode – Open4education
Cloudfier
• Ambiente de modelagem (Text)UML na web
• Prototipação, testes, geração de código
h...
Globalcode – Open4education
Xtend
• Linguagem para JVM
• Excelente para implementar geradores de código
https://www.eclips...
Globalcode – Open4education
kirra-angular
• Biblioteca Javascript standalone
• GUI dinâmica para APIs REST
http://github.c...
Globalcode – Open4education
Construindo um microserviço
JavaEE 100% funcional em 30
minutos
Rafael Chaves
rafael@abstratt....
Próximos SlideShares
Carregando em…5
×

TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos

112 visualizações

Publicada em

Presented on Java EE track at The Developer's Conference em São Paulo

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
112
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos

  1. 1. Globalcode – Open4education Construindo um microserviço JavaEE 100% funcional em 30 minutos Rafael Chaves rafael@abstratt.com - @abstratt
  2. 2. Globalcode – Open4education Palestrante Formação: bacharel (2000) e mestre (2004) em Computação pela UFSC Passado: • OTI/IBM Canada: Eclipse (2002-2005), Jazz/Team Concert (2005-2006) • Genologics: Desenvolvedor Senior/Arquiteto (2008-2012) Recente: • Desenvolvendo Cloudfier (2012-) • EasyAlpha: serviço de desenvolvimento expresso de MVPs (2016-)
  3. 3. Globalcode – Open4education Objetivo Construir um back-end / micro-serviço / “self-contained-system” simples com JavaEE • API REST usando JAX-RS • Persistência em BD relacional usando JPA • Lógica de negócios em Java/JPA • Testes em JUnit • Bônus: GUI “admin” em Angular
  4. 4. Globalcode – Open4education Arquitetura-alvo
  5. 5. Globalcode – Open4education A aplicação exemplo: Tarefas do time 1. Tarefas e Colaboradores✔ 2. Colaboradores podem completar tarefas✔ 3. Colaboradores podem repassar tarefas✔ 4. Detalhes (opcionais) na tarefa 5. Permitir reabrir tarefa 6. Apenas colaborador pode completar tarefa
  6. 6. Globalcode – Open4education DEMO 1 Aplicação exemplo
  7. 7. Globalcode – Open4education Como? Usando uma linguagem de mais alto nível que Java (ou Ruby, Python, Scala, Javascript...) Separando solucão conceitual e arquitetura Sem escrever nenhuma linha de código Java (ou JavaScript) “no braço” Implementação JavaEE 100% obtida via tradução automática
  8. 8. Globalcode – Open4education Por quê? Abstração mais alta ⇒ melhor compreensão do negócio do cliente Separação negócio/tecnologia ⇒ reuso, especialização Automação ⇒ produtividade, custo, qualidade 100% geração ⇒ impacto permanente no desenvolvimento
  9. 9. Globalcode – Open4education Completando a aplicação exemplo 1. Tarefas e Colaboradores✔ 2. Colaboradores podem completar tarefas✔ 3. Colaboradores podem repassar tarefas✔ 4. Detalhes (opcionais) na tarefa 5. Permitir reabrir tarefa 6. Apenas colaborador pode completar tarefa
  10. 10. 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
  11. 11. Globalcode – Open4education Em busca de uma linguagem para aplicações de negócios Que forneça mecanismos que permitam modelar o domínio do problema de forma mais natural Que permita criar soluções independentes de arquitetura Que ofereça boa usabilidade para programadores
  12. 12. 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?
  13. 13. Globalcode – Open4education Java?
  14. 14. 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? ✘
  15. 15. Globalcode – Open4education Python?
  16. 16. Globalcode – Open4education Ruby?
  17. 17. Globalcode – Open4education Scala?
  18. 18. Globalcode – Open4education C#?
  19. 19. Globalcode – Open4education UML!
  20. 20. 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?!” - um Programador Pragmático
  21. 21. 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 ✔
  22. 22. Globalcode – Open4education UML: uma linguagem superior para aplicações de negócios? Que forneça mecanismos que permitam modelar o domínio do problema de forma mais natural ✔ Que permita criar soluções independentes de arquitetura ✔ Que ofereça boa usabilidade para programadores ✘ Diagramas são insuficientes para especificar comportamento
  23. 23. Globalcode – Open4education Para “visão geral” Texto < Diagramas
  24. 24. Globalcode – Open4education Para detalhes Texto > Diagramas
  25. 25. Globalcode – Open4education Para programadores Texto > Diagramas
  26. 26. Globalcode – Open4education UML e múltiplas notações Sintaxe abstrata Semântica Sintaxe concreta A Sintaxe concreta B Sintaxe concreta C Sintaxe concreta Z ...
  27. 27. Globalcode – Open4education TextUML: sintaxe UML para programadores Por 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)
  28. 28. Globalcode – Open4education Geração de código JavaEE
  29. 29. 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
  30. 30. Globalcode – Open4education Atributos
  31. 31. Globalcode – Open4education Atributos em entidades JPA
  32. 32. Globalcode – Open4education Relacionamentos
  33. 33. Globalcode – Open4education Relacionamentos em entidades JPA
  34. 34. Globalcode – Open4education Ações
  35. 35. Globalcode – Open4education Ações em entidades JPA
  36. 36. Globalcode – Open4education Ações em resources JAX-RS
  37. 37. Globalcode – Open4education Consultas
  38. 38. Globalcode – Open4education Consultas em serviços JPA
  39. 39. Globalcode – Open4education Consultas em resources JAX-RS
  40. 40. Globalcode – Open4education Consultas em resources JAX-RS
  41. 41. Globalcode – Open4education Máquinas de estado
  42. 42. Globalcode – Open4education Máquinas de estado
  43. 43. Globalcode – Open4education Máquinas de estado em entidade JPA
  44. 44. Globalcode – Open4education Permissões
  45. 45. Globalcode – Open4education Permissões em entidade JPA
  46. 46. Globalcode – Open4education Permissões em resource JAX-RS
  47. 47. Globalcode – Open4education Casos de teste
  48. 48. Globalcode – Open4education Casos de teste em JUnit
  49. 49. Globalcode – Open4education Bônus: documentação para analistas de negócio
  50. 50. Globalcode – Open4education Bônus: documentação para analistas de negócio
  51. 51. Globalcode – Open4education Cloudfier • Ambiente de modelagem (Text)UML na web • Prototipação, testes, geração de código http://github.com/abstratt/cloudfier http://cloudfier.com
  52. 52. Globalcode – Open4education Xtend • Linguagem para JVM • Excelente para implementar geradores de código https://www.eclipse.org/xtend/
  53. 53. Globalcode – Open4education kirra-angular • Biblioteca Javascript standalone • GUI dinâmica para APIs REST http://github.com/abstratt/kirra-angular
  54. 54. Globalcode – Open4education Construindo um microserviço JavaEE 100% funcional em 30 minutos Rafael Chaves rafael@abstratt.com - @abstratt

×