Google Application Engine for Java (GAE/J) is a cloud computing solution that provides
- a JVM
- OS support
- access to the Servlet API
- a management console
- access to Google utilities:
- Logon / Sign up → com.google...User
- image service: resize images
- mails
- Logon / Sign up → com.google...User
- building blocks:
- DataStore
- MemCache
- DataStore
- bandwidth usage (in/out)
- cpu usage
- datastore size
- emails sent
- access to logs
- shows bandwidth / cpu usage → cost
- users with admin role
- statistics
- manage multiple versions: one default, and many test versions (beware of data-incompatibilities)
- requests timeout: 30sec
- no background processes allowed
- no server push
- no threads
- read-only file-system
- no transaction
- only access to white-listed classes (e.g. ImageIO class of java is not accessible → use Google Image service)
- a maximum of 3000 static resources per application
- Migrating your application off the GAE/J cloud: difficult, but not impossible → google for “GEA Bar”
- not a relational database
- BigTable → like a big HashMap
- no transaction
- JDO or JPA access
- eclipse plugin
- Jetty based emulator → fair emulation, but not 100% relevant
- MemCache
- disk-based datastore
- compile-time checks
- no maven support yet
- DIY ant scripts are possible and recommended.
- 3 tiers:
- DAO
- service layer
- 4 frontends that use the same
service layer:
- jsf 2.0 (+IPhone version)
- gwt 1.7
- SmartGwt
- Spring MVC
- jsf 2.0 (+IPhone version)
- DAO
- wired through Spring 3.0
- get detailed cost of a request by setting a special HTTP header
- BLOB type
- Text type for long Strings
- white-listed classes
- → find workarounds for blocked classes (e.g. Image services)
- → some thirdparty libraries don't work
- → find workarounds for blocked classes (e.g. Image services)
- JSF2.0:
- disable threading in web.xml
- no JNDI: hack WebConfiguration class
- server side state doesn't work → use client side state
- RichFaces, IceFaces and Commons FileUpload use non-whitelisted classes → incompatible with GAE
- disable threading in web.xml
- GWT:
- BLOB and Text are non-serializable
- GWT <> Spring integration requires a special service class
- BLOB and Text are non-serializable
- SmartGWT:
- requires 1000 static resources → closer to the max of 3000 of GAE → workaround with zip-file and cache, but increases cpu-cost
- requires 1000 static resources → closer to the max of 3000 of GAE → workaround with zip-file and cache, but increases cpu-cost
Wow great summary. That should have been our last slide.
ReplyDelete