<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://raibledesigns.com/roller-ui/styles/rss.xsl" media="screen"?><rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
  <title>Raible Designs</title>
  <link>https://raibledesigns.com/rd/</link>
      <atom:link rel="self" type="application/rss+xml" href="https://raibledesigns.com/rd/feed/entries/rss?tags=grails" />
    <description>Raible Designs is an Enterprise Open Source Consulting company. We specialize in UI and Full Stack Architectures using HTML5, CSS, JavaScript and Java. We love HTML5, Angular, Bootstrap, Spring Boot, and especially JHipster.</description>
  <language>en-us</language>
  <copyright>Copyright 2026</copyright>
  <lastBuildDate>Thu, 30 Apr 2026 03:43:46 -0600</lastBuildDate>
  <generator>Apache Roller (incubating) 5.0.3 (1388864191739:dave)</generator>
        <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/grails_angular_vs_jhipster</guid>
    <title>Grails + Angular vs. JHipster</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/grails_angular_vs_jhipster</link>
        <pubDate>Tue, 14 Jul 2015 08:02:01 -0600</pubDate>
    <category>Java</category>
    <category>jhipster</category>
    <category>spring-boot</category>
    <category>angularjs</category>
    <category>grails</category>
            <description>&lt;p&gt;I recently received an email from a long time follower of my comparing web frameworks research and presentations. He asked some interesting questions:
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
I am starting on a new venture to build a direct to consumer web application. I am planning to leverage Cloud services to build my CI/CD pipeline. I am very strong with Java Backend/middleware and learning Javascript Front-end frameworks. I love Spring and SOFEA. Having said that, I am wondering if I should use Grails + Angular or JHipster? My primary concern with JHipster is there is hardly any &#8216;community&apos;, there is Julien and whatever he says/thinks goes! Can you give me some pointers?
&lt;/a&gt;
&lt;p&gt;I imagine there&apos;s other JVM developers with similar questions, so I figured I&apos;d publish my response for all to see.&lt;/p&gt;
&lt;div class=&quot;quote&quot;&gt;
&lt;p style=&quot;margin-top: 0&quot;&gt;
JHipster may have a smaller community than Grails, but remember that it&apos;s built on Spring Boot and AngularJS. Both have huge communities. In fact, Grails 3 is built on Spring Boot, just like JHipster. 
&lt;/p&gt;
&lt;p&gt;
Even though JHipster generates your code in Java, there&apos;s nothing preventing you from writing your code in Groovy or Scala. I dig JHipster, but I&apos;ve also worked with AngularJS and Spring Boot for a couple years. The fact that someone put these technologies together and makes it easy to work with them is awesome. 
&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0&quot;&gt;
I like JHipster so much, I decided to write a book on it. I hope to finish it in the next couple months and have it published in the fall. It&apos;ll be a free download from InfoQ. Learn more at &lt;a href=&quot;http://www.jhipster-book.com/&quot;&gt;http://www.jhipster-book.com&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Yes, I&apos;m probably a bit biased since I&apos;m writing a JHipster book. However, it&apos;s been easy for me to introduce and use Spring Boot at my last few clients. They were already using Spring, so the transition to using a Spring simplifier was a no-brainer. I haven&apos;t had as much luck getting clients to adopt Grails, even though I&apos;ve suggested it. That could change now that it&apos;s based on Spring Boot.&lt;/p&gt;
&lt;p&gt;What&apos;s your experience? Would you recommend Grails + Angular over JHipster? If so, why?</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_at</guid>
    <title>Comparing JVM Web Frameworks at vJUG</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_at</link>
        <pubDate>Thu, 6 Feb 2014 10:54:17 -0700</pubDate>
    <category>Java</category>
    <category>jsf</category>
    <category>grails</category>
    <category>webframeworks</category>
    <category>playframework</category>
    <category>struts2</category>
    <category>vaadin</category>
    <category>tapestry</category>
    <category>springmvc</category>
    <category>angularjs</category>
    <category>java</category>
    <category>wicket</category>
    <category>jvm</category>
    <atom:summary type="html">&lt;p&gt;A couple months ago, I was invited to &lt;a href=&quot;http://www.meetup.com/virtualJUG/events/153096902/&quot;&gt;speak at Virtual JUG&lt;/a&gt; - an online-only Java User Group organized by the &lt;a href=&quot;http://zeroturnaround.com/&quot;&gt;ZeroTurnaround&lt;/a&gt; folks. They chose my Comparing JVM Web Frameworks presentation and we agreed I&apos;d speak yesterday morning. They used a combination of Google Hangouts, live streaming on YouTube and IRC to facilitate the meeting. It all went pretty smoothly and produced a comfortable speaking environment. To practice for vJUG, I delivered the same talk on Tuesday night at the &lt;a href=&quot;http://www.meetup.com/DOSUG1/events/155080452/&quot;&gt;Denver Open Source Users Group&lt;/a&gt;.
&lt;p&gt;
The last time I delivered this talk was at &lt;a href=&quot;http://raibledesigns.com/rd/entry/devoxx_france_a_great_conference&quot;&gt;Devoxx France&lt;/a&gt; in March 2013. I didn&apos;t change any of the format this time, keeping with referencing the Paradox of Choice and encouraging people to define constraints to help them make their decision. I did add a few new slides regarding RebelLabs&apos; &lt;a href=&quot;http://zeroturnaround.com/rebellabs/the-curious-coders-java-web-frameworks-comparison-spring-mvc-grails-vaadin-gwt-wicket-play-struts-and-jsf/&quot;&gt;Curious Coder&#8217;s Java Web Frameworks Comparison: Spring MVC, Grails, Vaadin, GWT, Wicket, Play, Struts and JSF&lt;/a&gt; and &lt;a href=&quot;http://zeroturnaround.com/rebellabs/the-2014-decision-makers-guide-to-java-web-frameworks/&quot;&gt;The 2014 Decision Maker&#8217;s Guide to Java Web Frameworks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also updated all the pretty graphs (which may or may not have any significance) with the latest stats from Dice.com, LinkedIn, StackOverflow and respective mailing lists. Significant changes I found compared to one year ago:&lt;/p&gt;</atom:summary>        <description>&lt;p&gt;A couple months ago, I was invited to &lt;a href=&quot;http://www.meetup.com/virtualJUG/events/153096902/&quot;&gt;speak at Virtual JUG&lt;/a&gt; - an online-only Java User Group organized by the &lt;a href=&quot;http://zeroturnaround.com/&quot;&gt;ZeroTurnaround&lt;/a&gt; folks. They chose my Comparing JVM Web Frameworks presentation and we agreed I&apos;d speak yesterday morning. They used a combination of Google Hangouts, live streaming on YouTube and IRC to facilitate the meeting. It all went pretty smoothly and produced a comfortable speaking environment. To practice for vJUG, I delivered the same talk on Tuesday night at the &lt;a href=&quot;http://www.meetup.com/DOSUG1/events/155080452/&quot;&gt;Denver Open Source Users Group&lt;/a&gt;.
&lt;p&gt;
The last time I delivered this talk was at &lt;a href=&quot;http://raibledesigns.com/rd/entry/devoxx_france_a_great_conference&quot;&gt;Devoxx France&lt;/a&gt; in March 2013. I didn&apos;t change any of the format this time, keeping with referencing the Paradox of Choice and encouraging people to define constraints to help them make their decision. I did add a few new slides regarding RebelLabs&apos; &lt;a href=&quot;http://zeroturnaround.com/rebellabs/the-curious-coders-java-web-frameworks-comparison-spring-mvc-grails-vaadin-gwt-wicket-play-struts-and-jsf/&quot;&gt;Curious Coder&#8217;s Java Web Frameworks Comparison: Spring MVC, Grails, Vaadin, GWT, Wicket, Play, Struts and JSF&lt;/a&gt; and &lt;a href=&quot;http://zeroturnaround.com/rebellabs/the-2014-decision-makers-guide-to-java-web-frameworks/&quot;&gt;The 2014 Decision Maker&#8217;s Guide to Java Web Frameworks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also updated all the pretty graphs (which may or may not have any significance) with the latest stats from Dice.com, LinkedIn, StackOverflow and respective mailing lists. Significant changes I found compared to one year ago:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Job Listings on Dice.com
&lt;ul&gt;
&lt;li&gt;Play Framework job listings increased almost 4x&lt;/li&gt;
&lt;li&gt;Tapestry jobs are 1/3 of what they were a year ago&lt;/li&gt;
&lt;li&gt;Wicket jobs are 1/2 of what they were a year ago&lt;/li&gt;
&lt;li&gt;JavaScript framework jobs are up quite a bit: Ember.js up ~300%, AngularJS up 900%, Backbone up 160%&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn Skills
&lt;ul&gt;
&lt;li&gt;Rails down ~30%&lt;/li&gt;
&lt;li&gt;Grails up 25%&lt;/li&gt;
&lt;li&gt;Play Framework up 200%&lt;/li&gt;
&lt;li&gt;Spring Roo up 40%&lt;/li&gt;
&lt;li&gt;Ember.js up 300%&lt;/li&gt;
&lt;li&gt;AngularJS up 840%&lt;/li&gt;
&lt;li&gt;Backbone up 200%&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can tell from these findings, AngularJS has gained quite a bit of mindshare in the last year. There&apos;s a lot of companies looking for JavaScript skills and quite a few folks have added JavaScript frameworks to their LinkedIn profiles.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;https://www.youtube.com/watch?v=ygW8fJVlDxQ&quot;&gt;watch the recording on YouTube&lt;/a&gt; or click play in the embedded video below.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/ygW8fJVlDxQ&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;You can also quickly browse the slide deck below, &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/Comparing_JVM_Web_Frameworks_February2014.pdf&quot;&gt;download the PDF&lt;/a&gt; or &lt;a href=&quot;http://www.slideshare.net/mraible/comparing-jvm-web-frameworks-february-2014&quot;&gt;view it on SlideShare&lt;/a&gt;.&lt;/li&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;iframe src=&quot;//www.slideshare.net/slideshow/embed_code/30861557?rel=0&quot; width=&quot;512&quot; height=&quot;325&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px&quot; allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;Thanks to all the folks who attended these talks. And thanks to &lt;a href=&quot;http://twitter.com/dosug&quot;&gt;@dosug&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/virtualjug&quot;&gt;@virtualjug&lt;/a&gt; for giving me the opportunity to speak.&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/javaone_2013_videos_of_presentations</guid>
    <title>JavaOne 2013: Videos of Presentations on Parleys</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/javaone_2013_videos_of_presentations</link>
        <pubDate>Fri, 13 Dec 2013 09:40:42 -0700</pubDate>
    <category>Java</category>
    <category>java</category>
    <category>javaone</category>
    <category>parleys</category>
    <category>grails</category>
    <category>playframework</category>
            <description>&lt;p&gt;
&lt;img class=&quot;picture&quot; style=&quot;border: 0&quot; alt=&quot;Duke Rocking Out&quot; src=&quot;//static.raibledesigns.com/repository/images/rockstar_dukewithguitar_small.gif&quot; width=&quot;75&quot;&gt;
This year marked my &lt;a href=&quot;http://raibledesigns.com/rd/entry/javaone_2013&quot;&gt;first time speaking at JavaOne&lt;/a&gt;. It seems to have gone well, especially since audience feedback resulted in a &lt;a href=&quot;http://steveonjava.com/congrats-to-the-2013-javaone-rock-stars/&quot;&gt;JavaOne Rock Star Award&lt;/a&gt;. I&apos;m very humbled to be listed with some really great speakers. Congratulations to all the other Rock Stars - as well as everyone that had the courage to submit and present a talk this year!&lt;/p&gt;
For the top sessions at JavaOne 2013, Oracle worked with Parleys to capture the audio and synch it with the presentations. They published them in a &lt;a href=&quot;http://parleys.com/channel/5243df06e4b0d1fb3c78fe31/presentations&quot;&gt;JavaOne 2013 Channel&lt;/a&gt; and &lt;a href=&quot;http://raibledesigns.com/rd/entry/javaone_2013_my_presentations&quot;&gt;my presentations&lt;/a&gt; were included. Without further ado, here they are for your viewing pleasure.&lt;/p&gt;
&lt;div style=&quot;text-align: center&quot;&gt;
&lt;iframe type=&quot;text/html&quot; width=&quot;550&quot; height=&quot;380&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; src=&quot;//www.parleys.com/share.html#play/52535869e4b0c4f11ec576c0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;iframe type=&quot;text/html&quot; width=&quot;550&quot; height=&quot;380&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; src=&quot;//www.parleys.com/share.html#play/5252f7ede4b0a43ac121247d&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;If you happen to watch these and have any feedback, please leave a comment or send a tweet to &lt;a href=&quot;http://twitter.com/mraible&quot;&gt;@mraible&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/javaone_2013_my_presentations</guid>
    <title>JavaOne 2013: My Presentations</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/javaone_2013_my_presentations</link>
        <pubDate>Fri, 27 Sep 2013 13:35:01 -0600</pubDate>
    <category>Java</category>
    <category>play</category>
    <category>presentation</category>
    <category>java</category>
    <category>web</category>
    <category>smackdown</category>
    <category>modern</category>
    <category>grails</category>
            <description>&lt;p&gt;I flew into San Francisco this past Monday to speak at &lt;a href=&quot;http://www.oracle.com/javaone&quot;&gt;JavaOne&lt;/a&gt; 2013, and to meet with my &lt;a href=&quot;http://www.johnmuirhealth.com/&quot;&gt;new client&lt;/a&gt;. I made sure to wear a &lt;a href=&quot;http://www.denverbroncos.com/&quot;&gt;Broncos&lt;/a&gt; shirt since I was riding the train through Oakland and had some co-workers that were Raiders fans. My trip started off nicely as the Broncos dismantled the Raiders on Monday Night Football. My new team and I watched it during a team dinner at &lt;a href=&quot;http://havanarestaurant.net/main/&quot;&gt;Havana&lt;/a&gt; in Walnut Creek. Historically, the Broncos and Raiders have had a heated rivalry historically, so the win was the perfect start to the week. &lt;img src=&quot;https://raibledesigns.com/images/smileys/smile.gif&quot; class=&quot;smiley&quot; alt=&quot;:)&quot; title=&quot;:)&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On Tuesday, I worked from my hotel in the morning, then met &lt;a href=&quot;http://www.jamesward.com/&quot;&gt;James Ward&lt;/a&gt; to do some last minute prep for our &lt;a href=&quot;https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=2863&quot;&gt;smackdown&lt;/a&gt;. The prior week, we both upgraded our respective apps to use the latest versions of Grails and Play Framework. I ran into &lt;a href=&quot;http://grails.1312388.n4.nabble.com/Grails-2-3-Child-object-not-saved-in-unit-test-td4649385.html&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://grails.1312388.n4.nabble.com/Geb-Tests-with-Grails-2-3-0-td4649417.html&quot;&gt;few&lt;/a&gt; &lt;a href=&quot;http://grails.1312388.n4.nabble.com/Grails-2-3-with-Spring-Security-td4649418.html&quot;&gt;issues&lt;/a&gt; when &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/801eca879dfeed208605db897eff8b77fa07bd29&quot;&gt;upgrading&lt;/a&gt;, while Play required &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/70cbdc9b00876c6dd455dd318c304ebf053e9fa1&quot;&gt;some API changes&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
We both added &lt;a href=&quot;https://www.memcachier.com/&quot;&gt;Memcachier&lt;/a&gt; to our apps (to share caching between dynos) and ran some Apache Bench tests. The &lt;a href=&quot;http://www.ubertracks.com/preso/#/8/10&quot;&gt;results&lt;/a&gt; showed quite a bit of slowdown compared to &lt;a href=&quot;http://www.ubertracks.com/preso/#/8/9&quot;&gt;last time&lt;/a&gt;, which we attributed to caching needing to make network hops. Other than that, we both had to make changes to our framework&apos;s buildpacks to get the latest versions running on Heroku, and when we headed for our talk, my instance of Grails wasn&apos;t running (60 second boot timeout on startup). The good news is it somehow solved its issues during our talk and was up and running when I checked it after, as it &lt;a href=&quot;http://bike.ubertracks.com/&quot;&gt;is now&lt;/a&gt;. Below is an embedded version of the presentation we delivered. You can also &lt;a href=&quot;http://ubertracks.com/preso&quot;&gt;click here&lt;/a&gt; to see it in a new window, or &lt;a href=&quot;http://www.slideshare.net/mraible/play-framework-vs-grails-smackdown-javaone-2013&quot;&gt;view it on SlideShare&lt;/a&gt;.
&lt;/p&gt;
&lt;div style=&quot;text-align: center&quot;&gt;
&lt;iframe src=&quot;http://static.raibledesigns.com/repository/presentations/Play_Framework_vs_Grails_Smackdown_JavaOne2013/&quot; width=&quot;600&quot; height=&quot;375&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border:1px solid #CCC;margin-bottom:5px&quot; allowfullscreen&gt; &lt;/iframe&gt; 
&lt;/div&gt;
&lt;p&gt;On Wednesday morning, I tried to attend Venkat&apos;s &lt;a href=&quot;https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=2055&quot;&gt;Programming with Lambda Expressions in Java&lt;/a&gt;, but quickly discovered it was sold out. My talk on The Modern Java Web Developer started shortly after and I had a fantastic time talking to a packed room and preaching the virtues of learning and staying up-to-date with web technologies. I made sure to include a slide on &lt;a href=&quot;https://avatar.java.net/&quot;&gt;Avatar&lt;/a&gt;, an Oracle-sponsored JavaScript-based framework that requires &quot;very minor JavaScript knowledge&quot;. You can view my presentation below or &lt;a href=&quot;http://www.slideshare.net/mraible/the-modern-java-web-developer-javaone-2013&quot;&gt;on SlideShare&lt;/a&gt;.
&lt;/p&gt;
&lt;div style=&quot;text-align: center&quot;&gt;
&lt;iframe src=&quot;//www.slideshare.net/slideshow/embed_code/26581954?rel=0&quot; width=&quot;600&quot; height=&quot;375&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px&quot; allowfullscreen&gt; &lt;/iframe&gt;&lt;/div&gt;

&lt;p&gt;According to @JavaOneConf, all JavaOne 2013 presentations will be &lt;a href=&quot;https://twitter.com/JavaOneConf/status/383381815626825728&quot;&gt;published on Parleys.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After completing my talks, I journeyed to my client and practiced what I preached, successfully finishing a spike that reduced page load time from 8 seconds to 2 seconds. That evening, I attended the Oracle Appreciation Event at Treasure Island, had some cold beer and listened to some loud music. &lt;/p&gt;
&lt;p&gt;I had a great time speaking at JavaOne this year, and look forward to my next speaking engagement. In November, I&apos;ll be traveling to Devoxx where I&apos;ll be giving a &lt;a href=&quot;http://www.devoxx.be/dv13-matt-raible.html?presId=3648&quot;&gt;3-hour University session&lt;/a&gt; on The Modern Java Web Developer. Hope to see you there!&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/javaone_2013</guid>
    <title>JavaOne 2013: My First Time Speaking</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/javaone_2013</link>
        <pubDate>Thu, 19 Sep 2013 17:50:34 -0600</pubDate>
    <category>Java</category>
    <category>webdevelopment</category>
    <category>javaone</category>
    <category>grails</category>
    <category>play</category>
            <description>&lt;p&gt;I&apos;ve been to JavaOne many times in my life, starting in &lt;a href=&quot;http://raibledesigns.com/rd/date/20040701&quot;&gt;2004&lt;/a&gt; and continuing in &lt;a href=&quot;http://raibledesigns.com/rd/entry/javaone_pictures_from_monday&quot;&gt;2005&lt;/a&gt;, &lt;a href=&quot;http://raibledesigns.com/rd/entry/javaone_2006_begins&quot;&gt;2006&lt;/a&gt; and &lt;a href=&quot;http://raibledesigns.com/rd/entry/javaone_parties&quot;&gt;2008&lt;/a&gt;. I have fond memories of the first couple years, meeting all the Java open source guys and having a lot of fun. 
&lt;/p&gt;
&lt;p&gt;
You might notice that the aforementioned blog posts no longer show pictures. That&apos;s because they were originally hosted on Apple&apos;s HomePage, which they shut down years ago. I haven&apos;t bothered to republish the photos and fix the links, but I do still have them. For those looking for a blast from the past, checkout &lt;a href=&quot;https://www.dropbox.com/sc/rk4lsfza50iaoag/a6nfMDmc_T&quot;&gt;Mike, Howard and James&lt;/a&gt; or &lt;a href=&quot;https://www.dropbox.com/sc/8fmr636tokxkaz1/YrsXeZaq4o&quot;&gt;Bruce and Marc&lt;/a&gt;. I also have a set of photos from our &lt;a href=&quot;http://www.flickr.com/photos/mraible/sets/72057594139761408/&quot;&gt;Geronimo Live party in 2006&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;As many of you know, JavaOne used to be a &lt;em&gt;huge&lt;/em&gt; conference, attracting 15,000 attendees back in the day. Numbers have dwindled a lot since Oracle bought Sun and I&apos;ve heard recent years are more around 1500. Since I&apos;ve spoken at a lot of conferences, but never JavaOne, I figured I&apos;d try this year. The good news is I got accepted and I&apos;ll be there next week!&lt;/p&gt;
&lt;p&gt;On Tuesday afternoon, I&apos;ll be presenting the &lt;a href=&quot;https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=2863&amp;tclass=popup&quot;&gt;Play Framework vs Grails Smackdown&lt;/a&gt; with &lt;a href=&quot;http://www.jamesward.com/&quot;&gt;James Ward&lt;/a&gt;. On Wednesday morning, I&apos;ll be talking about &lt;a href=&quot;https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=2698&amp;tclass=popup&quot;&gt;The Modern Java Web Developer&lt;/a&gt;. I also look forward to &lt;a href=&quot;http://www.oracle.com/javaone/appreciation-event/index.html&quot;&gt;The Black Keys&lt;/a&gt; on Wednesday night.&lt;/p&gt;
&lt;p&gt;I have a feeling it&apos;s gonna be a great week!&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/devoxx_france_a_great_conference</guid>
    <title>Devoxx France: A Great Conference in a Magnificent City</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/devoxx_france_a_great_conference</link>
        <pubDate>Fri, 29 Mar 2013 13:14:30 -0600</pubDate>
    <category>Java</category>
    <category>travel</category>
    <category>paradoxofchoice</category>
    <category>trish</category>
    <category>france</category>
    <category>webframeworks</category>
    <category>devoxxfr</category>
    <category>grails</category>
    <category>play</category>
    <category>devoxx</category>
            <description>&lt;a href=&quot;http://www.flickr.com/photos/mcginityphoto/8614997207/&quot; title=&quot;Red Eiffel flowers by McGinityPhoto, on Flickr&quot;&gt;&lt;img src=&quot;//farm9.staticflickr.com/8386/8614997207_7320dec749_t.jpg&quot; width=&quot;66&quot; height=&quot;100&quot; alt=&quot;Red Eiffel flowers&quot; class=&quot;picture&quot; style=&quot;border: 1px solid black&quot;&gt;&lt;/a&gt;

