SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Java e
Cloud Computing
Mario Jorge Pereira
Java e
Cloud Computing
Mario Jorge Pereira
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
Uso de recursos computacionais (software e hardware)
que são oferecidos como serviço através de uma rede,
tipicamente a internet.
Cloud Computing
Caracteristicas
• Provisionamento dinâmico de recursos sob demanda, com
mínimo de esforço;
• Escalabilidade;
• Uso de "utilility computing", onde a cobrança é baseada
no uso do recurso ao invés de uma taxa fixa;
• Visão única do sistema;
• Distribuição geográfica dos recursos de forma
transparente ao usuário.
era uma vez..
1969 - Multitasking;
1970 - Create Internet;
1991 - Releases Internet for General Use;
1993 .. 1995 - eBay & Amazon founded;
1999 - SaaS salesforce.com launched;
2000 - Economy loses speed;
2006 - Amazon Web Service (IaaS);
2008 - Google App Engine (PaaS) [Go Java Python]
2011 - Google App Engine deixou de ser preview
2013 - Google Cloud Plataform (IaaS/PaaS) [PHP]
SaaS
IaaS
PaaS
E O Goole App Engine?
http://cloud.google.com/appengine
Goole App Engine
✓ Execute seus aplicativos da web na infraestrutura do Google;
✓ Suporte à aplicações em Java, Python, GO! e PHP*;
✓ Todos os recursos dentro da mesma plataforma;
✓ Quota gratuita renovada diariamente;
Hospedagem livre de preocupações
Suporte a Python, Java, PHP e Go
Alta disponibilidade do serviço
NoSQL e SQL
BackendSem limite de tempo de processamento
Maior quantidade de RAM
Gerenciamente manual/programático
Instancias
Frontend
Limite de tempo de request RAM limitada
Gerenciado pelo AppEngine
Ambiente Java
Servlet 2.5, Java 7 e suporte a multithread
Datastore baixo nível assíncrono, JPA e JDO
Deploy utilizando GAE Console, toolkit do Eclipse,
scripts ou Maven;
Configurações para escalabilidade via GAE Console
e XML;
Não é possível realizar chamadas a recursos
externos com tempo de resposta maior que 60s;
Serviços GAE
Full Text
Search
Memcache
Users
Mail
Task Queue
Image
URL Fetch
Search API
XMPP
Datastore
+ +
Ferramentas
http://appengine.google.com
Crie sua conta
File menu > New > Web Application Project
Desmarque
Use Google Web
Toolkit
Estruturadearquivos
http://localhost:8888/
Context menu > New > Other
WEB-INFindex.jsp
JSP File
deploy to app engine...
http://appengine.google.com
Context menu > Google > Deploy to AppEngine
App Engine project settings...
ARMAZENAMENTO DE DADOS
✓Armazenamento de arquivos;
✓Free ate 5GB
✓$0,13/GB/mês
Blobstore
✓Instâncias de MySQL na nuvem;
✓Utilização com JDBC;
✓Maximo Request e Response Size 16MB
✓Inicia em $1.46/dia ou $0.10/hora;
Cloud SQL
✓NOSql (BigTable) com as entidades sendo
representadas por um tipo, um identificador e seu
conteúdo;
✓Implementação utilizando JDO, JPA ou uma
biblioteca de serviços específicos;
✓Consultas baseadas em índices pré-”buildados”;
✓Free 50k de operações;
✓$0.09/100k de operações de escrita e $0.06/100k
de operações de leitura
Datastore
File menu > New > Web Application Project
Desmarque
Use Google Web
Toolkit
Desmarque
Generateproject
samplecode
Context menu > New > Other
WEB-INFindex.jsp
JSP File
Mockup Blog
<!DOCTYPE html>
<html>
<head> <title> Blog </title> </head>
<body>
<h1> Blog <h1>
<form name="form1" action="/servlet">
Titulo: <br>
	 <input name="titulo" type="text"> <br>
	 Autor: <br>
	 <input name="autor" type="text"> <br>
Texto: <br>
	 <textarea name="texto"> </textarea> <br>
	 <input type="submit" value="Salvar">
