Play. Aumente sua produtividade com o framework. No ano de 2007 o desenvolvedor Guillaume Bort



Documentos relacionados
Portal Sindical. Manual Operacional Empresas/Escritórios

NetEye Guia de Instalação

Módulo e-rede OpenCart v1.0. Manual de. Instalação do Módulo. estamos todos ligados

02 - Usando o SiteMaster - Informações importantes

Projeto Amadeus. Guia de Instalação Windows

Módulo e-rede OpenCart v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Instalando o WordPress em localhost

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Instalando o Internet Information Services no Windows XP

Manual SAGe Versão 1.2 (a partir da versão )

Manual do Visualizador NF e KEY BEST

Procedimentos para Reinstalação do Sisloc

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

GUIA PRÁTICO DE INSTALAÇÃO

Desenvolvendo Websites com PHP

Parte I. Demoiselle Mail

GUIA INTEGRA SERVICES E STATUS MONITOR

Atualizaça o do Maker

Manual de configuração do sistema

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO. Motor Periférico Versão 8.0

2.0.0.X. Storage Client. TecnoSpeed. Tecnologia da Informação. Manual do Storage Client

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Instalação e Configuração do CollabNet Subversion Edge

INSTALAÇÃO DO SISTEMA CONTROLGÁS

Sistema de Chamados Protega

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.

Manual de Instalação e Configuração. Módulo Remote. (G2KA) para NFSE. v1.0

4 O Workflow e a Máquina de Regras

UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO. Manual de Avaliação de Desempenho Cadastro

INTRODUÇÃO: 1 - Conectando na sua conta

Tutorial Web Mail. Acesso e Utilização. MPX Brasil Cuiabá/MT: Av. Mal Deodoro, 1522 B Centro Norte. Contato: (65) cuiaba@mpxbrasil.com.

AJAX no GASweb. Mas e afinal, para que usamos o AJAX?

Escritório Virtual Administrativo

Acessando um Banco de Dados

MANUAL DO ANIMAIL Terti Software

INSTRUMENTO NORMATIVO 004 IN004

Nome N Série: Ferramentas

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Manual Captura S_Line

SSE 3.0 Guia Rápido Parametrizando o SISTEMA DE SECRETARIA Nesta Edição Configurando a Conexão com o Banco de Dados

Plano de Gerenciamento do Projeto

Nesse artigo abordaremos os principais aspectos de instalação e uso do NTOP no Fedora Core 4.

Trecho retirando do Manual do esocial Versão 1.1

Manual Comunica S_Line

Guia de instalação para ambiente de Desenvolvimento LINUX

Configurando DDNS no Stand Alone

MANUAL DO GERENCIADOR ESCOLAR WEB

CONSTRUÇÃO DE BLOG COM O BLOGGER

Casa do Código Livros para o programador Rua Vergueiro, º andar Vila Mariana São Paulo SP Brasil

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Manual Xerox capture EMBRATEL

PAINEL GERENCIADOR DE S

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Manual de Operações. Versão 1.0. Janeiro/2009. Autor : Carlos Valotto

mkdir /srv/www/default/html/calculadora/imagens mkdir /srv/www/default/html/calculadora/blocos

MANUAL COTAÇAO WEB MANUAL MANUAL AVANÇO INFORMÁTICA AVANÇO INFORMÁTICA. [Digite seu endereço] [Digite seu telefone] [Digite seu endereço de ]

ÍNDICE MANUAL SITE ADMINISTRÁVEL TV. 1. Introdução 2. Acessando o site administrável/webtv SITE ADMINISTRÁVEL 3. CONFIGURAÇÕES

MANUAL DE UTILIZAÇÃO

Como obter Ajuda e Suporte

PJCUS-361 CONTRATO COM CÓDIGO DE BARRAS

Programação para Internet Orientada a Objetos com PHP & MySQL Instalando e configurando um ambiente de ferramentas PHP e MySQL. Prof. MSc.

Manual Administrador - Mídia System

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

A CMNet disponibilizou no dia 24 de junho para download no Mensageiro a nova versão do Padrão dos Sistemas CMNet.

WebEDI - Tumelero Manual de Utilização

