SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
O MÍNIMO SOBRE MIM
ALBERTO SOUZA
Instrutor e desenvolvedor pela .Caelum
Escritor do , usuário forte do
Play:) e commiter do VRaptor4.
Livro PlayFramework naprática
SAINDO DO ZERO COM O PLAYFRAMEWORK
NÃO VOU GARANTIR QUE É FÁCIL COMO DIZEM POR AÍ
/alots.wordpress.com @alberto_souza
MÍNIMO PARA RODAR O PRIMEIRO EXEMPLO
DOWNLOAD DO SDK
CRIANDO UM NOVO PROJETO
play new agendatech
ENTRANDO NO CONSOLE DO PLAY
play
IMPORTAR PARA O ECLIPSE
eclipse
SUBIR O SERVIDOR
~run
EXEMPLO DE ACESSO
http://localhost:9000/eventos
QUEM TRATA?
ARQUIVO DE ROTAS!
GET /eventos controllers.EventosController.lista()
#Mapstaticresourcesfromthe/publicfoldertothe/assetsURLpath
GET /assets/*file controllers.Assets.at(path="/public",file)
packagecontrollers;
importplay.mvc.*;
publicclassEventosControllerextendsController{
publicstaticResultlista(){
List<Evento>instrutores=Eventos.paraAcontecer();
return//temqueirparaaview
}
}
publicclassEventosControllerextendsController{
publicstaticResultlista(){
List<Evento>instrutores=Eventos.paraAcontecer();
returnok(views.html.eventos.lista.render(aprovados));
}
}
ISSO MESMO, INVOCAMOS UM MÉTODO QUE
NOS RETORNA A VIEW!
@(lista:List[Evento])
@for(evento<-lista){
@evento.getNome()
}
ROTAS E VIEWS VIRAM CLASSES!
E QUANDO TIVER UMA ALTERAÇÃO?
MEXA LIVREMENTE QUE O PLAY FICA
ATUALIZANDO :)
DECISÃO SOBRE TECNOLOGIAS
Jádecidiram algumas, vamos só olhar rapidamente
PERSISTÊNCIA
Ebean
JPA
publicclassEventosControllerextendsController{
publicstaticResultindex(){
List<Evento>eventos=Ebean.find(Evento.class).findList();
List<Evento>eventos=JPA.em().ah...UmaFormaFacil()
returnok(view.instrutores.html.index.render(eventos));
}
}
REFLEXÃO SOBRE MÉTODOS ESTÁTICOS
MANTER ESTADO NO CONTROLLER? QUAL O
MOTIVO?
VOLTANDO PARA AS TECNOLOGIAS
PRECISAVAM DE UMA VIEW QUE FOSSE EM
SCALA
PARA A VIEW, TWIRL
@(eventos:List[Evento])
@if(flash().get("sucesso")!=null){
<span class="msg_sucesso">@flash().get("sucesso")</span>
}
<ul>
@for(evento<-eventos){
@detalhe_lista(evento)
}
</ul>
O AGENDATECH PRECISA TUITAR SOBRE OS
EVENTOS
AKKA PARA TAREFAS ASSÍNCRONAS
ActorRefactor=SystemActor.apply(SendTwitterActor.class);
actor.tell(evento,null);
NECESSÁRIO PEGAR FOTOS LEGAIS SOBRE O
EVENTO
API PRONTA PARA REQUESTS EXTERNOS
WSRequestHolderrequester=
WS.url("https://api.instagram.com/v1/tags/qcon2014/...");
requester.get();
E QUAL SERVIDOR VAMOS USAR PARA
DEPLOYAR?
NETTY COMO SERVIDOR HTTP
E A ESPECIFICAÇÃO DE SERVLETS?
RAZÕES PARA NÃO SEGUIR A SPEC
Não precisar ficar criando adapter paraas implementações
Como lidar com as respostas assíncronas?
MEGA VANTAGENS(REATIVO)
PELO MENOS NA MINHA OPINIÃO
TUDO ASSÍNCRONO
VOLTANDO AO ASSUNTO SOBRE REQUISIÇÕES
PARA SERVIÇOS EXTERNOS
publicstaticResultultimasFotos(Stringhashtag){
WSRequestHolderrequester=
WS.url("https://api.instagram.com/v1/tags/"+hashtag+"/...");
returnok(requester.get().get().getBody());
}
E SE O INSTAGRAM ESTIVER LERDO?
NÃO QUEREMOS SEGURAR A THREAD!
publicstaticPromise<Result>ultimasFotos(Stringhashtag){
WSRequestHolderrequester=
WS.url("https://api.instagram.com/v1/tags/"+hashtag+"/...");
Promise<Response>esperandoAResposta=requester.get();
esperandoAResposta.map(response->ok(response.getBody()));
}
ESSA É UMA DAS CHAVES DO SUCESSO
PARA SUA FELICIDADE, PODE NÃO SER SUFICIENTE
COLOCANDO MAIS SERVIDORES
ESCALONAMENTO HORIZONTAL
E O USUÁRIO LOGADO FICA ONDE?
NO CLIENTE
STATELESS PARA A VITÓRIA
SEM OBJETOS COMPLEXOS NA SESSION
//nãocompila!
session().put("infoDoUsuario",objetoUsuario);
//agorasim
session().put("infoDoUsuario",algumaChaveDoUsuario);
COLOCAR VÁRIOS SERVIDORES FICOU FÁCIL
EXEMPLO HAPROXY
backendservers
balanceroundrobin
optionhttpclose
optionredispatch
serverplay1127.0.0.1:8081 maxconn32
serverplay2127.0.0.1:8082 maxconn32
SEMPRE QUE UM EVENTO É APROVADO,
ATUALIZA A HOME
COMO FAZER?
MODO ANTIGO
PINGS DE TEMPOS EM TEMPOS NO SERVIDOR
JEITO MAIS MODERNO
SERVER-SENT EVENTS
REATIVO MAIS UMA VEZ!
AGORA BASTA FAZER O REGISTRO
varfeed=newEventSource('@routes.AtualizaHomeController.registra())');
feed.addEventListener('message',handlerDoEvento,false);
PUSH NOTIFICATIONS
objectAtualizaHomeControllerextendsController{
val(chatOut,chatChannel)=Concurrent.broadcast[JsonNode]
defregistra()=Action{
Ok.feed(chatOut&>EventSource())
.as("text/event-stream")
}
}
E COMO PUSHAR INFORMAÇÕES?
AtualizaHomeController.chatChannel()
.push(Json.toJson(eventoAprovado));
FECHANDO!
GERANDO UMA DISTRIBUIÇÃO
play dist
DEPLOY
unzip agendatech.zip
deploy/bin/agendatech
ALGUMAS EMPRESAS QUE JÁ USAM
Coursera
Linkedin
Klout
LIVRO:
BLOG:
bit.ly/1hV0NMm
alots.wordpress.com
OBRIGADO!/AlbertoSouza @alberto_souza

Weitere ähnliche Inhalte

Ähnlich wie Introdução rápida às principais tecnologias do Play Framework

Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresasDockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresasRafael Gomes
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Wellington Silva
 
Temperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper UsbTemperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper UsbThiago Santos
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalargustavomtborges
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...iMasters
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2Wilson Júnior
 
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoAlamo Saravali
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechRafael Gomes
 
Instalação Servidor LAMP - Ubuntu serve
Instalação Servidor LAMP - Ubuntu serveInstalação Servidor LAMP - Ubuntu serve
Instalação Servidor LAMP - Ubuntu serveDiogo Jhony
 
Docker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONDocker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONIago Machado
 
Foreman como provisionador TDC floripa 2017
Foreman como provisionador TDC floripa 2017Foreman como provisionador TDC floripa 2017
Foreman como provisionador TDC floripa 2017Andre "Ramoni" Guimaraes
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017Vitor Mattos
 

Ähnlich wie Introdução rápida às principais tecnologias do Play Framework (20)

Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresasDockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
 
Rancher e ansible
Rancher e ansibleRancher e ansible
Rancher e ansible
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)
 
Temperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper UsbTemperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper Usb
 
Atech talks - Docker
Atech talks - DockerAtech talks - Docker
Atech talks - Docker
 
Instalacao roip
Instalacao roipInstalacao roip
Instalacao roip
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalar
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
 
Instalação Servidor LAMP - Ubuntu serve
Instalação Servidor LAMP - Ubuntu serveInstalação Servidor LAMP - Ubuntu serve
Instalação Servidor LAMP - Ubuntu serve
 
Aula Ruby
Aula RubyAula Ruby
Aula Ruby
 
Docker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONDocker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHON
 
OpenSolaris a Céu Aberto
OpenSolaris a Céu AbertoOpenSolaris a Céu Aberto
OpenSolaris a Céu Aberto
 
Foreman como provisionador TDC floripa 2017
Foreman como provisionador TDC floripa 2017Foreman como provisionador TDC floripa 2017
Foreman como provisionador TDC floripa 2017
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
 

Introdução rápida às principais tecnologias do Play Framework