</form>
</body>
</html>
Formulário - index.jsp
<!DOCTYPE html >
<%@page import="com.google.appengine.api.datastore.FetchOptions"%>
<%@page import="com.google.appengine.api.datastore.Query"%>
<%@page import="com.google.appengine.api.datastore.Entity"%>
<%@page import="java.util.Date"%>
<%@page import="com.google.appengine.api.datastore.DatastoreServiceFactory"%>
<%@page import="com.google.appengine.api.datastore.DatastoreService"%>
<html>
<head>...</head>
<body>
<%
String titulo = request.getParameter("titulo");
String autor = request.getParameter("autor");
String texto = request.getParameter("texto");
if (titulo != null && autor != null && texto != null) {
Date data = new Date();
	 Entity mensagem = new Entity("Mensagem");
	 mensagem.setProperty("titulo", titulo);
	 mensagem.setProperty("autor", autor);
	 mensagem.setProperty("texto", texto);
	 mensagem.setProperty("data", data);
	 DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
	 datastore.put(mensagem);
response.sendRedirect("index.jsp");
}%>
... </body>
</html>
Salvar - index.jsp
<!DOCTYPE html > ...
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.List"%>
<html>
<head>...</head>
<body>...
<%
String titulo = request.getParameter("titulo");
String autor = request.getParameter("autor");
String texto = request.getParameter("texto");
if (titulo != null && autor != null && texto != null) { ...
} else {
	 DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
	 Query query = new Query("Mensagem").addSort("data",Query.SortDirection.DESCENDING);
	 List<Entity> msgs = datastore.prepare(query).asList(FetchOptions.Builder.withDefaults());
	 for (Entity mensagem : msgs) {%>
<%=mensagem.getProperty("titulo")%><br>
	 <%=mensagem.getProperty("texto")%><br>
	 <%=mensagem.getProperty("autor")%> -
<%=new SimpleDateFormat(“dd/MM/yyyy”).format((Date) mensagem.getProperty("data"))%><br>
	 <% }
	 }%>
...</body>
</html>
Listar - index.jsp
http://localhost:8888/_ah/admin/
✓Serviço para o envio e recebimento de e-
mails através do GAE;
✓Pode ser implementado utilizando JavaMail
ou uma biblioteca específica;
✓Tamanho maximo 100MB e 10 MB/minute
✓ $0.0001 por destinatário após sua
quota diária de 100 destinatários;
Mail
Mockup - Newsletter
<!DOCTYPE HTML>
<html>
<head> <title>Newsletter</title> </head>
<body>
	 <h1>Newsletter</h1>
	 <form method="post" action="/sucesu3">
	 	 Nome: <input type="text" name="nome"> <br>
	 	 Email: <input type="text" name="email">
<br>
	 <input type="submit" value="Enviar"><br>
	 </form>
</body>
</html>
Newsletter - index.jsp
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
	 Properties props = new Properties();
	 Session session = Session.getDefaultInstance(props, null);
	 try {
	 	 String nome = req.getParameter("nome");
	 	 String email = req.getParameter("email");
	 	 Message msg = new MimeMessage(session);
	 msg.setFrom(new InternetAddress("mariojp@gmail.com"));
	 msg.addRecipient(Message.RecipientType.TO, new
InternetAddress(email, nome) );
	 	 msg.setSubject("Sucesu 2013 ");
	 	 msg.setText("Bem Vindo a Sucesu 2013");
	 Transport.send(msg);
	 	 } catch (AddressException e) {
	 	 	 e.printStackTrace();
	 	 } catch (MessagingException e) {
	 	 	 e.printStackTrace();
	 	 }
	 	 resp.setContentType("text/plain");
	 	 resp.getWriter().println("Email enviado com Sucesso");
	 }
Newsletter - MailServlet
...
<inbound-services>
		<service>mail</service>
