Вы находитесь на странице: 1из 61

COLABORAO: ERIC ROMMEL

ROTEIRO
Introduo Instalao Criando um projeto no GAE
Hello World! Livro de Visitas

INTRODUO
Cloud Computing

INTRODUO GOOGLE APP ENGINE (GAE)


Plataforma e SDK para desenvolvimento e hospedagem (hosting) de aplicaes web Utiliza a infraestrutura da Google Gratuito
At atingir certas cotas http://code.google.com/intl/pt-BR/appengine/docs/ billing.html

Inicialmente feito para rodar em Python


Mas suporta JAVA desde 2008

INTRODUO GOOGLE APP ENGINE (GAE)


Arquitetura
Google App Engine Internet
http

Sua Aplicao Servio de Obteno de URL

BigTable

INTRODUO GOOGLE APP ENGINE (GAE)


GAE suporta Java 5 e 6 Quando executado no GAE, seu aplicativo Java utiliza a JVM 6 e as libs padres
Java servlets, JDO, JPA, Jcache e JavaMail

O ideal usar o Java 6 para compilar e testar a aplicao, a fim de garantir que o servidor local se comporte semelhante ao GAE

INSTALAO JAVA
Instale e configure a ltima verso do kit de desenvolvimento Java (JDK SE) na sua plataforma (Windows, Linux, etc)
http://www.oracle.com/technetwork/java/javase/ downloads/index.html

Teste em um prompt de comando:


java version javac version

INSTALAO ECLIPSE
Iremos utilizar o Eclipse como IDE para desenvolvimento
Aqui, utilizaremos a verso 3.6 (Helios) para Win32 Se ainda no tem o Eclipse, v em http://www.eclipse.org/ Procure por Eclipse IDE for Java EE Developers
Pois vem com o plug-in do Web Tools Platform (WTP), que inclui modos de edio teis para arquivos JSP e HTML

INSTALAO PLUG-IN GAE


No Eclipse, v na opo Help > Install new Software Em Work with, adicione o endereo do plug-in e proceda a instalao
Eclipse 3.6 (Helios)
http://dl.google.com/eclipse/plugin/3.6

INSTALAO PLUG-IN GAE


Aps a instalao e reinicializao do Eclipse, os seguintes botes ficaro disponveis:
Para criar um novo projeto de aplicao Web Para projetos usando GWT Para implantar a aplicao no GAE

Para ajudar a identificar e corrigir problemas de performance

PARA COMEAR...
Fazer inscrio no GAE
Para habilitar conta do Google para acesso ao App Engine
http://appengine.google.com

PARA COMEAR...
Fazer inscrio no GAE
No tem conta no Google?
https://www.google.com/accounts/NewAccount

PARA COMEAR...
Criar uma aplicao
Clique no boto Create Application para criar uma aplicao para rodar no GAE

PARA COMEAR...
Para criar aplicaes com o GAE, preciso um cdigo de verificao
O cdigo de verificao enviado via SMS
Deve-se digitar: +55 DD PPPP NNNN (DD = cdigo de rea sem o zero, PPPP = Prefixo do celular, NNNN = nmero final do celular)

Essa verificao da conta s realizada uma vez

PARA COMEAR...
Aps alguns segundos, o cdigo chegar ao seu celular
Digite o cdigo no espao apropriado

PARA COMEAR...
Aps a insero do cdigo de verificao, escreva a identificao da aplicao
Que ser concatenada com o domnio do GAE, appspot.com
Devido s cotas gratuitas, o Google disponibiliza inicialmente 10 aplicaes

Aceitar os termos de servio do Google e finalmente criar a aplicao

CRIANDO UM PROJETO NO GAE


No Eclipse, clique no boto ou v em File > New > Web Application Project D um nome (GuestBook) Especifique um Package (guestbook) Desmarque a opo Use Google Web Toolkit Clique em Finish

CRIANDO UM PROJETO NO GAE


Arquivos do projeto
src/guestbookt/GuestBookServlet.java src/META-INF/jdoconfig.xml war/META-INF/web.xml war/META-INF/appengine-web.xml war/META-INF/logging.properties war/index.html

ARQUIVOS DO PROJETO
src/guestbookt/GuestBookServlet.java
Aplicativos Java do GAE usam a API de servlet Java para interagir com o servidor da web Um servlet HTTP uma classe que processa e responde solicitaes da web Sobre Servlets:
http://download.oracle.com/javaee/5/api/javax/servlet/Servlet.html