This week, my &lt;a href=&quot;http://mcginityphoto.com&quot;&gt;lovely fianc&#233;&lt;/a&gt; and I traveled to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Paris&quot;&gt;City of Light&lt;/a&gt;. Our journey was designed around some speaking engagements at Devoxx France. Devoxx is one of my favorite conference franchises and Devoxx France has been special to me ever since the Devoxx (Belgium) I spoke at in 2011. 
&lt;/p&gt;
&lt;p&gt;
2011 was the year I spoke about &lt;a href=&quot;http://raibledesigns.com/rd/entry/my_html5_with_play_scala&quot;&gt;my experience with Play, Scala, CoffeeScript and Jade&lt;/a&gt;. I wrote the presentation on my flight over, composed the demo video the night before and made it all happen in the nick of time. Of course, this was after 120 hours of research and preparation, so the presentation composition process had all the data I needed. You can imagine my sense of relief after pulling off that talk and getting an enthusiastic applause from the audience for my efforts. 
&lt;/p&gt;
&lt;p&gt;
One of the first audience questions I received was from &lt;a href=&quot;https://twitter.com/nmartignole&quot;&gt;Nicolas Martignole&lt;/a&gt;, asking if I&apos;d speak at Devoxx France the following year. I whole-heartedly agreed to do it and was excited for the opportunity. It was with great disappointment that I later found out I couldn&apos;t attend Devoxx France in 2012. My client didn&apos;t like me taking so much time off and I agreed to scale my two week vacation back to &lt;a href=&quot;http://raibledesigns.com/rd/entry/cruising_around_the_western_caribbean&quot;&gt;1 week&lt;/a&gt;. This year, I was determined to go, so I submitted some of my favorite talks: Comparing JVM Web Frameworks and The Play vs. Grails Smackdown with &lt;a href=&quot;http://www.jamesward.com/&quot;&gt;James Ward&lt;/a&gt;. I was extremely pleased when they both got accepted.
&lt;/p&gt;
&lt;p&gt;
Side Story: I met Martin Odersky shortly when he sat down next to me for the Java Posse presentation in Belgium in 2011. After shaking his hand and introducing myself, I had to politely ask him to leave because it was Trish&apos;s seat. Talk about awkward; but Martin was very gracious and promptly found a new seat close by.
&lt;/p&gt;
&lt;p id=&quot;comparing-jvm-web-frameworks&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Paradox_of_Choice:_Why_More_Is_Less&quot; title=&quot;The Paradox of Choice&quot;&gt;&lt;img src=&quot;//farm9.staticflickr.com/8102/8600235023_dc4753c0aa_t.jpg&quot; width=&quot;65&quot; height=&quot;100&quot; alt=&quot;The Paradox of Choice&quot; class=&quot;picture&quot;&gt;&lt;/a&gt;
&lt;strong&gt;Comparing JVM Web Frameworks&lt;/strong&gt;&lt;br/&gt;
Both talks required a bit of updating. For Comparing JVM Web Frameworks, I started reading &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Paradox_of_Choice:_Why_More_Is_Less&quot;&gt;The Paradox of Choice&lt;/a&gt; and found many parallels to the agony that developers experience with choosing a web framework. I described how I didn&apos;t think good framework decisions were based on the many, many features that frameworks have, but often on pre-defined constraints. There&apos;s those lucky developers that get to choose a Full Stack Framework because they&apos;re doing greenfield development. Then there&apos;s those that want a better &lt;em&gt;Pure&lt;/em&gt; Web Framework that replaces something (e.g. Struts) that&apos;s not satisfying their needs. And lastly, there&apos;s those that&apos;ve found it possible to leverage a &lt;abbr title=&quot;Service Oriented Front End Architecture&quot;&gt;SOFEA&lt;/abbr&gt; and use a JavaScript MVC framework with an API Framework on the backend. I don&apos;t think it makes sense to compare &lt;em&gt;all&lt;/em&gt; web frameworks and I tried to use these pre-defined constraints (language, platform and application type) argument to separate into categories and help make choosing easier. 
&lt;/p&gt;
&lt;p&gt;
I took out the parts of the presentation that&apos;ve pissed people off in the past - particular the JSF bashing by James Gosling, the Rails gushing from Craig McClanahan and the Pros and Cons sections of each framework. I added the &lt;a href=&quot;https://www.flickr.com/photos/mraible/8588701778&quot;&gt;history of web frameworks&lt;/a&gt; and research from &lt;a href=&quot;http://www.infoq.com/research/jvm-web-frameworks&quot;&gt;InfoQ&lt;/a&gt; and &lt;a href=&quot;http://devrates.com/project/list?query=%5Bweb+framework%5D&quot;&gt;devrates.com&lt;/a&gt;.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a data-url=&quot;http://www.flickr.com/photos/mraible/8588701778/&quot; href=&quot;https://farm9.staticflickr.com/8529/8588701778_91aeb65377_o.png&quot; title=&quot;History of Web Frameworks 2013&quot; rel=&quot;lightbox[devoxxfr-2013]&quot;&gt;&lt;img src=&quot;//farm9.staticflickr.com/8529/8588701778_0fb17b5612.jpg&quot; width=&quot;500&quot; height=&quot;223&quot; alt=&quot;History of Web Frameworks 2013&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The best part of the JVM Web Frameworks talk was the audience&apos;s reaction and enthusiasm. Devoxx always seems to attract passionate developers and Devoxx France was no different. Developers packing the room, clapping after your intro, laughing at your jokes, signifying that they agree with you about JSF. As a speaker, it&apos;s an unbelievable experience.
&lt;/p&gt;
&lt;p&gt;
You can view my Comparing JVM Web Frameworks presentation below or &lt;a href=&quot;http://www.slideshare.net/mraible/comparing-jvm-web-frameworks-devoxx-france-2013&quot;&gt;on Slideshare.net&lt;/a&gt;.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;iframe src=&quot;//www.slideshare.net/slideshow/embed_code/17868398?rel=0&quot; width=&quot;512&quot; height=&quot;325&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px&quot; allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt;
&lt;/p&gt;
&lt;p id=&quot;play-vs-grails-smackdown&quot;&gt;&lt;strong&gt;Play Frameworks vs. Grails Smackdown&lt;/strong&gt;&lt;br/&gt;
To prepare for James Ward and my Play vs. Grails Smackdown, we had a number of goals. First of all, we wanted to update our apps to use the latest versions of each framework. I &lt;a href=&quot;http://raibledesigns.com/rd/entry/upgrading_grails_from_2_0&quot;&gt;documented what it took for Grails&lt;/a&gt;, James just &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/6b674e6b8998b0996869cf510dae71a199deec07&quot;&gt;checked in his code&lt;/a&gt; to GitHub. It was interesting to see that Grails 2.0.3 -&gt; 2.2.1 caused a number of issues with testing, while Play 2.0.3 -&gt; Play 2.1.0 required API changes, but nothing for tests. Secondly, we &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/43795059fcd3d321ab93ea14dc149a3c762daf47&quot;&gt;updated all the stats&lt;/a&gt; for our pretty graphs and &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/9654e74e61c03ccd916ee839885503e206339c81&quot;&gt;ran load tests again&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
This is where the fun started. On Tuesday evening, I decided to challenge the notion that Play was twice as fast as Grails. James had proven this with &lt;a href=&quot;http://httpd.apache.org/docs/2.2/programs/ab.html&quot;&gt;Apache Bench&lt;/a&gt; tests. With Play 2.0 and Grails 2.0 (last summer), we clocked Play at 251/requests per second and 198 for Grails. After upgrading each app to the latest releases, we found the numbers to be 233/second for Play and 118 for Grails. 
&lt;/p&gt;
&lt;p&gt;
However, Apache Bench only tests until the first byte is received. Since I&apos;ve done a lot of browser optimizations recently, I fired up &lt;a href=&quot;http://whichloadsfaster.com&quot;&gt;whichloadsfaster.com&lt;/a&gt;, captured a screenshot and &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/5e867a85279d4be0736c4843704646d55e7eacd7&quot;&gt;added it to our presentation&lt;/a&gt;. The next day, James &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/1f15b8c06a5b7b298b111f263f3c26197fbee096&quot;&gt;added a CDN&lt;/a&gt; and a &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/ab532444258f494d40a7126716c6ac7190b80a98&quot;&gt;bunch of caching&lt;/a&gt; to his app and re-ran his AB tests. 
&lt;/p&gt;
&lt;p&gt;
Now he was &lt;em&gt;smoking&lt;/em&gt; Grails, so I &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/ea911b60e17837a6d6b5359e1e616bec43013ddd&quot;&gt;added a CDN&lt;/a&gt; and &lt;a href=&quot;https://github.com/jamesward/happytrails/commit/da776a16ce6ac17eb65d66cb8a206b18a44a6536&quot;&gt;caching&lt;/a&gt; as well. However, the best I could do was just over 1000/requests per second, while he was around 2200/second. When he ran live tests during our talk, Play was around 2800/sec and Grails was around 900.
&lt;/p&gt;
&lt;p&gt;
It was great to see how much better performance we could get with caching and a CDN. The best part is this should be available to most applications, not just these frameworks. By adding a CDN (we used Amazon CloudFront) and caching, we were both able to 10x the performance of our apps. You can find our presentation &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/Play_vs_Grails_Smackdown_DevoxxFrance2013/&quot;&gt;here&lt;/a&gt; or view it below.
&lt;/p&gt;

&lt;p style=&quot;text-align: center&quot;&gt;
&lt;iframe src=&quot;//static.raibledesigns.com/repository/presentations/Play_vs_Grails_Smackdown_DevoxxFrance2013/&quot; width=&quot;500&quot; height=&quot;375&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; allowfullscreen webkitallowfullscreen mozallowfullscreen style=&quot;border:1px solid #CCC;margin-bottom:5px&quot;&gt; &lt;/iframe&gt;
&lt;/p&gt;

&lt;p id=&quot;summary&quot;&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br/&gt;
This was a very enjoyable conference to attend as a speaker. First of all, it was in one of the most beautiful cities in the world, but it&apos;s also a very special place for Trish and I. &lt;a href=&quot;http://raibledesigns.com/rd/entry/our_engaging_trip_to_paris&quot;&gt;We got engaged just outside of Paris in Versailles&lt;/a&gt; after the &lt;a href=&quot;http://raibledesigns.com/rd/entry/my_html5_with_play_scala&quot;&gt;last Devoxx conference&lt;/a&gt; I spoke at. Trish has some &lt;a href=&quot;http://www.mcginityphoto.com/Other/MattandTrishengagementPhotos&quot;&gt;amazing photos&lt;/a&gt; from that trip. Secondly, the Devoxx conference attracts a special kind of developer - one that is passionate about and eager for knowledge. Lastly, speaking with my good friend James, in an exotic city about something we love - that was special. Asking for beers and having them brought to us at the start of our Smackdown. That was magical (thanks Nicolas!). 
&lt;/p&gt;
&lt;p&gt;
To all the Devoxx organizers and crew - well done on a great show!&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/upgrading_grails_from_2_0</guid>
    <title>Upgrading Grails from 2.0 to 2.2</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/upgrading_grails_from_2_0</link>
        <pubDate>Fri, 22 Mar 2013 09:16:37 -0600</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>devoxx</category>
    <category>smackdown</category>
    <category>upgrade</category>
            <description>&lt;a href=&quot;http://grails.org&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/grails-logo-20130322.png&quot; alt=&quot;Grails&quot; width=&quot;166&quot; height=&quot;39&quot; class=&quot;picture&quot; style=&quot;border: 0&quot;/&gt;&lt;/a&gt;
In preparation for my &lt;a href=&quot;http://www.devoxx.com/display/FR13/Play+Framework+vs.+Grails+Smackdown&quot;&gt;Grails vs. Play Smackdown&lt;/a&gt; at &lt;a href=&quot;http://www.devoxx.com/display/FR13/Home&quot;&gt;Devoxx France&lt;/a&gt; next week, I recently upgraded my &lt;a href=&quot;https://github.com/jamesward/happytrails/tree/grails2&quot;&gt;Grails version&lt;/a&gt; of Happy Trails from Grails 2.0.3 to Grails 2.2.1. I ran into a few issues along the way and figured I&apos;d document them here to help others out.
&lt;/p&gt;
&lt;p id=&quot;source&quot;&gt;&lt;strong&gt;Fixing the source&lt;/strong&gt;&lt;br/&gt;The first issue I ran into was Spock and Groovy 2 incompatibilities. &lt;/p&gt;
&lt;pre class=&quot;brush: shell&quot;&gt;
| Resolving plugin JAR dependencies
| Error WARNING: Dependencies cannot be resolved for plugin [mail] due to error: startup failed:
Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar:file:/Users/mraible/.grails/ivy-cache/org.spockframework/spock-core/jars/spock-core-0.7-groovy-1.8.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation  because of exception org.spockframework.util.IncompatibleGroovyVersionException: The Spock compiler plugin cannot execute because Spock 0.7.0-groovy-1.8 is not compatible with Groovy 2.0.7. For more information, see http://versioninfo.spockframework.org
&lt;/pre&gt;
&lt;p&gt;I &lt;a href=&quot;http://stackoverflow.com/questions/15410368/upgrading-from-grails-2-0-3-to-2-2-1-server-access-error-connection-refused&quot;&gt;posted the problem to StackOverflow&lt;/a&gt; and got a response almost immediately. While &lt;a href=&quot;https://github.com/geb/geb-example-grails/pull/7/files&quot;&gt;this pull request&lt;/a&gt; helped me quite a bit, it was ultimately caused by my vision: I had two &quot;geb-spock&quot; dependencies listed in &lt;em&gt;BuildConfig.groovy&lt;/em&gt; with different groupIds.&lt;/p&gt;
&lt;p&gt;At this point, I also moved all my plugin dependencies from &lt;em&gt;application.properties&lt;/em&gt; to &lt;em&gt;BuildConfig.groovy&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The next problem I ran into was &lt;a href=&quot;http://stackoverflow.com/questions/15413701/upgrading-from-grails-2-0-3-to-2-2-1-tests-failing&quot;&gt;a unit test and functional tests failing&lt;/a&gt;. The unit testing issue was caused by my Direction model not being in the tests @Mock annotation. After I added it, validation kicked and I recognized my test was invalid. I added @Ignore and continued.&lt;/p&gt;
&lt;p&gt;The functional test seemed to be seemed to be caused by Geb and it trying to use the Chrome Driver. One of my tests didn&apos;t work with the default HtmlUnitDriver, so I used the ChromeDriver for the one test.&lt;/p&gt;
&lt;pre&gt;
| Running 11 spock tests... 6 of 11
| Failure:  signup as a new user(happytrails.AuthenticatedUserSpec)
|  org.openqa.selenium.WebDriverException: Unable to either launch or connect to Chrome. Please check that ChromeDriver is up-to-date. Using Chrome binary at: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 45.66 seconds
Build info: version: &apos;2.27.0&apos;, revision: &apos;18259&apos;, time: &apos;2012-12-05 11:30:53&apos;
System info: os.name: &apos;Mac OS X&apos;, os.arch: &apos;x86_64&apos;, os.version: &apos;10.8.2&apos;, java.version: &apos;1.7.0_04&apos;
Driver info: org.openqa.selenium.chrome.ChromeDriver
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:187)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:533)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216)
    at org.openqa.selenium.remote.RemoteWebDriver.&lt;init&gt;(RemoteWebDriver.java:111)
    at org.openqa.selenium.remote.RemoteWebDriver.&lt;init&gt;(RemoteWebDriver.java:115)
    at org.openqa.selenium.chrome.ChromeDriver.&lt;init&gt;(ChromeDriver.java:161)
    at org.openqa.selenium.chrome.ChromeDriver.&lt;init&gt;(ChromeDriver.java:107)
    at happytrails.AuthenticatedUserSpec.signup as a new user(AuthenticatedUserSpec.groovy:25)
&lt;/pre&gt;
&lt;p&gt;Even when running &quot;grails -Dgeb.env=chrome test-app&quot;, this still happened. This was caused by the fact that I had &lt;em&gt;GebConfig.groovy&lt;/em&gt; in test/functional/happytrails. Move it to test/functional solved the problem. I also discovered that I know longer needed Chrome to get this test to pass. Apparently, the &lt;a href=&quot;http://fbflex.wordpress.com/2013/03/18/how-to-configure-webdriver-in-grails-for-your-geb-tests/&quot;&gt;HtmlUnitDriver has issues with Grails 2.2&lt;/a&gt;, but it seems to work for me.&lt;/p&gt;
&lt;p&gt;After getting the Geb configuration fixed, I ran into a functional test failure:&lt;/p&gt;
&lt;pre&gt;
| Running 11 spock tests... 5 of 11
| Failure:  click signup link(happytrails.AuthenticatedUserSpec)
|  org.openqa.selenium.ElementNotVisibleException: Element must be displayed to click (WARNING: The server did not provide any stacktrace information)
&lt;/pre&gt;
&lt;p&gt;Even though I could see the &quot;signup&quot; link when I ran &quot;grails run-app&quot;, I could see that it didn&apos;t show up when running tests in Chrome. This turned out to be caused by an extraneous &lt;code&gt;&amp;lt;div class=&quot;nav-collapse&quot;&gt;&lt;/code&gt; I had in my main.gsp. Removing it solved the problem. It&apos;s strange that this never showed up with Grails 2.0. My only guess is that Geb someone didn&apos;t look at the visibility of the element.&lt;/p&gt;
&lt;p&gt;The last testing-related issue I ran into was a &lt;code&gt;InvalidElementStateException&lt;/code&gt;:
&lt;/p&gt;
&lt;pre&gt;
| Running 11 spock tests... 7 of 11
| Failure:  add new route to region(happytrails.AuthenticatedUserSpec)
|  org.openqa.selenium.InvalidElementStateException: Element must be user-editable in order to clear it. (WARNING: The server did not provide any stacktrace information)
&lt;/pre&gt;
&lt;p&gt;I was able to fix this by changing &lt;em&gt;AddRoutePage.groovy&lt;/em&gt; from:&lt;/p&gt;
&lt;pre class=&quot;brush: groovy&quot;&gt;
static content = {
    createButton(to: ShowRoutePage) { create() }
    name { value(&quot;Name&quot;) }
    distance { value(&quot;Distance&quot;) }
    location { value(&quot;Location&quot;) }
}
&lt;/pre&gt;
&lt;p&gt;To:&lt;/p&gt;
&lt;pre class=&quot;brush: groovy&quot;&gt;
static content = {
    createButton(to: ShowRoutePage) { create() }
    form { $(&quot;form&quot;) }
}
&lt;/pre&gt;
&lt;p&gt;And then referencing name, distance and location accordingly (form.name, etc.) in &lt;em&gt;AuthenticatedUserSpec.groovy&lt;/em&gt;.&lt;/p&gt;
&lt;p id=&quot;cloudbees&quot;&gt;&lt;strong&gt;CloudBees&lt;/strong&gt;&lt;br/&gt;
After I had everything working locally, I logged into Jenkins on &lt;a href=&quot;http://www.cloudbees.com/&quot;&gt;CloudBees&lt;/a&gt;. Since I hadn&apos;t used it in a while, I had to wait a bit while my Jenkins server was re-commissioned. Once it was up, I tried to select Grails 2.2.1 to build with, but found it wasn&apos;t available. After a &lt;a href=&quot;https://twitter.com/mraible/status/312636120112431104&quot;&gt;tweeting this&lt;/em&gt;, I learned about &lt;a href=&quot;http://grails.org/doc/2.1.0/ref/Command%20Line/wrapper.html&quot;&gt;Grails Wrapper&lt;/a&gt;, found that the latest Grails Jenkins plugin supported it and got everything working. I later discovered that CloudBees does support Grails 2.2.1, I just needed to setup another Grails installation to automatically download and install 2.2.1.&lt;/p&gt;
&lt;p id=&quot;heroku&quot;&gt;&lt;strong&gt;Heroku&lt;/strong&gt;&lt;br/&gt;
The last two issues I ran into were with Heroku. Since I was upgrading everything, I wanted Grails to build/run under Java 7 and use Servlet 3. I changed the appropriate properties in &lt;em&gt;BuildConfig.groovy&lt;/em&gt;, &lt;a href=&quot;https://devcenter.heroku.com/articles/add-java-version-to-an-existing-maven-app&quot;&gt;configured Heroku&lt;/a&gt; and deployed. No dice.&lt;/p&gt;
&lt;pre&gt;
Error Compilation error: startup failed:
Invalid commandline usage for javac.
javac: invalid source release: 1.7
Usage: javac &lt;options&gt; &lt;source files&gt;
use -help for a list of possible options
&lt;/pre&gt;
&lt;p&gt;Sidenote: I tried building with Java 8 on CloudBees, but discovered the searchable plugin doesn&apos;t support it.&lt;/p&gt;
&lt;pre&gt;
Compile error during compilation with javac.
/scratch/jenkins/workspace/Happy Trails - Grails 2/work/plugins/searchable-0.6.4/src/java/grails/plugin/searchable/internal/compass/index/DefaultUnindexMethod.java:94: error: reference to delete is ambiguous
                    session.delete(query);
                           ^
  both method delete(CompassQuery) in CompassOperations and method delete(CompassQuery) in CompassIndexSession match
&lt;/pre&gt;
&lt;p&gt;As far as Servlet 3, it was pretty obvious that the Jetty version Heroku uses for Grails doesn&apos;t support it. Therefore, I reverted back to Servlet 2.5.&lt;/p&gt;
&lt;pre&gt;
java.lang.NoClassDefFoundError: javax/servlet/AsyncContext
	at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2444)
&lt;/pre&gt;
&lt;p&gt;I sent the Java 7 issue to Heroku Support a few days ago but haven&apos;t heard back yet.&lt;/p&gt;
&lt;p id=&quot;summary&quot;&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br/&gt;
While upgrading Grails from 2.0 to 2.2 wasn&apos;t as easy as expected, it is understandable. After all, Grails 2.2 ships with Groovy 2.0, which has a &lt;a href=&quot;http://www.infoq.com/articles/new-groovy-20&quot;&gt;bunch of new features&lt;/a&gt; itself. All the issues I ran into were fairly easy to solve, except for Java 7 on Heroku. But hey, what do you expect from a free hosting service?&lt;/p&gt;
&lt;p&gt;If you&apos;re at Devoxx France next week, I look forward to &lt;a href=&quot;http://www.devoxx.com/display/FR13/Play+Framework+vs.+Grails+Smackdown&quot;&gt;sharing our research&lt;/a&gt; on Grails 2.2.1 vs. Play 2.1.0. </description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/play_vs_grails_smackdown_at</guid>
    <title>Play vs. Grails Smackdown at &#220;berConf</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/play_vs_grails_smackdown_at</link>
        <pubDate>Mon, 25 Jun 2012 07:10:57 -0600</pubDate>
    <category>Java</category>
    <category>playframework</category>
    <category>webframeworks</category>
    <category>uberconf</category>
    <category>grails</category>
    <category>comparison</category>
            <description>Play and Grails have been hyped as the most productive JVM Web Frameworks for the last couple of years. That hype has recently grown thanks to both frameworks&apos; 2.0 releases. That&apos;s why &lt;a href=&quot;http://jamesward.com&quot;&gt;James Ward&lt;/a&gt; and I decided to do a presentation at &lt;a href=&quot;http://uberconf.com&quot;&gt;&#220;berConf&lt;/a&gt; comparing the two. In April, we proposed the talk to Jay Zimmerman, got accepted and went to work.
