6. 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)
7. 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
8. 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
9. 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
21. Register to App Engine
• Register at: https://appengine.google.com/
• Create an Application
22. Create an Application
• For now, just fill in ‘Application Identifier’ and ‘Application
Title’, than accept ‘Term of Service’
23. 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
24. Adding VM config
•
•
•
•
Open eclipse.ini in the eclipse folder
Add below lines before -vmargs
-vm
C:Javajdk1.7.0_40binjavaw.exe
26. Setting App ID & Version
Input Application Identifier
registered at appspot.com
27. 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);
28. 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
29. /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>
30. /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>