Building a GAE+GWT application using the best practices, Part 1

This is the first installment of the series “Building a GAE+GWT application using the best practices“.


In the next few blog posts, I’m going to present my experience building a simple (but non-trivial) web application using GWT and Google App Engine, while applying the best practices introduced by Ray Ryan in his excellent presentation at Google IO last year.

The application I’m going to build is called RateChecker. It’s simply a tool that goes fetches the posted USD/CAD exchange rate from a bank website, persists the rate to the data store, and present the user with the recent rates when requested. It can potentially do more (like generating a histogram of the rates, etc), but for the purpose of blog series, I’m going with the basics to illustrate the implementation pattern without losing my bearings in the embellishing.

Here’s a screenshot of the finished application:

The Goals

I intend to use this minimal application to practice using the following technologies/techniques:

  • Server/Persistence tier:
    • Google Guice as dependency injection container on the server side
    • JDO as the persistence layer
    • AppEngine Cron task
    • Command pattern for request handling
  • Client tier:
    • Google GIN as dependency injection container on the client side
    • Model-View-Presenter pattern on the client side
    • EventBus to decouple components
    • Command pattern for remote service calls
  • Unit Testing on both Client/Server side with mock objects

Also I plan to rewrite the service layer with one of the alternate JVM language, such as Scala or Clojure, if I my schedule allows and I have enough motivation.

Leave a comment


  1. Building a GAE+GWT application using the best practices (Index) « Reminiscential: of or pertaining to remembrance
  2. Daily for March 9th through March 13th — Vinny Carpenter's blog

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


Get every new post delivered to your Inbox.

%d bloggers like this: