Java e Cloud Computing
-
Upload
mario-pereira -
Category
Technology
-
view
1.246 -
download
1
description
Transcript of Java e Cloud Computing
Java e Cloud Computing
Mario Jorge Pereira
Java e Cloud Computing
Mario Jorge Pereira
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
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 preview2013 - 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
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
Estr
utur
a de
arq
uivo
s
http://localho
st:8888/
Context menu > New > Other
WEB-INF\index.jspJSP File
deploy to app engine...
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
Desm
arqu
e Ge
nera
te p
roje
ct
sam
ple
code
Context menu > New > Other
WEB-INF\index.jspJSP 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;
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("[email protected]")); 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:/
/local
host:
8888
/_ah/a
dmin/
inbou
ndmail
✓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 PereiraComo me encontrar?http://www.mariojp.com.brtwitter.com/@[email protected]@gmail.com