Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
CloudConf2011 Introduction to Google App Engine
1. Introduction into Google App Engine
Halil-Cem Gürsoy
adesso AG
Tw @hgutwit
G+ http://goo.gl/hljRS
21.11.11
2. The speaker
► More then 12 years development in Java
► Before getting a “consulting developer“ some years research
(calculation of RNA folding with genetic algorithms using Pascal)
► Senior Software Engineer at adesso AG, Dortmund
► Speaker on some conferences: (W)-JAX, DOAG, HerbstCampus etc.
► Mostly EAI/SOA projects... with plain good old Java / JEE
► … and a bit Scala
21.11.11 2 CloudConf 2011 - GAE/J
3. Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 3 CloudConf 2011 - GAE/J
4. Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 4 CloudConf 2011 - GAE/J
5. The Google App Engine
► A classic PaaS
► No control over the OS
► A runtime for Web Application
► At the start, only Python was supported
► Since 2009 Java, now Google Go
> Java-Support is limited!
21.11.11 5 CloudConf 2011 - GAE/J
6. Talking about GAE/J
► GAE/J = JRE6
> A Sandbox with restrictions
► Supports out of the box
> Servlet API 2.4 (*)
> JSF 1.1, 2.0 (*)
> JSP (*)
> JDO 2.3 (?!)
> JPA 1(*)
► Support for Google Services und API‘s
21.11.11 6 CloudConf 2011 - GAE/J
7. Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 7 CloudConf 2011 - GAE/J
8. Persistence in GEA
► Default Store is a Key-Value NoSQL-DB (Google BigTable)
► JDO and JPA supported… partially
> ORM via DataNucleus v1.1
► JDO is still better documented than JPA in the GAE/J documentation
► You can use the low level API for Google BigTable
► You can use in-memory Databases
► Enhancement of Entity Classes needed (good to know for Build)
► MySQL-Support is upcoming (now in Beta, chosen accounts)
21.11.11 8 CloudConf 2011 - GAE/J
10. More on JPA
► @ManyToMany is not supported
► Join-Queries are not supported
► You can not use
> InheritanceType.SINGLE_TABLE
> InheritanceType.JOINED
► No support for aggregation queries
> group by, having, sum, avg, min, max
► No support for polymorphic queries
21.11.11 10 CloudConf 2011 - GAE/J
11. More to know about limits in JPA
► Resultsets are not initialized, you have to do it!
> resultSet.size();
► Id Fields: don’t use long type
> Unsupported primary key type: long
► GenerationType.TABLE results in an error
> javax.persistence.PersistenceEception: Transaction is still
active.
► Solution
@Id
GeneratedValue(strategy = GenerationType.IDENTITY)
private com.google.appengine.api.datastore.Key key;
21.11.11 11 CloudConf 2011 - GAE/J
12. Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 12 CloudConf 2011 - GAE/J
13. Other Limits in GAE
► The “JRE Whitelist” defines all supported JRE classes
> http://code.google.com/intl/de-DE/appengine/docs/java/jrewhitelist.html
> Only ~ 1500 classes
► Your application should not
> …start own threads (due to that, no Akka-Support if you use Scala)
> …write files
> …open network sockets
21.11.11 13 CloudConf 2011 - GAE/J
14. Will it play?
► Overview about the support for frameworks and JVM languages:
> http://code.google.com/p/googleappengine/wiki/WillItPlayInJava
► No support for…
> JAX-RPC
> JDBC
> JMS (!)
> JNDI
> …and much more!
► A little bit support for JAX-WS, good support for REST
► Scala, Groovy (look @ Gealky) etc. supported
► Spring Core is supported
21.11.11 14 CloudConf 2011 - GAE/J
15. Spring support
► Not all Spring Projects are supported - core is
► Running: Spring MVC with Spring beans
► Setup: JAR files into /WAR/WEB-INF/lib and add to Classpath
► Example:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/springgae/*</url-pattern>
</servlet-mapping>
21.11.11 15 CloudConf 2011 - GAE/J
17. GAE and Android
► Tight integration of GAE and Android via Android Cloud to Device
Framework (C2DM)
> http://code.google.com/android/c2dm/
► C2DM enables Android Apps to use all GAE as the backend
► ...e.g. use the GAE Data Store
► ...e.g. send Mails from GAE
► Example: Chrome to Phone-Extension and App
> http://code.google.com/p/chrometophone/
21.11.11 17 CloudConf 2011 - GAE/J
18. More Reasons…
► No one enforces you to use JPA or JDO on GAE!
> Use the native Interface
> You have a free, full distributed, NoSQL Key-Value DB!
► Transparent scaling of your app
> You have not to care about how many instances you have to start and
then to start
> GAE is not Beanstalk / CloudFoundry
> In Beanstalk / CloudFoundry you have still to take care about LB and
your infrastructure
21.11.11 18 CloudConf 2011 - GAE/J
19. Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 19 CloudConf 2011 - GAE/J
20. Quota
► GAE with limits w/o fee
► New Billing System to overcome limits
► Quota exceeded: HTTP 403 Errors or Exceptions (bad if you not aware
of quota)
► Per minute quota = aprox. 500 Req./min.
21.11.11 20 CloudConf 2011 - GAE/J
22. Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 22 CloudConf 2011 - GAE/J
23. Build-Tools
► Ant is supported
> Enhancement of entity classes
> Deployment
► Maven
> Maven2 plug-in available (http://code.google.com/p/maven-gae-plugin/ )
> Archetypes for JSP, GWT and Wicket-Projects
> GAE SDK not available via Maven repositories anymore (?)
21.11.11 23 CloudConf 2011 - GAE/J
24. Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 24 CloudConf 2011 - GAE/J
25. Hands on?
► Some slides to tell you that is needed
► Ask me afterwards for a live demo
► Get ready...
21.11.11 25 CloudConf 2011 - GAE/J
26. Getting started
► Google App Engine Account activated?
> You need your mobile number for activation
► Eclipse with the Google Plug-in
► Manual installation via Eclipse Market Place
> http://marketplace.eclipse.org/content/google-plugin-eclipse
► SDK with CLI and more resources at GAE-Homepage
– http://code.google.com/appengine/
21.11.11 26 CloudConf 2011 - GAE/J
29. Test in the local sandbox
► You can test your application in the local sandbox
► http://localhost:8888/[your_project_name]
21.11.11 29 CloudConf 2011 - GAE/J
30. Create your cloud app
► Register your application in your GAE account
► https://appengine.google.com/ -> “Create Application”
► Choose an Application Identifier and an Application Name (note them!)
► Choose the Authentication Option
> Default is “Open to all Google Account users”
> User can sign in into your app using their Google Account
► Choose Storage Option
> High Replication (default) vs. Master/Slave
> High Replication is “eventualy consistent” (latency in writes)
21.11.11 30 CloudConf 2011 - GAE/J
31. Deployment
► Choose „Google – Deploy to App Engine“ from context menu
► Provide your App Engine data
21.11.11 31 CloudConf 2011 - GAE/J
32. Calling now on the cloud
► Call your Application now on the cloud!
► [appid].appspot.com/[servletname] (Servletname = Projectname by
default)
► The servlet should greet you…
► Check your Application-Dashboard
– https://appengine.google.com/
21.11.11 32 CloudConf 2011 - GAE/J
33. Thank you for your attention!
info@adesso.de
www.adesso.de