SlideShare a Scribd company logo
DEPLOYING APPLICATIONS 
TO CLOUD
ABOUT ME 
�� Alexander Zamkovyi 
Java Developer @ Intro Pro 
Linked[in]: ua.linkedin.com/in/invaa/ 
e-mail: alex@zamkovyi.name
GOOGLE APP ENGINE 
 Part of Google Cloud Platform (trusted by 4 million applications) 
 Platform-as-a-Service (Java, Python, PHP, Go) 
 264k websites (258k is active), according to builtwith.com 
 Coca-cola, Snapchat, Ubisoft, Rovio, BestBuy, Sony Music, ...
REASONS TO LEARN GOOGLE APP ENGINE 
 Highly scalable 
 Integration 
 Cost-effective 
 Well documented 
 It’s Google
CLOUD, CLOUD, CLOUD!
PLAN 
 Google Cloud Endpoints 
 Google App Engine Development Process 
 Deployment and Troubleshooting 
 Persistence 
 Limitations
GOOGLE CLOUD ENDPOINTS
GOOGLE CLOUD ENDPOINTS
THE SANDBOX 
 Java 7 JVM in a safe "sandboxed" environment 
 Servlet 2.5 standard 
 Standard WAR directory structure 
 Secured "sandbox" environment isolates application for service and security 
 The JVM can execute any Java bytecode that operates within the sandbox 
restrictions
DEMO (CLOUD ENDPOINTS) 
Web frontend 
 Deployed: https://cloudendpointstic.appspot.com 
 Sources: https://github.com/GoogleCloudPlatform
DEMO (CLOUD ENDPOINTS) 
Android client 
 Deployed: 
https://play.google.com/store/apps/details?id=com.devrel.sa 
mples.ttt 
 Sources: https://github.com/GoogleCloudPlatform
Deploying applications to Cloud with Google App Engine
DEVELOPMENT PROCESS
REQUIREMENTS AND PREREQUISITES 
 JDK 1.7 (recommended) 
 Apache Maven 3.1+ 
 MySQL 5+ (for local dev server) 
 Google account 
 Application ID 
 IDE
GAE JAVA PROJECT STRUCTURE 
 You'll add your own application Java classes 
to src/main/java/... 
 You'll configure your application using the 
file src/main/webapp/WEB-INF/appengine.web.xml 
 You'll configure your application deployment using 
the file src/main/webapp/WEB-INF/web.xml
THE JAVA DEVELOPMENT SERVER 
 jetty-6.1.x (built-in) 
 The development web server simulates the App Engine Java runtime 
environment and all of its services, including the datastore
ADMIN CONSOLE 
 http://localhost:port/_ah/admin
DEPLOYMENT AND 
TROUBLESHOOTING
UPLOADING APP 
 mvn appengine:update
DEVELOPER'S CONSOLE 
 https://console.developers.google.com/
APPCFG 
 appcfg.cmd 
[options] 
<action> 
<war-location>
PERSISTENCE
DATASTORE AND RDBMS
DEMO (CLOUD DATASTORE AND CLOUD SQL) 
Calendar app 
Features: 
 JPA (Cloud SQL vs Cloud Datastores) 
 Spring MVC 
 jQuery 
 Deployed: http://cloudcalendarservice.appspot.com/ 
 Sources: https://github.com/invaa/CloudCalendar
LIMITATIONS
AN APP ENGINE APPLICATION CANNOT 
 write to the filesystem. Applications must use the App Engine datastore for 
storing persistent data. Reading from the filesystem is allowed, and all 
application files uploaded with the application are available 
 respond slowly. A web request to an application must be handled within a few 
seconds. Processes that take a very long time to respond are terminated to 
avoid overloading the web server 
 make other kinds of system calls
WEB.XML FEATURES NOT SUPPORTED 
 App Engine supports the <load-on-startup> element for servlet declarations. 
However, the load actually occurs during the first request handled by the web 
server instance, not prior to it 
 Some deployment descriptor elements can take a human readable display 
name, description and icon for use in IDEs. App Engine doesn't use these, 
and ignores them 
 App Engine doesn't support JNDI environment variables (<env-entry>) 
 App Engine doesn't support EJB resources (<resource-ref>) 
 Notification of the destruction of servlets, servlet context, or filters is not 
supported 
 The <distributable> element is ignored 
 Servlet scheduling with <run-at> is not supported
JPA FEATURES NOT SUPPORTED 
 Owned many-to-many relationships 
 "Join" queries. You cannot use a field of a child entity in a filter when 