ARQUIVOS DO PROJETO
src/guestbookt/GuestBookServlet.java
O projeto GuestBook (livro de visitantes) comea com uma classe de servlet simples
Para exibir uma mensagem (Hello World)

ARQUIVOS DO PROJETO
src/guestbookt/GuestBookServlet.java
package guestbook; import java.io.IOException; import javax.servlet.http.*; public class GuestbookServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType(text/plain); resp.getWriter().println(Hello, world); } }

ARQUIVOS DO PROJETO
src/META-INF/jdoconfig.xml
O GAE inclui suporte para duas APIs diferentes para armazenamento de dados: JDO (Java Data Objects Objetos de dados Java) e JPA (Java Persistence API API persistente Java) Usaremos a interface JDO para recuperar e postar mensagens deixadas pelos usurios

ARQUIVOS DO PROJETO
war/META-INF/web.xml
Quando o servidor recebe uma solicitao, ele determina qual classe de servlet deve chamar usando um arquivo de configurao conhecido como o descritor de implementao do aplicativo da web ou web.xml Faz parte do padro de especificao de servlets

ARQUIVOS DO PROJETO
war/META-INF/web.xml
Declara um servlet chamado guestbook Mapeia para o caminho /guestbook Afirma que sempre que o usurio obtm um caminho de URL que ainda no foi mapeado para um servlet e representa um caminho de diretrio dentro do WAR do aplicativo, o servidor deve procurar um arquivo chamado index.html nesse diretrio e carreg-lo

ARQUIVOS DO PROJETO
war/META-INF/appengine-web.xml
Arquivo de configurao adicional para o GAE descobrir como implementar e executar o aplicativo Inclui:
O ID registrado do seu aplicativo
O Eclipse cria isso com um ID vazio para que voc preencha posteriormente

A verso do aplicativo Listas de arquivos estticos (como imagens e CSS) Arquivos de recursos (como JSPs e dados de outros aplicativos)

No faz parte do padro servlet

ARQUIVOS DO PROJETO
war/META-INF/logging.properties
Propriedade que permite gravar os logs de execuo da aplicao
Tudo o que o servlet grava no fluxo de sada padro (System.out) e no fluxo de erro padro (System.err) capturado pelo GAE e gravado nos registros do aplicativo As linhas gravadas no fluxo de sada padro so registradas no nvel "INFO" e as linhas gravadas no fluxo de erro padro so registradas no nvel "WARNING"

ARQUIVOS DO PROJETO
war/index.html
Pgina inicial da aplicao, disponibilizando acesso aos servlets do GuestBook Ao clicar no link GuestBook, o servlet chamado e executado

COMO EXECUTAR O PROJETO


O SDK do GAE inclui um servidor web para testar o aplicativo em um ambiente simulado Iniciar o servidor de desenvolvimento dentro do depurador do Eclipse
Run > Debug As > Web Application

COMO EXECUTAR O PROJETO


O projeto ser construdo A perspectiva ser alterada para Debug O servidor iniciado
Aps ser iniciado, ser exibido diversas mensagens, e ao final:
The server is running at http://localhost:8888/

COMO EXECUTAR O PROJETO


Abrir um browser Acessar o aplicativo em:
http://localhost:8888/guestbook
Note que o nmero da porta pode ser diferente

COMO EXECUTAR O PROJETO


Caso queira mudar a porta ou outras opes, v em configuraes de execuo (Run Configurations)

COMO EXECUTAR O PROJETO


Com o Eclipse, pode-se deixar o servidor executando no debug enquanto se faz alteraes no cdigo fonte, nos JSPs, nos arquivos estticos e no appengine-web.xml
Ao salvar as alteraes o Eclipse compila automaticamente e tenta inserir no servidor web em execuo dinamicamente Na maioria dos casos, basta recarregar a pgina no browser Alteraes no web.xml ou outros arquivos de configurao, deve-se reiniciar o servidor

DEPLOY DO APLICATIVO
Clique no boto Digite o email habilitado para acesso ao GAE, a senha e clique em Deploy
Se no colocou a ID da aplicao em appengineweb.xml, ser solicitado que se faa antes de liberar o Deploy

DEPLOY DO APLICATIVO
Ser exibida uma janela de progresso do envio

