Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

Enhancing Evite.com with GWT and Grails

Evite.com On my LinkedIn Profile, it says my current gig is a SOFEA consultant at a stealth-mode startup.

SOFEA Consultant, Stealth Mode Startup, Los Angeles, CA. December 2008 -- Present.

OK, I lied. It's not a startup, it's a well-known company that helps you plan parties. For the last 5+ months, my UI team from LinkedIn has been working with Evite.com to enhance portions of their site with a SOFEA architecture.

In January, we started evaluating Ajax Frameworks and came to the conclusion that GWT was right for us. After we chose the UI framework, other team members chose Grails and memcached to develop scalable RESTful services. The architecture we implemented involves using GWT's RequestBuilder to talk to Grails' services, which cache almost all their JSON output in memcached.

To see an example of a feature we developed with GWT, see Evite's Design Gallery. I personally worked on this feature and very much enjoyed becoming a GWT aficionado in the process. GWT's zero-turnaround feature made doing pure client-side work a lot of fun. It's definitely something I'd like to continuing doing at my next gig.

Everyone from Evite is very happy with what we've been able to do with GWT and Grails. We have a stateless architecture and are quickly able to develop both client-side and server-side features. We've learned to scale the client by using out-of-the-box GWT components. We've scaled Grails by caching as much as possible. We serve up Ads and Analytics using the same JavaScript mechanisms that traditional server-side frameworks use.

At the end of this month, my gig with Evite comes to an end. I'll be spending a few weeks at my family's cabin in Montana and then it's on to the next big thing. What's the next big thing? I'm not sure yet, hence the reason for writing this. If you're looking to develop a GWT application, introduce a SOFEA architecture at your company, or simply adopt some open source frameworks, I'd love to help out. Drop me a line and let's start a conversation.

Posted in Java at Jun 15 2009, 07:41:37 AM MDT 9 Comments
Comments:

What an interesting architecture! That gives things to think

Posted by Gabriel Kastenbaum on June 15, 2009 at 02:05 PM MDT #

That's no "colink" - stuffs come a long way.

Posted by Alonso on June 15, 2009 at 02:17 PM MDT #

I've done a lot of hand coding extjs against grails. I looked into using gwt against grails but the integration seemed cumbersome. What did you guys do from an architectural standpoint when using gwt and grails together??

Posted by Les Stroud on June 15, 2009 at 06:07 PM MDT #

@Les - if you're talking about the GWT Plugin for Grails, I agree that it looks cumbersome. What we used is pretty simple: JSON is returned from Grails and GWT consumes it using JavaScript Overlay Types. Fast and efficient.

Posted by Matt Raible on June 15, 2009 at 07:04 PM MDT #

I'd be interested to hear some details about how exactly you integrated memcached with Grails. I'm currently using memcached as the Hibernate cache using this plugin:

http://code.google.com/p/hibernate-memcached/wiki/ConfiguringGrails

Now, I'm thinking about how to use memcached within my Grails app for caching other objects (e.g. controller response, views). Currently, I'm leaning towards using this library:

http://code.google.com/p/simple-spring-memcached/

Any other suggestions?

Posted by Donal on June 15, 2009 at 11:05 PM MDT #

In your design, were smartphones such as iPhone a consideration? Or was the specification only for desktop browsers?

Posted by Roshan Shrestha on June 16, 2009 at 02:33 AM MDT #

I would love to see a snippet of how to eval the JSON coming from RequestBuilder into the OverlayTypes. What is the mapping like? I used OverlayTypes to read in static data that I render into the head section of the hosted page, which is pretty easy and fast, but I dont know how to do this "reading" dynamically at runtime.

Posted by Sakuraba on June 16, 2009 at 07:38 AM MDT #

@Donal - we integrated memcached with Grails using spymemcached. Beyond that, most of the integration was done manually. We'd love to move to spring-spring-memcached (SSM) in the future. However, SSM expects Java objects (not Grails domain objects) and we haven't figured out how to serialize Grails domain objects.

@Roshan - the short answer is no. There's a separate division at Evite that develops mobile applications. Too bad, I don't think it'd be too hard to make a GWT application iPhone-friendly.

@Sakuraba - I'll try to post an example in the near future.

Posted by Matt Raible on June 17, 2009 at 07:04 PM MDT #

@Sakuraba - I wrote a blog post on JSON Parsing with JavaScript Overlay Types in GWT. I hope this answers your question.

Posted by Matt Raible on June 24, 2009 at 04:12 PM MDT #

Post a Comment:
  • HTML Syntax: Allowed