&lt;/p&gt;
&lt;p id=&quot;how&quot;&gt;&lt;strong&gt;How we did it&lt;/strong&gt;&lt;br/&gt;
In the beginning of May, we met at a &lt;a href=&quot;http://www.wynkoop.com/&quot;&gt;brewery in LoDo&lt;/a&gt; and sketched out the app we wanted to build. We also came up with a schedule for development and a plan for the presentation. We decided to build two different webapps, each with little-to-no Ajax functionality and a few features that we could use to load test and compare the applications. 
&lt;/p&gt;
&lt;p&gt;
We started out with the name &#8220;Happy Trails&#8221; since we both liked trails and happy hours. Later, James found that www.ubertracks.com was available and purchased the domain. We setup the Grails app to be on bike.ubertracks.com and Play/Java to be on hike.ubertracks.com. We managed our &lt;a href=&quot;https://github.com/jamesward/happytrails&quot;&gt;source code on GitHub&lt;/a&gt;, continuously tested on &lt;a href=&quot;http://www.cloudbees.com/&quot;&gt;CloudBees&lt;/a&gt; and deployed to &lt;a href=&quot;http://heroku.com&quot;&gt;Heroku&lt;/a&gt;. Two weeks ago, when we were finishing up our apps, we hired a friend (&lt;a href=&quot;http://www.linkedin.com/pub/linsay-shirley/1/5a0/b4&quot;&gt;Linsay Shirley&lt;/a&gt;) to do QA. 
&lt;/p&gt;
&lt;p&gt;
After fixing bugs, I emailed &lt;a href=&quot;http://blog.lightbody.net/&quot;&gt;Patrick Lightbody&lt;/a&gt;, got some &#8220;cloud dollars&#8221; for &lt;a href=&quot;https://browsermob.com/performance-testing&quot;&gt;Neustar Web Performance&lt;/a&gt; and started running load tests. The Wednesday before last, at 2 in the morning, I recorded &lt;a href=&quot;https://wm2-testscripts-scripts-prod.s3.amazonaws.com/script/b1b78d4286054d159888bc4135379b86/script.js?versionId=J4E28EFR5PzDNnAgPPPfoelw3AhMqI9A&quot;&gt;a simple browsing regions and routes script&lt;/a&gt; and set it to go to 50 users over a 5 minute period and then sustain 50 for another 5 minutes. It was fun to watch the log messages whiz through my console so fast they got blurry. About halfway through testing the Grails app, there was an OOM issue, but it eventually recovered. Limiting db connections to 4 and scaling to 5 Dynos in future tests helped alleviate any issues. 
&lt;/p&gt;
&lt;p&gt;
We took our development experience, the load/performance testing data, and a bunch of ecosystem stats and built &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/Play_vs_Grails_Smackdown_UberConf2012/&quot;&gt;our smackdown presentation&lt;/a&gt;. We used &lt;a href=&quot;http://lab.hakim.se/reveal-js/&quot;&gt;reveal.js&lt;/a&gt;, &lt;a href=&quot;http://www.jamesward.com/2012/06/15/dynamically-rendering-github-files-in-web-pages&quot;&gt;GitHub Files&lt;/a&gt; and &lt;a href=&quot;https://developers.google.com/chart/&quot;&gt;Google Charts&lt;/a&gt; to make things more dynamic.
&lt;/p&gt;
&lt;p id=&quot;conclusions&quot;&gt;&lt;strong&gt;What we found&lt;/strong&gt;&lt;br/&gt;
We arrived at a number of &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/Play_vs_Grails_Smackdown_UberConf2012/#/10&quot;&gt;conclusions&lt;/a&gt; after doing our research:
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;From a code perspective, Play 2 and Grails 2 are very similar frameworks.&lt;/li&gt;
&lt;li&gt;Code authoring was good in both, but lacking IDE support for Play 2&apos;s Scala Templates.&lt;/li&gt;
&lt;li&gt;Grails Plugin Ecosystem is excellent.&lt;/li&gt;
&lt;li&gt;TDD-Style Development is easy with both.&lt;/li&gt;
&lt;li&gt;Type-safety in Play 2 was really useful, especially routes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Statistical Analysis&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Grails has better support for FEO (YSlow, PageSpeed)&lt;/li&gt;
&lt;li&gt;Grails has less LOC! (6 lines less, but 40% more files)&lt;/li&gt;
&lt;li&gt;1 Dyno - Grails had 2x transactions!
&lt;ul style=&quot;margin-bottom: 0&quot;&gt;
&lt;li&gt;Grails experienced OOM about halfway through.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Apache Benchmark with 10K requests:
&lt;ul style=&quot;margin-bottom: 0&quot;&gt;
&lt;li style=&quot;text-decoration:line-through&quot;&gt;Play: ~10% failed requests, Grails: 0&lt;/li&gt;
&lt;li style=&quot;text-decoration:line-through&quot;&gt;Requests per second: {Play: 170, Grails: 198}&lt;/li&gt;
&lt;li&gt;Requests per second: {Play: 251, Grails: 198}&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Load Test with 100 Real Users:
&lt;ul style=&quot;margin-bottom: 0&quot;&gt;
&lt;li&gt;Grails: 10% more transactions, 0 errors&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ecosystem Analysis&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Play&quot; is difficult to search for.&lt;/li&gt;
&lt;li&gt;Grails is more mature.&lt;/li&gt;
&lt;li&gt;Play has momentum issues.&lt;/li&gt;
&lt;li&gt;LinkedIn: more people know Grails than Spring MVC.&lt;/li&gt;
&lt;li&gt;Play has 3x user mailing list traffic.&lt;/li&gt;
&lt;li&gt;We had similar experiences with documentation and questions.&lt;/li&gt;
&lt;li&gt;Outdated documentation is a problem for both.&lt;/li&gt;
&lt;li&gt;Play has &lt;em&gt;way&lt;/em&gt; more hype!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
We figured we spent around 100 hours developing the apps, gathering data and creating the presentation. The good news is it&apos;s all open source! This means you can &lt;a href=&quot;https://github.com/jamesward/happytrails&quot;&gt;clone the project on GitHub&lt;/a&gt; (Grails is in the &lt;em&gt;grails2&lt;/em&gt; branch, Play is in the &lt;em&gt;play2_java&lt;/em&gt; branch) and help us improve it. The presentation is in the master branch in the &lt;em&gt;preso&lt;/em&gt; directory. 
&lt;/p&gt;
&lt;p&gt;
All the data we gathered is open for debate and we&#8217;d love to tune our apps to handle more requests per second. In fact, we already had a contributor &lt;a href=&quot;http://twitter.com/pk11/status/216186997126070272&quot;&gt;discover an issue&lt;/a&gt; and &lt;a href=&quot;https://gist.github.com/2973705&quot;&gt;provide a fix&lt;/a&gt; for Play that increases its throughput from 170 req/second to 252 req/second!
&lt;/p&gt;
&lt;p&gt;
Regardless of what the stats and pretty graphs say, we both enjoyed our experiences with Play 2 and Grails 2. If you haven&apos;t tried them yourself, we encourage you to do so.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/livin_it_up_in_vegas</guid>
    <title>Livin&apos; it up in Vegas at TSSJS 2011</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/livin_it_up_in_vegas</link>
        <pubDate>Tue, 22 Mar 2011 09:04:17 -0600</pubDate>
    <category>Java</category>
    <category>vegas</category>
    <category>tssjs</category>
    <category>perfbench</category>
    <category>gwt</category>
    <category>webframeworks</category>
    <category>vaadin</category>
    <category>liftweb</category>
    <category>springmvc</category>
    <category>video</category>
    <category>playframework</category>
    <category>rubyonrails</category>
    <category>grails</category>
    <category>onlinevideo</category>
            <description>Last Wednesday, Trish and I traveled to Las Vegas for &lt;a href=&quot;http://javasymposium.techtarget.com/&quot;&gt;TheServerSide Java Symposium 2011 conference&lt;/a&gt;. We had a free room from TechTarget, but opted to upgrade to a suite with a view over the Bellagio Fountains. Trish won a trip to Vegas as a sales award earlier in the year and cleverly exchanged it for cash, so our upgrade was sort of free. 
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm6.static.flickr.com/5305/5550023760_e8f128457a.jpg&quot; title=&quot;Caesars Pool&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5305/5550023760_e8f128457a_m.jpg&quot; width=&quot;240&quot; height=&quot;159&quot; alt=&quot;Caesars Pool&quot; style=&quot;border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5053/5550024190_b272c2f012.jpg&quot; title=&quot;The Bellagio Fountains&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5053/5550024190_b272c2f012_m.jpg&quot; width=&quot;240&quot; height=&quot;159&quot; alt=&quot;The Bellagio Fountains&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot; /&gt;&lt;/a&gt;

&lt;/p&gt;
My first talk was on Online Video and my experience at Time Warner Cable. With my former team&apos;s &lt;a href=&quot;http://justanotheripadblog.com/ipad-app-reviews/quick-look-twcable-tv-for-ipad-time-warner-cables-new-live-streaming-app-looks-good&quot;&gt;iPad app releasing the day before&lt;/a&gt;, it was a fun session. The attendance was kind of sparse, but I had some good competition so wasn&apos;t surprised.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;&lt;object id=&quot;__sse7299514&quot; width=&quot;425&quot; height=&quot;355&quot;&gt; &lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=everythingonlinevideotssjs2011-110317161814-phpapp02&amp;rel=0&amp;stripped_title=everything-you-ever-wanted-to-know-about-online-video-tssjs-2011&amp;userName=mraible&quot; /&gt; &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt; &lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt; &lt;embed name=&quot;__sse7299514&quot; src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=everythingonlinevideotssjs2011-110317161814-phpapp02&amp;rel=0&amp;stripped_title=everything-you-ever-wanted-to-know-about-online-video-tssjs-2011&amp;userName=mraible&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt; &lt;/object&gt;&lt;/p&gt;
&lt;p&gt;After I finished speaking, we headed to happy hour and met up with some friends that happened to be in town. We had dinner at the &lt;a href=&quot;http://www.toddenglishpub.com/&quot;&gt;Todd English Pub&lt;/a&gt; and headed to the &lt;a href=&quot;http://www.pennandteller.com/&quot;&gt;Penn &amp;amp; Teller&lt;/a&gt; show at the Rio. We closed the night after Trish had a 45-minute roll at the craps table at &lt;a href=&quot;http://www.harrahs.com/osheas/&quot;&gt;O&apos;Sheas&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We slept in on Thursday and I gave my Comparing JVM Web Frameworks talk that afternoon. I made sure to mention some other methods to choosing web frameworks: doing &lt;a href=&quot;http://code.google.com/p/perfbench/&quot;&gt;performance comparisons&lt;/a&gt; like Peter Thomas has done or &lt;a href=&quot;http://lift.la/my-take-on-matt-raibles-spreadsheet&quot;&gt;choosing Lift&lt;/a&gt; because one of its developers says it&apos;s the best. While Vaadin did sneak into the #5 spot, I made sure and mentioned that Wicket and Tapestry seem to belong there moreso (based on stats, mailing list traffic, etc.).
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;&lt;object id=&quot;__sse7299545&quot; width=&quot;425&quot; height=&quot;355&quot;&gt; &lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingjvmwebframeworkstssjs2011-110317162242-phpapp02&amp;rel=0&amp;stripped_title=comparing-jvm-web-frameworks-tssjs-2011&amp;userName=mraible&quot; /&gt; &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt; &lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt; &lt;embed name=&quot;__sse7299545&quot; src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingjvmwebframeworkstssjs2011-110317162242-phpapp02&amp;rel=0&amp;stripped_title=comparing-jvm-web-frameworks-tssjs-2011&amp;userName=mraible&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt; &lt;/object&gt; 
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mcginityphoto.com/&quot;&gt;Trish&lt;/a&gt; took a bunch of pictures during my talk, which had a great turnout and lots of participation.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm6.static.flickr.com/5131/5550024506_e90c77ff59.jpg&quot; title=&quot;Getting Intro&apos;d&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5131/5550024506_e90c77ff59_t.jpg&quot; width=&quot;100&quot; height=&quot;66&quot; alt=&quot;Getting Intro&apos;d&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5266/5549441719_057d56a957.jpg&quot; title=&quot;My Intro&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5266/5549441719_057d56a957_t.jpg&quot; width=&quot;100&quot; height=&quot;66&quot; alt=&quot;My Intro&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5149/5550024786_52a3f6aaea.jpg&quot; title=&quot;My Dream Bus on Display&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5149/5550024786_52a3f6aaea_t.jpg&quot; width=&quot;100&quot; height=&quot;66&quot; alt=&quot;My Dream on Display&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;a href=&quot;http://farm6.static.flickr.com/5051/5549442047_5defbb12d0.jpg&quot; title=&quot;The Problem&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5051/5549442047_5defbb12d0_t.jpg&quot; width=&quot;100&quot; height=&quot;66&quot; alt=&quot;The Problem&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5173/5550025074_d8af7137ba.jpg&quot; title=&quot;How do you choose?&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5173/5550025074_d8af7137ba_t.jpg&quot; width=&quot;100&quot; height=&quot;66&quot; alt=&quot;How do you choose?&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5140/5550025200_a32831f218.jpg&quot; title=&quot;Choosing a Framework&quot; rel=&quot;lightbox[tssjs2011]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5140/5550025200_a32831f218_t.jpg&quot; width=&quot;100&quot; height=&quot;66&quot; alt=&quot;Choosing a Framework&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot; /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;That evening, we celebrated St. Patty&apos;s Day with some college buddies of mine, ate great sushi at &lt;a href=&quot;http://www.mandalaybay.com/dining/casual-restaurants/mizuya.aspx&quot;&gt;Mizuya&lt;/a&gt; and experienced the joys of three card poker. Thanks to TechTarget for inviting me to TSSJS 2011; we had an awesome time. You can find all the pictures we took &lt;a href=&quot;http://www.flickr.com/photos/mraible/sets/72157626325120502/&quot;&gt;on Flickr&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; color: #666; padding-top: 5px&quot;&gt;
P.S. If you can&apos;t see the presentations in this post (a.k.a. you don&apos;t have Flash), you can &lt;a href=&quot;http://www.slideshare.net/mraible&quot; style=&quot;color: #666&quot;&gt;view them on on Slideshare&lt;/a&gt; or &lt;a href=&quot;http://raibledesigns.com/rd/page/publications&quot; style=&quot;color: #666&quot;&gt;download the PDFs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/how_i_calculated_ratings_for</guid>
    <title>How I Calculated Ratings for My JVM Web Frameworks Comparison</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/how_i_calculated_ratings_for</link>
        <pubDate>Mon, 6 Dec 2010 11:55:18 -0700</pubDate>
    <category>Java</category>
    <category>devoxx2010</category>
    <category>webframeworks</category>
    <category>jvm</category>
    <category>lift</category>
    <category>comparingwebframeworks</category>
    <category>webframeworksmatrix</category>
    <category>spring</category>
    <category>rails</category>
    <category>vaadin</category>
    <category>jsf</category>
    <category>flex</category>
    <category>gwt</category>
    <category>wicket</category>
    <category>springmvc</category>
    <category>stripes</category>
    <category>java</category>
    <category>rubyonrails</category>
    <category>devoxx</category>
    <category>grails</category>
    <category>struts2</category>
    <category>playframework</category>
            <description>When I re-wrote my &lt;a href=&quot;http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks&quot;&gt;Comparing JVM Web Frameworks presentation&lt;/a&gt; from scratch, I decided to add a &lt;a href=&quot;http://bit.ly/jvm-frameworks-matrix&quot;&gt;matrix&lt;/a&gt; that allows you to rate a framework based on &lt;a href=&quot;https://docs.google.com/document/pub?id=1jAGPWwlEcYikqOPg8faYgRV7cQNS_iCCoJ1VNc_99M4&quot;&gt;20 different criteria&lt;/a&gt;. The reason I did this was because I&apos;d used this method when &lt;a href=&quot;http://raibledesigns.com/rd/entry/ajax_framework_analysis_results&quot;&gt;choosing an Ajax framework for Evite&lt;/a&gt; last year. The matrix seemed to work well for selecting the top 5 frameworks, but it also inspired a lot of discussion in the community that my &lt;a href=&quot;http://ptrthomas.wordpress.com/2010/12/04/comparing-jvm-web-frameworks-a-response-to-matt-raible/&quot;&gt;ratings&lt;/a&gt; &lt;a href=&quot;http://blog.frankel.ch/critical-analysis-of-frameworks-comparison&quot;&gt;were&lt;/a&gt; &lt;a href=&quot;http://basementcoders.com/2010/12/episode-27-hudson-oracle-raible-and-astycrapper/&quot;&gt;wrong&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;I expected this, as I certainly don&apos;t know every framework as well as I&apos;d like. The mistake I made was asking for the community to provide feedback on my ratings without describing how I arrived at them. From &lt;a href=&quot;http://ptrthomas.wordpress.com/2010/12/04/comparing-jvm-web-frameworks-a-response-to-matt-raible/&quot;&gt;Peter Thomas&apos;s blog&lt;/a&gt;:
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
What you are doing is adjusting ratings based on who in the community shouts the loudest. I can&apos;t help saying that this approach comes across as highly arrogant and condescending, you seem to expect framework developers and proponents to rush over and fawn over you to get better ratings, like waiters in a restaurant trying to impress a food-critic for Michelin stars.
&lt;/p&gt;
&lt;p&gt;
I apologize for giving this impression. It certainly wasn&apos;t my intent. By having simple numbers (1.0 == framework does well, 0.5 == framework is OK and 0 == framework not good at criteria) with no rationalization, I can see how the matrix can be interpreted as useless (or to put it bluntly, as &lt;a href=&quot;http://basementcoders.com/2010/12/episode-27-hudson-oracle-raible-and-astycrapper/&quot;&gt;something you should wipe your ass with&lt;/a&gt;). I don&apos;t blame folks for getting angry.&lt;/p&gt;
&lt;p&gt;For my Rich Web Experience presentation, I documented why I gave each framework the rating I did. Hopefully this will allow folks to critique my ratings more constructively and I can make the numbers more accurate. You can view this document below or &lt;a href=&quot;http://bit.ly/jvm-webfwk-ratings-logic&quot;&gt;on Google Docs&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;//docs.google.com/document/pub?id=1X_XvpJd6TgEAMe4a6xxzJ38yzmthvrA6wD7zGy2Igog&amp;amp;embedded=true&quot; style=&quot;width: 100%; border: 1px solid silver; height: 400px&quot;&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;In the end, what I was hoping to do with this matrix was to simply highlight a &lt;em&gt;technique&lt;/em&gt; for choosing a web framework. Furthermore, I think adding a &quot;weight&quot; to each criteria is important because things like books often aren&apos;t as important as REST support. To show how this might be done, I added a second sheet to the matrix and made up some weighting numbers. I&apos;d expect anyone that wants to use this to &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/JVM_Web_Framework_Matrix_20101206.xls&quot;&gt;downloaded the matrix&lt;/a&gt;, verify the ratings are accurate for your beliefs and weight the criteria accordingly.
&lt;/p&gt;
&lt;p&gt;
Of course, as I and many others have said, the best way to choose a web framework is to try them yourself. I emphasized this at the end of my presentation with the following two slides.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/5238846712/&quot; title=&quot;Slide #77 from Comparing JVM Web Frameworks Talk at RWX2010&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5281/5238846712_375a63e4c6.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Slide #77 from Comparing JVM Web Frameworks Talk at RWX2010&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/5238846740/&quot; title=&quot;Slide #76 from Comparing JVM Web Frameworks Talk at RWX2010&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5129/5238846740_29b06ee0eb.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Slide #76 from Comparing JVM Web Frameworks Talk at RWX2010&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks</guid>
    <title>My Comparing JVM Web Frameworks Presentation from Devoxx 2010</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks</link>
        <pubDate>Thu, 18 Nov 2010 05:23:10 -0700</pubDate>
    <category>Java</category>
    <category>spring</category>
    <category>stripes</category>
    <category>rubyonrails</category>
    <category>java</category>
    <category>jvm</category>
    <category>struts2</category>
    <category>devoxx2010</category>
    <category>playframework</category>
    <category>lift</category>
    <category>devoxx</category>
    <category>grails</category>
    <category>webframeworks</category>
    <category>rails</category>
    <category>wicket</category>
    <category>gwt</category>
    <category>springmvc</category>
    <category>vaadin</category>
    <category>jsf</category>
    <category>flex</category>
            <description>This week, I&apos;ve been having a great time in Antwerp, Belgium at the &lt;a href=&quot;http://www.devoxx.com/display/Devoxx2K10/Home&quot;&gt;Devoxx&lt;/a&gt; Conference. This morning, I had the pleasure of delivering my &lt;a href=&quot;http://www.devoxx.com/display/Devoxx2K10/Comparing+JVM+Web+Frameworks&quot;&gt;Comparing JVM Web Frameworks&lt;/a&gt; talk. I thoroughly enjoyed giving this presentation, especially to such a large audience. You can view the presentation below (if you have Flash installed) or &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/Comparing_JVM_Web_Frameworks_Devoxx2010.pdf&quot;&gt;download it here&lt;/a&gt;.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;&lt;iframe src=&quot;//www.slideshare.net/slideshow/embed_code/key/uBZoC22SGdjpFy&quot; width=&quot;510&quot; height=&quot;420&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;&quot; allowfullscreen&gt; &lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
Unlike previous years, I chose to come up with a &lt;a href=&quot;http://bit.ly/jvm-frameworks-matrix&quot;&gt;spreadsheet matrix&lt;/a&gt; that shows why I chose the 5 I did. This spreadsheet and rankings given to each framework are likely to be debated, as I don&apos;t know all the frameworks as well as I&apos;d like to. Also, the missing column on this spreadsheet is a &quot;weighting&quot; column where you can prioritize certain criteria like I&apos;ve done in the past when &lt;a href=&quot;http://raibledesigns.com/rd/entry/ajax_framework_analysis_results&quot;&gt;Comparing Ajax Frameworks&lt;/a&gt;. If you believe there are incorrect numbers, please let me know and I&apos;ll try to get those fixed before I do this talk again at &lt;a href=&quot;http://www.therichwebexperience.com/conference/fort_lauderdale/2010/11/home&quot;&gt;The Rich Web Experience&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
One thing that doesn&apos;t come across in this presentation is that I believe &lt;em&gt;anyone&lt;/em&gt; can use this matrix, and weightings, to make &lt;em&gt;any&lt;/em&gt; of these frameworks come out on top. I also believe web frameworks are like spaghetti sauce in &lt;a href=&quot;http://www.gladwell.com/2004/2004_09_06_a_ketchup.html&quot;&gt;The Ketchup Conundrum&lt;/a&gt;. That is, the only way to make more happy spaghetti sauce lovers was to make more &lt;em&gt;types&lt;/em&gt; of spaghetti sauce. You can read more about this in my &lt;a href=&quot;http://raibledesigns.com/rd/entry/there_is_no_best_web&quot;&gt;There is no &quot;best&quot; web framework&lt;/a&gt; article.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; If you disagree with the various ratings I gave to web frameworks in this presentation, please provide your opinions by &lt;a href=&quot;http://bit.ly/webmatrixsurvey&quot;&gt;filling out this survey&lt;/a&gt;. Thanks to &lt;a href=&quot;http://twitter.com/sarbogast&quot;&gt;Sebastien Arbogast&lt;/a&gt; for setting this up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Sebastien has posted his survey results at &lt;a href=&quot;http://sebastien-arbogast.com/2010/11/19/jvm-web-framework-survey-first-results/&quot;&gt;JVM Web Framework Survey, First Results&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 12/6:&lt;/strong&gt; A video of this presentation is &lt;a href=&quot;http://parleys.com/d/2118&quot;&gt;now available on Parleys.com&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 5px; color: #666&quot;&gt;
P.S. My current gig is ending in mid-December. If you&apos;re looking for a UI Architect with a passion for open source frameworks, please &lt;a href=&quot;http://raibledesigns.com/contact.jsp&quot;&gt;let me know&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/presentations_from_the_irish_software</guid>
    <title>My Presentations from The Irish Software Show 2010</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/presentations_from_the_irish_software</link>
        <pubDate>Thu, 10 Jun 2010 07:11:35 -0600</pubDate>
    <category>Java</category>
    <category>webframeworks</category>
    <category>grails</category>
    <category>iss2010</category>
    <category>rubyonrails</category>
    <category>flex</category>
    <category>rails</category>
    <category>gwt</category>
            <description>This week I&apos;ve been enjoying Dublin, Ireland thanks to the 2nd Annual &lt;a href=&quot;http://epicenter.ie/2010.html&quot;&gt;Irish Software Show&lt;/a&gt;. On Wednesday night, I spoke about &lt;a href=&quot;http://epicenter.ie/2010.html?zone_id=20&amp;amp;mode=agenda&amp;amp;session=152#session&quot;&gt;The Future of Web Frameworks&lt;/a&gt; and  participated in a panel with Grails, Rails, ASP.NET MVC and Seaside developers. It was a fun night with lots of lively discussion. Below is my presentation from this event.&lt;/p&gt;

&lt;p style=&quot;text-align: center&quot;&gt;&lt;object id=&quot;__sse3271151&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=thefutureofwebframeworks-100225012146-phpapp02&amp;amp;stripped_title=the-future-of-web-frameworks&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed name=&quot;__sse3271151&quot; src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=thefutureofwebframeworks-100225012146-phpapp02&amp;amp;stripped_title=the-future-of-web-frameworks&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;This morning, I delivered my &lt;a href=&quot;http://epicenter.ie/2010.html?zone_id=20&amp;amp;mode=agenda&amp;amp;session=151#session&quot;&gt;Comparing Kick-Ass Web Frameworks&lt;/a&gt; talk. This presentation contains updated statistics for various metrics comparing Rails vs. Grails and Flex vs. GWT. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;object id=&quot;__sse2644393&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingkickasswebframeworks-091203145644-phpapp02&amp;stripped_title=comparing-kick-ass-web-frameworks&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed name=&quot;__sse2644393&quot; src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingkickasswebframeworks-091203145644-phpapp02&amp;stripped_title=comparing-kick-ass-web-frameworks&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks to all who attended my talks this week!
&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 5px; color: #666&quot;&gt;
P.S. I believe audio was recorded on Wednesday night, but I&apos;m unsure how it turned out. I&apos;m pretty sure no recordings were done on this morning&apos;s session. 
&lt;/p&gt;&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/reviews_for_grails_a_quick</guid>
    <title>Reviews for Grails: A Quick-Start Guide and Kanban and Scrum</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/reviews_for_grails_a_quick</link>
        <pubDate>Mon, 1 Feb 2010 09:29:40 -0700</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>infoq</category>
    <category>bookreview</category>
    <category>kanban</category>
    <category>scrum</category>
    <category>books</category>
            <description>A couple weeks ago, I had a business trip from Denver to Washington, DC. Since I didn&apos;t have any coding to do on the flight, I brought along a couple books and was surprisingly able to finish them both en route. Tech books that can be read in a single flight are my favorite. Another book I recall doing this with was &lt;a href=&quot;http://www.firststepsinflex.com/&quot;&gt;First Steps in Flex&lt;/a&gt; back in December.&lt;/p&gt;
&lt;p&gt;The books I read were Dave Klein&apos;s &lt;a href=&quot;http://www.pragprog.com/titles/dkgrails/grails&quot;&gt;Grails: A Quick-Start Guide&lt;/a&gt; and Henrik Kniberg and Mattias Skarin&apos;s &lt;a href=&quot;http://www.infoq.com/minibooks/kanban-scrum-minibook&quot;&gt;Kanban and Scrum minibook&lt;/a&gt;. Below are short reviews of each book.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grails: A Quick-Start Guide&lt;/strong&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.pragprog.com/titles/dkgrails/grails&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4009/4317526332_c8d18eb3f9_t.jpg&quot; width=&quot;83&quot; height=&quot;100&quot; class=&quot;picture&quot; style=&quot;border: 1px solid silver&quot; /&gt;&lt;/a&gt;
I&apos;ve developed a few Grails applications, so I didn&apos;t expect to learn a whole lot from this book, but I was pleasantly surprised. Not only did it introduce all the basic concepts in a clear and concise way, it actually made it fun to read. The first chapter does a good job of introducing Groovy; showing you how to use closures and the easy-to-use collections API. From there, you dive into learning about the project, which is actually a real-life web application called &lt;a href=&quot;http://tekdays.com/&quot;&gt;TekDays.com&lt;/a&gt;. Then the foundational Iteration Zero is planned and executed.&lt;/p&gt;

&lt;p&gt;In Chapter 3, you dive right into creating domain classes and their relationships. All the different mapping types are covered: one-to-one, one-to-many and the good ol&apos; many-to-many. Since this is often a difficult part of an application, it&apos;s always nice to see how much Grails simplifies it. I liked the Ajax section in Chapter 7 and especially the part where it showed how to do a TagLib to show threaded comments in a forum.&lt;/p&gt;
&lt;p&gt;Chapter 7 (Security) was a little disappointing in that it showed how to hand-roll your own security rather than using the &lt;a href=&quot;http://grails.org/plugin/acegi&quot;&gt;Spring Security plugin&lt;/a&gt; (formerly Acegi) or the &lt;a href=&quot;http://grails.org/plugin/shiro&quot;&gt;Shiro plugin&lt;/a&gt; (formerly JSecurity). I&apos;d especially have liked to see how to do Ajax authentication where a token is generated for the client and included as a header in each subsequent request.
&lt;/p&gt;
&lt;p&gt;Other than that, I really enjoyed Chapter 10 where I learned how to implement search using dynamic finders, Hibernate&apos;s Criteria API and the &lt;a href=&quot;http://grails.org/Searchable+Plugin&quot;&gt;Searchable Plugin&lt;/a&gt; (which gets its awesomeness from &lt;a href=&quot;http://www.compass-project.org/&quot;&gt;Compass&lt;/a&gt;). Implementing Compass in Java requires many, many annotations. In Grails, it&apos;s as simple as adding the following to your domain class.
&lt;/p&gt;
&lt;pre&gt;
static searchable = true
&lt;/pre&gt;
&lt;p&gt;I truly enjoyed this book, especially with its Agile Development patterns that used iterations to get things done. Grails: A Quick-Start Guide is a code-intensive journey that gets up you to speed on Grails quickly and efficiently. It&apos;s very much like the framework itself. It eliminates the yak shaving and allows you learn without distractions. Kudos to Dave Klein for creating such an enjoyable and easy-to-read book. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Kanban and Scrum&lt;/strong&gt;
&lt;br/&gt;
&lt;a href=&quot;http://www.infoq.com/minibooks/kanban-scrum-minibook&quot;&gt;&lt;img src=&quot;//farm3.static.flickr.com/2732/4317526382_473ba07fa0_t.jpg&quot; width=&quot;81&quot; height=&quot;100&quot; class=&quot;picture&quot; style=&quot;border: 0&quot; /&gt;&lt;/a&gt;
In my career, I&apos;ve used Scrum on quite a few projects. Of course, it&apos;s not the processes that typically make a team successful. Rather, it&apos;s often the gelling of the team members, as well as respect for coding practices that are proven to create higher quality code - specifically TDD and pair programming. Before reading this book, I&apos;d heard a bit about Kanban, most of it from &lt;a href=&quot;http://martyhaught.com/&quot;&gt;Marty Haught&apos;s&lt;/a&gt; &lt;a href=&quot;http://raibledesigns.com/rd/entry/lean_teams_doing_more_with&quot;&gt;Lean Teams: Doing more with less&lt;/a&gt; presentation. 
&lt;/p&gt;
&lt;p&gt;This book did a great job of showing the differences between the two approaches: how Scrum promotes iterations whereas Kanban promotes cycle time. The most interesting part of the book is the Case Study in the 2nd half. This section shows how a team used various techniques to develop a well-oiled development machine. I think the most important thing to note from this section is how the team was willing to change, learn and grow based on their experiences - in a very rapid fashion.&lt;/p&gt;
&lt;p&gt;In my current gig, I&apos;m helping a team of developers move from waterfall to agile processes. We&apos;re leveraging many aspects of Scrum and agile by using a coach, iterations, daily standups, TDD, continuous integration and creating &quot;as built&quot; documentation when we finish developing a feature. The &quot;As Built&quot; documentation is something I picked up from working at &lt;a href=&quot;http://www.chordiant.com&quot;&gt;Chordiant&lt;/a&gt; and I&apos;ve found it to be a great way of education developers (and outsiders) how things were done in an iteration.&lt;/p&gt;
&lt;p&gt;One thing we&apos;ve seen in our first few weeks is that iterations don&apos;t work for all teams or individuals. A Kanban model fits much better for them. Having a Kanban board allows them to visualize (and control) their workload in a much more efficient manner. We haven&apos;t started implementing actual boards on a wall, we&apos;re just using spreadsheets for now. However, we do have two Agile Coaches starting this week so I expect things to improve rapidly. 
&lt;/p&gt;
&lt;p&gt;Back to the book. More than anything, I enjoyed reading this book because it made me excited about the changes I&apos;m helping implement and I believe in many of the practices in both Scrum and Kanban. I enjoy iterations and structured expectations around development, but I can see how Kanban would work better for folks in operations and infrastructure. I look forward to implementing the best parts of both worlds and hopefully a similar Case Study of what worked and what didn&apos;t. With any luck, we&apos;ll be able to learn, evolve and produce at a much higher level than previous waterfall practices achieved.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/grails_oauth_and_linkedin_apis</guid>
    <title>Grails OAuth and LinkedIn APIs</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/grails_oauth_and_linkedin_apis</link>
        <pubDate>Tue, 22 Dec 2009 15:37:57 -0700</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>github</category>
    <category>linkedin</category>
    <category>profile</category>
    <category>oauth</category>
            <description>Back in November, I wrote about &lt;a href=&quot;http://raibledesigns.com/rd/entry/gwt_oauth_and_linkedin_apis&quot;&gt;how to talk to LinkedIn APIs with GWT&lt;/a&gt;. A week later, I &lt;a href=&quot;http://twitter.com/mraible/status/6195066631&quot;&gt;figured out how to do it with Grails&lt;/a&gt; and contributed a &lt;a href=&quot;http://code.google.com/p/grails-oauth/issues/detail?id=1&quot;&gt;patch&lt;/a&gt; to the grails-oauth plugin. 
&lt;/p&gt;
&lt;p&gt;Since then, a few folks have asked how I did it. Since code speaks louder than words, I took some time and 1) verified the oauth plugin works as expected and 2) created an example application demonstrating functionality. You can find the results in &lt;a href=&quot;http://github.com/mraible/grails-oauth&quot;&gt;my fork of grails-oauth on GitHub&lt;/a&gt;. You can also &lt;a href=&quot;http://demo.raibledesigns.com/grails-oauth&quot;&gt;view the example online&lt;/a&gt;.
&lt;/p&gt;
&lt;p style=&quot;border-bottom: 1px dotted silver; padding-bottom: 5px&quot;&gt;Below is a quick tutorial explaining how to integrate LinkedIn into your Grails application.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://www.grails.org/Download&quot;&gt;Download&lt;/a&gt; and install Grails 1.1.2.&lt;/li&gt;
&lt;li&gt;Run &lt;em&gt;grails create-app&lt;/em&gt; to create your application.&lt;/li&gt;
&lt;li&gt;Add the following to the bottom of &lt;em&gt;grails-app/conf/Config.groovy&lt;/em&gt;:
&lt;pre class=&quot;brush: java&quot;&gt;
oauth {
    linkedin {
        requestTokenUrl=&quot;https://api.linkedin.com/uas/oauth/requestToken&quot;
        accessTokenUrl=&quot;https://api.linkedin.com/uas/oauth/accessToken&quot;
        authUrl=&quot;https://api.linkedin.com/uas/oauth/authorize&quot;
        consumer.key=&quot;XXX&quot;
        consumer.secret=&quot;XXX&quot;
    }
}
&lt;/pre&gt;
You can get your consumer.key and consumer.secret at &lt;a href=&quot;https://www.linkedin.com/secure/developer&quot;&gt;https://www.linkedin.com/secure/developer&lt;/a&gt;. Make sure to set the &lt;em&gt;OAuth Redirect URL&lt;/em&gt; to http://localhost:8080/{your.app.name}/oauth/callback for testing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/mraible/grails-oauth/archives/master&quot;&gt;Download&lt;/a&gt; the oauth-plugin, extract it and build it using &lt;em&gt;grails package-plugin&lt;/em&gt;. Install it in your project using &lt;em&gt;grails install-plugin path/to/zip&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Add a link to the GSP you want to invoke LinkedIn Authentication from:
&lt;pre class=&quot;brush: html&quot;&gt;
&amp;lt;g:oauthLink consumer=&apos;linkedin&apos; returnTo=&quot;&amp;#91;controller:&apos;profile&apos;&amp;#93;&quot;&amp;gt;
    Login with LinkedIn