DEPLOY DO APLICATIVO
Se tudo transcorreu bem, aps o deployment da aplicao, acessar a aplicao no browser
http://identificao_da_aplicao.appspot.com/

USANDO O SERVIO DE USURIOS


O GAE fornece diversos servios teis com base na infraestrutura do Google, acessveis aos aplicativos por meio das libs fornecidas no SDK Um desses o servio de Usurios
Permite que o aplicativo integre-se s contas de usurio do Google

USANDO O SERVIO DE USURIOS


Alterar o GuestBookServlet.java para utilizar o servio de usurios
import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; public class GuestbookServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser(); if (user != null) { resp.setContentType(text/plain); resp.getWriter().println(Hello, + user.getNickname()); } else { resp.sendRedirect(userService.createLoginURL(req.getRequestURI())); } } }

USANDO O SERVIO DE USURIOS


Recompile o projeto Inicialize o servidor pelo Debug Execute a aplicao no browser

USANDO JSP COMO INTERFACE


Para uma melhor interface com o usurio, utilizaremos pginas JSP
Sobre JSP:
http://www.oracle.com/technetwork/java/javaee/jsp/index.html

No diretrio war, criar um arquivo com nome guestbook.jsp


Adicione o contedo...

<%@ page contentType=text/html;charset=UTF-8 language=java %> <%@ page import=com.google.appengine.api.users.User %> <%@ page import=com.google.appengine.api.users.UserService %> <%@ page import=com.google.appengine.api.users.UserServiceFactory %> <html> <body> <% UserService us = UserServiceFactory.getUserService(); User u = us.getCurrentUser(); if (u != null) { %> <p>Ola, <%= u.getNickname() %>! (Voce pode sair <a href=<%= us.createLogoutURL(request.getRequestURI())%> >aqui</a>.)</p> <% } else { %> <p>Ola! Clique <a href=<%= us.createLoginURL(request.getRequestURI()) %> >aqui</a> para incluir seu nome com saudacoes.</p> <% } %> </body> </html>

USANDO JSP COMO INTERFACE


Caso ocorra o erro:
Your project must be configured to use a JDK in order to use JSPs

Altere as preferncias das JREs instaladas apontando para o diretrio do JSDK instalado
Window > Preferences > Java > Installed JREs

USANDO JSP COMO INTERFACE


Adicione guestbook.jsp tag <welcomefile-list> do arquivo de configurao web.xml Remova da lista o index.html e do diretrio (altere o nome, se preferir)

USANDO JSP COMO INTERFACE


Recompile o projeto Execute o Servidor Acesse e teste a aplicao

FORMULRIO DO LIVRO DE VISITAS


Utilizado para o usurio postar uma saudao O destino do formulrio ser uma URL nova (/sign)
Manipulado por um novo servlet (SignGuestbookServlet) que processar o formulrio e redirecionar o navegador do usurio de volta ao /guestbook.jsp

FORMULRIO DO LIVRO DE VISITAS


Editar o JSP acrescentando...
... <form action=/sign method=post> <div> <textarea name=content rows=3 cols=60> </textarea> </div> <div> <input type=submit value=Postar saudacao/> </div> </form> </body> </html>

FORMULRIO DO LIVRO DE VISITAS


Criar o novo servlet...
public class SignGuestbookServlet extends HttpServlet { private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName()); public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { UserService us = UserServiceFactory.getUserService(); User u = us.getCurrentUser(); String content = req.getParameter(content); if (content == ) { content = (Sem saudao); } if (u != null) { log.info(Saudao postada pelo usurio + u.getNickname() + : + content); } else { log.info(Saudao postada anonimamente: + content); } resp.sendRedirect(/guestbook.jsp); } }

FORMULRIO DO LIVRO DE VISITAS


Declarar o novo servlet e mape-lo para / sign
<servlet> <servlet-name>sign</servlet-name> <servlet-class>guestbook.SignGuestbookServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sign</servlet-name> <url-pattern>/sign</url-pattern> </servlet-mapping>

FORMULRIO DO LIVRO DE VISITAS


O servlet registra as mensagens usando o nvel de registro INFO (usando log.info())
O nvel de registro padro WARNING, que omite as mensagens INFO da sada
Para alterar o nvel de registro de todas as classes no pacote guestbook, editar o arquivo logging.properties

.level = WARNING guestbook.level = INFO

FORMULRIO DO LIVRO DE VISITAS


