Announcement Announcement Module
No announcement yet.
Will GAE be fixed to work with Spring? Page Title Module
Move Remove Collapse
Conversation Detail Module
  • Filter
  • Time
  • Show
Clear All
new posts

  • Will GAE be fixed to work with Spring?

    Per Ben Alex's request, I am posting my GAE-related question in this forum.

    Last week, VMWare announced that they would be working with Google to integrate SpringSource Tool Suite with the GAE platform. Rod Johnson wrote that "Today’s announcement makes Spring the preferred programming model for Google App Engine."

    I'm curious if this means that VMWare/Google are committed to addressing the most significant technical issue, which is that GAE does not work with Spring.

    I am happily running my company's application on the Spring Cloud Foundry service, which deploys to EC2. When I first attempted to run the application on GAE last year, I successively encountered the following issues:

    • Spring transactions do not work on GAE, as documented in this issue, and in hundreds of posts on the developer forums
    • Spring Security does not work on GAE, as documented on the Will-It-Play page
    • I have never been able to get a weaved aspect to work in GAE, nor have I ever seen a report of someone else getting it to work in the deployed environment.
    • GAE utilizes an unpredictable deploy-on-demand architecture, where any given web request may cause the entire container to be initialized from scratch. This was clearly engineered for the world of Python as a scripting language, where startup costs are minimal. In does not work in the world of Spring, where you may have a container startup cost of 20-30 seconds (or much more), just to satisfy an HTTP request. Because of this issue alone, the standard response on the GAE/J developer forums is "don't use Spring."
    Most maddeningly, none of the issues I described above manifest when running in my local development environment. That is because they are specific to the runtime architecture and the whitelisted classloader that are used in the deployment environment, but not in the development environment. I design, code, test, and then deploy to the remote environment to see what breaks. It's the opposite of Agile.

    To date, Jason and the team have shown very little interest in addressing these issues, or in discouraging the "don't use Spring" mantra that dominates the developer forums. The implication is that their whitelisted classloader is what it is, and that these issues are Spring's problems, not theirs.

    I have never had any sort of Spring compatibility problem with EC2, nor have I encountered any runtime behavior that differed from the expectations I established in my development environment.

    My question is: does the announced relationship with VMWare and Google change all this? Are you actively working with Google engineers to rearchitect their service to be Spring friendly? Or is Google App Engine for Business a completely new service from the ground up that looks more like EC2 than GAE/J?

    I am very interested to know how you will meet your stated goal of "making Spring the preferred programming model for Google App Engine". Thanks for your time.

  • #2
    Spring or Spring Roo

    Hmmm ... this post is confusing me quite a bit.

    I don't expect the rest of Spring to be compatible with GAE. I don't expect old projects that use Spring to be GAE compatible and I don't think I want them to be because one has to understand the constraints (and superiority) of bigtable and understand that GAE does not allow thread spawning. To those who cannot accept this - the bad news is - you have to and you have to re-architect your app to fit GAE's model. I don't want Google to change their model to fit legacy ways of programming if that would de-optimise data efficiency.

    However, I am under the impression that Spring Roo is the remedy to the malady. That Roo is a special segment of Springsource technology meant to run with Google's technologies, especially GAE and GWT.

    Am I right?


    • #3
      Interesting questions...


      • #4
        Originally posted by BlessedGeek View Post
        I don't expect old projects that use Spring to be GAE compatible and I don't think I want them to be because one has to understand the constraints (and superiority) of bigtable and understand that GAE does not allow thread spawning.
        Google has announced that in the 3rd quarter they will be offering a relational database for use with Google App Engine for Business, so users will no longer be married to BigTable (which was another dealbreaker for me).

        I'm hoping that someone from SpringSource can briefly explain whether the GAE/Business offering is a new service that will be compatible with the Spring Framework, or if this is just GAE/Java with a relational database and an SLA.


        • #5
          Google announced at Google I/O last week new features coming soon to Google App Engine, including a relational database option. So those who would prefer not to use DataStore API will enjoy this more familiar option when it becomes available.

          Google's work with VMware extends to a large number of product integrations including Roo, GWT, STS and Spring Insight.

          As part of our joint work, I have personally deployed Spring-based applications built with Roo to GAE. These of course use GAE DataStore API, as the relational option isn't yet available on GAE.

          Today you need to design your application to reflect GAE DataStore, for example around relationships and transaction guarantees. But it's not so hard to do this. In the next releases of Roo we'll make it even easier by automating boilerplate code like relationship handling. Also, don't forget DataStore API lets you build massive data sets. We demoed at I/O a data set with over 25 million rows in a single table and it was paginating and searching extremely quickly. Not bad considering you have zero maintenance effort for that database going forward, don't have to worry about backing it up, and all the other admin and scalability benefits it offers.

          In closing I will note that the on-demand architecture of GAE is actually a major selling point. While it's true there is a JVM startup time, it's quite fast and because Roo apps all use static Java, your first web request is served relatively quickly and subsequent requests are fast.


          • #6
            Thanks so much for your response, Ben. The piece I did not understand is that the VMWare/Google partnership is focused on Roo applications, not on more traditional Spring applications like my own. Now this makes sense.

            I am madly in love with Spring Cloud Foundry, and I hope that in the future VMWare announces partnerships with an entity like Amazon that can host applications like mine.