SCIM 1.0. Guia Rápido. Instalando, Parametrizando e Utilizando o Sistema de Controle Interno Municipal. Introdução

Guia do Demoiselle Audit Demoiselle Audit Paulo Gladson Ximenes Pinheiro Clóvis Lemes Ferreira Júnior

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Manual de Instalação do AP_Conta Windows

TCEnet. Manual Técnico. Responsável Operacional das Entidades

Alertamos que essa é uma configuração avançada e exige conhecimentos técnicos em informática para ser executada.

INSTALANDO E CONFIGURANDO O MY SQL

Módulo e-rede Prestashop v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Manual de Instalação. SafeSign Standard (Para MAC OS 10.7)

Omega Tecnologia Manual Omega Hosting

V1.1 SITE EM UM SITE 11/2015 MINUTOS APRENDA A PROGRAMAR IMAGINE FAZER O SEU PRIMEIRO PROGRAMA EM 180 SEGUNDOS

1 Essa é a tela de login do Sistema de Atendimento Online, siga o passo a passo abaixo.

Procedimento para Atualização do DDFinance

DPAlmox - Windows MANUAL DO USUÁRIO

Tutorial do módulo Carteira Nacional de Militante

Instalando software MÉDICO Online no servidor

OCOMON PRIMEIROS PASSOS

Treinamento. Módulo. Escritório Virtual. Sistema Office. Instruções para configuração e utilização do módulo Escritório Virtual do sistema Office

- Acessar o sistema. Para acessar o sistema digite o endereço eletronico e clique em login na barra de menus.

Manual de Utilização. Sistema. Recibo Provisório de Serviço

Web Design Aula 11: Site na Web

INSTALAÇÃO DO MICROSOFT WINDOWS SHAREPOINT SERVICES 2.0

UNIVERSIDADE FEDERAL DE GOIÁS CERCOMP (CENTRO DE RECURSOS COMPUTACIONAIS) TUTORIAL DE USO DO WEBMAIL - UFG

CONFIGURAÇÃO MINIMA EXIGIDA:

Configuração do cliente de Thunderbird para usuários DAC

Projeto Arquitetural do IEmbedded

BLACKBERRY - PME e PL Passo a Passo Registro Site BIS BlackBerry PME e Profissional Liberal

JSF e PrimeFaces. Professor: Ricardo Luis dos Santos IFSUL Campus Sapucaia do Sul

Manual do Instar Mail v2.0

PROCEDIMENTOS PARA ATUALIZAÇÃO DE VERSÃO DO APLICATIVO

Manual Sistema de Autorização Online GW

Aula 03 - Projeto Java Web

Transcrição:

play_ Aumente sua produtividade com o framework Play Crie um sistema completo em minutos e entenda por que tantas pessoas estão abandonando o seu framework web preferido para usar Play. No ano de 2007 o desenvolvedor Guillaume Bort trabalhava em um projeto na empresa Zenexity (em Paris) e ele precisava de um framework bem produtivo. Ele não via o JSF como uma boa opção para aplicações web, e invejava a produtividade do desenvolvimento em Ruby on Rails. Com isso ele criou o framework baseado em suas próprias necessidades, e nesse momento ele está focado na versão 2.0 que promete muitas mudanças. Entretanto, vamos focar este artigo na versão 1.2.x, que é a mais usada. Conheça o framework Um erro comum é comparar o Play com outros frameworks Java do mercado, como Spring MVC, Struts, Mentawai ou VRaptor, ele foge dos tradicionais padrões Java Enterprise e busca soluções baseadas em script semelhante ao Ruby on Rails, PHP Cake ou Grails. Além disso, ele possui um servidor HTTP embutido e não é baseado na API de Servlet (apesar de exportar um pacote WAR totalmente compatível com o padrão JEE). O framework Play é famoso por facilitar, e muito, a vida do desenvolvedor que precisa criar uma aplicação MVC de forma fácil e rápida. Os recursos que o framework disponibiliza impressionam pela simplicidade e rápida curva de aprendizado. Além de possuir vários recursos embutidos, o playframework possui uma boa lista de módulos que podem ser plugados à aplicação, disponibilizando recursos mais avançados, como, por exemplo, Web Services, integrações com redes sociais Facebook e Twitter, testes automatizados, entre outros. A instalação é muito simples e está destacada mais adiante. Começamos criando a aplicação com a chamada: play new NetCitacoes Com isso será criada uma estrutura básica de sua aplicação (figura 1). Entre no diretório criado e digite play run Depois acesse no browser no endereço http:// localhost:9000. Vamos para o Eclipse agora? play eclipsify Com isso ele criará os arquivos.classpath e.project para podermos importar esse projeto para dentro do Eclipse. / 14