Recompile o projeto Execute o servidor (se for o caso) Teste (observe o comportamento na pgina e no console do Eclipse)
Enviando uma saudao (logado e no logado) Enviando uma saudao vazia (logado e no logado)

Altere o nvel de registro do arquivo logging.properties e teste novamente

ARMAZENAMENTO DE DADOS
Maneira de lembrar as saudaes postadas pelo usurio e mostr-las para os outros visitantes Como dito antes, utilizaremos JDO
Para saber mais:
http://www.oracle.com/technetwork/java/index-jsp-135919.html

ARMAZENAMENTO DE DADOS
Uso do arquivo de configurao jdoconfig.xml
Para informar ao GAE quando usar o armazenamento de dados como backend para a implementao JDO

Uso de Java Annotation para criar as classes JDO, descrevendo como as instncias devem ser armazenadas e recriadas ao serem recuperadas
Sobre Annotations
http://www.developer.com/java/other/article.php/3556176/AnIntroduction-to-Java-Annotations.htm

ARMAZENAMENTO DE DADOS
Criar uma classe para representar mensagens individuais postadas no livro de visitas (Greenting.java)
Definindo trs propriedades de objetos no armazenamento de dados do GAE para uma saudao: author, content e date Definindo as funes set e get das propriedades, usadas apenas pelo aplicativo
No so necessrias para a JDO, ento no precisam ser anotadas

ARMAZENAMENTO DE DADOS
Criar uma classe para representar mensagens individuais postadas no livro de visitas (Greenting.java)
Definindo um campo chamado ID
Anotado como @Persistent e @PrimaryKey

@PersistenceCapable(identityType = IdentityType.APPLICATION) public class Greeting { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private User author; @Persistent private String content; @Persistent private Date date; public Greeting(User author, String content, Date date) { this.author = author; this.content = content; this.date = date; } public public public public public public public } Long getId() {return id;} User getAuthor() {return author;} String getContent() {return content;} Date getDate() {return date;} void setAuthor(User author) {this.author = author;} void setContent(String content) {this.content = content;} void setDate(Date date) {this.date = date;}

ARMAZENAMENTO DE DADOS
Alterar o SignGuestbookServlet para criar uma instncia Greeting e salvar no armazenamento de dados
Criando um PersistenceManager usando uma PersistenceManagerFactory
Em seguida, passando a instncia para o mtodo makePersistent()
String content = req.getParameter("content"); Date date = new Date(); Greeting greeting = new Greeting(user, content, date); PersistenceManager pm = PMF.get().getPersistenceManager(); try { pm.makePersistent(greeting); } finally { pm.close(); } resp.sendRedirect("/guestbook.jsp");

CONSULTAS COM JDOQL


Agora que os objetos esto salvos, necessrio exibi-los Utilizar o guestbook.jsp para gravar a consulta
Em aplicativos maiores, talvez seja necessrio utilizar outra classe para tratar essa lgica

Acrescentar o seguinte cdigo...

... //Depois do bloco Ola <% PersistenceManager pm = PMF.get().getPersistenceManager(); String query = select from + Greeting.class.getName(); List<Greeting> greetings = (List<Greeting>) pm.newQuery(query).execute(); if (greetings.isEmpty()) { %> <p>O Livro de Visitas nao tem mensagens.</p> <% } else { for (Greeting g : greetings) { if (g.getAuthor() == null) { %> <p>Uma pessoa anonima escreveu:</p> <% } else { %> <p><b><%= g.getAuthor().getNickname() %></b> escreveu:</p> <% } %> <blockquote><%= g.getContent() %></blockquote> <% } } pm.close(); %> //Antes do bloco form ...

CONSULTAS COM JDOQL

CONSULTAS COM JDOQL


Recompile o projeto Execute o Servidor Acesse e teste a aplicao

ARMAZENAMENTO DE DADOS
Para simular o armazenamento de dados do GAE, o servidor usa um arquivo chamado local_db.bin
Criado no diretrio WAR/WEB-INF/appenginegenerated do aplicativo, Ele no enviado com o seu aplicativo no deploy Para limpar o contedo do armazenamento de dados, encerre o servidor e, em seguida, exclua esse arquivo

DEPLOY DO APLICATIVO
Fazer deploy e acessar/testar
http://identificao_da_aplicao.appspot.com/

DVIDAS???

Вам также может понравиться