&amp;lt;/g:oauthLink&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Create &lt;em&gt;grails-app/controllers/ProfileController.groovy&lt;/em&gt; to access your LinkedIn Profile.
&lt;pre class=&quot;brush: java&quot;&gt;
class ProfileController {
    def apiUrl = &quot;http://api.linkedin.com/v1/people/~&quot;
    def oauthService
    
    def index = {
 
        if (session.oauthToken == null) {
            redirect(uri:&quot;/&quot;)
        }
 
        if (params?.apiUrl) apiUrl = params.apiUrl
        
        def response = oauthService.accessResource(
                apiUrl, &apos;linkedin&apos;, &amp;#91;key:session.oauthToken.key, secret:session.oauthToken.secret&amp;#93;, &apos;GET&apos;)
 
        render(view: &apos;index&apos;, model: &amp;#91;profileXML: response, apiUrl: apiUrl&amp;#93;)
    }
 
    def change = {
        if (params?.apiUrl) {
            println(&quot;Setting api url to &quot; + params.apiUrl)
            apiUrl = params.apiUrl
        }
        
        redirect(action:index,params:params)
    }
}
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Create &lt;em&gt;grails-app/views/profile/index.gsp&lt;/em&gt; to display the retrieved profile and allow subsequent API calls.
&lt;pre class=&quot;brush: html&quot;&gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Your Profile&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;a class=&quot;home&quot; href=&quot;${createLinkTo(dir:&apos;&apos;)}&quot;&amp;gt;Home&amp;lt;/a&amp;gt;
&amp;lt;g:hasOauthError&amp;gt;
    &amp;lt;div class=&quot;errors&quot;&amp;gt;
        &amp;lt;g:renderOauthError/&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/g:hasOauthError&amp;gt;

&amp;lt;g:form url=&quot;&amp;#91;action:&apos;change&apos;,controller:&apos;profile&apos;&amp;#93;&quot; method=&quot;get&quot;&amp;gt;
    Your LinkedIn Profile:
    &amp;lt;textarea id=&quot;payload&quot; style=&quot;width: 100%; height: 50%; color: red&quot;&amp;gt;${profileXML}&amp;lt;/textarea&amp;gt;
    &amp;lt;p&amp;gt;
        &amp;lt;g:textField name=&quot;apiUrl&quot; value=&quot;${apiUrl}&quot; size=&quot;100%&quot;/&amp;gt;
        &amp;lt;br/&amp;gt;
        &amp;lt;g:submitButton name=&quot;send&quot; value=&quot;Send Request&quot;/&amp;gt;
    &amp;lt;/p&amp;gt;
&amp;lt;/g:form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Start your app using &lt;em&gt;grails run-app&lt;/em&gt; and enjoy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 5px&quot;&gt;As mentioned earlier, you can &lt;a href=&quot;http://github.com/mraible/grails-oauth/archives/master&quot;&gt;download the grails-oauth-example&lt;/a&gt; or &lt;a href=&quot;http://demo.raibledesigns.com/grails-oauth&quot;&gt;view it online&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;One improvement I&apos;d like to see is to simplify the parsing of XML into a Profile object, much like the &lt;a href=&quot;http://pivotallabs.com/users/will/blog/articles/1096-linkedin-gem-for-a-web-app&quot;&gt;linkedin gem&lt;/a&gt; does for Rails. 
&lt;/p&gt;
&lt;p&gt;
If you&apos;re interested in learning more about LinkedIn and OAuth, I encourage you to checkout &lt;a href=&quot;http://www.linkedin.com/in/taylorsingletary&quot;&gt;Taylor Singletary&apos;s&lt;/a&gt; presentation &lt;a href=&quot;http://www.slideshare.net/episod/linkedin-oauth-zero-to-hero&quot;&gt;LinkedIn OAuth: Zero to Hero&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I &lt;a href=&quot;http://github.com/mraible/grails-oauth/commit/6db20f3b8341383b869f49d6ca126ebd99ccb364&quot;&gt;updated&lt;/a&gt; the oauth-plugin so it&apos;s backwards-compatible with OAuth 1.0 and added Twitter to the example application to prove it. If you&apos;re seeing &quot;Cannot invoke method remove() on null object&quot;, it&apos;s likely caused by your redirect URL pointing to an application on a different domain.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/comparing_kick_ass_web_frameworks</guid>
    <title>Comparing Kick-Ass Web Frameworks at The Rich Web Experience</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/comparing_kick_ass_web_frameworks</link>
        <pubDate>Fri, 4 Dec 2009 08:16:48 -0700</pubDate>
    <category>Java</category>
    <category>jobs</category>
    <category>gwt</category>
    <category>richwebexperience</category>
    <category>richweb</category>
    <category>trends</category>
    <category>flex</category>
    <category>struts</category>
    <category>rails</category>
    <category>grails</category>
            <description>Yesterday, I delivered my &lt;a href=&quot;http://www.therichwebexperience.com/conference/orlando/2009/12/session?id=15951&quot;&gt;Comparing Kick-Ass Web Frameworks&lt;/a&gt; talk at the Rich Web Experience in Orlando, Florida. Below are the slides I used:&lt;/p&gt;
&lt;div style=&quot;text-align:center; margin-bottom: 10px&quot; id=&quot;__ss_2644393&quot;&gt;
&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingkickasswebframeworks-091203145644-phpapp02&amp;stripped_title=comparing-kick-ass-web-frameworks&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingkickasswebframeworks-091203145644-phpapp02&amp;stripped_title=comparing-kick-ass-web-frameworks&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;Although it&apos;s difficult to convey a presentation in a slide deck, I can offer you my conclusion: &lt;a href=&quot;http://java.dzone.com/news/there-no-best-web-framework&quot;&gt;there is no &quot;best&quot; web framework&lt;/a&gt;. I believe web frameworks are like &lt;a href=&quot;http://www.ted.com/talks/malcolm_gladwell_on_spaghetti_sauce.html&quot;&gt;spaghetti sauce&lt;/a&gt; in that everyone has different tastes and having so many choices is necessary to satisfy everyone. You can read more about the &lt;em&gt;plural nature of perfection&lt;/em&gt; in Malcolm Gladwell&apos;s &lt;a href=&quot;http://www.gladwell.com/2004/2004_09_06_a_ketchup.html&quot;&gt;The Ketchup Conundrum&lt;/a&gt; (a written version of &lt;a href=&quot;http://www.ted.com/talks/malcolm_gladwell_on_spaghetti_sauce.html&quot;&gt;What we can learn from spaghetti sauce&lt;/a&gt;). Even though there is no &quot;best&quot; web framework, I believe GWT, Flex, Rails and Grails are frameworks that every web developer should try. They really do make it fun to develop web applications.
&lt;/p&gt;
&lt;p&gt;You can find the slides for my other RWE talk at &lt;a href=&quot;http://raibledesigns.com/rd/entry/building_sofea_applications_with_gwt&quot;&gt;Building SOFEA Applications with GWT and Grails&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Kudos to &lt;a href=&quot;http://www.nofluffjuststuff.com&quot;&gt;Jay Zimmerman&lt;/a&gt; for putting on a great show in Orlando this year. I had a great time talking with folks and learning in the sessions I attended. I particularly enjoyed bringing my parents and kids and staying at such a nice resort. Disney World (Magic Kingdom) and Universal Studios was very enjoyable due to the short lines. Also, the weather was perfect - especially considering the freezing cold in Denver this week. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/building_sofea_applications_with_gwt</guid>
    <title>Building SOFEA Applications with GWT and Grails</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/building_sofea_applications_with_gwt</link>
        <pubDate>Thu, 12 Nov 2009 09:30:09 -0700</pubDate>
    <category>Java</category>
    <category>gwt</category>
    <category>evite</category>
    <category>sofea</category>
    <category>grails</category>
            <description>Last night, I spoke at the &lt;a href=&quot;http://denverjug.org&quot;&gt;Denver Java User Group&lt;/a&gt; meeting. The consulting panel with &lt;a href=&quot;http://www.ambientideas.com/blog/&quot;&gt;Matthew&lt;/a&gt;, &lt;a href=&quot;http://www.augusttechgroup.com/tim/blog/&quot;&gt;Tim&lt;/a&gt; and &lt;a href=&quot;http://www.jroller.com/JamesGoodwill/&quot;&gt;Jim&lt;/a&gt; 
a lot of fun and I enjoyed delivering my &lt;a href=&quot;http://raibledesigns.com/rd/entry/consulting_sofea_grails_and_gwt&quot;&gt;Building SOFEA Applications with GWT and Grails&lt;/a&gt; presentation for the first time. The talk was mostly a story about how we &lt;a href=&quot;http://raibledesigns.com/rd/entry/enhancing_evite_com_with_gwt&quot;&gt;enhanced Evite.com with GWT and Grails&lt;/a&gt; and what we did to make both frameworks scale. I don&apos;t believe the presentation reflects the story format that well, but it&apos;s not about the presentation, it&apos;s about the delivery of it. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align:center&quot; id=&quot;__ss_2484656&quot;&gt;&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sofeawithgwtandgrails-091112101640-phpapp01&amp;rel=0&amp;stripped_title=building-sofea-applications-with-gwt-and-grails&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=sofeawithgwtandgrails-091112101640-phpapp01&amp;rel=0&amp;stripped_title=building-sofea-applications-with-gwt-and-grails&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;If you&apos;d like to hear the story about this successful SOFEA implementation at a high-volume site, I&apos;d recommend attending the &lt;a href=&quot;http://www.therichwebexperience.com&quot;&gt;Rich Web Experience&lt;/a&gt; next month. If you attended last night&apos;s meeting and have any feedback on how this talk can be improved, I&apos;d love to hear it.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/consulting_sofea_grails_and_gwt</guid>
    <title>Consulting, SOFEA, Grails and GWT at next week&apos;s Denver JUG</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/consulting_sofea_grails_and_gwt</link>
        <pubDate>Thu, 5 Nov 2009 22:52:37 -0700</pubDate>
    <category>Java</category>
    <category>consulting</category>
    <category>java</category>
    <category>denver</category>
    <category>gwt</category>
    <category>sofea</category>
    <category>grails</category>
    <category>denverjug</category>
            <description>Next Wednesday, I&apos;ll be at Denver&apos;s JUG meeting to talk about Independent Consulting and Building SOFEA Applications with Grails and GWT. The first talk will be a a panel discussion among local independent consultants, including &lt;a href=&quot;http://www.jroller.com/JamesGoodwill/&quot;&gt;James Goodwill&lt;/a&gt;, &lt;a href=&quot;http://www.ambientideas.com/blog/&quot;&gt;Matthew McCullough&lt;/a&gt;, &lt;a href=&quot;http://www.augusttechgroup.com/tim/blog/&quot;&gt;Tim Berglund&lt;/a&gt; and myself.
&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;
This session explores the trials and tribulations of an independent
consultant. How do you find contracts? Should you setup an LLC, an
S-Corp or just be a sole proprietorship? What about health insurance
and benefits? Are recruiters helpful or hurtful? Learn lots of tips
and tricks to get your dream job and your ideal lifestyle.
&lt;/p&gt;
&lt;p&gt;
The Grails and GWT talk is a preview of a talk I&apos;ll be doing at the &lt;a href=&quot;http://www.therichwebexperience.com/conference/speaker/topic_view?topicId=2104&quot;&gt;Rich Web Experience&lt;/a&gt; in December. Below is a rewrite of the abstract in first-person.
&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;Earlier this year, I participated in a major enhancement of a high-traffic well-known internet site. The company wanted us to quickly re-architect their site and use a modern Ajax framework to do it with. An Ajax Framework evaluation was done to help the team choose the best framework for their skillset. The application was built with a SOFEA architecture using GWT on the frontend and Grails/REST on the backend.
&lt;br/&gt;&lt;br/&gt;
This talk will cover how &lt;a href=&quot;http://www.linkedin.com/in/bryannoll&quot;&gt;Bryan Noll&lt;/a&gt;, &lt;a href=&quot;http://www.linkedin.com/in/scottthomasnicholls&quot;&gt;Scott Nicholls&lt;/a&gt;, &lt;a href=&quot;http://www.linkedin.com/in/jgoodwill&quot;&gt;James Goodwill&lt;/a&gt; and I came to choose GWT and Grails, as well as stumbling blocks we encountered along the way. In addition, we&apos;ll explore many topics such as raw GWT vs. GXT/SmartGWT, the Maven GWT Plugin, modularizing your code, multiple EntryPoints, MVP, integration testing and JSON parsing with Overlay Types. 
&lt;/p&gt;
&lt;p&gt;If you&apos;re in Denver next Wednesday night (November 11th), you should stop by the &lt;a href=&quot;http://www.denverjug.org/&quot;&gt;Denver JUG&lt;/a&gt; meeting. It&apos;ll be a fun night and there&apos;s sure to be a few beers afterward. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/a_letter_to_the_appfuse</guid>
    <title>A Letter to the AppFuse Community</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/a_letter_to_the_appfuse</link>
        <pubDate>Wed, 4 Nov 2009 00:17:17 -0700</pubDate>
    <category>Java</category>
    <category>spring</category>
    <category>seam</category>
    <category>rubyonrails</category>
    <category>letter</category>
    <category>springroo</category>
    <category>appfuse</category>
    <category>grails</category>
    <category>play</category>
    <category>community</category>
            <description>The last &lt;a href=&quot;http://appfuse.org&quot;&gt;AppFuse&lt;/a&gt; release was way back in &lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_2_0_2_released&quot;&gt;May 2008&lt;/a&gt;. Many folks have asked when the next release would be ever since. Often, I&apos;ve said &quot;sometimes this quarter&quot;, but obviously, that&apos;s never happened. For that, I apologize.
&lt;/p&gt;
&lt;p&gt;There are many reasons I haven&apos;t worked on AppFuse for the past 18 months, but it mostly comes down to the fact that I didn&apos;t make time for it. The good news is I&apos;m working on it again and &lt;em&gt;will&lt;/em&gt; have a release out sometime this month. Unfortunately, it probably won&apos;t be a 2.1 final release, but there&apos;s so many things that&apos;ve changed, I feel like a milestone release is a good idea. Here&apos;s a brief summary of changes so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changed archetypes to include all source and tests for the &quot;webapp&quot; portion of the application. No more warpath plugin, merging wars and IDE issues. Using &quot;mvn jetty:run&quot; should work as expected.&lt;/li&gt;
&lt;li&gt;Moved from &lt;a href=&quot;http://raibledesigns.com/rd/entry/moving_from_spring_s_xml&quot;&gt;Spring XML to Annotations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;AppFuse Light &lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&quot;&gt;converted to Maven modules&lt;/a&gt; and now depends on AppFuse&apos;s backend.&lt;/li&gt;
&lt;li&gt;Published easier to use archetype selection form in the &lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+QuickStart&quot;&gt;QuickStart Guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Published &lt;a href=&quot;http://static.appfuse.org/light/archetypes.html&quot;&gt;archetype selection form for AppFuse Light&lt;/a&gt;. I do plan on combining these forms as soon as I figure out the best UI and instructions for users to choose AppFuse or AppFuse Light.&lt;/li&gt;
&lt;li&gt;Upgraded all libraries to latest released versions (Spring 3 hasn&apos;t had a final release yet).&lt;/li&gt;
&lt;li&gt;Upgraded to Tapestry 5 thanks to &lt;a href=&quot;http://code.google.com/p/tapestry5-appfuse/&quot;&gt;Serge Eby&lt;/a&gt;. I still need to complete tests and code generation for tests.&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&quot;http://issues.appfuse.org/browse/APF-267&quot;&gt;Compass support&lt;/a&gt; thanks to a patch from &lt;a href=&quot;http://www.kimchy.org/&quot;&gt;Shay Banon&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Upgraded from &lt;a href=&quot;http://issues.appfuse.org/browse/APF-1125&quot;&gt;XFire to CXF&lt;/a&gt; for Web Services.&lt;/li&gt;
&lt;li&gt;Moved Maven repository to &lt;a href=&quot;https://docs.sonatype.com/display/NX/OSS+Repository+Hosting&quot;&gt;Sonatype&apos;s OSS Repository Hosting&lt;/a&gt; for snapshots and releasing to Maven Central. There are no longer any AppFuse-specific artifacts, all are available in central.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I realize there&apos;s many full-stack frameworks that do the same thing as AppFuse with less code. Examples include &lt;a href=&quot;http://rubyonrails.org&quot;&gt;Ruby on Rails&lt;/a&gt;, &lt;a href=&quot;http://grails.org&quot;&gt;Grails&lt;/a&gt;, &lt;a href=&quot;http://seamframework.org&quot;&gt;Seam&lt;/a&gt;, &lt;a href=&quot;http://www.springsource.org/roo&quot;&gt;Spring Roo&lt;/a&gt; and the &lt;a href=&quot;http://www.playframework.org/&quot;&gt;Play framework&lt;/a&gt;. However, there seems to be quite a few folks that continue to use AppFuse and it stills serves the community as a nice example of how to integrate frameworks. Furthermore, it helps me keep up with the latest framework releases, their quirks and issues that happen when you try to integrate them. In short, working on it helps me stay up to speed with Java open source frameworks.
&lt;/p&gt;
&lt;p&gt;
For those folks that like the 1.x, Ant-based version of AppFuse, there will &lt;em&gt;not&lt;/em&gt; be a 1.9.5 release. I know I promised it for years, but it&apos;s simply something I will not use, so I&apos;d rather not invest my time in it. I&apos;m sorry for lying to those that expected it.&lt;/p&gt;
&lt;p&gt;So what&apos;s the future of AppFuse? Will it continue to integrate web frameworks with Spring and popular persistence frameworks? Possibly, but it seems more logical to align it with the types of Ajax + REST applications I&apos;m creating these days. I&apos;m currently thinking AppFuse 3.0 would be nice as a RESTful backend with GWT and Flex UIs. I might create the backend with &lt;a href=&quot;http://cxf.apache.org/&quot;&gt;CXF&lt;/a&gt;, but it&apos;s possible I&apos;d use one of the frameworks mentioned above and simply leverage it to create the default features AppFuse users have come to expect.&lt;/p&gt;
&lt;p&gt;More than anything, I&apos;m writing this letter to let you know that the AppFuse project is not dead and you can expect a release in the near future.&lt;/p&gt;
&lt;p&gt;Thanks for your support,&lt;/p&gt;
&lt;p&gt;Matt</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/enhancing_evite_com_with_gwt</guid>
    <title>Enhancing Evite.com with GWT and Grails</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/enhancing_evite_com_with_gwt</link>
        <pubDate>Mon, 15 Jun 2009 07:41:37 -0600</pubDate>
    <category>Java</category>
    <category>sofea</category>
    <category>grails</category>
    <category>memcached</category>
    <category>gxt</category>
    <category>java</category>
    <category>rest</category>
    <category>gwt</category>
    <category>evite</category>
            <description>&lt;a href=&quot;http://www.evite.com&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/evite-logo.png&quot; width=&quot;144&quot; height=&quot;93&quot; alt=&quot;Evite.com&quot; class=&quot;picture&quot; style=&quot;border: 1px solid silver&quot; /&gt;&lt;/a&gt;
On my &lt;a href=&quot;http://www.linkedin.com/in/mraible&quot;&gt;LinkedIn Profile&lt;/a&gt;, it says my current gig is a SOFEA consultant at a stealth-mode startup. &lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
SOFEA Consultant, Stealth Mode Startup, Los Angeles, CA. December 2008 -- Present.
&lt;/p&gt;
&lt;p&gt;
OK, I lied. It&apos;s not a startup, it&apos;s a well-known company that helps you plan parties.
For the last 5+ months, my &lt;a href=&quot;http://raibledesigns.com/rd/entry/what_s_next&quot;&gt;UI team from LinkedIn&lt;/a&gt; has been working with &lt;a href=&quot;http://www.evite.com&quot;&gt;Evite.com&lt;/a&gt; to enhance portions of their site with a &lt;a href=&quot;http://raibledesigns.com/rd/entry/re_life_above_the_service&quot;&gt;SOFEA architecture&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;In January, we started &lt;a href=&quot;http://raibledesigns.com/rd/entry/choosing_an_ajax_framework&quot;&gt;evaluating Ajax Frameworks&lt;/a&gt; and came to the conclusion that &lt;a href=&quot;http://raibledesigns.com/rd/entry/ajax_framework_analysis_results&quot;&gt;GWT was right for us&lt;/a&gt;. After we chose the UI framework, other team members chose &lt;a href=&quot;http://grails.org&quot;&gt;Grails&lt;/a&gt; and &lt;a href=&quot;http://www.danga.com/memcached/&quot;&gt;memcached&lt;/a&gt; to develop scalable RESTful services. The architecture we implemented involves using GWT&apos;s &lt;a href=&quot;http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/http/client/RequestBuilder.html&quot;&gt;RequestBuilder&lt;/a&gt; to talk to Grails&apos; services, which cache almost all their JSON output in memcached.
&lt;/p&gt;
&lt;p&gt;To see an example of a feature we developed with GWT, see Evite&apos;s &lt;a href=&quot;http://www.evite.com/party/invitations&quot;&gt;Design Gallery&lt;/a&gt;. I personally worked on this feature and very much enjoyed becoming a GWT aficionado in the process. GWT&apos;s zero-turnaround feature made doing pure client-side work a lot of fun. It&apos;s definitely something I&apos;d like to continuing doing at my next gig. &lt;/p&gt;
&lt;p&gt;Everyone from Evite is very happy with what we&apos;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&apos;ve learned to scale the client by using out-of-the-box GWT components. We&apos;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. 
&lt;/p&gt;
&lt;p&gt;At the end of this month, my gig with Evite comes to an end. I&apos;ll be spending a few weeks at my family&apos;s cabin in Montana and then it&apos;s on to the next big thing. What&apos;s the next big thing? I&apos;m not sure yet, hence the reason for writing this. If you&apos;re looking to develop a GWT application, introduce a SOFEA architecture at your company, or simply adopt some open source frameworks, I&apos;d love to help out. &lt;a href=&quot;http://raibledesigns.com/contact.jsp&quot;&gt;Drop me a line&lt;/a&gt; and let&apos;s start a conversation. </description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/presenting_web_frameworks_of_the</guid>
    <title>Presenting Web Frameworks of the Future Tomorrow in Denver</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/presenting_web_frameworks_of_the</link>
        <pubDate>Wed, 30 Jul 2008 21:56:17 -0600</pubDate>
    <category>Open Source</category>
    <category>opensource</category>
    <category>rest</category>
    <category>webframeworks</category>
    <category>grails</category>
    <category>rails</category>
    <category>oscon</category>
    <category>flex</category>
    <category>gwt</category>
            <description>Tomorrow (Thursday) night, I&apos;ll be doing an encore presentation of my &lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of&quot;&gt;Web Frameworks of the Future&lt;/a&gt; at &lt;a href=&quot;http://groups.google.com/group/derailed&quot;&gt;DeRailed&lt;/a&gt;. If you&apos;re in Denver and would like to hear me ramble while drinking a beer, join us at &lt;a href=&quot;http://www.forestroom5.com/&quot;&gt;Forestroom 5&lt;/a&gt; at 6:30.&lt;/p&gt;
&lt;p&gt;After the &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_oscon_aftermath&quot;&gt;last few days&lt;/a&gt;, I&apos;m happy to report I should be in good enough condition to pull this off. If you&apos;re curious to learn more about my experience at OSCON and this presentation, please see &lt;a href=&quot;http://blog.linkedin.com/blog/2008/07/oscon-2008-and.html&quot;&gt;my writeup on the LinkedIn Blog&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of</guid>
    <title>[OSCON 2008] Web Frameworks of the Future: Flex, GWT, Grails and Rails</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of</link>
        <pubDate>Wed, 23 Jul 2008 16:25:23 -0600</pubDate>
    <category>Open Source</category>
    <category>rails</category>
    <category>oscon</category>
    <category>rest</category>
    <category>gwt</category>
    <category>oscon08</category>
    <category>flex</category>
    <category>grails</category>
    <category>opensource</category>
    <category>webframeworks</category>
            <description>Below is the presentation I&apos;m &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/speaker/6444&quot;&gt;delivering at OSCON&lt;/a&gt; today. Unfortunately, I had to remove slides on GWT and Flex to fit w/in the 45 minute time limit. I hope to expand this presentation in the future, as well as continue to develop the side project I&apos;m working on using these technologies.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=webframeworksofthefutureflexgwtrailsandgrails-1216842992390310-9&quot;/&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;//static.slideshare.net/swf/ssplayer2.swf?doc=webframeworksofthefutureflexgwtrailsandgrails-1216842992390310-9&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;div style=&quot;font-size: .9em; text-align: center&quot;&gt;
&lt;a href=&quot;http://www.slideshare.net/mraible/web-frameworks-of-the-future-flex-gwt-grail-and-rails-525747?src=embed&quot; title=&quot;View Web Frameworks of the Future: Flex, GWT, Grail, and Rails on SlideShare&quot;&gt;view on slideshare&lt;/a&gt; | 
&lt;a href=&quot;http://www.slideshare.net/mraible/web-frameworks-of-the-future-flex-gwt-grail-and-rails-525747/download&quot;&gt;download&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/re_what_s_a_good</guid>
    <title>RE: What&apos;s a good RIA to develop in 20 hours?</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/re_what_s_a_good</link>
        <pubDate>Wed, 11 Jun 2008 11:02:23 -0600</pubDate>
    <category>Java</category>
    <category>webframeworks</category>
    <category>grails</category>
    <category>flex</category>
    <category>rails</category>
    <category>gwt</category>
            <description>Thanks to everyone who commented on my &lt;a href=&quot;http://raibledesigns.com/rd/entry/what_s_a_good_ria&quot;&gt;previous post&lt;/a&gt; and offered recommendations for  RIAs to develop in 20 hours or less. In order to narrow down my choices, I&apos;ve created a survey on &lt;a href=&quot;http://www.surveymonkey.com/&quot;&gt;SurveyMonkey.com&lt;/a&gt;. Here&apos;s a list of the application ideas I received from comments and e-mails:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lightweight CMS&lt;/li&gt;
&lt;li&gt;MP3 Player&lt;/li&gt;
&lt;li&gt;Resume Editor/Publisher&lt;/li&gt;
&lt;li&gt;Meal/Calorie Tracker&lt;/li&gt;
&lt;li&gt;Contact Management&lt;/li&gt;
&lt;li&gt;Planning Application&lt;/li&gt;
&lt;li&gt;Timesheet Application&lt;/li&gt;
&lt;li&gt;DB/SQL Client&lt;/li&gt;
&lt;li&gt;Status Updater/Aggregator (LinkedIn, Twitter and Facebook)&lt;/li&gt;
&lt;li&gt;Online File Explorer (browser-based FTP interface)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I like #3 (Resume) and #9 (Status) because I may be able to tie those into LinkedIn&apos;s RESTful API.&lt;/p&gt;
&lt;p style=&quot;padding-left: 10px&quot;&gt;&lt;a href=&quot;http://www.surveymonkey.com/s.aspx?sm=n5VGjN3BjL_2f_2bUks_2fY9mR6Q_3d_3d&quot;&gt;Click here to vote for the application you&apos;d like me to develop &amp;raquo; &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Voting ends at noon on Friday (Mountain Time).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; My co-workers had a good suggestion at lunch today: &lt;a href=&quot;http://www.pitchersacrossamerica.com&quot;&gt;pitchersacrossamerica.com&lt;/a&gt;. It seems it&apos;s kinda difficult to find bars that serve pitchers these days (at least in Denver). Create an app that allows people to enter in bars and restaurants that serve pitchers and show them on a map. Seems simple and fun. If enough people like the idea, I&apos;ll restart the survey with this as an option. In the meantime, the current (Wednesday night) numbers are &lt;a href=&quot;http://farm4.static.flickr.com/3169/2572286046_faf8675f72_o.png&quot; title=&quot;Wednesday Evening Survey Results&quot; rel=&quot;lightbox&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; &lt;a href=&quot;http://farm4.static.flickr.com/3262/2573930525_5e006701f4_o.png&quot; rel=&quot;lightbox&quot;&gt;Here&apos;s the results&lt;/a&gt; as of Thursday night. Only 15.5 more hours to vote!
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 3:&lt;/strong&gt; &lt;a href=&quot;http://farm4.static.flickr.com/3054/2576516036_0cd006f275_o.png&quot; rel=&quot;lightbox&quot; title=&quot;Final Results&quot;&gt;Final Results&lt;/a&gt;. Thanks to everyone who voted! I&apos;m traveling a lot next week (Mountain View followed by Boston), but I&apos;ll try to write an entry on next steps.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/what_s_a_good_ria</guid>
    <title>What&apos;s a good RIA to develop in 20 hours?</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/what_s_a_good_ria</link>
        <pubDate>Mon, 9 Jun 2008 21:56:30 -0600</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>rails</category>
    <category>gwt</category>
    <category>flex</category>
            <description>&lt;a href=&quot;http://en.oreilly.com/oscon2008/&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/oscon-logo-2008.gif&quot; width=&quot;96&quot; height=&quot;111&quot; alt=&quot;OSCON 2008&quot; class=&quot;picture&quot; style=&quot;border: 0&quot; /&gt;&lt;/a&gt;
In less than two months, I&apos;m making my annual trek to Portland, Oregon to &lt;a href=&quot;http://raibledesigns.com/rd/entry/proposal_accepted_for_oscon_2008&quot;&gt;speak&lt;/a&gt; at &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/content/home&quot;&gt;OSCON&lt;/a&gt;. To prepare for my talk, I&apos;d like to develop the same application with two different combinations: Flex + Rails and GWT + Grails.
&lt;/p&gt;
&lt;p&gt;As luck would have it, I&apos;m having a hard time coming up with a good application to write. I&apos;d like to time-box it so I only spend 10 hours on the backend (for each) and 10 hours on the front-end, for a total of 40 hours for both applications. 
&lt;/p&gt;
&lt;p&gt;
Can you think of any good applications that would warrant a rich front-end and wouldn&apos;t take too long to create? I&apos;d like to put both applications in production and generate enough traffic to be faced with scalability issues.&lt;/p&gt;
&lt;p&gt;Over the next several weeks, I hope to start creating the applications and blog about what I&apos;ve learned along the way. At some point, I hope to post an outline and a rough draft. With your help, I believe this can be an excellent presentation. If the presentation and applications are as good as I hope they&apos;ll be, it&apos;s likely I&apos;ll open source them for everyone to use.&lt;/p&gt;
&lt;p&gt;Thanks in advance for any advice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Thanks for all the great feedback. I&apos;ve posted a &lt;a href=&quot;http://raibledesigns.com/rd/entry/re_what_s_a_good&quot;&gt;survey&lt;/a&gt; to narrow the choices.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/proposal_accepted_for_oscon_2008</guid>
    <title>Proposal accepted for OSCON 2008</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/proposal_accepted_for_oscon_2008</link>
        <pubDate>Mon, 17 Mar 2008 19:21:10 -0600</pubDate>
    <category>Open Source</category>
    <category>grails</category>
    <category>portland</category>
    <category>conference</category>
    <category>travel</category>
    <category>gwt</category>
    <category>oscon</category>
    <category>rails</category>
    <category>flex</category>
            <description>&lt;a href=&quot;http://en.oreilly.com/oscon2008/&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/oscon-logo-2008.gif&quot; width=&quot;96&quot; height=&quot;111&quot; alt=&quot;OSCON 2008&quot; class=&quot;picture&quot; style=&quot;border: 0&quot; /&gt;&lt;/a&gt;
From an e-mail I received earlier this afternoon:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
We are pleased to accept the following proposal for &lt;a href=&quot;http://en.oreilly.com/oscon2008/&quot;&gt;OSCON 2008&lt;/a&gt;.
&lt;br/&gt;&lt;br/&gt;
* Web Frameworks of the Future: Flex, GWT, Grails and Rails
&lt;br/&gt;&lt;br/&gt;
It has been scheduled for 16:30 on 23 Jul 2008.
&lt;/p&gt;
&lt;p&gt;My Abstract:&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;
What if the choices in web framework was reduced to 4? If RIA are the way of the future, it&apos;s possible that these 4 frameworks are the best choices for this development paradigm. This session will explore these frameworks, as well as entertain many other&apos;s opinions on the future of web development.
&lt;br/&gt;&lt;br/&gt;
RESTful backends are easy to create with both Rails and Grails. Ajax frontends are simple to create and maintain with GWT. Flex gives you flash and a pretty UI. If you&apos;re an HTML developer, Rails allows you to quickly develop MVC applications. If you&apos;re a Java Developer, GWT + Grails might be a match made in heaven. This session is designed to help you learn more about each framework and decide which combination is best for your project.
&lt;/p&gt;
&lt;p&gt;I&apos;m really looking forward to learning about GWT and Flex in the coming months. If you have any experience (or opinions) about the abstract above, I&apos;d love to hear it. The louder the better.&lt;/p&gt;
&lt;p&gt;For those who haven&apos;t been, OSCON is one of those truly special conferences. Possible reasons:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;It&apos;s only an hour from my parent&apos;s house
&lt;/li&gt;
&lt;li&gt;It&apos;s &lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_a_beautiful_time_of&quot;&gt;a beautiful time of year in Portland&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;It&apos;s always the same weekend as the &lt;a href=&quot;http://www.oregonbrewfest.com/&quot;&gt;Oregon Brewers Festival&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It&apos;s a kickass conference with the greatest diversity of Open Source Committers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;m going for all 4 reasons and even made a reservation to stay at &lt;a href=&quot;http://www.kennedyschool.com/index.php?loc=57&amp;amp;category=Location%20Homepage&quot;&gt;The Kennedy School&lt;/a&gt;. Should be a fun show.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/grails_vs_rails_my_thoughts</guid>
    <title>Grails vs. Rails - My Thoughts</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/grails_vs_rails_my_thoughts</link>
        <pubDate>Fri, 7 Mar 2008 05:12:00 -0700</pubDate>
    <category>Java</category>
    <category>rails</category>
    <category>comparison</category>
    <category>groovy</category>
    <category>webframeworks</category>
    <category>grails</category>
            <description>In a &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_linkedin_journey_continues#comment-1204861719000&quot;&gt;comment&lt;/a&gt;, Jared Peterson asked:
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
I&apos;m curious if you have any thoughts on folks that might be trying to make a decision between Rails and Grails. I like the concept of &quot;Allow Both&quot;, but what if you &quot;have neither&quot;? 
&lt;br/&gt;&lt;br/&gt;
If you were starting a new project, could choose either one, needed to interact with a lot of existing Java code (JRuby on Rails I guess), what would you pick?
&lt;/p&gt;
&lt;p&gt;A friend recently asked me &quot;Can I solicit your honest, unadulterated opinion on Grails?&quot; I think the e-mail I sent him may help Jared&apos;s question.
&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;
I think it&apos;s awesome. IMO, it&apos;s the same thing as AppFuse, but it has
a DSL that&apos;s much simpler to learn and remember. Less code -&gt; faster
productivity. There does seem to be some maturity issues, but I think
it&apos;ll get there. The question is - how fast can Groovy become. It&apos;s
similar to Rails and Ruby in that you start using Grails and you
think &quot;This Groovy thing is kinda cool, I&apos;d like to learn more.&quot; One
of the reasons I really like it is the learning curve for experienced
open source Java Developers is virtually flat. You can learn enough
to be productive in a single day.
&lt;br/&gt;&lt;br/&gt;
That being said, I think there&apos;s also a lot of cool stuff going on
with RIA. IMO, Flex or GWT + Grails would be a really fun set of
tools to develop with. Here&apos;s a excerpt from a write-up I recently
did when analyzing Rails and Grails at LinkedIn (in January):
&lt;br/&gt;
&lt;br/&gt;--------&lt;br/&gt;
&lt;strong&gt;Comparing Rails and Grails&lt;/strong&gt;&lt;br/&gt;

They&apos;re both excellent frameworks. Rails is definitely more mature,
but the environment is a pain to setup (esp. on Windows). Grails is
very easy to setup for Java Developers. Grails needs a lot of
improvement as far as hot deploy and stack traces. It&apos;s probably
Groovy&apos;s fault, but its stack traces are hideous - rarely pointing to
the class and line number in the first few lines.
&lt;br/&gt;&lt;br/&gt;
As for hot deploy, it doesn&apos;t work nearly as well as it does with
Rails. Rails&apos; &quot;script/server&quot; starts WEBrick in a few seconds, while
&quot;grails run-app&quot; can take up to 10 seconds (even on a brand new
application). Even with its warts, Grails is simply awesome. I
really, really enjoy writing Groovy code in IDEA and seeing immediate
changes. I don&apos;t like &quot;test-app&quot; as much as I like Rails&apos;
&quot;test:units&quot; (or even better, &quot;test:uncommitted&quot;). It seems to be
widely realized that Rails has a better testing story.
&lt;br/&gt;&lt;br/&gt;
Rails is immediate, Grails is immediate 70% of the time.
&lt;br/&gt;&lt;br/&gt;
Groovy is extremely easy to learn for Java Developers. Ruby is easy
too learn, and possibly too powerful for OO rookies. Both are fun to
program in and very capable of allowing greater developer
productivity. If you know Hibernate, Spring, SiteMesh and JSP, you
owe it to yourself to look at Grails. If you know these technologies
well, you can learn Grails in less than an hour. You can be
productive in the next hour and have an application running by the
end of the day. That&apos;s not to take anything away from Ruby. I believe
that Rails is an excellent platform as well. It&apos;s pretty cool that
profiling and benchmarking are built into the framework and you can
easily judge how many servers you&apos;ll need to scale.
&lt;br/&gt;&lt;br/&gt;
I used IDEA while developing with both frameworks. IDEA has Rails and
Groovy support available via plugins and they both worked quite well.
The support for Grails was much better than Rails. Grails offers code
completion, Ctrl+click on classes/methods, debugging and starting/
stopping the webapp from your IDE. Rails doesn&apos;t offer much in the
way of Ctrl+clicking on class names/methods or debugging.
&lt;br/&gt;--------&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;Is there anything that Rails can do that Grails can&apos;t? Not as far as I can tell. I think it really comes down to developer passion and team preference. If you have experienced Java Developers that like the ecosystem and its tools, Grails makes a lot of sense. If you have experienced PHP developers or frustrated J2EE developers, they might enjoy Rails more. One thing that&apos;s very cool about both frameworks - learning one actually teaches you things about the other. They&apos;re so similar in many respects that knowledge is transferable between the two.
&lt;/p&gt;
&lt;p&gt;Of course, this is all just my opinion after working with both frameworks for a few weeks. For anyone who has tried both, what do you think?
&lt;/p&gt;
&lt;p&gt;In closing, here&apos;s an excerpt from a &lt;a href=&quot;http://java.dzone.com/news/farewell-j-jvm#comment-1665&quot;&gt;recent comment&lt;/a&gt; I left on Javalobby:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
Of course, the hard part now is deciding between Django, Rails, Grails and GWT for your web framework. Then again, that&apos;s like having to choose between a Ferrari, Porsche, Lamborghini and a Maserati. No matter which one you choose, it&apos;s unlikely you&apos;ll be disappointed.
&lt;/p&gt;&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/the_linkedin_journey_continues</guid>
    <title>The LinkedIn Journey Continues</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/the_linkedin_journey_continues</link>
        <pubDate>Thu, 6 Mar 2008 08:00:49 -0700</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>java</category>
    <category>productivity</category>
    <category>rails</category>
    <category>career</category>
    <category>linkedin</category>
    <category>webframeworks</category>
            <description>As you might know, I&apos;ve spent the last several months working for one of the coolest clients ever: &lt;a href=&quot;http://www.linkedin.com&quot;&gt;LinkedIn&lt;/a&gt;. They hired me back in July 2007 and I was &lt;a href=&quot;http://raibledesigns.com/rd/entry/first_day_at_linkedin&quot;&gt;impressed on day one&lt;/a&gt;. I was originally hired to help them evaluate open source Java web frameworks and try to determine if moving from their proprietary one to an open source one would help improve developer productivity.&lt;/p&gt;
&lt;p&gt;After looking at all the options, I recommended we look at Struts 2 and Spring MVC - primarily because they seemed to be the best frameworks for a LinkedIn-type of application. Another Engineer and I prototyped with Struts 2 for about 6 weeks and came up with a prototype that worked quite well. While our mission was successful, we found a &lt;a href=&quot;http://raibledesigns.com/rd/entry/does_struts_2_suck&quot;&gt;couple&lt;/a&gt; &lt;a href=&quot;http://raibledesigns.com/rd/entry/proposed_tomcat_enhancement_add_flag&quot;&gt;issues&lt;/a&gt; with Struts 2 and standard JSP that might actually hurt developer productivity more than it helped.&lt;/p&gt;
&lt;p&gt;Following this project, I worked on the New Homepage Team, which is &lt;a href=&quot;http://blog.linkedin.com/blog/2008/02/the-new-look-of.html&quot;&gt;now visible&lt;/a&gt; to everyone that logs onto LinkedIn. My role was minimal, but it was still a very fun project to work on. You know those widgets in the right panel? I did the initial UI and backend integration for those. All the business logic, Ajax/JavaScript, CSS, and optimization was done by other folks on the team. Shortly after this project went live in November, I started prototyping again with Spring MVC + JSP.&lt;/p&gt;
&lt;p&gt;The reason I was asked to prototype with Spring MVC was because they were using Spring on the backend, Spring MVC in a couple other projects, and a new project was being kicked off that used Grails. Rather than add &lt;em&gt;another&lt;/em&gt; framework (Struts 2) to the mix, they wanted to see if they could suppress any further framework proliferation.&lt;/p&gt;
&lt;p&gt;After a month of prototyping with Spring MVC + JSP, my results weren&apos;t as good as Struts 2. With Struts 2, I was able to use OGNL to do all the things their current JSP implementation allows them to do (call methods with arguments, use statics in EL, etc.). With standard JSP, a lot of this wasn&apos;t possible. If it was - it required writing lots of tag libraries and made it more cumbersome for developers to do certain things. At the end of that project, I determined that using FreeMarker might solve these problems. I also determined that neither Struts 2 nor Spring MVC would solve the ultimate problem of developer productivity. Neither framework would allow developers to go from make-a-change-and-deploy, wait-3-minutes-to-see-change-in-browser to make-a-change, save and wait-15-seconds-to-see-change-in-browser.
&lt;/p&gt;
&lt;p&gt;
I recommended that this be the ultimate goal - to get rid of the deployment cycle and to allow minimal turnaround when deploying modified classes. After that problem was solved, it&apos;s true that moving to an open source web framework would likely provide an easier-to-remember API. However, the problem with moving to a new web framework would be that everything used to construct the existing site would suddenly become legacy code.&lt;/p&gt;
&lt;p&gt;In the end, we concluded that the best solution might be to &lt;em&gt;enhance&lt;/em&gt; the existing framework to be more like the available open source options. This would allow existing applications to keep using their code -- and if we enhance properly -- new applications can use a simpler, less verbose API and a templating framework that&apos;s easier to understand. We can make LinkedIn&apos;s version of JSP more like standard JSP while allowing its powerful EL to remain. We can add support for JSP Tag Libraries and Tag Files.&lt;/p&gt;
&lt;p&gt;One of the benefits of moving to an open source web framework is there&apos;s a community, documentation and books that describe the best (or most common) ways to solve problems with the framework. LinkedIn has this, but it&apos;s all in code and no one seems to have a high-level of confidence that the way that they did it is the &quot;best&quot; way. Developers communicate well, but all the knowledge is stuck in their heads and inboxes - there&apos;s no way for new developers to search this knowledge and figure it out on their own without asking somebody.
&lt;/p&gt;
&lt;p&gt;
By adopting an open source web framework, it&apos;s possible to solve part of this problem, but I think it&apos;s still going to exist - where a few engineers know how to use the framework really well (for the specific application) and the rest don&apos;t. We determined that regardless of open source vs. proprietary framework, what was needed was a set of developers that acted as authorities on how to develop web applications at LinkedIn. A UI Frameworks Team if you will. This would be their only job and they would never get pulled from this to work on projects or complete tasks related to LinkedIn&apos;s products. Some developers mentioned that they&apos;d been asking for this for years, and some folks had even been hired for this. However, the formulation of this group has never happened and it&apos;s obvious (now more than ever) that it&apos;d be awesome to have them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The UI Frameworks Team&lt;/strong&gt;&lt;br/&gt;
At the end of 6 months, it seemed my work was done at LinkedIn. I liked the idea of a UI Frameworks Team and recommended they start it with the authors of the existing web framework. They agreed this was a good idea. A few days later, I was pulled into the CTO&apos;s office and he offered me the job. He offered me the challenge of building this team and told me I could do it remotely (from Denver) and hire my own people to help me with it. I gulped as I realized I&apos;d just been offered the opportunity of a lifetime. I knew that while this might not be the best option for LinkedIn, it certainly was an excellent opportunity for me. I said I&apos;d think about it.&lt;/p&gt;
&lt;p&gt;In the meantime, I was given a project which you might&apos;ve read about. They asked me to &lt;a href=&quot;http://raibledesigns.com/rd/entry/migrating_a_rails_app_to&quot;&gt;migrate a Rails application to Grails&lt;/a&gt; and try to determine if &lt;a href=&quot;http://raibledesigns.com/rd/entry/is_there_room_for_both&quot;&gt;they really needed both frameworks&lt;/a&gt;. I spent 2 weeks coming up to speed on both and flew to Mountain View to deliver my conclusion. Here&apos;s an excerpt from an internal blog post I wrote.&lt;/p&gt;
&lt;div class=&quot;smokey&quot; style=&quot;border: 1px solid silver; background: #eee; padding: 10px; margin-bottom: 10px&quot;&gt;
&lt;p style=&quot;margin-top: 0&quot;&gt;As far as I know, Rails has been used at LinkedIn for well over 6 months and Grails has been used for a similar duration. Both projects that&apos;ve used these technologies have enjoyed extreme success. Both projects have been fun for the developers working on them and both have improved the technologies/frameworks they&apos;re using. &lt;/p&gt;

&lt;p&gt;Here&apos;s an interesting quote about the Rails application:&lt;/p&gt;

&lt;blockquote style=&quot;padding: 0px 10px&quot;&gt;
Another app you might want to look at is BumperSticker, our facebook app. Interestingly we heard through joyent that DHH (the creator of Rails) told them that BumperSticker is the biggest rails app in the world (in terms of page views) - we are closing in on 1 billion monthly page views and we have 1 million unique users per day (about 10 million installs on FB). It&apos;s a little trickier to setup in a dev environment since you need to be running on FB, but the code itself is pretty interesting since we&apos;ve iterated on it a bunch of times and are making extensive use of third party libraries such as memcached.&lt;/blockquote&gt;

&lt;p&gt;This quote loosely translates to &quot;We have some Rails Ninjas on staff and we&apos;ve been quite successful in developing with it and making it scale&quot;.&lt;/p&gt;

&lt;p&gt;Both platforms have allowed developers to iterate quickly and turbo-charge their productivity.&lt;/p&gt;

&lt;p&gt;My Conclusion: &lt;b&gt;&lt;em&gt;Allow Both&lt;/em&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;If you have talented developers that can whip out kick-ass code with either platform, pay them and pay them well. Passion is the most important part of any job. If developers are passionate about the application they&apos;re developing and the language they&apos;re using (notice language is secondary) - they can do great things.&lt;/p&gt;

&lt;p&gt;I know this probably isn&apos;t the answer you wanted to hear, but it&apos;s what I believe. I think both frameworks are very similar. I believe the knowledge you gain from learning one framework is transferable to the other. A lot of the things I learned about Rails worked with Grails. Ruby&apos;s syntax is similar to Groovy&apos;s. &lt;/p&gt;

&lt;p style=&quot;margin-bottom: 0&quot;&gt;There&apos;s a natural synergy between these two frameworks. The hard part is figuring out when to use which one.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;The application that I was asked to port from Rails to Grails? The one that was launched last week - &lt;a href=&quot;http://blog.linkedin.com/blog/2008/02/linkedin-mobile.html&quot;&gt;LinkedIn Mobile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After doing this research, I stepped up to the plate and accepted the offer to start a UI Frameworks Team and recruited some kick-ass Java Developers I know to be the founding members. Last week, I flew out to Mountain View to do some kickoff meetings and start getting the infrastructure in place so we can document, support and release code like a well-oiled open source project. There&apos;s nothing saying we won&apos;t use an open source web framework as the underlying engine, but I think this should be an excellent chance to see the power of open source governance and development style in a corporate environment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Director of Engineering, Core Experience&lt;/strong&gt;&lt;br/&gt;
I should mention one last thing. If you&apos;re an experienced Java Developer/Architect with a passion and deep knowledge of UI development (JavaScript, CSS, HTML), we&apos;ve got a &lt;a href=&quot;http://www.linkedin.com/jobs?viewJob=&amp;amp;jobId=483817&amp;amp;fromSearch=39&amp;amp;sik=1204111006804&quot;&gt;Director of Engineering, Core Experience&lt;/a&gt; position with your name on it. I might even get to interview you if you apply for this job. Furthermore, whoever gets hired will likely work very closely with my team. What&apos;s not to like about that!? &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/david_sachdev_on_web_framework</guid>
    <title>David Sachdev on Web Framework Proliferation</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/david_sachdev_on_web_framework</link>
        <pubDate>Fri, 22 Feb 2008 14:47:44 -0700</pubDate>
    <category>Java</category>
    <category>jsf</category>
    <category>webframeworks</category>
    <category>springmvc</category>
    <category>spring</category>
    <category>grails</category>
    <category>rails</category>
    <category>jruby</category>
            <description>David Sachdev left the following &lt;a href=&quot;http://raibledesigns.com/rd/entry/java_web_framework_smackdown_at#comment-1203718076000&quot;&gt;comment&lt;/a&gt; in my post about the &lt;a href=&quot;http://raibledesigns.com/rd/entry/java_web_framework_smackdown_at&quot;&gt;Java Web Framework Smackdown at TSSJS in Vegas&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;smokey&quot; style=&quot;padding: 10px; margin-bottom: 10px&quot;&gt;
&lt;p&gt;The number of web frameworks out there is just astonishing, and in alot of ways I think that there is need for some consolidation in some way, shape or form. If you work in the Java world there is a sense of consolidation in the ORM space these days with JPA (the Java Persistence API). Sure if you are working strictly with JPA it is a bit more limiting then working directly with Hibernate, iBatis, or TopLink - but you no longer worry that you have made a critical misstep in your architecture by tying yourself do a particular ORM implementation. Similarly Spring gives you that similar &quot;loosely coupled&quot; feel that if Google&apos;s Guice because appealing to you, you don&apos;t feel like you&apos;ve wasted all your framework foo on Spring. But web frameworks....that&apos;s another story.
&lt;/p&gt;
&lt;p&gt;
I think if you had asked me a few months ago, I would have told you that the industry is promoting JSF (Java Server Faces). Everything from support in the IDEs to the availability of AJAX frameworks...and of course a flexible life cycle that allows for alternate implementations and various code to plug or be weaved in to the life cycle. And that while JSF on its own left quite a bit to be desired, the JBoss Seam project really has filled in the gaps in JSF, and in fact brought Java web development closer in agility to the Rails and Grails of the world that tout quickly built and deployed web applications.
&lt;/p&gt;
&lt;p&gt;
But the thing that you continue to hear is that programming in JSF is painful. And you hear that EVERYONE used to use Struts. And that it is time to move past Struts. And given that, you have to consider Webwork and the merger of Struts2 into that framework - and their claims of rapid development. But you also have to consider Spring WebFlow and how that may help solve your JSF ills given that everyone is building off of the Spring Framework and they have been so good about keeping the framework updated and integrating the best of what is out there while innovating themselves. And then if you are looking at Spring WebFlow, you kinda have to go &quot;Wait, but what about Spring MVC?&quot;
&lt;/p&gt;

&lt;p&gt;
Given its age, you might quickly dismiss Spring MVC until you realize that Grails is build upon it. Grails, that web platform that every java developer is either working with, or intends to work with soon. (Come on, you all have made the Ruby/Rails, Groovy/Grails, JRuby decision in favor of G2, right? I mean all the flexibility of what is out there in the Java world on top of the JVM, with a language that doesn&apos;t suck the life outta you....) And then you have to wonder that if you build upon Spring MVC as well as using Groovy and Grails where appropriate, might you be able to make that killer app in half the time.
&lt;/p&gt;
&lt;p&gt;
But wait, you didn&apos;t think your choices were nearly that simple did you? There is this wonderful software company out in Mountain View that we need to pay attention too. In Google We Trust, right? And even if you don&apos;t worship at the Temple of the G (TOTG) like Sprout, you don&apos;t want to ignore them. And, if you&apos;ve looked at the Google Web Toolkit (GWT) and weren&apos;t at least slightly impressed, I would be surprised. And if you are looking at the GWT, you can&apos;t totally ignore Yahoo&apos;s YUI - maybe with some of the what Prototype, Scriptaculous, or DoJo offer you. And then someone will come over and point out Echo2 to you, and well you have to admit, their demo looks nice. And well, there is Adobe Flex, and OpenLaszlo - I mean after all isn&apos;t Web 2.0 all about Rich Internet Applications. And surely you&apos;ve heard that the performance of Swing is so much better these days and the &quot;power of the modern Java applet&quot;
&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 5px&quot;&gt;
So at the end of it all, you&apos;ve got yourself alot of R&amp;amp;D to do, and just as you thing you&apos;ve got a good grasp for the offerings out there, new and improved versions are out. And don&apos;t worry, someone else is also busy working on a new and greater web framework that you have to consider.
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Wow - that&apos;s quite a mouthful David. &lt;em&gt;Well written!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;P.S. The &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=48454&quot;&gt;Early Bird Deadline for TSSJS is today&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/book_reviews_getting_started_with</guid>
    <title>Reviews: Getting Started with Grails, Rails for Java Developers and Groovy Recipes</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/book_reviews_getting_started_with</link>
        <pubDate>Sat, 9 Feb 2008 11:34:57 -0700</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>groovy</category>
    <category>books</category>
    <category>bookreview</category>
    <category>java</category>
    <category>rails</category>
            <description>Two weeks ago, I mentioned a number of books I was hoping to read to &lt;a href=&quot;http://raibledesigns.com/rd/entry/how_do_you_get_up&quot;&gt;get up to speed on Rails and Grails quickly&lt;/a&gt;. Over the last two weeks, I was able to polish off three of these (listed in order of reading):&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/minibooks/grails&quot;&gt;Getting Started with Grails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pragprog.com/titles/fr_r4j&quot;&gt;Rails for Java Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pragprog.com/titles/sdgrvr&quot;&gt;Groovy Recipes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below are short reviews of each book.&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Getting Started with Grails&lt;/strong&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.infoq.com/minibooks/grails&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/gettingstartedwithgrails.jpg&quot; alt=&quot;Getting Started with Grails&quot; width=&quot;127&quot; height=&quot;186&quot; class=&quot;picture&quot; style=&quot;border: 0&quot; /&gt;&lt;/a&gt;
&lt;em&gt;The Good:&lt;/em&gt;
This is the perfect book to learn the basics of Grails quickly. At 133 pages, I was able to read this entire book in one sitting. The first couple chapters are very introductory, but likely necessary for beginners. The good news is you start writing your first Grails application on page 7 (Chapter 3). 
&lt;/p&gt;
&lt;p&gt;
Chapter 4 (Improving the User Experience) is good in that it shows you how to do warning, error and confirmation messages. This is something often overlooked in web frameworks and Rails and its &quot;flash&quot; concept seem to have made it important again. I remember way back in 2003 when I complained about frameworks not allowing messages to live through a redirect - everyone said it was something you didn&apos;t need. Now it&apos;s a standard part of most web frameworks. 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The Bad:&lt;/em&gt; Uses Grails 0.3.1. This is understandable since the book was written in 2006 and published in 2007. Also, it doesn&apos;t cover testing that much (5 pages). If testing is so easy with Groovy and if Grails has Canoo WebTest support built-in, it should be shown IMO.&lt;/p&gt;
&lt;p&gt;

&lt;strong&gt;Rails for Java Developers&lt;/strong&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.pragprog.com/titles/fr_r4j&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/railsforjavadevelopers.jpg&quot; alt=&quot;Rails for Java Developers&quot; width=&quot;120&quot; height=&quot;144&quot; class=&quot;picture&quot; /&gt;&lt;/a&gt;
&lt;em&gt;The Good:&lt;/em&gt;
This was an interesting book for me because it uses AppFuse for many of its Java-based examples. Unfortunately, it uses the Struts 1.x version which is cumbersome and verbose as far as Java web frameworks go. The most impressive part of this book is how Justin and Stu do an excellent job of walking the line and not insulting Java nor developers using it. They provide an easy to understand view of Rails from a Java Developer&apos;s perspective. There&apos;s detailed chapters on ActiveRecord (as it compares to Hibernate), ActiveController (compared to Struts) and ActiveView (compared to JSP). This book has excellent chapters on Testing, Automating the Development Process and Security. 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The Bad:&lt;/em&gt; This book was published over a year ago, so it uses an older version of Rails. This means some commands don&apos;t work if you&apos;re using Rails 2.0. It&apos;s also a little light on Ruby, so I didn&apos;t feel I learned as much about the language as I was hoping to. That&apos;s understandable as it&apos;s more of a Rails book than a Ruby book. 
&lt;/p&gt;
&lt;p&gt;

&lt;strong&gt;Groovy Recipes&lt;/strong&gt; (Beta from Jan 3, 2008)&lt;br/&gt;
&lt;a href=&quot;http://www.pragprog.com/titles/sdgrvr&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/groovyrecipes-120x144.jpg&quot; alt=&quot;Groovy Recipes&quot; width=&quot;120&quot; height=&quot;144&quot; class=&quot;picture&quot; /&gt;&lt;/a&gt;
&lt;em&gt;The Good:&lt;/em&gt;
I really like the style of this book and that it shows you how to get things done quickly with code samples. It&apos;s very no-nonsense in the fact that it contains a lot of code and howtos. I really like Scott&apos;s writing style and found this book the easiest to read of the three. This may have something to do with my eagerness to learn Groovy more than anything. The most refreshing part about this book is how up-to-date it is. Because it&apos;s a Beta, it seems to contain the most up-to-date information on Groovy and Grails. After reading Getting Started with Grails and working with it for a couple weeks, the first Grails chapter seemed a little basic - but that&apos;s likely because I&apos;ve figured out how to mix all those recipes already. The Grails and Web Services chapter definitely has some interesting content, but I&apos;ve rarely had a need to implement these recipes in a real-world environment. I&apos;d rather see recipes on testing the UI (with the WebTest plugin) and how to use GWT and Flex with Grails. If SOUIs are the way of the feature, this is a must.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The Bad:&lt;/em&gt; Not much information on testing with GroovyTestCase, mock objects or implementing Security. If one of Groovy&apos;s sweet spots is testing, why isn&apos;t there more coverage on this topic? The Java and Groovy integration chapter is especially good, but there&apos;s very limited information on Ant and Maven. It&apos;s likely the websites provide sufficient documentation, but the Maven section only fills 5 lines on an otherwise blank page. The biggest problem I have with this book is I really like the recipes writing style and would love to see more tips and tricks. At 250 pages, I was able to finish this book with pleasure in a few days.
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What&apos;s Next?&lt;/strong&gt;&lt;br/&gt;
Now I&apos;m reading JRuby on Rails (Apress) and Programming Groovy (Pragmatic Programmers). Following that, I&apos;ll be perusing dead-tree versions of Struts 2 Web 2.0 Projects (Apress), Prototype and script.aculo.us (Pragmatics) and Laszlo in Action (Manning). If any publishers want to send me books on GWT and Flex, I&apos;d be happy to add them to my list. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/grails_1_0_and_jruby</guid>
    <title>Grails 1.0 and JRuby on Rails on WebSphere</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/grails_1_0_and_jruby</link>
        <pubDate>Tue, 5 Feb 2008 23:32:12 -0700</pubDate>
    <category>Java</category>
    <category>websphere</category>
    <category>jruby</category>
    <category>grails</category>
    <category>rails</category>
            <description>&lt;img src=&quot;//static.raibledesigns.com/repository/images/grails-or-rails.gif&quot; width=&quot;150&quot; height=&quot;115&quot; class=&quot;picture&quot; style=&quot;border: 0&quot; title=&quot;image courtesy of mvn install (http://mvninstall.com/2008/01/31/raibles-book-list-getting-up-to-speed-on-rails-and-grails-quickly)&quot; /&gt;

A couple of interesting things happened today that relate to my &lt;a href=&quot;http://raibledesigns.com/rd/entry/migrating_a_rails_app_to&quot;&gt;Grails vs. Rails&lt;/a&gt; quest for knowledge. 
&lt;/p&gt;
&lt;p&gt;
The first is that &lt;a href=&quot;http://www.infoq.com/news/2008/02/grails-1.0-released&quot;&gt;Grails 1.0 was released&lt;/a&gt;. This was apparently a huge event as it swamped Codehaus&apos; servers for a couple hours. This morning, it was pretty cool to shake &lt;a href=&quot;http://graemerocher.blogspot.com/&quot;&gt;Graeme&apos;s&lt;/a&gt; hand and congratulate him on the release. I also got to meet &lt;a href=&quot;http://javajeff.blogspot.com/&quot;&gt;Jeff Brown&lt;/a&gt; for the first time. Who needs to go to a &lt;a href=&quot;http://groovygrails.com/gg/2gexperience&quot;&gt;conference&lt;/a&gt; when you get to talk to these guys at work? &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;Secondly, I found an article by Ryan Shillington that shows how to &lt;a href=&quot;http://www.ibm.com/developerworks/websphere/techjournal/0801_shillington/0801_shillington.html&quot;&gt;deploy a Rails application to WebSphere&lt;/a&gt;. To me Rails + WebSphere seems like the last thing a Rails advocate would want - but who knows. In my experience, most developers that use WebSphere don&apos;t do it by choice.
&lt;/p&gt;
&lt;p&gt;For companies that have invested a lot of time and money into the JVM as a platform, it seems like Grails is the clear winner over Rails. However, the line gets blurry when you start talking about JRuby. I think JRuby will get there, but I don&apos;t believe it&apos;s there yet. If you look at the two major JRuby on Rails success stories (from &lt;a href=&quot;http://www.infoq.com/news/2007/11/oracle-mix-jruby-experiences&quot;&gt;Oracle&lt;/a&gt; and &lt;a href=&quot;http://blog.igorminar.com/2008/01/jruby-on-rails-rewrite-of.html&quot;&gt;Sun&lt;/a&gt;), they&apos;ve had to fix performance issues as part of their projects. With big companies investing in the platform, it&apos;s highly likely performance will be fixed in the near future. I believe both the Groovy and JRuby teams have said performance enhancements are their top priority for their next releases. 
&lt;/p&gt;
&lt;p&gt;I think the biggest news related to performance of dynamic languages on the JVM is the new &lt;a href=&quot;http://openjdk.java.net/projects/mlvm/&quot;&gt;Da Vinci Machine project&lt;/a&gt;.&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
This project will prototype a number of extensions to the JVM, so that it can run non-Java languages efficiently, with a performance level comparable to that of Java itself.
&lt;/p&gt;
&lt;p&gt;
Dynamic languages on the JVM seem to have a very bright future.&lt;/p&gt;&lt;p&gt;I got involved with Struts and Spring just before their 1.0 releases. Is it simply a coincidence that I happened to start looking into Grails right before its 1.0 release?</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/how_do_you_get_up</guid>
    <title>How do you get up to speed on Rails and Grails quickly?</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/how_do_you_get_up</link>
        <pubDate>Thu, 31 Jan 2008 11:29:19 -0700</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>ruby</category>
    <category>jruby</category>
    <category>rails</category>
            <description>What&apos;s the best way to learn Rails and Grails and satisfy one of my New Year&apos;s Resolutions (read more) at the same time? Books:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/minibooks/grails&quot;&gt;Getting Started with Grails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pragprog.com/titles/fr_r4j&quot;&gt;Rails for Java Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.apress.com/book/view/1590598814&quot;&gt;Practical JRuby on Rails Web 2.0 Projects: Bringing Ruby on Rails to Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pragprog.com/titles/sdgrvr&quot;&gt;Groovy Recipes: Greasing the Wheels of Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pragprog.com/titles/vslg&quot;&gt;Programming Groovy: Dynamic Productivity for the Java Developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.manning.com/koenig/&quot;&gt;Groovy in Action&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.pragprog.com/titles/sdgrvr&quot; title=&quot;Why highlight this book? Because it has the coolest cover!&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/groovyrecipes-cover.jpg&quot; width=&quot;75&quot; height=&quot;90&quot; class=&quot;picture&quot; /&gt;&lt;/a&gt;
Thanks to connections with publishers, I was able to get PDFs of most of these for free. The only ones I paid for were the beta books (Groovy Recipes and Programming Groovy) from the Pragmatic Programmers. I doubt I&apos;ll read them all, but I&apos;ve had fun so far.&lt;/p&gt;
&lt;p&gt;I polished off Getting Started with Grails in a few hours. I expect to finish Rails for Java Developers this week. I used to hate reading PDFs, but I&apos;ve enjoyed reading these books. A &lt;a href=&quot;http://raibledesigns.com/rd/entry/life_with_a_30_monitor&quot;&gt;30&quot; monitor&lt;/a&gt; might have something to do with it.
&lt;/p&gt;
&lt;p&gt;After honing my Grails and Rails knowledge, I hope to become a GWT and Flex Ninja. For those GWT and Flex experts out there, what are the best books for those technologies? By &quot;best&quot;, I mean the most advanced and up-to-date.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/is_there_room_for_both</guid>
    <title>Is there room for both Rails and Grails in a company?</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/is_there_room_for_both</link>
        <pubDate>Wed, 30 Jan 2008 11:48:14 -0700</pubDate>
    <category>Java</category>
    <category>comparison</category>
    <category>groovy</category>
    <category>rails</category>
    <category>grails</category>
    <category>ruby</category>
            <description>For the last week, I&apos;ve been knee deep &lt;a href=&quot;http://raibledesigns.com/rd/entry/migrating_a_rails_app_to&quot;&gt;learning more about Rails and Grails&lt;/a&gt;. The reason is because I think developers (and companies) are going to have a hard time deciding which framework is best for them. The real question is: &lt;strong&gt;do they both do the same thing or are their different applications for each&lt;/strong&gt;? Is &quot;Grails vs. JRuby on Rails&quot; a &quot;Struts 2 vs. Spring MVC vs. Stripes&quot; argument - where they&apos;re all so similar it probably doesn&apos;t &lt;em&gt;really&lt;/em&gt; matter which one you choose?

&lt;/p&gt;
&lt;blockquote&gt;
&lt;em&gt;Of course, the Stripes folks will object, but I really don&apos;t think it&apos;s &lt;em&gt;that&lt;/em&gt; much better than Spring MVC 2.5 or Struts 2.1. Sorry guys. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;&lt;/em&gt;
&lt;/blockquote&gt;
&lt;p&gt;If it is a Spring MVC vs. Struts 2 type of argument, then it seems to make sense for a company to standardize on one -- don&apos;t you agree? Does it make sense to allow both frameworks in a company if they&apos;re so similar? 
&lt;/p&gt;
&lt;p&gt;
Google has had much success in &lt;a href=&quot;http://steve-yegge.blogspot.com/2007/06/rhino-on-rails.html&quot;&gt;restricting its allowed programming languages to C++, Java, Python, and JavaScript&lt;/a&gt;. Shouldn&apos;t other companies do something similar? It seems like a good idea to restrict allowed web frameworks to a few as well. For companies with successful Java infrastructures, it seems logic to allow one Java-based web framework and Rails or Grails for getting things done as fast as possible.&lt;/p&gt;
&lt;p&gt;Here&apos;s the sticking point: Ask any Rails developers and they&apos;ll say Rails wins hands down. Ask any Grails developers and they&apos;ll say Grails is the easy choice because it builds on top of Java&apos;s strong open source projects. Blah, blah, blah - where&apos;s the objective voice that&apos;s identified the &quot;sweet spot&quot; for each?&lt;/p&gt;
&lt;p&gt;The Relevance guys, particularly Stuart Halloway, has a post about &lt;a href=&quot;http://relevancellc.com/2008/1/11/how-to-pick-a-platform&quot;&gt;How to pick a platform&lt;/a&gt;. The logic in this post seems to imply that both frameworks do solve the same problem - just in different ways. Stu seems to recommend Rails for most applications, because Ruby is a better language. He says Grails &lt;em&gt;might&lt;/em&gt; win if you have &quot;an established team of Spring ninjas&quot;.&lt;/p&gt;
&lt;p&gt;I know Stu and believe he does know his stuff (in both Java and Ruby). So is this the definitive guide on which framework to choose? If you have a staff full of Java developers, they should start learning/using Rails rather than doing the easier transition to Groovy, which they pretty much already know? &lt;/p&gt;
&lt;p&gt;I don&apos;t know what the answer is, but that&apos;s what everyone seems to be saying. The problems is, the authorities on this matter (Rails vs. Grails) are often &quot;head honchos&quot; in companies that have a vested interest in seeing their respective framework/platform succeed. Since the Relevance team employs some Grails developers, it seems they&apos;re less biased. But who knows. 
&lt;/p&gt;
&lt;p&gt;
Is Rails &lt;em&gt;really&lt;/em&gt; head and shoulders better than Grails? I don&apos;t think so, but I&apos;ve only been programming with both for a week. &lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/migrating_a_rails_app_to</guid>
    <title>Migrating a Rails app to Grails</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/migrating_a_rails_app_to</link>
        <pubDate>Tue, 22 Jan 2008 09:37:49 -0700</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>webframeworks</category>
    <category>rails</category>
            <description>There&apos;s an interesting trend I&apos;ve seen happening at companies over the last year. More and more, they&apos;re experimenting with Rails and/or Grails for both prototyping and real applications. I think this is an excellent use for these frameworks as they both are very productive. The reasons for their productivity is simple: &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=35538&quot;&gt;zero turnaround&lt;/a&gt; and less code.&lt;/p&gt;
&lt;p&gt;For a Java-based company that&apos;s built their bread and butter applications on Java and been successful with it, both frameworks can be disruptive. Bread and butter applications tend to be large and somewhat difficult to maintain. In my experience, the biggest maintenance headache is &lt;em&gt;not&lt;/em&gt; writing code or fixing bugs, it&apos;s the turnaround time required to make changes, run tests and build the application to test in your browser. Since Rails and Grails eliminate the turnaround, it&apos;s only natural for developers at companies with a lengthy build process to love their increased productivity.
&lt;/p&gt;
&lt;p&gt;Over the next couple weeks, I&apos;m going to do some experimenting with porting a Rails application to Grails. Why? Because I think companies are going to have a difficult time choosing between these two frameworks for rapid prototyping and (possible) production deployments. While both frameworks are great for prototyping, the last thing most developers want to do is throw away the prototype and develop it with something else. They want to continue to enhance the prototype and eventually put it into production. With Rails and Grails (and many others), it&apos;s possible to build the real application in a matter of weeks, so why shouldn&apos;t it be put into production?&lt;/p&gt;
&lt;p&gt;For most Java-based companies, putting a Rails application into production is unfamiliar territory. However, a Grails application is just a WAR, so they can continue to use all the Java infrastructure they know and love. So for companies with an established, tuned and successful JVM infrastructure, does it really make sense to use Rails over Grails? The only thing I can think of is language reasons - there&apos;s a lot of Ruby fanatics out there.&lt;/p&gt;
&lt;p&gt;So again, the purpose of my experiment is simple: to see if a Grails app can do everything a Rails app can. As for language features and &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=48180&quot;&gt;scalability&lt;/a&gt;, I&apos;m not really concerned with that right now. I&apos;m not looking to prove that either framework should be used for all web applications - just certain types.&lt;/p&gt;
&lt;p&gt;
Has anyone out there ported a Rails application to Grails? If so, are there any gotchas I should watch out for?
&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I realize that Rails can be deployed on the JVM with JRuby. However, I think many companies have existing Java-based tools (logging, JMX, Spring backends, etc.) that more easily integrate with Grails than Rails. I could be wrong.&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/re_why_grails_doesn_t</guid>
    <title>RE: Why Grails doesn&apos;t use Maven</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/re_why_grails_doesn_t</link>
        <pubDate>Wed, 16 Jan 2008 10:49:35 -0700</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>maven</category>
            <description>Graeme Rocher&apos;s in &lt;a href=&quot;http://graemerocher.blogspot.com/2008/01/why-grails-doesnt-use-maven.html&quot;&gt;Why Grails doesn&apos;t use Maven&lt;/a&gt;:
&lt;p class=&quot;quote&quot;&gt;
In his post entitled &lt;a href=&quot;http://jonasfagundes.com/blog/2008/01/grails-the-good-the-ugly-and-the-bad&quot;&gt;&quot;Grails - The Good, The Bad and the Ugly&quot;&lt;/a&gt;, Jonas has some nice praise for &lt;a href=&quot;http://grails.org/&quot;&gt;Grails&lt;/a&gt;, his main beef is that it is not built on Maven.&lt;br/&gt;&lt;br/&gt;So I wanted to clarify why exactly we chose not use &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven&lt;/a&gt; (by default) and the explanation is there for all to see in Jonas&apos; first example of creating a Grails application vs creating a Maven project:&lt;br/&gt;&lt;br/&gt;Instead of&lt;br/&gt;&lt;code&gt;&lt;br/&gt;grails create-app name&lt;br/&gt;&lt;/code&gt;&lt;br/&gt;could be just&lt;br/&gt;&lt;code&gt;&lt;br/&gt;mvn archetype:create -U\&lt;br/&gt;-DarchetypeGroupId=net.liftweb\&lt;br/&gt;-DarchetypeArtifactId=lift-archetype-blank\&lt;br/&gt;-DarchetypeVersion=0.4\&lt;br/&gt;-DremoteRepositories=http://scala-tools.org/repo-releases\&lt;br/&gt;-DgroupId=your.proj.gid -DartifactId=your-proj-id&lt;br/&gt;&lt;br/&gt;&lt;/code&gt;My goodness, what a mouthful the Maven example is. There is a common acronym in the open source world called RTFM (read the *ing manual), when a user asks a question on a mailing list and the &quot;experts&quot; respond by pointing them to the place in the manual.
&lt;/p&gt;
&lt;p&gt;
I think Maven&apos;s biggest problems are 1) poor metadata in the central repository and 2) the source of metadata in projects (pom.xml).
&lt;/p&gt;
&lt;p&gt;
I believe #1 can be fixed if the Maven guys allow dependencies to be fixed based on user feedback. It&apos;s also gotten a lot better in recent years. In reality, maintaining transitive dependencies is hard and I believe Maven has done a good job. In reality, they&apos;re the only ones that slurp up transitive dependencies, so the only other option is to maintain the dependencies yourself.
&lt;/p&gt;
&lt;p&gt;
To fix #2, I think the problem is mainly XML and the verboseness of the elements-only pom.xml that Maven requires. Most of the contents of a pom.xml are either dependencies, plugins or exclusions/variances of Maven&apos;s conventions. What if Maven&apos;s metadata was pluggable? What if XML was only one option? What if you could write a pom.groovy and describe your entire build process in 5 lines instead of 500? &lt;em&gt;That&lt;/em&gt; would be very cool.&lt;/p&gt;
&lt;p&gt;I&apos;m still a Maven fan, mostly because it&apos;s greatly simplified the maintenance of and releasing of &lt;a href=&quot;http://appfuse.org&quot;&gt;AppFuse&lt;/a&gt;. When I do GWT, Seam or Grails development in the future, you can be sure I&apos;ll try to use Maven to do the development. Why? Because I&apos;ve learned how to use it and I don&apos;t feel the pain that so many others talk about. I also think it really shines on really large projects (builds that produce 30+ WARs for example). An Ant-based system on really large projects can become quite burdensome and difficult to maintain. Not only that, but it&apos;s very difficult to maintain a modular build system (where you can build/test/deploy a single WAR) with Ant. In my experience, really large Ant-based systems take forever to process that everything is up-to-date whereas Maven systems depend on each other and require you to keep them up to date. Sure it requires you to be smarter and run &quot;mvn install&quot; on your subprojects, but I&apos;d rather do that than wait 5 minutes for Ant to process everything just to run a test.
&lt;/p&gt;
&lt;p&gt;You might remember that the main reason I &lt;a href=&quot;http://raibledesigns.com/rd/entry/re_why_use_maven&quot;&gt;used to prefer Ant over Maven&lt;/a&gt; was speed. That was in Maven 1 days. With Maven 2, speed is no longer a problem and I&apos;ve found it much easier to run &quot;mvn jetty:run&quot; than &quot;ant deploy&quot; and wait for Tomcat to restart. IMO, the perfect development environment is one were you can run a command-line command (or use your IDE to start the server) and code away without worrying about restarts. Seam and Grails offer this environment, but it&apos;s unlikely your entire organization is going to use standardize on those frameworks and not have anything else. I think Maven and the Maven Jetty Plugin offer a nice alternative for the rest of those applications.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/java_web_framework_smackdown_at</guid>
    <title>Java Web Framework Smackdown at TSSJS in Vegas</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/java_web_framework_smackdown_at</link>
        <pubDate>Fri, 11 Jan 2008 12:06:24 -0700</pubDate>
    <category>Java</category>
    <category>seam</category>
    <category>smackdown</category>
    <category>java</category>
    <category>wicket</category>
    <category>grails</category>
    <category>comparison</category>
    <category>springmvc</category>
    <category>jsf</category>
    <category>webframeworks</category>
    <category>struts2</category>
            <description>This year&apos;s TSSJS is &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=48082&quot;&gt;starting to look&lt;/a&gt; like an &lt;a href=&quot;http://javasymposium.techtarget.com/lasvegas/caag.html&quot;&gt;excellent conference&lt;/a&gt;. I&apos;m particularly excited to be moderating the following &lt;a href=&quot;http://javasymposium.techtarget.com/lasvegas/frameworks.html#Panel&quot;&gt;Expert Panel&lt;/a&gt;.&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
&lt;strong&gt;Java Web Framework Smackdown: Struts 2, Spring MVC, Grails, Seam/JSF and Wicket&lt;/strong&gt;&lt;br/&gt;
The leading advocates of today&apos;s popular Web frameworks will duel under the Vegas Lights. Come and learn when to use your favorite framework and to see if it can live up to its hype.
&lt;br/&gt;&lt;br/&gt;
We&apos;re talking about productivity, scalability and maintainability of Java-based Web applications. The emerging trend is that simplicity is better and productivity matters. Furthermore, if maintainability is the most costly part of any application -- how do these frameworks perform?
&lt;br/&gt;&lt;br/&gt;
Attend if you&apos;re a Java Web developer, or if you simply like good entertainment. A working knowledge of the popular Java Web framework options will make this session more fun. If you haven&apos;t worked with any framework, come and learn who has the best spokesman.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://static.raibledesigns.com/repository/images/thevenetian.jpg&quot; rel=&quot;lightbox&quot; title=&quot;The Venetian&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/thevenetian_sm.jpg&quot; width=&quot;130&quot; height=&quot;98&quot; class=&quot;picture&quot; alt=&quot;The Venetian&quot; /&gt;&lt;/a&gt;
I plan on bringing the &lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_spring_mvc_vs_webwork&quot;&gt;boxing bell from OSCON 2005&lt;/a&gt; to make this session one of the best in the show. I&apos;ll be coming up with a list of questions for these experts in the next couple of months. In the meantime, if you have any suggestions, please let me know.&lt;/p&gt;
&lt;p&gt;With a venue like &lt;a href=&quot;http://www.venetian.com&quot;&gt;The Venetian&lt;/a&gt;, why wouldn&apos;t you go? &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_presentation</guid>
    <title>Comparing JVM Web Frameworks Presentation</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_presentation</link>
        <pubDate>Wed, 14 Nov 2007 15:14:53 -0700</pubDate>
    <category>Java</category>
    <category>wicket</category>
    <category>struts2</category>
    <category>gwt</category>
    <category>seam</category>
    <category>flex</category>
    <category>apachecon</category>
    <category>grails</category>
    <category>webframeworks</category>
            <description>Early this morning, I assembled a &lt;strong&gt;Comparing JVM Web Frameworks&lt;/strong&gt; presentation in preparation for &lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1994&quot;&gt;my talk tomorrow at ApacheCon&lt;/a&gt;. As &lt;a href=&quot;http://raibledesigns.com/rd/entry/comparing_web_frameworks_time_for&quot;&gt;mentioned on Monday&lt;/a&gt;, this presentation compares Flex, Grails, GWT, Seam, Struts 2 and Wicket. While I think this presentation would be fun to deliver, I don&apos;t believe it has as much &lt;em&gt;meat&lt;/em&gt; as the original talk I was planning to give. My original talk compares JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket. Since I&apos;ve used all these frameworks, I&apos;m able to compare them more on their technical features. Since I haven&apos;t used Flex, GWT or Seam, there was no way for me to 1) try them all before tomorrow and 2) do a thorough analysis of how well they each handle my desired features.&lt;/p&gt;

&lt;p&gt;Since the abstract on ApacheCon&apos;s website mentions my original presentation, I don&apos;t want to yank out the carpet and present the second without asking. So my plan is to ask the audience which one they&apos;d rather hear and continue from there. I&apos;ve updated both presentations with the latest statistics and uploaded them for your review. For those of you who&apos;ve used these frameworks, I&apos;d be interested to hear how accurate you think my Pros and Cons section is. If you know of better pros or cons, please let me know and I&apos;ll adjust as needed.&lt;/p&gt;

&lt;ul class=&quot;glassList&quot;&gt;

&lt;li&gt;&lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/ComparingJavaWebFrameworks-ApacheConUS2007.pdf&quot;&gt;Comparing  JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/ComparingJVMWebFrameworks-ApacheConUS2007.pdf&quot;&gt;Comparing  Flex, Grails, GWT, Seam, Struts 2 and Wicket&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;While creating the 2nd presentation, I found a couple things that surprised me. The first is how popular Flex is - not only in job listings, but also in skilled developers and mailing list traffic. Below is a graph that shows how there aren&apos;t many jobs for most of the frameworks, but there&apos;s lots for Flex.

&lt;/p&gt;

&lt;p style=&quot;text-align: center&quot;&gt;

&lt;img src=&quot;//static.raibledesigns.com/repository/images/dicejobcount-20071115.png&quot; width=&quot;416&quot; height=&quot;276&quot; alt=&quot;Dice.com Job Count - November 2007&quot; /&gt;

&lt;/p&gt;

&lt;p&gt;The following graph illustrates while I chose to use Flex instead of OpenLaszlo as the Flash framework. OpenLaszlo has a &lt;em&gt;much&lt;/em&gt; smaller community than Flex.&lt;/p&gt;

&lt;p style=&quot;text-align: center&quot;&gt;

&lt;img src=&quot;//static.raibledesigns.com/repository/images/mailinglisttraffic-200711.png&quot; width=&quot;424&quot; height=&quot;257&quot; alt=&quot;User Mailing List Traffic - November 2007&quot; /&gt;

&lt;/p&gt;

&lt;p&gt;The second thing that was surprising is &lt;strong&gt;Seam doesn&apos;t have a logo&lt;/strong&gt;! How does it &lt;em&gt;ever&lt;/em&gt; expect to become a popular open source project without a logo?! It&apos;s amazing they&apos;ve made it this far without having this essential feature. To motivate the creation of a Seam logo, I&apos;m using the following butt-ugly logo in my presentation (found &lt;a href=&quot;http://www.plwmarine.co.uk/images/seam.gif&quot;&gt;here&lt;/a&gt;). Hopefully something better comes along before I deliver my talk tomorrow. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;

&lt;/p&gt;

&lt;p style=&quot;text-align: center&quot;&gt;

&lt;img src=&quot;//static.raibledesigns.com/repository/images/seam.gif&quot; width=&quot;383&quot; height=&quot;136&quot; alt=&quot;Seam Logo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Monday&apos;s post started an &lt;a href=&quot;http://www.nabble.com/Stripes-Ignored...Again-tf4800043.html#a13732878&quot;&gt;interesting thread&lt;/a&gt; on Stripes&apos; mailing list. Also, I really like &lt;a href=&quot;http://blog.interface21.com/main/2007/11/14/annotated-web-mvc-controllers-in-spring-25/&quot;&gt;Spring MVC&apos;s new annotation support&lt;/a&gt;. It&apos;d be nice to see it go a step further and use defaults (like ControllerClassNameHandlerMapping + subpackage support) and only require annotations to override the defaults. IMO, Stripes, Spring MVC and Struts 2 are all excellent choices if a request-based framework provides the best architecture for your application. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; Comparing Flex, Grails, GWT, Seam, Struts 2 and Wicket seems to gave gained a lot of interest (and support) &lt;a href=&quot;http://www.gmjjavadesigns.com/gmjd/entry/comparing_web_frameworks&quot;&gt;in&lt;/a&gt; &lt;a href=&quot;http://rmh.blogs.com/weblog/2007/11/comparing-web-f.html&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://in.relation.to/Bloggers/TheWebFrameworkSpaceIsAchangin&quot;&gt;blogosphere&lt;/a&gt;. Because of this, I&apos;m considering submitting it as a JavaOne talk. If I were to do this, how would you like to see this presentation changed and improved?
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 3:&lt;/strong&gt; I received the following Seam logo via e-mail. &lt;em&gt;Thanks Christian!&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;

&lt;img src=&quot;//static.raibledesigns.com/repository/images/seam_logo_blue.png&quot; width=&quot;400&quot; height=&quot;160&quot; alt=&quot;Seam Logo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update 4:&lt;/strong&gt; I&apos;ve updated the Dice.com graph to include &quot;Java&quot; with every search term. To understand the comments on this entry, you might want to view the &lt;a href=&quot;http://static.raibledesigns.com/repository/images/dicejobcount-20071114.png&quot; rel=&quot;lightbox&quot;&gt;previous graph&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 5:&lt;/strong&gt; This presentation was posted to the Wicket User mailing list. I followed up asking users to post the pros and cons of Wicket. Now there&apos;s a &lt;a href=&quot;http://www.nabble.com/Matt-Raible%27s-ApacheCon-presentation-tf4815955.html&quot;&gt;lengthy thread&lt;/a&gt; on Wicket&apos;s Pros and Cons. Good stuff.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/comparing_web_frameworks_time_for</guid>
    <title>Comparing Web Frameworks: Time for a Change?</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/comparing_web_frameworks_time_for</link>
        <pubDate>Mon, 12 Nov 2007 16:46:56 -0700</pubDate>
    <category>Java</category>
    <category>struts2</category>
    <category>comparison</category>
    <category>gwt</category>
    <category>grails</category>
    <category>webframeworks</category>
    <category>seam</category>
    <category>wicket</category>
            <description>I first came up with the idea to do a &quot;Comparing Web Frameworks&quot; talk in 2004. I submitted a talk to ApacheCon and it got accepted. From there, I &lt;a href=&quot;http://raibledesigns.com/rd/entry/comparing_web_frameworks_presentation_outline&quot;&gt;outlined&lt;/a&gt;, &lt;a href=&quot;http://raibledesigns.com/rd/entry/comparing_web_frameworks_equinox_ant&quot;&gt;created sample apps&lt;/a&gt; and &lt;a href=&quot;http://raibledesigns.com/rd/entry/comparing_web_frameworks_presentation&quot;&gt;practiced&lt;/a&gt; this talk before ApacheCon. Believe it or not, that was my first time speaking in front of a large audience.
&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;
&lt;strong&gt;Historical note:&lt;/strong&gt; October 2004 was a pretty cool month - I &lt;a href=&quot;http://raibledesigns.com/rd/entry/rails_the_mvc_framework_for&quot;&gt;discovered Rails&lt;/a&gt; and Roller had a &lt;a href=&quot;http://raibledesigns.com/rd/entry/upgraded_to_roller_1_0&quot;&gt;1.0 release candidate&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;When I created the presentation, it was in large part due to all the WebWork and Tapestry folks harassing me on this very blog. I started using Struts in June 2001 (the same month 1.0 was released) and had used it successfully on many projects. Part of the reason this blog became so popular was I posted lots of tips and tricks that I learned about Struts (and its related project) while using it. After a while, the noise became too heavy to ignore it - especially after I&apos;d tried Spring MVC. So in an effort to learn more about the the other frameworks, I submitted a talk and &lt;em&gt;forced&lt;/em&gt; myself to learn them. It seems to have worked out pretty well.
&lt;/p&gt;
&lt;p&gt;With that being said, I think it&apos;s time for a change. The reason I originally wrote this was to educate developers on how the top Java web frameworks differed and encourage developers to try more than one. A while later, I realized there&apos;s &lt;a href=&quot;http://raibledesigns.com/rd/entry/tssjs_bof_web_framework_sweet&quot;&gt;different tools for different jobs&lt;/a&gt; and it&apos;s not a one-size-fits-all web framework world. It&apos;s not a component vs. request-based framework world either. There&apos;s lots of options now. When I&apos;ve delivered this talk earlier this year, I&apos;ve always felt like I&apos;ve left quite a few frameworks out. The solution could be to add more and more frameworks. However, I don&apos;t think that&apos;s a good idea. The talk is already difficult to squeeze into 90 minutes and it&apos;s unlikely that adding more frameworks is going to help.
&lt;/p&gt;
&lt;p&gt;The change I&apos;d like to do is to reduce the number of frameworks down to (what I consider) the top web frameworks for deploying to the JVM. What are those frameworks? IMHO, they are as follows, in no particular order:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;GWT-Ext&lt;/li&gt;
&lt;li&gt;Wicket&lt;/li&gt;
&lt;li&gt;Grails&lt;/li&gt;
&lt;li&gt;Flex/OpenLaszlo&lt;/li&gt;
&lt;li&gt;Seam&lt;/li&gt;
&lt;li&gt;Struts 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The RIFE, Tapestry and ZK folks can start bitching now. Sorry - less frameworks make for a more interesting talk. Maybe I&apos;ll add you in the future and I can ask the audience which ones they want compared then we can choose four and go from there. Why don&apos;t I mention Spring MVC? Because I think Struts 2 is easier to learn and be productive with and I also like it&apos;s more open and active community. I&apos;ve written applications with both and I like Struts 2 better. As for Flex vs. OpenLaszlo, I&apos;m somewhat torn. It seems like learning Flex is going to be better for your career, but it&apos;s likely useless without the Flex Builder - which is not open source. However, at $250, it&apos;s likely worth its price. I know the &lt;a href=&quot;http://www.picnik.com/&quot;&gt;Picnik&lt;/a&gt; folks used Flex for their UI - I wonder how much they used Flex Builder in the process?
&lt;/p&gt;
&lt;p&gt;What do you think? Are these the top web frameworks for JVM deployment today? The next time I give this talk is &lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1994&quot;&gt;this Thursday at ApacheCon&lt;/a&gt;. I may try to re-write my talk and then give the audience a choice of old vs. new. The downside of doing the new talk is I won&apos;t have time to write apps with GWT, Flex or Seam. Anyone care to post their top three pros and cons for any of these frameworks?</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/flex_and_grails_made_easy</guid>
    <title>Flex and Grails Made Easy</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/flex_and_grails_made_easy</link>
        <pubDate>Thu, 1 Nov 2007 23:00:38 -0600</pubDate>
    <category>Java</category>
    <category>idea</category>
    <category>grails</category>
    <category>maven</category>
    <category>flex</category>
            <description>I love how easy it is to start new projects these days. It was very difficult when I started creating AppFuse way back in 2002. &lt;em&gt;We&apos;ve come a long way baby!&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;Here&apos;s a couple of easy ways to get started with Flex and Grails:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://ancientprogramming.blogspot.com/2007/11/quickstart-flex-development-with-this.html&quot;&gt;Quickstart flex development with this maven archetype&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://docs.codehaus.org/display/GRAILS/IDEA+Integration&quot;&gt;Grails development in IntelliJ IDEA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope to develop with Flex, Grails, GWT or YUI + Struts 2 in the next 6 months. These seem like the most exciting technologies for Java web development in 2008. </description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/introduction_to_grails_with_scott</guid>
    <title>Introduction to Grails with Scott Davis at the Colorado Software Summit</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/introduction_to_grails_with_scott</link>
        <pubDate>Thu, 25 Oct 2007 19:03:42 -0600</pubDate>
    <category>Java</category>
    <category>grails</category>
    <category>groovy</category>
    <category>softwaresummit</category>
    <category>webframeworks</category>
            <description>&lt;a href=&quot;http://grails.org&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/grails-logo-20070903.jpg&quot; alt=&quot;Grails&quot; width=&quot;280&quot; height=&quot;84&quot; class=&quot;picture&quot; style=&quot;border: 0&quot;/&gt;&lt;/a&gt;
According to Scott, today&apos;s Java-based web frameworks are partial solutions at best. They&apos;re only solving one piece of the puzzle - you still need to manage persistence, deployment, etc. &lt;em&gt;all by yourself&lt;/em&gt;.
&lt;/p&gt;&lt;p&gt;
We&apos;re moving into a new era of web frameworks. The expectation now is a full-stack solution. Grails is a fully integrated modern Java web application in a box. It contains Spring, Hibernate, Quartz, Log4J, Jetty, HSQL, JUnit and Ant. You&apos;re not limited to using Jetty, you can type &quot;grails war&quot; and create a WAR that you can deploy to any application server. In a single zip/tar, you get the whole thing - including the database and servlet container. You get a lot of good default for free, but you&apos;re not limited to those defaults.
&lt;/p&gt;&lt;p&gt;
What does &quot;modern&quot; in a framework mean? It means it uses Convention over Configuration - Grails autowires components together based on naming conventions. Struts 1.x uses Configuration over Configuration - the more XML the better. 
&lt;/p&gt;&lt;p&gt;
The Wisdom of Crowds - why are the many smarter than the few? What is the wisdom of crowds when it comes to web frameworks. &lt;strong&gt;Struts&lt;/strong&gt; is the wisdom of crowds when it comes to web frameworks. It&apos;s based on sound principles (MVC) and was written by Craig McClanahan. He was the architect of &quot;Catalina&quot; Tomcat 4 and wrote Struts shortly thereafter. David Geary was contributor #2 to Struts. It has a proven track record and has a 60%-70% market share. Struts must be the perfect framework - especially since it has such a great pedigree.
&lt;/p&gt;&lt;p&gt;
So what&apos;s wrong with Struts? 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&apos;s 7 years old&lt;/li&gt;
&lt;li&gt;It&apos;s verbose and overly complex (reflective of the EJB 2.x era)&lt;/li&gt;
&lt;li&gt;Splintered community: Craig moved on to JSF -&gt; created Shale, then the WebWork merger&lt;/li&gt;
&lt;li&gt;While Struts 1.x was an unqualified success, Struts 2.x can&apos;t seem to build that critical mass - it can&apos;t seem to reach The Tipping Point like Struts 1.x did&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Recipe for a Tipping Point: Contagiousness / viral, tiny &quot;tweaks&quot; to a proven model can yield big, disproportionate effects, the rise is not &quot;slow and steady&quot; - the effect is dramatic and immediate.
&lt;/p&gt;&lt;p&gt;
Ruby on Rails won the hype award. It&apos;s largely worth the hype, but it&apos;s not revolutionary - it&apos;s &lt;em&gt;evolutionary&lt;/em&gt;. It has tiny tweaks to the proven MVC-driven approach: Convention over Configuration, Scaffolding and Unified Technology Stack. 
&lt;/p&gt;&lt;p&gt;
The one thing that Rails is lacking is Java support. Grails, on the other hand, offers the same experience using known, proven Java solutions.
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
Rails =&gt; &quot;replacement&quot;&lt;/li&gt;
&lt;li&gt;Grails =&gt; &quot;upgrade&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Scott drank the Rails Kool-Aid for a while and enjoyed it, but found it difficult to switch from Ruby in the morning to Java in the afternoon. With Grails, he doesn&apos;t have to do as much context switching, as well as all the Java libraries are available - the ones you know and love.
&lt;/p&gt;&lt;p&gt;
You can drop groovy.jar into your classpath and write Groovy code. One nice thing about Groovy is you can rename your existing .java files to .groovy and they&apos;ll work just fine. Included Ajax support: Script.aculo.us and Protoype as well as YUI. YUI is battle-tested since it&apos;s used by Yahoo and very well documented.  You can use &quot;grails install-dojo&quot; to install the Dojo toolkit. Grails has a wealth of plugins available at &lt;a href=&quot;http://grails.org/plugins&quot;&gt;http://grails.org/plugins&lt;/a&gt;. 
&lt;/p&gt;&lt;p&gt;
Now we&apos;re going to crack our nuckles and build some code - slides are over.

&lt;pre&gt;
 grails create-app conference
 cd conference
 grails create-domain-class Speaker (add some fields)
 grails generate-all Speaker
 grails run-app
&lt;/pre&gt;
&lt;p&gt;The impressive things about this set of commands is I was able to 1) download Grails and 2) run all these commands at the same time that Scott did. I was definitely impressed (I knew I would be).