</inbound-services>
...
Mail - appengine-web.xml
<servlet>
<servlet-name>mailhandler</servlet-name>
	 <servlet-class>br.com.sucesu.MailHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
	 <servlet-name>mailhandler</servlet-name>
	 <url-pattern>/_ah/mail/*</url-pattern>
</servlet-mapping>
<security-constraint>
	 <web-resource-collection>
	 	 <web-resource-name>mail</web-resource-name>
	 	 <url-pattern>/_ah/mail/*</url-pattern>
	 </web-resource-collection>
	 <auth-constraint>
	 	 <role-name>admin</role-name>
	 </auth-constraint>
</security-constraint>
Mail - web.xml
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
MimeMessage msg = new MimeMessage(session, req.getInputStream());
	 	 System.out.println(message.getSubject());
	
} catch (MessagingException e) {
	 	 	 e.printStackTrace();
}
}
Mail - MailHandlerServlet.java
Mail - Test
http://localhost:8888/_ah/adm
in/inboundm
ail
✓Autenticar usuários através de Contas do
Google, contas do Google Apps ou OpenID.
✓Redirecioná-lo para a página de login;
✓Detectar se o usuário atual é administrador;
User
<html>
<head><title>User</title></head>
<body>
<%
UserService userService = UserServiceFactory.getUserService();
String thisURL = request.getRequestURI();
if (request.getUserPrincipal() != null) {%>
<%=("Ola, "+ request.getUserPrincipal().getName()
+"!<a href=""+userService.createLogoutURL(thisURL)+"">Sair</a>")%>
<%} else { %>
<%=("<a href=""+userService.createLoginURL(thisURL)+ "">Entrar</a>")
%>
<%}%>
</body>
</html>
User - index.jsp
✓execução de tarefas em background;
✓Possibilidade de se configurar a taxa de
processamento para uma determinada fila;
✓É um serviço gratuito mas que precisa seguir
algumas restrições definidas pelo GAE;
Task Queue
✓Cache em memória compatível com o
protocolo memcached;
✓Precisa seguir algumas restrições;
Memcache
Esta obra está licenciada sob a licença Creative Commons
Atribuição-CompartilhaIgual 3.0 Não Adaptada. Para ver uma cópia
desta licença, visite http://creativecommons.org/licenses/by-sa/3.0/.
Java e
Cloud Computing
Mario Jorge Pereira
Como me encontrar?
http://www.mariojp.com.br
twitter.com/@mariojp
mariojp@ufba.br
mariojp@gmail.com

Mais conteúdo relacionado

Semelhante a Java e Cloud Computing

Semelhante a Java e Cloud Computing (20)

Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Java Nuvem Appengine
Java Nuvem AppengineJava Nuvem Appengine
Java Nuvem Appengine
 
Prototype Framework Javascript
Prototype Framework JavascriptPrototype Framework Javascript
Prototype Framework Javascript
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
Workshop05
Workshop05Workshop05
Workshop05
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Python 08
Python 08Python 08
Python 08
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
Palestra
PalestraPalestra
Palestra
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 

Mais de Mario Jorge Pereira

Mais de Mario Jorge Pereira (20)

Educacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial GenerativaEducacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial Generativa
 
Labs Jogos Java
Labs Jogos JavaLabs Jogos Java
Labs Jogos Java
 
Java www
Java wwwJava www
Java www
 
Html
HtmlHtml
Html
 
HTTP
HTTPHTTP
HTTP
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015
 
Mini curso Android
Mini curso AndroidMini curso Android
Mini curso Android
 
Java Server Faces
Java Server FacesJava Server Faces
Java Server Faces
 
Minicurso Android
Minicurso AndroidMinicurso Android
Minicurso Android
 
Android, por onde começar?
Android, por onde começar?Android, por onde começar?
Android, por onde começar?
 
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
 
Android e Cloud Computing
Android e Cloud ComputingAndroid e Cloud Computing
Android e Cloud Computing
 
Threads
ThreadsThreads
Threads
 
RMI (Remote Method Invocation)
RMI (Remote Method Invocation) RMI (Remote Method Invocation)
RMI (Remote Method Invocation)
 
Socket
SocketSocket
Socket
 
GUI - Eventos
GUI - EventosGUI - Eventos
GUI - Eventos
 
GUI Aplicações Gráficas
GUI Aplicações Gráficas GUI Aplicações Gráficas
GUI Aplicações Gráficas
 

Último

Último (8)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Java e Cloud Computing

  • 1.
  • 5. Uso de recursos computacionais (software e hardware) que são oferecidos como serviço através de uma rede, tipicamente a internet. Cloud Computing
  • 6. Caracteristicas • Provisionamento dinâmico de recursos sob demanda, com mínimo de esforço; • Escalabilidade; • Uso de "utilility computing", onde a cobrança é baseada no uso do recurso ao invés de uma taxa fixa; • Visão única do sistema; • Distribuição geográfica dos recursos de forma transparente ao usuário.
  • 7. era uma vez.. 1969 - Multitasking; 1970 - Create Internet; 1991 - Releases Internet for General Use; 1993 .. 1995 - eBay & Amazon founded; 1999 - SaaS salesforce.com launched; 2000 - Economy loses speed; 2006 - Amazon Web Service (IaaS); 2008 - Google App Engine (PaaS) [Go Java Python] 2011 - Google App Engine deixou de ser preview 2013 - Google Cloud Plataform (IaaS/PaaS) [PHP]
  • 8.
  • 9.
  • 10. SaaS
  • 11. IaaS
  • 12. PaaS
  • 13.
  • 14. E O Goole App Engine?
  • 15.
  • 16. http://cloud.google.com/appengine Goole App Engine ✓ Execute seus aplicativos da web na infraestrutura do Google; ✓ Suporte à aplicações em Java, Python, GO! e PHP*; ✓ Todos os recursos dentro da mesma plataforma; ✓ Quota gratuita renovada diariamente;
  • 17. Hospedagem livre de preocupações Suporte a Python, Java, PHP e Go Alta disponibilidade do serviço NoSQL e SQL
  • 18.
  • 19. BackendSem limite de tempo de processamento Maior quantidade de RAM Gerenciamente manual/programático Instancias Frontend Limite de tempo de request RAM limitada Gerenciado pelo AppEngine
  • 20. Ambiente Java Servlet 2.5, Java 7 e suporte a multithread Datastore baixo nível assíncrono, JPA e JDO Deploy utilizando GAE Console, toolkit do Eclipse, scripts ou Maven; Configurações para escalabilidade via GAE Console e XML; Não é possível realizar chamadas a recursos externos com tempo de resposta maior que 60s;
  • 21. Serviços GAE Full Text Search Memcache Users Mail Task Queue Image URL Fetch Search API XMPP Datastore
  • 24.
  • 25. File menu > New > Web Application Project Desmarque Use Google Web Toolkit
  • 28. Context menu > New > Other WEB-INFindex.jsp JSP File
  • 29.
  • 30. deploy to app engine...
  • 32.
  • 33.
  • 34. Context menu > Google > Deploy to AppEngine
  • 35. App Engine project settings...
  • 37. ✓Armazenamento de arquivos; ✓Free ate 5GB ✓$0,13/GB/mês Blobstore
  • 38. ✓Instâncias de MySQL na nuvem; ✓Utilização com JDBC; ✓Maximo Request e Response Size 16MB ✓Inicia em $1.46/dia ou $0.10/hora; Cloud SQL
  • 39. ✓NOSql (BigTable) com as entidades sendo representadas por um tipo, um identificador e seu conteúdo; ✓Implementação utilizando JDO, JPA ou uma biblioteca de serviços específicos; ✓Consultas baseadas em índices pré-”buildados”; ✓Free 50k de operações; ✓$0.09/100k de operações de escrita e $0.06/100k de operações de leitura Datastore
  • 40.
  • 41. File menu > New > Web Application Project Desmarque Use Google Web Toolkit Desmarque Generateproject samplecode
  • 42. Context menu > New > Other WEB-INFindex.jsp JSP File
  • 44. <!DOCTYPE html> <html> <head> <title> Blog </title> </head> <body> <h1> Blog <h1> <form name="form1" action="/servlet"> Titulo: <br> <input name="titulo" type="text"> <br> Autor: <br> <input name="autor" type="text"> <br> Texto: <br> <textarea name="texto"> </textarea> <br> <input type="submit" value="Salvar"> </form> </body> </html> Formulário - index.jsp
  • 45. <!DOCTYPE html > <%@page import="com.google.appengine.api.datastore.FetchOptions"%> <%@page import="com.google.appengine.api.datastore.Query"%> <%@page import="com.google.appengine.api.datastore.Entity"%> <%@page import="java.util.Date"%> <%@page import="com.google.appengine.api.datastore.DatastoreServiceFactory"%> <%@page import="com.google.appengine.api.datastore.DatastoreService"%> <html> <head>...</head> <body> <% String titulo = request.getParameter("titulo"); String autor = request.getParameter("autor"); String texto = request.getParameter("texto"); if (titulo != null && autor != null && texto != null) { Date data = new Date(); Entity mensagem = new Entity("Mensagem"); mensagem.setProperty("titulo", titulo); mensagem.setProperty("autor", autor); mensagem.setProperty("texto", texto); mensagem.setProperty("data", data); DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); datastore.put(mensagem); response.sendRedirect("index.jsp"); }%> ... </body> </html> Salvar - index.jsp
  • 46. <!DOCTYPE html > ... <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.List"%> <html> <head>...</head> <body>... <% String titulo = request.getParameter("titulo"); String autor = request.getParameter("autor"); String texto = request.getParameter("texto"); if (titulo != null && autor != null && texto != null) { ... } else { DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Query query = new Query("Mensagem").addSort("data",Query.SortDirection.DESCENDING); List<Entity> msgs = datastore.prepare(query).asList(FetchOptions.Builder.withDefaults()); for (Entity mensagem : msgs) {%> <%=mensagem.getProperty("titulo")%><br> <%=mensagem.getProperty("texto")%><br> <%=mensagem.getProperty("autor")%> - <%=new SimpleDateFormat(“dd/MM/yyyy”).format((Date) mensagem.getProperty("data"))%><br> <% } }%> ...</body> </html> Listar - index.jsp
  • 48. ✓Serviço para o envio e recebimento de e- mails através do GAE; ✓Pode ser implementado utilizando JavaMail ou uma biblioteca específica; ✓Tamanho maximo 100MB e 10 MB/minute ✓ $0.0001 por destinatário após sua quota diária de 100 destinatários; Mail
  • 49.
  • 51. <!DOCTYPE HTML> <html> <head> <title>Newsletter</title> </head> <body> <h1>Newsletter</h1> <form method="post" action="/sucesu3"> Nome: <input type="text" name="nome"> <br> Email: <input type="text" name="email"> <br> <input type="submit" value="Enviar"><br> </form> </body> </html> Newsletter - index.jsp
  • 52. public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); try { String nome = req.getParameter("nome"); String email = req.getParameter("email"); Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress("mariojp@gmail.com")); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(email, nome) ); msg.setSubject("Sucesu 2013 "); msg.setText("Bem Vindo a Sucesu 2013"); Transport.send(msg); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } resp.setContentType("text/plain"); resp.getWriter().println("Email enviado com Sucesso"); } Newsletter - MailServlet
  • 54. <servlet> <servlet-name>mailhandler</servlet-name> <servlet-class>br.com.sucesu.MailHandlerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>mailhandler</servlet-name> <url-pattern>/_ah/mail/*</url-pattern> </servlet-mapping> <security-constraint> <web-resource-collection> <web-resource-name>mail</web-resource-name> <url-pattern>/_ah/mail/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> Mail - web.xml
  • 55. public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); try { MimeMessage msg = new MimeMessage(session, req.getInputStream()); System.out.println(message.getSubject()); } catch (MessagingException e) { e.printStackTrace(); } } Mail - MailHandlerServlet.java
  • 57. ✓Autenticar usuários através de Contas do Google, contas do Google Apps ou OpenID. ✓Redirecioná-lo para a página de login; ✓Detectar se o usuário atual é administrador; User
  • 58.
  • 59. <html> <head><title>User</title></head> <body> <% UserService userService = UserServiceFactory.getUserService(); String thisURL = request.getRequestURI(); if (request.getUserPrincipal() != null) {%> <%=("Ola, "+ request.getUserPrincipal().getName() +"!<a href=""+userService.createLogoutURL(thisURL)+"">Sair</a>")%> <%} else { %> <%=("<a href=""+userService.createLoginURL(thisURL)+ "">Entrar</a>") %> <%}%> </body> </html> User - index.jsp
  • 60. ✓execução de tarefas em background; ✓Possibilidade de se configurar a taxa de processamento para uma determinada fila; ✓É um serviço gratuito mas que precisa seguir algumas restrições definidas pelo GAE; Task Queue
  • 61. ✓Cache em memória compatível com o protocolo memcached; ✓Precisa seguir algumas restrições; Memcache
  • 62.
  • 63. Esta obra está licenciada sob a licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-sa/3.0/.
  • 64. Java e Cloud Computing Mario Jorge Pereira Como me encontrar? http://www.mariojp.com.br twitter.com/@mariojp mariojp@ufba.br mariojp@gmail.com