construindo um micro-serviço java 100% funcional em 15 minutos
TRANSCRIPT
Globalcode – Open4education
Construindo um microserviço Java 100% funcional em 15 minutos
Rafael Chaves - [email protected]
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-)
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
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
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
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
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
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?
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? ✘
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 ✔
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
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
Globalcode – Open4education
UML e múltiplas notações
Sintaxe abstrata
Semântica
Sintaxeconcreta A
Sintaxeconcreta B
Sintaxeconcreta C
Sintaxeconcreta Z
...
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)
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
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
Globalcode – Open4education
A aplicação exemplo:Papéis de usuáriosEmpregado
Aprovador
Administrador
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
Globalcode – Open4education
A aplicação exemplo:EntidadesPapéis: Empregado, Aprovador, Administrador
Despesa
Categoria de despesa
Globalcode – Open4education
A aplicação exemplo:Máquinas de estados
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
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
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 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
Cloudfier
• Ambiente de modelagem TextUML na web• Prototipação, testes, geração de código
http://github.com/abstratt/cloudfier
http://cloudfier.com
Globalcode – Open4education
Xtend
• Linguagem para JVM• Excelente para implementar geradores de código
https://www.eclipse.org/xtend/
Globalcode – Open4education
kirra-angular
• Biblioteca Javascript standalone• GUI dinâmica para APIs REST
http://github.com/abstratt/kirra-angular
Globalcode – Open4education
Construindo um microserviço Java 100% funcional em 15 minutos
Rafael Chaves - [email protected]