Auto-scaffolding - you can get the same thing as &quot;generate-all&quot;, but it generates controllers and views at runtime &lt;em&gt;in-memory&lt;/em&gt;. All you need to do is create a domain object (i.e. Talk) and then create a TalkController that has the following line in it:
&lt;/p&gt;
&lt;pre&gt;
def scaffold = Talk
&lt;/pre&gt;
&lt;p&gt;As a test, I tried this at the same time that Scott did and got the following error. It looks like Grails/Jetty isn&apos;t smart enough to pick up new classes as they&apos;re added. 
&lt;/p&gt;
&lt;pre&gt;
[263102] commons.DefaultGrailsApplication Class not found attempting to load class Talk
java.lang.ClassNotFoundException: Talk
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
&lt;/pre&gt;
&lt;p&gt;Grails comes with a number of environments. &lt;strong&gt;Dev&lt;/strong&gt; (the default) auto-reloads changes to Controllers, Views and even the Model (this is helpful for rapid development). &lt;strong&gt;Prod&lt;/strong&gt; loads all items statically for maximum performance. To change the environments - you can change DataSource.groovy.
&lt;/p&gt;
&lt;p&gt;For some reason, adding/removing some properties on my Talk object and my application hasn&apos;t been the same since. Now when I try to access my TalkController, I see the following stack trace:
&lt;/p&gt;
&lt;pre&gt;
org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property: difficulty of: Talk; nested exception is org.hibernate.QueryException: could not resolve property: difficulty of: Talk
	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:640)
	at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
	at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378)
	at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:342)
	at org.codehaus.groovy.grails.scaffolding.DefaultScaffoldDomain.list(DefaultScaffoldDomain.java:112)
