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

Post on 14-Jan-2017

313 views 4 download

Transcript of 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 - rafael@abstratt.com

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 - rafael@abstratt.com