Java e Cloud Computing

1,448 views
1,372 views

Published on

Java e Cloud Computing
A computação nas nuvens é uma tendência do mercado, aprenda como desenvolver sobre ela utilizando plataforma java. Esta oficina traz uma visão geral sobre conceitos e arquitetura da cloud computing. Diferenças entre plataformas como Amazon Web Services (AWS), Google Application Engine (GAE). Durante a oficina estaremos desenvolvendo uma aplicação java e disponibilizando a mesma na GAE. Alem disso vamos explorar alguns recursos específicos do serviço do Google, como o repositório de dados NoSQL.

Programação do mini-curso

08:00
- Introdução a Computação em nuvem
- Fundamentos em computação em nuvem
- Níveis de serviços em nuvem
- Google App Engine
- Ambiente de execução da App Engine
- Prática 1

9:30 INTERVALO

10:00
- Ambiente de Desenvolvimento da App Engine
- Ambiente de Produção da App Engine
- Colocando uma aplicação em produção
- Prática 2

ALMOÇO

13:30
- NoSQL
- Big Table
- Acesso a dados
- Prática 3

15:30 INTERVALO

16:00
- API e Serviços da AppEngine
- Pratica 4
- Outros Recursos da App Engine e Dicas

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,448
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Java e Cloud Computing

  1. 1. Java e Cloud Computing Mario Jorge Pereira
  2. 2. Java e Cloud Computing Mario Jorge Pereira
  3. 3. 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
  4. 4. Uso de recursos computacionais (software e hardware) que são oferecidos como serviço através de uma rede, tipicamente a internet. Cloud Computing
  5. 5. 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.
  6. 6. 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]
  7. 7. SaaS
  8. 8. IaaS
  9. 9. PaaS
  10. 10. E O Goole App Engine?
  11. 11. 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;
  12. 12. Hospedagem livre de preocupações Suporte a Python, Java, PHP e Go Alta disponibilidade do serviço NoSQL e SQL
  13. 13. 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
  14. 14. 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;
  15. 15. Serviços GAE Full Text Search Memcache Users Mail Task Queue Image URL Fetch Search API XMPP Datastore
  16. 16. + + Ferramentas
  17. 17. http://appengine.google.com Crie sua conta
  18. 18. File menu > New > Web Application Project Desmarque Use Google Web Toolkit
  19. 19. Estruturadearquivos
  20. 20. http://localhost:8888/
  21. 21. Context menu > New > Other WEB-INFindex.jsp JSP File
  22. 22. deploy to app engine...
  23. 23. http://appengine.google.com
  24. 24. Context menu > Google > Deploy to AppEngine
  25. 25. App Engine project settings...
  26. 26. ARMAZENAMENTO DE DADOS
  27. 27. ✓Armazenamento de arquivos; ✓Free ate 5GB ✓$0,13/GB/mês Blobstore
  28. 28. ✓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
  29. 29. ✓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
  30. 30. File menu > New > Web Application Project Desmarque Use Google Web Toolkit Desmarque Generateproject samplecode
  31. 31. Context menu > New > Other WEB-INFindex.jsp JSP File
  32. 32. Mockup Blog
  33. 33. <!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
  34. 34. <!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
  35. 35. <!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
  36. 36. http://localhost:8888/_ah/admin/
  37. 37. ✓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
  38. 38. Mockup - Newsletter
  39. 39. <!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
  40. 40. 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
  41. 41. ... <inbound-services> <service>mail</service> </inbound-services> ... Mail - appengine-web.xml
  42. 42. <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
  43. 43. 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
  44. 44. Mail - Test http://localhost:8888/_ah/adm in/inboundm ail
  45. 45. ✓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
  46. 46. <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
  47. 47. ✓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
  48. 48. ✓Cache em memória compatível com o protocolo memcached; ✓Precisa seguir algumas restrições; Memcache
  49. 49. 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/.
  50. 50. Java e Cloud Computing Mario Jorge Pereira Como me encontrar? http://www.mariojp.com.br twitter.com/@mariojp mariojp@ufba.br mariojp@gmail.com

×