&lt;/pre&gt;
&lt;p&gt;I asked Scott about this error and he proved that removing properties from domain objects should work. I told him restarting Jetty didn&apos;t fix the problem and he suggested dropping the &quot;Talk&quot; table and letting Grails re-create it. Unfortunately, I have no idea where this database is, so that&apos;s difficult to do. Doh - now I realize what was causing the problem. Before I dropped the &quot;difficulty&quot; property, I had clicked on the column and that property was still referenced in the URL. When I&apos;d refresh the browser, the stack trace occurred. I don&apos;t know if I&apos;d consider this a bug or not.
&lt;/p&gt;
&lt;p&gt;
dbCreate = hibernate.hbm2ddl.auto is used. When in development &lt;strong&gt;create-drop&lt;/strong&gt; is used. In production and test environments, it uses &lt;strong&gt;update&lt;/strong&gt; and saves the data between restarts.
&lt;/p&gt;
&lt;p&gt;
You can turn off Hibernate&apos;s automatic schema alteration by commenting out &quot;dbCreate&quot; line in DataSource.groovy. 
&lt;/p&gt;
&lt;p&gt;To run your application in Tomcat instead of Jetty, you can run &quot;grails war&quot; and copy the WAR to Tomcat. The WAR is created with the production environment by default, so you may need to pass in arguments or set environment variables if you want the WAR created in dev mode.
&lt;/p&gt;
&lt;p&gt;At this point, my battery died. Scott continued to cover how to order form elements (when using scaffolding) with &quot;static constraints&quot; and how to add validation rules. It was an excellent presentation and Grails definitely looks like a really cool web framework. The best part is I learned most of what you need to know to use it - in an hour!
&lt;/p&gt;
&lt;p&gt;
I might have to try Grails soon - I love the concept of &lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=47213&quot;&gt;Life above the Service Tier&lt;/a&gt; and Grails would work nicely for serving up &lt;a href=&quot;http://grails.codehaus.org/REST+plugin&quot;&gt;REST&lt;/a&gt;. I think YUI, GWT-Ext and Flex are probably the best frameworks for developing a SOFEA client. The question is - when using YUI, how do you download all pages in the application at once?</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/appfuse_vs_grails_vs_rails</guid>
    <title>AppFuse vs. Grails vs. Rails</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/appfuse_vs_grails_vs_rails</link>
        <pubDate>Wed, 8 Aug 2007 10:22:34 -0600</pubDate>
    <category>Java</category>
    <category>rails</category>
    <category>grails</category>
    <category>appfuse</category>
            <description>In the comments of my &lt;a href=&quot;http://raibledesigns.com/rd/entry/choosing_a_jvm_web_framework&quot;&gt;Choosing a JVM Web Framework&lt;/a&gt;, Graeme Rocher &lt;a href=&quot;http://raibledesigns.com/rd/entry/choosing_a_jvm_web_framework#comment15&quot;&gt;writes&lt;/a&gt;:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
