cloudconf2011 introduction to google app engine
DESCRIPTION
Diese Präsentation gibt eine Einführung in die Google AppEngine für Java.TRANSCRIPT
21.11.11
Introduction into Google App Engine
Halil-Cem Gürsoyadesso AG
Tw @hgutwit
G+ http://goo.gl/hljRS
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 CloudConf 2011 - GAE/J2
Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 CloudConf 2011 - GAE/J3
Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 CloudConf 2011 - GAE/J4
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 CloudConf 2011 - GAE/J5
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 CloudConf 2011 - GAE/J6
Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 CloudConf 2011 - GAE/J7
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 CloudConf 2011 - GAE/J8
GAE - JPA
► Transactional behavior is configured in the persistence.xml
<persistence-unit name="transactions-optional">
<provider>org.datanucleus.store.appegine.jpa.DatastorePersistenceProvider
</provider>
<properties>
<property name="datanucleus.NontransactionalRead” value="true" />
<property name="datanucleus.NontransactionalWrite” value="true" />
<property name="datanucleus.ConnectionURL” value="appengine" />
</properties>
</persistence-unit>
21.11.11 CloudConf 2011 - GAE/J9
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 CloudConf 2011 - GAE/J10
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 CloudConf 2011 - GAE/J11
Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 CloudConf 2011 - GAE/J12
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 CloudConf 2011 - GAE/J13
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 CloudConf 2011 - GAE/J14
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 CloudConf 2011 - GAE/J15
Why?
21.11.11 CloudConf 2011 - GAE/J16
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 CloudConf 2011 - GAE/J17
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 CloudConf 2011 - GAE/J18
Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 CloudConf 2011 - GAE/J19
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 CloudConf 2011 - GAE/J20
Measured Performance
21.11.11 CloudConf 2011 - GAE/J21
Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 CloudConf 2011 - GAE/J22
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 CloudConf 2011 - GAE/J23
Agenda
► Google App Engine
► Persistence in Google App Engine
► Limits in GAE/J
► Quota and Performance
► Build-Tools
► Hands-On
21.11.11 CloudConf 2011 - GAE/J24
Hands on?
► Some slides to tell you that is needed
► Ask me afterwards for a live demo
► Get ready...
21.11.11 CloudConf 2011 - GAE/J25
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 CloudConf 2011 - GAE/J26
Create new project
21.11.11 CloudConf 2011 - GAE/J27
Hello World
21.11.11 CloudConf 2011 - GAE/J28
Test in the local sandbox
► You can test your application in the local sandbox
► http://localhost:8888/[your_project_name]
21.11.11 CloudConf 2011 - GAE/J29
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 CloudConf 2011 - GAE/J30
Deployment
► Choose „Google – Deploy to App Engine“ from context menu
► Provide your App Engine data
21.11.11 CloudConf 2011 - GAE/J31
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 CloudConf 2011 - GAE/J32
Thank you for your attention!