Eduardo Cerqueira eduardo@webstart.com.br Formado pela Universidade Ibirapuera, trabalha com java desde 2005 e sócio-diretor da WebStart Solutions, empresa com foco na prestação de serviços de desenvolvimento de software também dos criadores do site E-AgendaMédica ( www.eagendamedica.com.br ) Fernando Boaglio fernando@boaglio.com Formado pela Unesp em BCC, foi instrutor oficial da Sun Microsystems e da Oracle Education. Atualm ente contribui para alguns projetos open source, como KDE e Mentawai e é da equipe de arquitetura da Discover Technology, prestando serviços para a Tokio Marine Seguradora. O desenvolvimento de aplicações web ficou mais fácil, leve e rápido com esse framework que, apesar de ser relativamente novo, causa bastante barulho na comunidade e tem sido uma mão na roda no desenvolvimento de aplicações para startups no mundo todo. Mostraremos neste artigo como ele funciona, como é definida sua arquitetura e desenvolveremos uma aplicação completa demonstrando alguns dos incríveis recursos desse framework e, o melhor de tudo, sem dor! o framework Play possui quatro arquivos principais de configuração:» application.conf guarda configurações da JVM, informações de log, persistência, rede e Proxy;» dependencies.yml lista os módulos usados pelo seu sistema;» messages localização de mensagens;» routes define os mapeamentos das URIs do seu sistema, apontado para controladores estáticos ou dinâmicos. Uma das qualidades do play é sua velocidade no desenvolvimento. Esqueça deploy, start e stop de servidor, vamos criar um controlador e uma página que recebe o seu resultado sem precisar fazer nada da maneira convencional, basta apenas criar as novas rotinas. Figura 1. Estrutura básica de um projeto novo. O seu primeiro controller Em primeiro lugar, deixe o servidor do play rodando no projeto (play run mencionado anteriormente). Dentro do pacote app.controllers, crie a classe Teste que estende da classe play.mvc.controller, com um método chamado index conforme a Listagem 1. 15 \