no offense Matt, but I fear you are a grossly inappropriate person to be writing such a study given your past history of claiming frameworks like &lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_and_groovy_grails&quot;&gt;Grails are competitors to AppFuse&lt;/a&gt;. Any such study will come laced with doubts over its honesty and I&apos;m sure this doesn&apos;t just apply to Grails.&lt;/p&gt;
&lt;p&gt;In the post Graeme linked to, I said:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
I think Grails and AppFuse are more likely competitors rather than
compatible.  Grails uses Spring, Spring MVC and Hibernate
under-the-covers, whereas AppFuse uses the raw frameworks.  Of course,
it would be cool to allow different classes w/in AppFuse to be written
in Groovy or JRuby.  At this point, I think it&apos;s probably better for
users to choose one or the other.
&lt;/p&gt;
&lt;p&gt;Since writing that post a year ago, I&apos;ve changed my opinion about AppFuse being competitors with Grails or Rails. Why? Because they&apos;re different languages. I don&apos;t think you should choose a web development stack first. I think you should choose your language first. For those that choose raw Java, I think AppFuse provides a good solution. To be more explicit, here&apos;s a private conversation that &lt;a href=&quot;http://jroller.com/dlwhitehurst&quot;&gt;David Whitehurst&lt;/a&gt; (author of The AppFuse Primer) and I exchanged.&lt;/p&gt;
&lt;p class=&quot;smokey&quot; style=&quot;padding-right: 10px&quot;&gt;
&lt;em&gt;
&lt;strong&gt;David:&lt;/strong&gt; Have you been looking at Ruby on Rails any?  And, if so, I&apos;m sure you&apos;re as impressed by those who command the language as I am.  But, I think the J2EE web application is not dead yet.  Do you think any comparison of the complexity of AppFuse vs. Rails should be mentioned in the book?&lt;/em&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Matt:&lt;/strong&gt; I&apos;m highly aware of Rails, have attended talks and tutorials on it,
even bought books about it - but I&apos;ve never written an app, done a
tutorial or used it in the real-world. I&apos;m afraid of it. I&apos;m almost
certain I&apos;d like it, and I&apos;d likely like Grails as well. However, the
reason I stick with pure Java is because that&apos;s where my clients&apos; demand is and hence the consulting
dollars for me. 
&lt;br/&gt;&lt;br/&gt;
It&apos;s probably also possible to create AppFuse for both Rails and
Grails. I believe Rails&apos; Streamlined in much like AppFuse. I like to
think of AppFuse as language agnostic - it&apos;s always been designed to
eliminate ramp up time. While Rails and Grails simplify the
programming API and make it possible to develop code with less lines
of code, it&apos;d be nice to have user management, file upload and other
things like AppFuse has. When I start using these frameworks, it&apos;s
likely I&apos;ll develop some sort of features like AppFuse has and use
them on projects. Of course, if they already have all the features of AppFuse via plugins, I wouldn&apos;t reinvent the wheel - I&apos;m simply use what&apos;s already there and be happy about it.
&lt;br/&gt;&lt;br/&gt;
I don&apos;t know if it&apos;s relevant to mention Rails, but it probably
doesn&apos;t hurt. There&apos;s no reason to ignore the competition if they&apos;re
indeed competition. I don&apos;t see them as competition, and I almost
don&apos;t see Grails as competition either. AppFuse (in its current state)
is for developers that&apos;ve chosen to use the language and frameworks
that AppFuse supports. It&apos;s not trying to solve everyone&apos;s problems -
it&apos;s merely trying to simplify things for those using the frameworks
it supports.
&lt;br/&gt;&lt;br/&gt;
There&apos;s nothing saying that AppFuse can&apos;t have a Rails or Grails
version in the future. For me, it&apos;ll happen if I start developing
applications using these frameworks and see the integration needs like
I saw with the Java frameworks. The good news is most of these
frameworks have done the integration work, so it&apos;s really just a
matter of creating features or using plugins.&lt;br/&gt;&lt;br/&gt;
&lt;em&gt;&lt;strong&gt;David:&lt;/strong&gt; I keep getting these &quot;dream-squasher&quot; friends of mine showing me Rails, Grails, and how wonderful Ruby is.  It&apos;s impressive, but I&apos;m not convinced that big business is ready to adopt it any time soon.&lt;/em&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Matt:&lt;/strong&gt;
As a Java programmer, I think you&apos;d be a fool to ignore Rails or
Grails and not at least be familiar with them. There&apos;s no reason to
discount technology until you&apos;ve used it on a real-world project - at
least 6 months or longer - IMO.
&lt;br/&gt;&lt;br/&gt;
Just because you&apos;re productive in Ruby and like it - that doesn&apos;t make
you a bad Java programmer.
&lt;/p&gt;
&lt;p&gt;I hope this clears up any confusion on how I feel towards Rails or Grails. I would welcome the opportunity to use them on a project. If I was starting a products-based company, I certainly would give them a shot in the prototyping phase. However, I&apos;m a consultant that makes money from clients hiring me to explain/do what I know best. At the current time, that happens to be open source Java frameworks. 
&lt;/p&gt;
&lt;p&gt;
I do plan on learning a plethora of other frameworks, in other languages, I just haven&apos;t had the time yet. When I do, I hope that I can somehow become proficient enough to help companies adopt them as well. However, to build up that experience and expertise will likely take years. I think this is how lots of companies feel. Can you blame them for not &quot;jumping ship&quot; on their current skills and knowledge?
&lt;/p&gt;
&lt;p&gt;Of course, then you have the &lt;a href=&quot;http://relevancellc.com/&quot;&gt;Relevance&lt;/a&gt; guys who seem to be doing exactly what I hope to be doing in several years from now. Not only do they specialize in Java and its frameworks, but they also do consulting and training around &lt;a href=&quot;http://relevancellc.com/training&quot;&gt;Rails, Grails and Ajax&lt;/a&gt;. I can&apos;t help but admire them tremendously.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/open_source_web_frameworks_mailing</guid>
    <title>Open Source Web Frameworks&apos; Mailing List Traffic - June 2007</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/open_source_web_frameworks_mailing</link>
        <pubDate>Thu, 26 Jul 2007 14:12:29 -0600</pubDate>
    <category>Open Source</category>
    <category>wicket</category>
    <category>tapestry</category>
    <category>flex</category>
    <category>struts</category>
    <category>grails</category>
    <category>stripes</category>
    <category>myfaces</category>
    <category>rubyonrails</category>
    <category>django</category>
    <category>gwt</category>
    <category>openlazslo</category>
    <category>turbogears</category>
    <category>webframeworks</category>
            <description>Who knows if these stats mean anything, but it does make a pretty graph. Current mailing list traffic leaders in the web framework space: Rails, Flex and GWT. For those frameworks with dev and users lists, these stats are from the users lists. If you find these numbers to be inaccurate, please let me know.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/908369176/&quot; title=&quot;Open Source Web Frameworks Communities&quot;&gt;&lt;img src=&quot;//farm2.static.flickr.com/1319/908369176_811bbca419.jpg&quot; width=&quot;500&quot; height=&quot;294&quot; alt=&quot;Open Source Web Frameworks Communities&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Here&apos;s the numbers in case you want to create your own graphs:
&lt;ul&gt;
&lt;li&gt;Rails: 4056&lt;/li&gt;
&lt;li&gt;Flex: 3558&lt;/li&gt;
&lt;li&gt;GWT: 2305&lt;/li&gt;
&lt;li&gt;Django: 1951&lt;/li&gt;
&lt;li&gt;Wicket: 1718&lt;/li&gt;
&lt;li&gt;Struts: 1689&lt;/li&gt;
&lt;li&gt;Grails: 1307&lt;/li&gt;
&lt;li&gt;MyFaces: 1283&lt;/li&gt;
&lt;li&gt;Tapestry: 1268&lt;/li&gt;
&lt;li&gt;TurbyGears: 797&lt;/li&gt;
&lt;li&gt;Stripes: 206&lt;/li&gt;
&lt;li&gt;OpenLaszlo: 189&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;</description>          </item>
  </channel>
</rss>