• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Google App Engine overview (GAE/J)

Google App Engine overview (GAE/J)



Googe App Engine Overview, Getting Started using Java

Googe App Engine Overview, Getting Started using Java



Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds


Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Google App Engine overview (GAE/J) Google App Engine overview (GAE/J) Presentation Transcript

    • GAE Overview Moch Nasrullah R Samsung R&D Institute Indonesia (SRIN) November 2013
    • As presented at:
    • Agenda • • • • Cloud Computing GAE Overview GAE/J Overview GAE/J Getting Started
    • Cloud Computing Cloud Services Cloud Clients (Web browser, Desktop App, Mobile App, embeded, ...)
    • http://upload.wikimedia.org/wikipedia/commons/b/b5/Cloud_computing.svg
    • Cloud classification Software as a Service (SaaS) Application: -Web Apps -Desktop Apps -Mobile Apps (Google Apps, Google Translate, Office 360, NetSuite, IBM Lotus Live, GitHub) Platform as a Service (PaaS) Development Platform + Runtime Tools + Environment (Google App Engine, Heroku, Windows Azure, force.com, Rollbase) Infrastructure as a Service (IaaS) CPU Networks Data Storage (AWS, VM Ware, Joyent, Rackspace)
    • Google App Engine • run your web applications on Google's infrastructure – Google handles the maintenance infrasturcture: hardware failures, security patches, OS upgrades • Free ... within quota
    • GAE Limits & Quota • • • • 10 Apps per user 5 Mio pageview free per month 6.5 hours of CPU and 1 Gb in & out traffic https://developers.google.com/appengine/do cs/quotas
    • Why GAE • Easy to build – Language support (Java, Python, GO, PHP) – Automatic scaling & load balancing • Easy to maintain – Web based admin dashboard • Easy to scale (traffic & data storage) – GAE Datastore – Google Cloud SQL – Google Cloud Storage
    • GAE/J Overview developers.google.com/appengine/docs/java/
    • Let’s give it a try • Follow the getting started in link below: • https://developers.google.com/appengine/docs/java/gettingstarted/introduction
    • Run Eclipse after Installing JDK
    • Installing Plugin https://developers.google.com/eclipse/docs/install-eclipse-4.3
    • Install from zip
    • Creating Project
    • Configure SDK Directory where Appengine extracted
    • The Servlet Class 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"); } }
    • Project Structure Java source code other configuration JARs for libraries app configuration JSPs, images, data files
    • Running Application
    • Preparation for deployment • Register to Google App Engine • Create an Application • Deploy via Eclipse
    • Register to App Engine • Register at: https://appengine.google.com/ • Create an Application
    • Create an Application • For now, just fill in ‘Application Identifier’ and ‘Application Title’, than accept ‘Term of Service’
    • Problem when Deploying • Adding VM config o Open eclipse.ini in the eclipse folder o Add below lines before -vmargs -vm C:Javajdk1.7.0_40binjavaw.exe
    • Adding VM config • • • • Open eclipse.ini in the eclipse folder Add below lines before -vmargs -vm C:Javajdk1.7.0_40binjavaw.exe
    • Sign in to Deploy
    • Setting App ID & Version Input Application Identifier registered at appspot.com
    • Refactor Example to MVC • Using JSP as View template – JSP files will resides inside ‘WEB-INF/jsp’ folder – So users can not access our template directly • Using Servlet as Controller – Put model in request attribute – Forward to proper View – Change SignGuestbookServlet.java so it redirect to servlet (not JSP): resp.sendRedirect("/guestbook?guestbookName=" + guestbookName);
    • GuestbookServlet.java – doGet() UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser(); String signUrl = ""; String userNickname = ""; if (user!=null) { signUrl = userService.createLogoutURL(req.getRequestURI()); userNickname = user.getNickname(); } else { signUrl = userService.createLoginURL(req.getRequestURI()); } Login or Logout URL String guestbookName = req.getParameter("guestbookName"); if (guestbookName == null) { guestbookName = "default"; } Retrieve data from DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); datastore Key guestbookKey = KeyFactory.createKey("Guestbook", guestbookName); Query query = new Query("Greeting", guestbookKey).addSort("date", Query.SortDirection.DESCENDING); List<Entity> greetings = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(5)); // put data tobe displayed in JSP req.setAttribute("signUrl", signUrl); req.setAttribute("userNickname", userNickname); req.setAttribute("guestbookName", guestbookName); req.setAttribute("greetingList", greetings); Put data in Request Attribute String templateFile = "/WEB-INF/jsp/guestbook.jsp"; RequestDispatcher rd = getServletContext().getRequestDispatcher(templateFile); rd.forward(req, resp); Forward to View
    • /WEB-INF/jsp/guestbook.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Taglib <html> <head> <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" /> </head> <body> <c:if test="${userNickname!=''}"> <p>Hello, ${fn:escapeXml(userNickname)}! (You can <a href="${signUrl}">sign out</a>.)</p> Say proper hello to </c:if> sign in user <c:if test="${userNickname==''}"> <p>Hello! <a href="${signUrl}">Sign in</a> to include your name with greetings you post.</p> </c:if> <c:if test="${empty greetingList}"> <p>Guestbook '${fn:escapeXml(guestbookName)}' has no messages.</p> </c:if> <c:if test="${not empty greetingList}"> <p>Messages in Guestbook '${fn:escapeXml(guestbookName)}'.</p> </c:if>
    • /WEB-INF/jsp/guestbook.jsp Iterate Greeting List <c:forEach items="${greetingList}" var="greeting"> Passed from Servlet <c:if test="${not empty greeting.properties['user']}"> <p><b>${fn:escapeXml(greeting.properties['user'].nickname)}</b> wrote:</p> </c:if> <c:if test="${empty greeting.properties['user']}"> <p>An anonymous person wrote:</p> </c:if> <blockquote>${fn:escapeXml(greeting.properties['content'])}</blockquote> </c:forEach> Form same as previous <form action="/sign" method="post"> <div><textarea name="content" rows="3" cols="60"></textarea></div> <div><input type="submit" value="Post Greeting" /></div> <input type="hidden" name="guestbookName" value="${fn:escapeXml(guestbookName)}"/> </form> </body> </html>
    • Maybe Next Time • Using Guice in GAE/J • Using GAE Python
    • Reference • http://www.slideshare.net/dimityrdanailov/google-app-enginevarna-lab-19062013 • http://www.slideshare.net/LarsVogel/google-app-engine-for-java7698966 • http://www.google.com/events/io/2009/sessions.html#appengine • http://www.google.com/events/io/2010/sessions.html#App%20Eng ine • http://www.google.com/events/io/2011/sessions.html#appengine-track • https://developers.google.com/events/io/2012/sessions#cloudplatform • https://developers.google.com/events/io/2013/sessions#t-googlecloud-platform • https://developers.google.com/appengine/
    • Thanks • SRIN Members
    • About • https://sites.google.com/site/meetnasrul/