Introdução Play framework

49
Play! Framework Keuller Magalhães [email protected] www.playframework.com.br 2013

description

Apresentação realizada na UNIDAVI em Rio do Sul, no evento do grupo de usuários Java local, JAVale!

Transcript of Introdução Play framework

Page 1: Introdução Play framework

Play! Framework

Keuller Magalhães

[email protected]

www.playframework.com.br

2013

Page 2: Introdução Play framework

2

Sobre...

Coordenador de desenvolvimento e projetos na área de

telecom;

Entusiasta de metodologias ágeis Lean, Scrum, XP, Kanban e

desenvolvimento Web, HTML5 e noSQL;

Possui algumas certificações de mercado, como: SCJA, SCJP,

SCEA, CSM, CSPO e CSD;

Viciado em jogos (Halo, CoD, Skyrim, Assassins

Creed,DarkSiders)

Criador do site da comunidade brasileira

www.playframework.com.br

Page 3: Introdução Play framework

3

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 4: Introdução Play framework

4

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 5: Introdução Play framework

5

O que é ?

Framework Web “full-stack”

Suporte as linguagens Java e Scala

I/O assíncrono

Suporte a tecnologias emergentes WebSockets, Comet, HTML5, JSON, etc.

Mecanismo de templates dinâmicos e compilados

Page 6: Introdução Play framework

6

O que é ?

Estrutura de URLs padrão REST

Segue o modelo de convenção sob configuração

Suporte a agendamento/enfileiramento – Akka

Ferramenta de build integrada (SBT)

Console de desenvolvimento interativo

Integração entre Modelo e armazenamento de

dados

Page 7: Introdução Play framework

7

O que é ?

Não é JavaEE compliance

Hot deployment

Suporte a validação automática de formulários

Integração com IDEs de mercado

Eclipse, IDEA, Netbeans

Comunidade forte e ativa

Page 8: Introdução Play framework

8

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 9: Introdução Play framework

9

Play! no Mundo

Page 10: Introdução Play framework

10

Play! no Mundo

Estatística do Google Trends Junho/2013!

Page 11: Introdução Play framework

11

Play! no Mundo

Estatística do Google Trends Junho/2013!

Page 12: Introdução Play framework

12

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 13: Introdução Play framework

13

Arquitetura de Componentes

HTTP

Routes

Cotroladores

Model ModelHTML XML JSON

Baseada em padrões:

● MVC

● Page Controller

● Separation of Concern

● DRY

● Active Record

● Low Coupling

● High Cohesion

● Single Responsability

● Interface segregation

● Dependency Inversion

● YAGNI

Page 14: Introdução Play framework

14

Arquitetura de Componentes

● Componentes:● Rotas (URLs)

● Controladores (fluxo)

● Modelos (entidades)

● Templates (views)

● Extensão através de plugins

● Suporte a aplicações modulares

Simples Assim!!! :-)

Page 15: Introdução Play framework

15

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 16: Introdução Play framework

16

Projeto

Precisa de uma versão do Java 1.6+

Podemos fazer o download do Play!

www.playframework.org

www.playframework.com.br

Devemos descompactá-lo numa pasta

Adicionamos o caminho da pasta no classpath do

sistema

export PATH=”$PATH:$PLAY_HOME”

Page 17: Introdução Play framework

17

Projeto

Criamos uma aplicação com Play!$ play new todo

Podemos escolher dois templates de projeto1 – criar uma aplicação Scala

2 – criar uma aplicação Java

Depois acessamos a pasta do projto$ cd todo

Page 18: Introdução Play framework

18

Projeto

Acessando o console do Play!$ play

Para compilar nossa aplicação, basta digitar

$ compile

Para executarmos a aplicação, basta digitar:

$ run

Apontamos o navegador para a URL:

http://localhost:9000/

Page 19: Introdução Play framework

19

Projeto

Page 20: Introdução Play framework

20

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 21: Introdução Play framework

21

Rotas e Controladores

Rotas são mapeamentos entre URL e controladores

O arquivo conf/routes contem a definição de

todas as rotas de sua aplicaçãoGET   /     controllers.Application.index()

Esse mapeamento nos dá três informações:

Método HTTP usado GET

Caminho da requisição /

Método de ação index() da classe Application

Page 22: Introdução Play framework

22

Rotas e Controladores

Play! é um framework MVC (baseado em ação)