Listagem 1. Primeiro controlador de exemplo. import play.mvc.controller; public class Teste extends Controller { public static void index() { renderargs.put( variavel, teste ); render(); Depois disso, dentro do diretório views, crie um diretório com o nome do controlador (Teste), e dentro dele um arquivo chamado index.html contendo a página HTML conforme a Listagem 2. Listagem 2. Página HTML do primeiro controlador de exemplo. <html> <h2>meu primeiro ${variavel!</h2> </html>> Em seguida, acesse o browser no endereço http:// localhost:9000/teste/index e perceba a magia do play! Classes e páginas novas ficam disponíveis dinamicamente agilizando o processo de desenvolvimento! É como o autor diz: arrume o bug e pressione reload. Essa mágica é possível graças ao poderoso engine baseado em Groovy, que também é a raiz do projeto Grails. O seu primeiro cadastro É comum começarmos o desenvolvimento de um cadastro e com o tempo mudarmos o valor dos campos da tela (ou colunas de uma tabela). A mesma flexibilidade que play oferece com as classes Java também é oferecida com o banco de dados. Edite o arquivo application.conf descomentando a linha db=mem para automaticamente mapear o nosso banco de dados na memória. Vamos criar uma simples lista de compras e, seguindo o modelo MVC, vamos começar com a representação do negócio com a classe ListaDeCompras (Listagem 3). Para termos o mapeamento desejado, basta que a classe estenda play.db.jpa.model e tenha a anotação Entity. Listagem 3. Classe que representa uma lista de compras. package models; import javax.persistence.entity; import play.data.validation. Required; import play.db.jpa.model; @Entity public class ListaDeCompras extends Model { @Required public String nome; Continuamos o exemplo criando o controlador da Listagem 4, que possui o método index para efetuar a busca da lista do banco de dados e jogar na tela através do método render, e o método save, que recebe como parâmetro o objeto que vamos persistir no banco de dados. Listagem 4. Controlador da lista de compras. import java.util.list; import models.listadecompras; import play.mvc.controller; public class Lista extends Controller { public static void index() { List<ListaDeCompras> compras = models.listadecompras.all().fetch(); render(compras); public static void save(listadecompras item) { item.save(); Finalmente, na camada view (Listagem 5) temos o arquivo index.html (dentro da pasta app/views/lista) com o formulário que aponta para o método Lista. save e uma rotina que exibe os dados da lista de compras enviados pelo controlador. Listagem 5. Arquivo index.html que representa a lista de compras. <html> <h2>lista de compras</h2> #{form @Lista.save() <table> <th> <input type= text name= item.nome value= ${item?.nome /> </th> <td><input type= submit name= submit value= Cadastrar /> </td> #{/form </table> <hr/> <table> / 16

#{list items:compras, as: item <tr><td>${item.nome</td></tr> #{/list </table> </html> Para ver o resultado, acesse http://localhost:9000/ lista/index e faça alguns cadastros. Confira também o log das operações executadas que aparece no console onde foi digitado play run. Depois dessa pequena introdução para entender o framework, vamos abandonar a lista de compras e fazer um sistema um pouco mais complexo. Conheça o NetCitações Temos um simples sistema de citações famosas, onde vamos persistir informações das frases, dos comentários de cada frase e das pessoas que cadastraram. Nesse sistema, apenas os administradores podem cadastrar os usuários (figura 2). Módulos utilizados Para criar as telas de CRUD automaticamente utilizamos o módulo scaffold, que de forma simples irá gerar as nossas classes de controle e visualização rapidamente e usamos também o módulo secure para validar a autenticação do cadastro de usuários (figura 3). Figura 4. Tela de cadastro de usuários. Figura 5. Tela de listagem de usuários. Usando o módulo scaffold o módulo scaffold, como comentado anteriormente, tem o objetivo de gerar automaticamente as classes de controle e os htmls de visualização da nossa aplicação. Poderíamos fazer isso manualmente, porém utilizaremos esse módulo para poupar trabalho. o scaffold utiliza as classes de modelo que geramos para saber quais controllers e views precisa criar. Além disso, ele analisa os tipos de dados e anotações para gerar também mecanismos de validação nas views. Configurações do módulo scaffold Como pré-requisito desse módulo, as classes de domínio Usuario, Citacao e Comentario já foram criadas para permitir a geração dos demais arquivos- -fonte. Para instalar o módulo, precisamos editar o arquivo dependencies.yml e incluir a chamada para o módulo conforme Listagem 6. Figura 3. Tela de cadastro de usuário do NetCitações. Figura 2. Classes do NetCitações. 17 \

Listagem 6. Configurando módulo scaffold. #Application dependencies require: -play -play -> scaffold head A linha que adicionamos das informações do módulo que usaremos, no caso, scaffold e sua versão, que nesse caso será head. Após salvar o arquivo, o play precisa baixar os arquivos do módulo que nós acabamos de configurá-lo. Para isso, é preciso executar o comando: play deps --sync Depois de baixar todos os arquivos, é preciso recriar os arquivos do projeto do Eclipse para que sejam incluídos em seu path. Lembre-se de fechar a aplicação no Eclipse antes de executar o comando, pois pode haver problemas na atualização dos arquivos. Agora, vamos usar o módulo para gerar nossas classes de controle e views. Para essa tarefa, executamos o comando: play scaffold:gen Então, executamos o comando de configuração do Eclipse novamente, como exibido abaixo: play eclipsify Verificando o nosso projeto, podemos ver que o módulo gerou arquivos dentro do pacote controller e views. Basta agora executar o servidor novamente para que os arquivos estejam disponíveis acessando via browser com o comando: play run Pronto, nosso cadastro básico está concluído, porém precisamos ainda adicionar mais funcionalidades à nossa aplicação, como, por exemplo, autenticação. Passaremos então a falar do próximo módulo utilizado na aplicação, o módulo Secure. Usando o módulo secure O módulo secure é responsável pelo mecanismo de autenticação de usuários no play, existem outros módulos que têm essa mesma função e ainda realizam integração com Facebook, Twitter e outros utilizando OpenAuth e outros protocolos de autenticação, porém, utilizaremos o Secure por ser mais simples e atender ao propósito da aplicação. O método de instalação do módulo é semelhante ao já mencionado na instalação do módulo scaffold. Vamos editar novamente o arquivo dependencies.yml incluindo uma linha a mais de informação, conforme Listagem 7. Listagem 7. Configurando módulo secure. #Application dependencies require: -play -play -> scaffold head -play -> secure O módulo secure já faz parte dos pacotes padrões do play, porém precisamos ainda executar todos os comandos para que o framework inclua os arquivos do módulo. Então digitaremos mais uma vez os comandos que têm essa finalidade. play deps --sync play eclipsify Módulos scaffold e secure trabalhando juntos Agora que já instalamos os módulos que precisamos, vamos usar o módulo scaffold para gerar a nossa tela de login e controlar nossos usuários de forma integrada. Essa tarefa é feita através do comando abaixo: play scaffolg:gen --overwrite --withlogin --with-layout O comando acima irá sobreescrever os arquivos e regerar as classes de controle e as views do sistema e também as classes de controle responsáveis pelo login com a tela respectiva e ainda incluiremos um pouco de estilo para as telas ficarem mais amigáveis. Rodamos mais uma vez o comando para configurar o projeto no Eclipse e incluir os arquivos em seus paths. Esse passo é necessário apenas na inclusão de um módulo novo no seu projeto. play eclipsify E subimos o servidor para acessar a aplicação. play run NetCitacoes Algumas convenções do módulo scaffold Nas documentações do play, temos a convenção de utilizarmos o nome do controller no plural para o seu respectivo modelo, por exemplo, para a classe de modelo Citacao utiliza-se o nome Citacaos para a controller, porém, quando escrevemos as classes em português, fica meio esquisito. O nome da controller pode ser alterado sem qualquer prejuízo pra aplicação, porém se futuramente precisar regerar as classes utilizando o módulo scaffold, as classes serão geradas com os nomes originais. Olhando o código mais a fundo Vamos olhar alguns dos arquivos e destacar alguns itens para entendimento. / 18

A classe model Usuario.java Na classe de modelo usuário, na Listagem 8, temos algumas anotações que devemos olhar com mais atenção. Listagem 8. Arquivo model Usuario. package models; import java.util.list; import javax.persistence.entity; import javax.persistence.onetomany; import play.data.validation.email; import play.data.validation.required; import play.db.jpa.model; @Entity public class Usuario extends Model { @Required public String nome; @Required @Email public String email; public boolean isadmin; public String senha; @OneToMany(mappedBy= usuario ) public List<Citacao> citacoes; @Override public String tostring() { return nome; Olhando com mais cuidado, veremos que apesar de utilizarmos JPA, nós não precisamos definir a chave primária da entidade com o @Id. Porém, a especificação JPA nos diz que somos obrigados a ter um atributo de classe com a anotação representando a chave primária da entidade. Repare que estamos estendendo a classe play.db.jpa.model e nela temos o atributo com a anotação associada, ou seja, ao estendermos essa classe não precisamos definir quem será nossa chave primeira, pois a classe já irá associar o que precisamos. Entretanto, em alguns casos queremos definir o nome da coluna utilizada como chave primária. Para isso devemos então trocar a classe play.db.jpa.model para play.db.jpa.genericmodel. Desse modo, podemos definir o atributo de chave primária normalmente. Temos mais duas anotações que necessitam da nossa atenção, @Required que informa ao framework que esses campos são de preenchimento obrigatório. Sendo assim, em um formulário, o framework irá verificar o preenchimento dessa informação e retornará uma mensagem de erro caso isso não tenha sido feito. Olharemos mais adiante na classe Controller como isso será feito. Agora, só nos resta falar sobre a anotação @ Email, ela serve pra que no momento da validação do objeto a ser persistido o framework verifique se o valor informado nesse atributo possui o formato de um e-mail válido, ou seja, a existência de um @ no valor. A classe controller Usuarios.java Nessa classe temos algumas anotações que são utilizadas pelo módulo secure para definir controle de acesso. Por exemplo, para cadastrar, editar ou deletar um usuário eu preciso ser um usuário autenticado e ter perfil de administrador. A Listagem 9 dá uma amostra da classe gerada pelo módulo. Listagem 9. Arquivo controller Usuarios. import java.util.list; import models.usuario; import play.data.validation.valid; import play.i18n.messages; import play.mvc.before; import play.mvc.controller; import play.mvc.with; @With(Secure.class) public class Usuarios extends Controller { @Before static void user() { renderargs.put( user, Security.connected()); public static void index() { List<Usuario> entities = models.usuario.all().fetch(); render(entities); public static void create(usuario entity) { render(entity); public static void show(java.lang.long id) { Usuario entity = Usuario.findById(id); render(entity); public static void edit(java.lang.long id) { Usuario entity = Usuario.findById(id); render(entity); public static void delete(java.lang.long id) { Usuario entity = Usuario.findById(id); entity.delete(); 19 \

public static void save(@valid Usuario entity) { if (validation.haserrors()) { flash.error(messages.get( scaffold.validation )); render( @create, entity); entity.save(); flash.success(messages.get( scaffold.created, Usuario )); public static void update(@valid Usuario entity) { if (validation.haserrors()) { flash.error(messages.get( scaffold.validation )); render( @edit, entity); entity = entity.merge(); entity.save(); flash.success(messages.get( scaffold.updated, Usuario )); Para dizer ao Play que somente usuários logados podem acessar à tela de usuários, eu utilizo a anotação @With(Secure.class), assim quando um usuário tentar acessar as informações contidas nesse controller, ele precisará estar logado. Porém, existe uma action chamada user() que recupera o usuário logado através do método Security. getconnected() e coloca na sessão com a chave user associada a ela. Esse método pode ser utilizado sem que um usuário esteja necessariamente logado, porque ele é um método que está sendo usado no momento do login e por isso não deve ser controlado. Para resolver esse problema, o play possui uma anotação @Before. Ela informa ao framework que essa action pode ser acionada antes que seja verificado se o usuário possui ou não acesso a ela. Olhando a action save() podemos ver outra anotação, o @Valid. Ela indica ao play que deve receber como argumento um Usuario válido. Então, caso essas diretrizes não sejam respeitadas, o play retorna uma mensagem de erro dizendo que o objeto não é válido. O Play sabe que se um objeto é válido ou não verificando as anotações existentes na classe de modelo. No nosso exemplo, o @Required e o @Email. Portanto, olhando a Listagem 8 podemos constatar que um usuário válido é aquele que possui os atributos nome preenchido e que o atributo e-mail tenha um formato de e-mail válido. A classe controller Application.java Essa controller é a classe de entrada da aplicação, ou seja, é o nosso index, a primeira página e controller carregada quando a aplicação é executada. No nosso exemplo, ela não tem muita responsabilidade, uma vez que possui apenas os métodos index() que é o método inicial propriamente dito, verificando se existe algum usuário logado e retorna esse usuário, e o sair() que é responsável pelo logout do usuário. A Listagem 10 mostra como a classe está definida. Listagem 10. Arquivo controller Application. import play.mvc.controller; public class Application extends Controller { public static void index() { String user = Security.connected(); render(user); public static void sair() throws Throwable { Secure.logout(); A classe controller Security.java Por default, o módulo Secure permite que todos os usuários consigam se autenticar na aplicação, apenas preenchendo os campos de login e senha quando solicitados. Porém, para aplicarmos nossas próprias regras de autenticação, como, por exemplo, um e- -mail e senha que estejam cadastrados no banco de dados, precisamos sobrecarregar os métodos de autenticação e checagem para a nossa realidade. A Listagem 11 mostra a classe Security que criamos para efetuarmos a autenticação no sistema. No método authenticate(), incluímos uma verificação do usuário admin diretamente no código, pois o modelo não contempla a criação de perfis diferenciados no sistema, poderíamos ter feito isso, mas no nosso exemplo não é relevante, então optamos por não colocar e assim termos um material mais enxuto possível. Nesse mesmo método, caso não seja o e-mail e senha que definimos no código, a aplicação irá verificar a existência do usuário com o e-mail informado no banco de dados e irá comparar sua senha. Listagem 11. Arquivo controller Security. import models.usuario; public class Security extends Secure.Security{ / 20

static boolean authenticate(string email, String senha) { if(email.equals( admin@netcitacoes.com.br ) && senha.equals(!@qwas )){ return true; Usuario usuario = Usuario.find( byemail, email). first(); return usuario!= null && usuario.senha.equals(senha); static boolean check(string perfil) { if(connected().equals( admin@netcitacoes.com.br )){ return true; Usuario usuario = Usuario.find( byemail, connected()).first(); if (usuario!= null && admin.equals(perfil)) { return usuario.isadmin; else { return false; Deploy da aplicação O play framework já possui um container onde a aplicação pode ser implantada, que na verdade é o mesmo utilizado para o desenvolvimento, porém com configurações da aplicação setadas para modo PROD. Na própria documentação do framework é fortemente recomendada essa prática, pois evita surpresas quando executar deploy em servidores de aplicação e servlet containers, evitando ter que alterar a aplicação no momento da subida após concluído o desenvolvimento, porém a execução da aplicação em um servlet container ou servidor de aplicação seja uma premissa, o play framework disponibiliza formas de gerar um arquivo WAR para deploy normalmente. Primeiramente, o deploy padrão do play, que é executando apenas digitando o comando abaixo: play start NetCitacoes Pronto, apenas isso é suficiente para colocar a aplicação em modo produção, pois o container embutido do play irá verificar as configurações no application.conf procurando pelas variáveis definidas para o modo produção, setá-las na aplicação e subir o servidor. Por padrão, a porta 9000 permanecerá mesmo no modo produção. Nesse caso, podemos usar duas abordagens de arquitetura, a primeira seria utilizar o container do play na porta 80. A segunda, seria utilizamos algum servidor HTTP, como, por exemplo, o Apache na porta 80 e rodarmos o container do play na porta 9000. Nessa segunda abordagem, podemos configurar um balancer que irá facilitar também em uma atualização de release, uma vez que conseguimos chavear a aplicação que irá responder as requisições recebidas, enquanto outra instância está sendo atualizada. Porém, caso essa abordagem não seja possível, e termos que implantar a aplicação fora do container padrão do play, podemos executar o seguinte comando para a geração de um arquivo WAR. Obs.: esse comando precisa ser executado fora da pasta da aplicação. play war NetCitacoes -o netcitacoes.war --zip --exclude.svn:target:logs:tmp Explicando com detalhes o comando que executamos:»» opção -o que permite escolhermos o nome do arquivo gerado;»» opção --zip informa o gerador que queremos uma cópia compactada;»» opção --exclude informa que os diretórios,.svn, target, logs e tmp não sejam incluídos no pacote. Considerações finais Após uma visão geral do framework, foi codificado e demonstrado uma pequena amostra do que o Play pode fazer e seus diferenciais de produtividade ficaram claros com o decorrer do uso. O código-fonte e demais referências estão no final do artigo. /referências > http://vimeo.com/7087610 aplicação play em 10 minutos (vídeo oficial) > http://www.playframework.org/documentation/1.2.5/ home documentação da versão 1.2.5 > https://github.com/egcerqueira/netcitacoes códigofonte do projeto NetCitações A instalação do framework play exige no mínimo Java 1.5 ou superior. Primeiro efetue o download do play e descompacte em algum lugar (exemplo: Windows: C:\play\, Linux e MacOS: $HOME/play/), depois se certifique que o executável play está no path do sistema (Windows: PATH=%PATH%;C:\play\, Linux e MacOS: PATH=$PATH:/play/). Para testar a instalação, digite play version para ver a versão instalada. 21 \