AppEngine came out a few years ago as an excellent idea from Google to abstract away the server and provide a JVM that would essentially run on the cloud. My last review was back in June 22 2009
My first impression was very disappointing because AppEngine did not support most of the existing Java libraries nor Threads nor TCP socekts etc. I hoped that things would have changed in the last 4 years. Google is a big company and it can invest some serious effort into developing a mature technology. So I choose to give it another try and adopt AppEngine for developing a prototype for a client that needs massive scalabilty.
Our application included an Android client, some REST services running on AppEngine and the data would be stored in Google DataStore. According to Google’s description of the services, that architecture was exactly what we needed.
But once I started implementing the most basic features I realized that AppEngine feelds still like a mediocre pre-alpha product.
Let’s start with the Endpoints. They are similar to JAX-RS and give you the ability to annotate your service to easily map requests to methods, parameters to arguments and return types to responses. They also support JSON serialisation of Java objects. Endpoints also have the ability to generate the client Java stub like JAX-WS. The generated classes will be similar to the ones used on the server side but slightly different. This whole idea of endpoints might be redundant (since JAX-RS and JAX-WS are already there), but the real problem is that it is full of all kinds of unreasonable restrictions: you cannot return primitive types, you can only have one complex type in a POST method, but you cannot have a complex type as an argument of a GET method. Date handling is completely buggy and if you get some errors when generating the client stub they are burrowed in the eclipse logs.
AppEngine still does not support the major Java frameworks like Spring (nor threads for that matter). I found a couple of frameworks written specifically for AppEngine, but to be honest I haven’t tried them.
Finally GoogleData store seems to be frozen in time. There are adaptors for JDO and JPA but they are so full of constraints that they create more problems than they solve.
It’s a shame that a company that built so many good products is failing to deliver the same level of quality with what might have been a revolution in computing.