Um controlador é uma classe Java dentro do

pacote controllers e que estende a classe

Controller

Uma ação é um método público estático que

retorna um objeto Result

Page 23: Introdução Play framework

23

Rotas e Controladores

Vejamos o controlador padrão:

package controllers;

import play.*;import play.mvc.*;import views.html.*;

public class Application extends Controller {    public static Result index() {    return ok(index.render("Your new application is ready."));  }}

Page 24: Introdução Play framework

24

Rotas e Controladores

Vamos definir as rotas para nossa aplicação

# ponto de entrada da aplicacaoGET    / controllers.Application.index()

# CRUD tarefasGET /tarefas controllers.TarefaController.lista()POST /tarefas controllers.TarefaController.criar()POST /tarefas/excluir/:idcontrollers.TarefaController.excluir(id: Int)

Temos 3 rotas, sendo que:primeira: lista as tarefas existentes

segunda: cria uma nova tarefa

terceira: remove uma tarefa pelo id

Page 25: Introdução Play framework

25

Rotas e Controladores

Vamos definir a classe controladora

public class TarefaController extends Controller {

   public static Result lista() {      return TODO;   }

   public static Result criar() {   return TODO;

   }

   public static Result excluir(Integer id) {      return TODO;   }}

TODO é um tipo de retorno 501 Not Implemented, útil durante o desenvolvimento.

Page 26: Introdução Play framework

26

Rotas e Controladores

Se executarmos nossa aplicação, veremos

Page 27: Introdução Play framework

27

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 28: Introdução Play framework

28

Modelos

Um objeto de modelo é na verdade um POJO

O modelo pode ser usado como uma representação

da uma entidade do banco de dados

Play! oferece suporte a dois mecanismos de

persistência (ORM):

Ebean

JPA

A configuração padrão usa Ebean ORM

Page 29: Introdução Play framework

29

Modelos

Criando nosso objeto de modelo

public class Tarefa {public Integer id;public String descricao;

public static List<Tarefa> readAll() {   return new ArrayList<Tarefa>();}

public static void create(Tarefa bean) {}

public static void delete(Integer id) {}

}

Page 30: Introdução Play framework

30

Modelos

Por padrão Play! usa o banco H2 embarcado

Para utilizarmos o MySQL5, precisamos do driver

Edite o arquivo project/Build.scala

val appDependencies = Seq(   “mysql” % “mysql­connector­java” % “5.1.25”,   javaCore,   javaJdbc,   JavaEbean)

Page 31: Introdução Play framework

31

Modelos

Configurando nossa conexão com banco de dados

Edite o arquivo conf/application.conf

db.default.driver=”com.mysql.jdbc.Driver”db.default.url=”jdbc:mysql://localhost/play”db.default.user=rootdb.default.password=”admin123”

Para ativar o controle do Ebean, devemos descomentar

ebean.defaults=”models.*”

Precisamos transformar nosso modelo numa entidade persistente

Page 32: Introdução Play framework

32

Modelos

Adaptando nossa classe de modelo

@Entitypublic class Tarefa extends Model {

@Idpublic Integer id;

@Column(length=35)public String descricao;

public static Finder<Integer,Tarefa> finder =    new Finder(Integer.class, Tarefa.class);

...}

Page 33: Introdução Play framework

33

Modelos

Implementando os métodos de persistência

@Entitypublic class Tarefa extends Model {

...        public static List<Tarefa> readAll() {           return finder.all();        }

        public static void create(Tarefa bean) {           bean.save();        }

        public static void delete(Integer id) {           finder.ref(id).delete();        }

}

Page 34: Introdução Play framework

34

Agenda

O que é ?

Play! No Mundo

Arquitetura de Componentes

Projeto

Rotas e Controladores

Modelos

Views

Page 35: Introdução Play framework

35

Views

Uma é um template de página HTML com código de

script Scala

Todo template é compilado em byte code

Todo template deve estar contido na pasta views Todo template deve ter a extensão .scala.html

Play! ainda não possui uma biblioteca de

componentes visuais para criação de interfaces

gráficas

Page 36: Introdução Play framework

36

Views

Vejamos o template da view →app/views/index.scala.html

@(message: String)

@main(“Welcome Play 2.0”) {

 @play20.welcome(message)

}

Neste caso estamos criando uma view, baseada

numa página de layout padrão main.scala.html

Page 37: Introdução Play framework

37

Views