performing a query on the parent kind. Note that you can test the parent's 
relationship field directly in a query using a key 
 Aggregation queries (group by, having, sum, avg, max, min) 
 Polymorphic queries. You cannot perform a query of a class to get instances 
of a subclass. Each class is represented by a separate entity kind in the 
datastore
JRE WHITE LIST
Q&A 
ua.linkedin.com/in/invaa/ 
alex@zamkovyi.name

More Related Content

Deploying applications to Cloud with Google App Engine

  • 2. ABOUT ME  Alexander Zamkovyi Java Developer @ Intro Pro Linked[in]: ua.linkedin.com/in/invaa/ e-mail: alex@zamkovyi.name
  • 3. GOOGLE APP ENGINE  Part of Google Cloud Platform (trusted by 4 million applications)  Platform-as-a-Service (Java, Python, PHP, Go)  264k websites (258k is active), according to builtwith.com  Coca-cola, Snapchat, Ubisoft, Rovio, BestBuy, Sony Music, ...
  • 4. REASONS TO LEARN GOOGLE APP ENGINE  Highly scalable  Integration  Cost-effective  Well documented  It’s Google
  • 6. PLAN  Google Cloud Endpoints  Google App Engine Development Process  Deployment and Troubleshooting  Persistence  Limitations
  • 9. THE SANDBOX  Java 7 JVM in a safe "sandboxed" environment  Servlet 2.5 standard  Standard WAR directory structure  Secured "sandbox" environment isolates application for service and security  The JVM can execute any Java bytecode that operates within the sandbox restrictions
  • 10. DEMO (CLOUD ENDPOINTS) Web frontend  Deployed: https://cloudendpointstic.appspot.com  Sources: https://github.com/GoogleCloudPlatform
  • 11. DEMO (CLOUD ENDPOINTS) Android client  Deployed: https://play.google.com/store/apps/details?id=com.devrel.sa mples.ttt  Sources: https://github.com/GoogleCloudPlatform
  • 14. REQUIREMENTS AND PREREQUISITES  JDK 1.7 (recommended)  Apache Maven 3.1+  MySQL 5+ (for local dev server)  Google account  Application ID  IDE
  • 15. GAE JAVA PROJECT STRUCTURE  You'll add your own application Java classes to src/main/java/...  You'll configure your application using the file src/main/webapp/WEB-INF/appengine.web.xml  You'll configure your application deployment using the file src/main/webapp/WEB-INF/web.xml
  • 16. THE JAVA DEVELOPMENT SERVER  jetty-6.1.x (built-in)  The development web server simulates the App Engine Java runtime environment and all of its services, including the datastore
  • 17. ADMIN CONSOLE  http://localhost:port/_ah/admin
  • 19. UPLOADING APP  mvn appengine:update
  • 20. DEVELOPER'S CONSOLE  https://console.developers.google.com/
  • 21. APPCFG  appcfg.cmd [options] <action> <war-location>
  • 24. DEMO (CLOUD DATASTORE AND CLOUD SQL) Calendar app Features:  JPA (Cloud SQL vs Cloud Datastores)  Spring MVC  jQuery  Deployed: http://cloudcalendarservice.appspot.com/  Sources: https://github.com/invaa/CloudCalendar
  • 26. AN APP ENGINE APPLICATION CANNOT  write to the filesystem. Applications must use the App Engine datastore for storing persistent data. Reading from the filesystem is allowed, and all application files uploaded with the application are available  respond slowly. A web request to an application must be handled within a few seconds. Processes that take a very long time to respond are terminated to avoid overloading the web server  make other kinds of system calls
  • 27. WEB.XML FEATURES NOT SUPPORTED  App Engine supports the <load-on-startup> element for servlet declarations. However, the load actually occurs during the first request handled by the web server instance, not prior to it  Some deployment descriptor elements can take a human readable display name, description and icon for use in IDEs. App Engine doesn't use these, and ignores them  App Engine doesn't support JNDI environment variables (<env-entry>)  App Engine doesn't support EJB resources (<resource-ref>)  Notification of the destruction of servlets, servlet context, or filters is not supported  The <distributable> element is ignored  Servlet scheduling with <run-at> is not supported
  • 28. JPA FEATURES NOT SUPPORTED  Owned many-to-many relationships  "Join" queries. You cannot use a field of a child entity in a filter when performing a query on the parent kind. Note that you can test the parent's relationship field directly in a query using a key  Aggregation queries (group by, having, sum, avg, max, min)  Polymorphic queries. You cannot perform a query of a class to get instances of a subclass. Each class is represented by a separate entity kind in the datastore