Templates podem receber parâmetros de qualquer

tipo de dados Usamos o caracter especial @ para informar comando

Scala no template

Em nosso exemplo anterior, estamos passando um

parâmetro do tipo String, na variável message

@(message: String)

Page 38: Introdução Play framework

38

Views

O mecanismo de templates do Play! nos permite

reutilizar outros templates views bases para as páginas da aplicação

Em nosso exemplo anterior, estamos usando o

template main.scala.html como base da nossa

página

Page 39: Introdução Play framework

39

Views

Vejamos o código do template index.scala.html@(title: String)(content: Html)<!DOCTYPE html><html><head>    <title>@title</title>    <link rel="stylesheet" media="screen"           href="@routes.Assets.at("css/main.css")">    <link rel="shortcut icon" type="image/png"           href="@routes.Assets.at("images/favicon.png")">    <script type="text/javascript" src="@routes.Assets.at("javascripts/jquery­1.9.0.min.js")"></script></head><body>    @content</body></html>

Page 40: Introdução Play framework

40

Views

@(tasks: List[Tarefa], taskForm: Form[Tarefa])

@import helper._

@main("Lista de Tarefas") {    

    <h1>@tasks.size() tarefa(s)</h1>    

    <ul>

        @for(task <­ tasks) {

            <li>

                @task.descricao

                @form(routes.TarefaController.excluir(task.id)) {

                    <input type="submit" value="Delete">

                }

            </li>

        }

    </ul>

}

Page 41: Introdução Play framework

41

Views

No template anterior criamos um código para exibir uma lista de tarefas, bem simples Nosso template recebe dois parâmetros

uma lista de tarefas um objeto Form, baseado em nosso modelo@(tasks: List[Tarefa], taskForm: Form[Tarefa])

Logo após realizamos a importação de helpers   @import helper._

Depois usamos um comando @for() padrão para exibir os itens da coleção tasks

Page 42: Introdução Play framework

42

Views

● Para completar nosso template, adicionamos o código a seguir:    <h2>Criar tarefa</h2>

    @form(routes.TarefaController.criar()) {

        @inputText(taskForm("descricao")) 

        <input type="submit" value="Create">

    }

No trecho acima criamos um formulário usando o helper @form() O helper recebe como argumento a rota da ação que deverá ser invocada, quando o formulário for submetido Também usamos o helper @inputText() para criar uma caixa de texto baseada num campo do formulário

Page 43: Introdução Play framework

43

Views

Implementando o método de ação lista()

public class TarefaController extends Controller {   static Form<Tarefa> taskForm = Form.form(Tarefa.class);

   // exibe a pagina index.scala.html passando dois    // parametros: List<Tarefa> e Form<Tarefa>   public static Result lista() {      return ok(views.html.index         .render(Tarefa.readAll(), taskForm));   }

   ...}

Page 44: Introdução Play framework

44

Views

Implementando o método de ação criar()

public class TarefaController extends Controller {

   public static Result criar() {      Form<Tarefa> form = taskForm.bindFromRequest();      if (form.hasErrors()) {         return badRequest(index.render(                    Tarefa.readAll(), form));      }

      Tarefa.create(form.get());      return redirect(routes.TarefaController.lista());   }

   ...}

Page 45: Introdução Play framework

45

Views

Implementando o método de ação excluir()

public class TarefaController extends Controller {

   public static Result excluir(Integer id) {      Tarefa.delete(id);      return redirect(routes.TarefaController.lista());   }

}

Page 46: Introdução Play framework

46

Conclusão

Play! é um full-stack Web framework Suporte nativamente as linguagens: Scala e Java Segue o modelo MVC Integração entre as camadas bastante consistente

e simples Mecanismo de build integradao com SBT Suporte a template dinâmicos

Page 47: Introdução Play framework

47

Conclusão

Possui dezenas de plugins (extensão) Permite desenvolvimento modular de aplicações É suportado por diversos provedores Cloud

CloudBees, Heroku, OpenShift, etc. Suporte a tecnologias emergentes:

WebSockets, Comet, JSON, HTML5, etc. Permite criar validações diretamente no modelo Mecanismos de testes automatizados integrados

(JUnit e Fixtures)

Page 48: Introdução Play framework

48

Q&A

Page 49: Introdução Play framework

49

Muito Obrigado!!!

Keuller Magalhães

[email protected]

www.playframework.com.br