<?xml version="1.0" encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="https://raibledesigns.com/roller-ui/styles/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom">
    <title type="html">Raible Designs</title>
    <subtitle type="html">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.</subtitle>
    <id>https://raibledesigns.com/rd/feed/entries/atom</id>
            <link rel="self" type="application/atom+xml" href="https://raibledesigns.com/rd/feed/entries/atom?tags=webframeworks" />
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/" />
        <updated>2026-03-30T03:31:45-06:00</updated>
    <generator uri="http://roller.apache.org" version="5.0.3 (1388864191739:dave)">Apache Roller (incubating)</generator>
        <entry>
        <id>https://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_at</id>
        <title type="html">Comparing JVM Web Frameworks at vJUG</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_at"/>
        <published>2014-02-06T10:54:17-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="playframework" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vaadin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tapestry" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="angularjs" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wicket" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jvm" scheme="http://roller.apache.org/ns/tags/" />
        <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;</summary>
        <content 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;

&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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/video_of_comparing_jvm_web</id>
        <title type="html">Video of Comparing JVM Web Frameworks from Devoxx France</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/video_of_comparing_jvm_web"/>
        <published>2013-06-24T09:10:45-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="devoxxfr" scheme="http://roller.apache.org/ns/tags/" />
        <category term="devoxx" scheme="http://roller.apache.org/ns/tags/" />
        <category term="parleys" scheme="http://roller.apache.org/ns/tags/" />
        <category term="video" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jvm" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Whenever I do a talk, I get requests for a recording of it. It&apos;s rare that recordings are made, but when they are, I like to share them. In March of this year, I &lt;a href=&quot;http://raibledesigns.com/rd/entry/devoxx_france_a_great_conference&quot;&gt;traveled to Devoxx France&lt;/a&gt; and had a great time. One of the talks I delivered was Comparing JVM Web Frameworks, with a bit of a twist from prior versions.
&lt;/p&gt;
&lt;p class=&quot;quote&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;
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;The good folks at Parleys have &lt;a href=&quot;http://www.parleys.com/play/51b27df5e4b0065193d63016&quot;&gt;published the video of this talk&lt;/a&gt;. If you haven&apos;t heard of Parleys, it&apos;s an awesome platform for watching conference talks. As their &lt;a href=&quot;http://parleys.com/info&quot;&gt;Mission Statement&lt;/a&gt; says: &lt;em&gt;If YouTube and Slideshare would make a baby then it would be named Parleys.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Below is an embedded video of this presentation - I hope you enjoy watching it as much as I did delivering it!&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;iframe type=&quot;text/html&quot; width=&quot;670&quot; height=&quot;360&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; src=&quot;//www.parleys.com/share.html#play/51b27df5e4b0065193d63016&quot; frameborder=&quot;0&quot;&gt;&amp;lt;br /&amp;gt;&lt;/iframe&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/devoxx_france_a_great_conference</id>
        <title type="html">Devoxx France: A Great Conference in a Magnificent City</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/devoxx_france_a_great_conference"/>
        <published>2013-03-29T13:14:30-06:00</published>
        <updated>2014-05-08T19:47:26-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="travel" scheme="http://roller.apache.org/ns/tags/" />
        <category term="paradoxofchoice" scheme="http://roller.apache.org/ns/tags/" />
        <category term="trish" scheme="http://roller.apache.org/ns/tags/" />
        <category term="france" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="devoxxfr" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="play" scheme="http://roller.apache.org/ns/tags/" />
        <category term="devoxx" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/how_do_you_choose_web</id>
        <title type="html">How do you choose web framework candidates to compare?</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/how_do_you_choose_web"/>
        <published>2013-03-18T12:10:14-06:00</published>
        <updated>2013-03-18T18:12:30-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://blog.websitesframeworks.com/about-us/&quot;&gt;David D&#237;az Clavijo&lt;/a&gt; sent me an email a couple weeks ago asking me about comparing web frameworks. 
David is a computer engineering student at the University of Las Palmas de Gran Canaria (ULPGC) in the Canary Islands, Spain. His FYP (Final Year Project) is a web frameworks comparison focused on high productivity frameworks. He&apos;s started a &lt;a href=&quot;http://blog.websitesframeworks.com/&quot;&gt;blog&lt;/a&gt; to help facilitate his work and has been writing some interesting posts. &lt;/p&gt;
&lt;div class=&quot;quote&quot;&gt;
&lt;p style=&quot;margin-top: 0&quot;&gt;
Four frameworks will be compared. The comparison test is composed by &lt;strong&gt;four fixed time tasks&lt;/strong&gt; for each framework:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Learning the programming language&lt;/strong&gt;: 5 hours&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Making exercises in the programming language&lt;/strong&gt;: 15 hours&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning the framework&lt;/strong&gt;: 25 hours&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developing the website&lt;/strong&gt;: 50 hours&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
After all process is done, it can be seen which framework presented a higher productivity and smaller learning curve.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0&quot;&gt;
We have decided a cross-language set of frameworks which are: &lt;strong&gt;Ruby on Rails, Grails, Django and Code Igniter&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Today, he wrote about &lt;a href=&quot;http://blog.websitesframeworks.com/2013/03/web-frameworks-selected-to-be-compared-236/&quot;&gt;the web frameworks he&apos;s decided to compare&lt;/a&gt; and inspired me to respond to his original request for my thoughts. &lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
Hello David,&lt;br/&gt;&lt;br/&gt;
Sorry it took me so long to respond. I think your approach as far as learning the language, making exercises, learning the framework and developing the website is good. As you know, the last one you develop with will likely do well because you&apos;re repeated the steps so much with the other ones.
&lt;br/&gt;&lt;br/&gt;
However, there&apos;s one thing I think you&apos;re doing wrong. In the real world, I don&apos;t believe that an architect would look at *all* the available web frameworks and choose one. I believe most of them already have a language bias or there&apos;s a target platform (e.g. LAMP, JVM, etc.). 
&lt;br/&gt;&lt;br/&gt;
I believe the majority of development happens today where a platform is already in place. Even moreso, the backend may already be in place and the company is simply trying to find a more productive front-end framework. In the first instance, where the platform is already chosen, the chooser&apos;s options are immediately limited. For example, if it&apos;s the JVM, Django might be eliminated because JPython isn&apos;t that up-to-snuff or widely used (this could be changing). However, it could be said that all the frameworks you&apos;ve chosen (including Code Igniter) can run on the JVM.
&lt;br/&gt;&lt;br/&gt;
I just don&apos;t see people identifying web frameworks across such a wide variety of languages. I think folks generally choose a platform, then a language, then a framework. It&apos;s possible that startups will do it differently by choosing a language first. However, I imagine most startups have a technical founder that already has some preference towards a particular language.
&lt;/p&gt;
&lt;p&gt;Now it&apos;s your turn, dear readers. Have you ever been in a situation where you&apos;ve been able to pick a web framework across all languages? Did any of your biases enter into the equation? &lt;/p&gt;
&lt;p&gt;How would you recommend David go about choosing web framework candidates?&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/what_s_the_best_way4</id>
        <title type="html">What&apos;s the best way to compare JVM Web Frameworks?</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/what_s_the_best_way4"/>
        <published>2013-01-09T08:29:17-07:00</published>
        <updated>2013-01-14T15:03:01-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="dzone" scheme="http://roller.apache.org/ns/tags/" />
        <category term="infoq" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
I&apos;ve been comparing web frameworks ever since 2004. It was the first time I&apos;d ever proposed a talk for a conference. ApacheCon was in Vegas that year and my buddy Bruce suggested I speak at it. I submitted the talk, &lt;a href=&quot;http://raibledesigns.com/rd/entry/going_to_apachecon&quot;&gt;got accepted&lt;/a&gt; and went to work learning the frameworks I was talking about. At the time, I had a lot of Struts experience and I&apos;d made a good living learning it, consulting on it and blogging about it. However, there was a new kid on the block (Spring MVC) that was garnishing attention and some other frameworks (WebWork and Tapestry) that had a lot of high praise from developers. I was inspired to learn why so many people hated Struts. 
&lt;/p&gt;
&lt;p&gt;
Fast forward 8 years and I&apos;m still comparing web frameworks. Why? Because there still seems to be a large audience that&apos;s interested in the topic. Witness InfoQ&apos;s &lt;a href=&quot;http://www.infoq.com/research/jvm-web-frameworks&quot;&gt;Top 20 JVM Web Frameworks&lt;/a&gt;, which was one of their most-read articles for two months in a row. One of the beauties of the Java Community is that it&apos;s very diverse. There&apos;s &lt;em&gt;tons&lt;/em&gt; of folks that are part of this community and, like it or not, several folks that are &lt;em&gt;former&lt;/em&gt; Java Developers. However, these developers still seem to maintain an interest in the community and it&apos;s still one of the largest pools of talent out there. Java is still &lt;a href=&quot;http://redmonk.com/sogrady/2012/02/08/language-rankings-2-2012/&quot;&gt;quite viable&lt;/a&gt; and only seems to be &lt;a href=&quot;http://frankhinkel.blogspot.de/2012/11/java-8-closures-lambda-expressions.html&quot;&gt;getting better with age&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
So the topic of web frameworks on the JVM is still hot, and I still &lt;a href=&quot;http://raibledesigns.com/rd/entry/why_the_bias_against_jsf&quot;&gt;like to write about it&lt;/a&gt;. For those of you still enthusiastic about the topic, you&apos;re in luck. The two best websites for the Java Community, &lt;a href=&quot;http://infoq.com&quot;&gt;InfoQ&lt;/a&gt; and &lt;a href=&quot;http://java.dzone.com&quot;&gt;DZone&lt;/a&gt; (formerly Javalobby) are still very interested in the topic too!&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
I&apos;ve been comparing web frameworks ever since 2004. It was the first time I&apos;d ever proposed a talk for a conference. ApacheCon was in Vegas that year and my buddy Bruce suggested I speak at it. I submitted the talk, &lt;a href=&quot;http://raibledesigns.com/rd/entry/going_to_apachecon&quot;&gt;got accepted&lt;/a&gt; and went to work learning the frameworks I was talking about. At the time, I had a lot of Struts experience and I&apos;d made a good living learning it, consulting on it and blogging about it. However, there was a new kid on the block (Spring MVC) that was garnishing attention and some other frameworks (WebWork and Tapestry) that had a lot of high praise from developers. I was inspired to learn why so many people hated Struts.
&lt;/p&gt;
&lt;p&gt;
Fast forward 8 years and I&apos;m still comparing web frameworks. Why? Because there still seems to be a large audience that&apos;s interested in the topic. Witness InfoQ&apos;s &lt;a href=&quot;http://www.infoq.com/research/jvm-web-frameworks&quot;&gt;Top 20 JVM Web Frameworks&lt;/a&gt;, which was one of their most-read articles for two months in a row. One of the beauties of the Java Community is that it&apos;s very diverse. There&apos;s &lt;em&gt;tons&lt;/em&gt; of folks that are part of this community and, like it or not, several folks that are &lt;em&gt;former&lt;/em&gt; Java Developers. However, these developers still seem to maintain an interest in the community and it&apos;s still one of the largest pools of talent out there. Java is still &lt;a href=&quot;http://redmonk.com/sogrady/2012/02/08/language-rankings-2-2012/&quot;&gt;quite viable&lt;/a&gt; and only seems to be &lt;a href=&quot;http://frankhinkel.blogspot.de/2012/11/java-8-closures-lambda-expressions.html&quot;&gt;getting better with age&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
So the topic of web frameworks on the JVM is still hot, and I still &lt;a href=&quot;http://raibledesigns.com/rd/entry/why_the_bias_against_jsf&quot;&gt;like to write about it&lt;/a&gt;. For those of you still enthusiastic about the topic, you&apos;re in luck. The two best websites for the Java Community, &lt;a href=&quot;http://infoq.com&quot;&gt;InfoQ&lt;/a&gt; and &lt;a href=&quot;http://java.dzone.com&quot;&gt;DZone&lt;/a&gt; (formerly Javalobby) are still very interested in the topic too!&lt;/p&gt;
&lt;!--p style=&quot;font-style: italic&quot;&gt;Sorry &lt;a href=&quot;http://theserverside.com&quot;&gt;TheServerSide.com&lt;/a&gt;, you were awesome at one time. Remember when Dion was pumping out the good content and there weren&apos;t ads in your face? Those where the days...&lt;/p--&gt; 
&lt;p&gt;
Both sites emailed me in November to get my advice for their research on the subject. InfoQ (specifically Dio Synodinos) was mostly interested in 1) having me analyze &lt;a href=&quot;http://www.infoq.com/research/jvm-web-frameworks&quot;&gt;their recently-gathered data&lt;/a&gt;, or 2) helping them create a new version. DZone (specifically Mitch Pronschinske) emailed about doing a similar survey to InfoQ&apos;s, but with more relevant data points (include GWT, specifying Struts 2 vs. Struts 1, etc.).
&lt;/p&gt;
&lt;p&gt;
My response to Mitch at DZone:
&lt;/p&gt;
&lt;div class=&quot;quote&quot;&gt;
&lt;p&gt;
Interestingly enough, the folks at InfoQ contacted me as well as they&apos;re thinking of doing a new survey. One of the things I mentioned to them is it&apos;d be interesting to see what folks are using AND which frameworks they admire. Often, devs don&apos;t get to choose their web framework at work. I wonder if it&apos;d be possible to collaborate with InfoQ to gather data from developers so it&apos;s not being done on two different sites?
&lt;/p&gt;
&lt;p&gt;
I submitted a talk for ApacheCon NA (in February) called Comparing Apache Web Frameworks. When choosing Web Frameworks, I&apos;ve often found it helps to eliminate frameworks and narrow the scope. Obviously, this makes sense for an Apache Conference, but not for all developers. However, I do plan on analyzing each framework based on a limited set of criteria. Here&apos;s what I have so far:
&lt;/p&gt;
&lt;p&gt;
Community, HTML5, REST, Mobile, Performance, Web Performance Optimization
&lt;/p&gt;
&lt;p&gt;
Obviously, community is important for Apache projects, but might not be for the wider audience. It might be good to limit to these 5 criteria, or expand it to 10, but not more. I think it&apos;d be interesting to get the community to rank the various frameworks on these criteria, and also try to find developer&apos;s biases while doing it. For example, I wonder if people would be willing to admit they&apos;re biased for/against certain frameworks and then take that into account as part of gathering the data?&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Unfortunately, ApacheCon denied my submission. This make sense since their &lt;a href=&quot;http://na.apachecon.com/schedule/&quot;&gt;schedule&lt;/a&gt; seems to be concentrating on &lt;a href=&quot;http://httpd.apache.org/&quot;&gt;HTTPD&lt;/a&gt;, &lt;a href=&quot;http://incubator.apache.org/cloudstack/&quot;&gt;Cloud&lt;/a&gt; and &lt;a href=&quot;http://hadoop.apache.org/&quot;&gt;Big Data&lt;/a&gt;.&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;
For InfoQ, Dio asked for a list of web frameworks to include. Below is a list we started with, followed by my response.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring MVC&lt;/li&gt;
&lt;li&gt;Play&lt;/li&gt;
&lt;li&gt;Grails&lt;/li&gt;
&lt;li&gt;JSF&lt;/li&gt;
&lt;li&gt;Struts 2&lt;/li&gt;
&lt;li&gt;Wicket&lt;/li&gt;
&lt;li&gt;Lift&lt;/li&gt;
&lt;li&gt;Tapestry 5&lt;/li&gt;
&lt;li&gt;Seam&lt;/li&gt;
&lt;li&gt;JRuby on Rails&lt;/li&gt;
&lt;li&gt;Wicket&lt;/li&gt;
&lt;li&gt;GWT&lt;/li&gt;
&lt;li&gt;Vaadin&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;quote&quot;&gt;
&lt;p&gt;
I would add Stripes, vert.x and maybe something like Apache Click. VRaptor is probably a good one to add too. There&apos;s always a few less-used frameworks that get a lot of complainers if you don&apos;t include them. 
&lt;/p&gt;
&lt;p&gt;
Comparing to your previous list, I don&apos;t think Seam should be in here since they&apos;ve &lt;a href=&quot;http://www.infoq.com/news/2012/04/seam-deltaspike&quot;&gt;split the project into separate bundles&lt;/a&gt; and are no longer developing Seam as a whole. JRuby on Rails is a tough one because if you say Ruby on Rails, you&apos;ll get a ton of responses, but probably not from the Java community. The Ruby community might chime it quite a bit if you can get in touch with them though.
&lt;/p&gt;
&lt;p&gt;
I believe you should include Clojure web frameworks, but I&apos;ve only heard of one of them: Compojure.
&lt;/p&gt;
&lt;p&gt;
SiteMesh, Netty, etc. - remove them.
&lt;/div&gt;
&lt;p&gt;
I also offered my advice on instructions:
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
I actually like the two coordinates you used before, importance and adoptability. However, I don&apos;t know that everyone read the instructions this way. Most people didn&apos;t rank all frameworks and I believe that&apos;s part of the point. I only ranked the ones I&apos;d used, but I think it&apos;d be better if people ranked all of them. I also think having these two criteria opens it up to more than just developers. Project/Product Managers and stakeholders that&apos;ve been successful with certain frameworks should be able to vote too.
&lt;/p&gt;
&lt;p&gt;
For DZone, they wanted to include a set of criteria for ranking:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project maturity, community support, and documentation quality (one criteria)&lt;/li&gt;
&lt;li&gt;UI Features Capability (maybe some are more graphics driven or form driven?)&lt;/li&gt;
&lt;li&gt;Code readability&lt;/li&gt;
&lt;li&gt;Flexibility (maybe this could be broken down into what types of projects the framework can handle) or several criteria that ask if it is &quot;Good for &apos;x&apos; type of project&quot;&lt;/li&gt;
&lt;li&gt;Performance/Speed&lt;/li&gt;
&lt;li&gt;Cross platform support&lt;/li&gt;
&lt;li&gt;Extensibility, Plugins, Community Libraries&lt;/li&gt;
&lt;li&gt;Architecture (this may just be information for later, not an opinion question)&lt;/li&gt;
&lt;li&gt;Web standards support&lt;/li&gt;
&lt;li&gt;REST support (is this something you would just rate a yes or no?  In that case it wouldn&apos;t need to be an opinion question)&lt;/li&gt;
&lt;li&gt;Mobile support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
My response:&lt;/p&gt;

&lt;div class=&quot;quote&quot;&gt;
    &lt;p&gt;
For web frameworks, I believe the 5 I mentioned (Community, HTML5, REST, Mobile, Performance, Web Performance Optimization) are most important, with Security become more and more of a concern. For web standards support, I&apos;d almost change it to &quot;HTML5&quot; and to see how the various frameworks stack up. I think REST is very important, and I think it&apos;s cool that Struts 2, Spring MVC and Grails all have great support for it. It&apos;d be interesting to see how the component-based frameworks think of having REST support in the framework (vs. external like Jersey, CXF, etc.).
&lt;/p&gt;&lt;p&gt;
Of the list you provided, I don&apos;t know about Code readability or Flexibility. Code readability is kinda like Learnability. One of the nice things about Spring MVC and Grails is that you can learn how they work very quickly. Then you can use that knowledge and don&apos;t have to look things up much. Tapestry and Wicket might be similar for those writing large apps, but I haven&apos;t found that to be as true. The more traditional MVC Frameworks just make more sense to me.
&lt;/p&gt;
&lt;p&gt;
UI Feature Capability is a good one because frameworks with widgets are often popular with developers. Flex, GWT, jQuery UI, Sencha all do this very well.
&lt;/p&gt;
&lt;/div&gt;
&lt;p id=&quot;summary&quot;&gt;
&lt;strong&gt;Summary&lt;/strong&gt;&lt;br/&gt;The reason for this post is to add some transparency to the process of Comparing JVM Web Frameworks. I like to think that I&apos;ve tried to do this in the past (especially with my &lt;a href=&quot;http://raibledesigns.com/rd/entry/how_i_calculated_ratings_for&quot;&gt;reasons for rankings&lt;/a&gt;). Now, we&apos;d like to hear from you, the community that uses these web frameworks. 
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What&apos;s the best way to compare JVM Web Frameworks?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While it&apos;s nice to hear from the generous folks that create and maintain JVM Web Frameworks, we&apos;re mostly interested in hearing from the developers that are using these things on a day-to-day basis. The Blue Collar Developers, if you will. If you could design a JVM Web Framework comparison that answered your questions, how would it look? What questions would it ask? What conclusions would make you happy? Should commercial frameworks like ZK be included?
    &lt;/p&gt;
    &lt;p&gt;Your responses are very greatly appreciated.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/why_the_bias_against_jsf</id>
        <title type="html">Why the bias against JSF?</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/why_the_bias_against_jsf"/>
        <published>2012-11-08T09:24:27-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jvm" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">In my last post about &lt;a href=&quot;http://raibledesigns.com/rd/entry/infoq_s_top_20_web&quot;&gt;InfoQ&apos;s Top 20 Web Frameworks for the JVM&lt;/a&gt;, I received a thought-provoking &lt;a href=&quot;http://raibledesigns.com/rd/entry/infoq_s_top_20_web#comment-1352305197000&quot;&gt;comment&lt;/a&gt; from &lt;a href=&quot;http://henk53.wordpress.com/&quot;&gt;henk53&lt;/a&gt;:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
There is one little thing that does bother me in those presentations, and that&apos;s your fairly obvious bias against JSF. &lt;br/&gt;...&lt;br/&gt;
If you are presenting yourself as, more or less, an authority on comparing web frameworks, then having a fairly obvious biased against one of them is just peculiar. I, all of my team, and various clients distrust your ranking of JSF. We do look at your data if the choice is between other frameworks, but as soon as JSF comes into the picture we just look elsewhere.
&lt;br/&gt;&lt;br/&gt;
I&apos;m not really sure where this bias comes from. Yes, JSF 1.0 sucked and 1.2 was only marginally better, but 2.0 is really cool and productive and there are SUPERB component and utility libraries now like PrimeFaces and OmniFaces. As a researcher of this topic I think you should keep up the date and not stick to some old grudge.
&lt;/p&gt;
&lt;p&gt;This is true, I am biased against JSF. It all started with my &lt;a href=&quot;http://raibledesigns.com/rd/entry/my_jsf_experience&quot;&gt;first JSF experience&lt;/a&gt; back in August 2004. If you remember correctly, 2004 was a big year: JSF 1.0, Spring 1.0 and Flex 1.0 were all released. The &quot;AJAX&quot; term was coined in &lt;a href=&quot;http://www.adaptivepath.com/ideas/ajax-new-approach-web-applications&quot;&gt;early 2005&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/4378559350/&quot; title=&quot;History of Web Frameworks by mraible, on Flickr&quot;&gt;&lt;img src=&quot;//farm5.staticflickr.com/4067/4378559350_13f0755403.jpg&quot; width=&quot;500&quot; height=&quot;234&quot; alt=&quot;History of Web Frameworks&quot; style=&quot;border: 1px solid black&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;By &lt;a href=&quot;http://raibledesigns.com/rd/entry/jsf_still_sucks&quot;&gt;2007&lt;/a&gt; and &lt;a href=&quot;http://raibledesigns.com/rd/entry/what_s_wrong_with_jsf&quot;&gt;2008&lt;/a&gt;, JSF still hadn&apos;t gotten any better. In late 2009, JSF 2.0 was released and &lt;a href=&quot;http://raibledesigns.com/rd/entry/upgrading_to_jsf_2&quot;&gt;I upgraded in March 2011&lt;/a&gt;. As you can see from the aforementioned post, I ran into quite a few issues upgrading. JSF was also the &lt;a href=&quot;http://raibledesigns.com/rd/entry/implementing_extensionless_urls_with_tapestry&quot;&gt;hardest one to get working with extension-less URLs&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Most of my issues with JSF come from having maintained an application built with it since 2004. If I were to start a new application without any legacy migration issues, I imagine it wouldn&apos;t be as difficult. However, if you compare it to Struts 2 and Spring MVC, I&apos;ve had little-to-no issues upgrading those applications over the years. &lt;/p&gt;
&lt;p&gt;Also, I&apos;m not just biased against JSF, but most component-based web frameworks. Just ask the Tapestry and Wicket folks. They&apos;ve felt my criticisms over the years. My reason for preferring request-based frameworks like Struts 2/Spring MVC and Grails/Play has been because I&apos;ve never seen the appeal in component-based frameworks. Often I&apos;ve found that their components are just widgets that you can get from any decent JavaScript framework. And chances are that JavaScript framework can work with &lt;em&gt;any&lt;/em&gt; web framework. Also, I&apos;ve worked on a lot of high-traffic web applications that require statelessness for scalability.&lt;/p&gt;
&lt;p&gt;I see the value in component-based frameworks, I just don&apos;t think components should be authored on the server-side. Most of the Java-based component frameworks require 2+ files for components (one for the component, one for the view, possibly one for the config). I love GWT&apos;s component concept in that you can just extract a class and re-use it. With JS frameworks, you can often just include a script. These days, when I think of good component-based frameworks, I think of jQuery UI and Twitter Bootstrap.&lt;/p&gt;
&lt;p&gt;All that being said, there&apos;s a lot of folks praising JSF 2 (and &lt;a href=&quot;http://primefaces.org/&quot;&gt;PrimeFaces&lt;/a&gt; moreso). That&apos;s why I&apos;ll be integrating it (or merging your pull request) into the 2.3 release of AppFuse. Since PrimeFaces contains a Bootstrap theme, I hope this is a pleasant experience and my overall opinion of JSF improves.&lt;/p&gt;
&lt;p&gt;In other component-based frameworks in AppFuse news, Tapestry 5 has gotten &lt;em&gt;really fast&lt;/em&gt; in the last year. I imagine this is because we have a Tapestry expert, &lt;a href=&quot;http://www.linkedin.com/in/sergeeby&quot;&gt;Serge Eby&lt;/a&gt;, working on it. And we&apos;re planning on adding Wicket in the 2.3 release. &lt;/p&gt;
&lt;p&gt;So even though I &lt;em&gt;prefer&lt;/em&gt; request-based frameworks with REST support and Bootstrap, that doesn&apos;t mean everyone does. I&apos;ll do my best to be less-biased in the future. However, please remember that my view on web frameworks is as a developer, not an analyst. And aren&apos;t developers &lt;em&gt;supposed&lt;/em&gt; to be opinionated? &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;)&quot; title=&quot;;)&quot; /&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/infoq_s_top_20_web</id>
        <title type="html">InfoQ&apos;s Top 20 Web Frameworks for the JVM</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/infoq_s_top_20_web"/>
        <published>2012-11-06T12:04:28-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="infoq" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jvm" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Back in early October, InfoQ.com published a community research article titled &lt;a href=&quot;http://www.infoq.com/research/jvm-web-frameworks&quot;&gt;Top 20 Web Frameworks for the JVM&lt;/a&gt;. Their goal seemed to be fairly simple:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
Using the new community research tool, we at InfoQ want to get YOUR opinions on the relative importance and maturity of a variety of web frameworks that are targeted for the JVM. Please vote by dragging each practice across two dimensions &#8211; how important is the framework relative to the other frameworks, and how much is it actually used in real teams and projects.
&lt;/p&gt;
&lt;p&gt;When I first saw this article, I noticed some strange web frameworks listed. Namely, Netty, SiteMesh and Spark. I haven&apos;t heard of many folks using &lt;a href=&quot;https://netty.io/&quot;&gt;Netty&lt;/a&gt; for a web framework, but I&apos;m sure it&apos;s possible. SiteMesh is certainly not a web framework and I&apos;ve never even heard of Spark. And where is GWT and Vaadin? Regardless of the choices, I went ahead and voted.&lt;/p&gt;
&lt;p&gt;Last week, InfoQ posted their top content for October on Facebook. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/research/jvm-web-frameworks&quot;&gt;Top 20 Web Frameworks for the JVM&lt;/a&gt; 25,992 PV&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/news/2012/10/Ruby-on-Rails-Node-js-LinkedIn&quot;&gt;Ruby on Rails vs. Node.js at LinkedIn&lt;/a&gt; 11,904 PV&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/presentations/Mobile-Web-Development&quot;&gt;Mobile Webdev: The Horror&lt;/a&gt; 11,150 PV&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/articles/rest-introduction&quot;&gt;A Brief Introduction to REST&lt;/a&gt; 8,872 PV
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/minibooks/kanban-scrum-minibook&quot;&gt;Kanban and Scrum - making the most of both&lt;/a&gt; 7,665 PV&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;First of all, it&apos;s interesting to see that JVM Web Frameworks is still a hot topic for developers. Whenever I do my Comparing JVM Web Frameworks talk at conferences, I always see a few jabs about &quot;he&apos;s &lt;em&gt;still&lt;/em&gt; doing that talk!?&quot; Yes, it seems strange that a talk I first did in 2004 is still in high demand. &lt;/p&gt;
&lt;p&gt;Secondly, I think InfoQ does good in showing how the frameworks ranked and showing their &lt;em&gt;heatmaps&lt;/em&gt;. Below are their rankings from 1109 participants. &lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/8161758257/&quot; title=&quot;InfoQ&apos;s Top 20 Web Frameworks for the JVM&quot;&gt;&lt;img src=&quot;//farm9.staticflickr.com/8197/8161758257_ef6d919f5d.jpg&quot; width=&quot;500&quot; height=&quot;395&quot; alt=&quot;InfoQ&apos;s Top 20 Web Frameworks for the JVM&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;According to this research, the top 5 web frameworks for the JVM are Spring MVC, Play, Grails, JSF and Struts (I hope those surveyed meant Struts 2, not Struts 1).&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;http://www.slideshare.net/mraible/comparing-jvm-web-frameworks-jfokus-2012&quot;&gt;my research from last February&lt;/a&gt; (slide 21), I ranked them (with no particular weightings) as Grails, GWT, JRuby on Rails, Spring MVC and Vaadin. So I guess you could say I got 2 out of 5 right (Grails and Spring MVC). Not bad considering InfoQ didn&apos;t even consider GWT and Vaadin.&lt;/p&gt;
&lt;p&gt;Another intriguing data point in this study is each frameworks&apos; heatmap. For example, below are heatmaps for the top 4 frameworks. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a rev=&quot;http://www.flickr.com/photos/mraible/8161758501/&quot; href=&quot;http://farm8.staticflickr.com/7247/8161758501_151b1a839c.jpg&quot; title=&quot;Spring MVC Heatmap&quot; rel=&quot;lightbox[infotop20webframeworks]&quot;&gt;&lt;img src=&quot;//farm8.staticflickr.com/7247/8161758501_151b1a839c_m.jpg&quot; width=&quot;240&quot; height=&quot;215&quot; alt=&quot;Spring MVC Heatmap&quot;&gt;&lt;/a&gt;

&lt;a rev=&quot;http://www.flickr.com/photos/mraible/8161762845/&quot; href=&quot;http://farm8.staticflickr.com/7125/8161762845_12cfdc076c.jpg&quot; title=&quot;Grails Heatmap&quot; rel=&quot;lightbox[infotop20webframeworks]&quot;&gt;&lt;img src=&quot;//farm8.staticflickr.com/7125/8161762845_12cfdc076c_m.jpg&quot; width=&quot;240&quot; height=&quot;215&quot; alt=&quot;Grails Heatmap&quot; style=&quot;margin-left: 10px&quot;&gt;&lt;/a&gt;
&lt;p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a rev=&quot;http://www.flickr.com/photos/mraible/8161758399/&quot; href=&quot;http://farm8.staticflickr.com/7255/8161758399_505e8cf4db.jpg&quot; title=&quot;Play Heatmap&quot; rel=&quot;lightbox[infotop20webframeworks]&quot;&gt;&lt;img src=&quot;//farm8.staticflickr.com/7255/8161758399_505e8cf4db_m.jpg&quot; width=&quot;240&quot; height=&quot;215&quot; alt=&quot;Play Heatmap&quot;&gt;&lt;/a&gt;

&lt;a rev=&quot;http://www.flickr.com/photos/mraible/8161758341/&quot; href=&quot;http://farm8.staticflickr.com/7256/8161758341_7e1d37e1ea.jpg&quot; title=&quot;JSF Heatmap&quot; rel=&quot;lightbox[infotop20webframeworks]&quot;&gt;&lt;img src=&quot;//farm8.staticflickr.com/7256/8161758341_7e1d37e1ea_m.jpg&quot; width=&quot;240&quot; height=&quot;215&quot; alt=&quot;JSF Heatmap&quot; style=&quot;margin-left: 10px&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Notice how Grails and Spring MVC are both &lt;em&gt;hotter&lt;/em&gt; in the bottom right corner? It seems the community&apos;s overall opinions of these two frameworks are more aligned than JSF and Play, which a fair amount of folks rank as hyped and unimportant. &lt;/p&gt;
&lt;p&gt;What I really like about this research is it&apos;s the community&apos;s opinions, visualized. It also confirms that some of my favorite frameworks are still on top. I don&apos;t know if JSF belongs as a top framework, however it seems a lot of folks do. I recently &lt;a href=&quot;http://appfuse.547863.n4.nabble.com/Drop-JSF-Support-td4655648.html&quot;&gt;thought about removing it from AppFuse&lt;/a&gt;, but decided to keep it (at least for the next release). I hope InfoQ does more research projects like this, especially if they get their list of web frameworks right. </content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/play_vs_grails_smackdown_at</id>
        <title type="html">Play vs. Grails Smackdown at &#220;berConf</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/play_vs_grails_smackdown_at"/>
        <published>2012-06-25T07:10:57-06:00</published>
        <updated>2013-10-04T17:28:17-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="playframework" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="uberconf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/comparing_web_frameworks_and_html5</id>
        <title type="html">Comparing Web Frameworks and HTML5 with Play Scala at Jfokus 2012</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/comparing_web_frameworks_and_html5"/>
        <published>2012-02-16T00:01:05-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jfokus" scheme="http://roller.apache.org/ns/tags/" />
        <category term="html5" scheme="http://roller.apache.org/ns/tags/" />
        <category term="scala" scheme="http://roller.apache.org/ns/tags/" />
        <category term="playframework" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://www.flickr.com/photos/mcginityphoto/8355301175/&quot; title=&quot;Riddenholm Church by McGinityPhoto, on Flickr&quot;&gt;&lt;img src=&quot;//farm9.staticflickr.com/8330/8355301175_36050ce11c_t.jpg&quot; width=&quot;66&quot; height=&quot;100&quot; alt=&quot;Riddenholm Church&quot; class=&quot;picture&quot;&gt;&lt;/a&gt;
Stockholm seems a lot like Denver this time of year. Cold, snowy and beautiful. &lt;a href=&quot;http://www.mcginityphoto.com/&quot;&gt;Trish&lt;/a&gt; and I arrived in Stockholm (Sweden) on Monday for the &lt;a href=&quot;http://jfokus.se&quot;&gt;Jfokus&lt;/a&gt; conference and we&apos;re traveling to Madrid today for the &lt;a href=&quot;http://springio.net/&quot;&gt;Spring I/O&lt;/a&gt; conference. I was invited to Jfokus within minutes of delivering my &lt;a href=&quot;http://raibledesigns.com/rd/entry/my_html5_with_play_scala&quot;&gt;HTML5 with Play Scala talk at Devoxx&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Both the Jfokus and Spring I/O Organizers were interested in my Comparing JVM Web Frameworks talk, so I updated it to reflect my latest thoughts. First of all, I mentioned that there&apos;s a lot of great frameworks out there and I think the reason people are so apprehensive to choose one is because they&apos;ve chosen badly at one point. This might&apos;ve been Struts back in the day (even thought it was one of the best frameworks at the time) or it might be because a vendor talked them into it. However, if you look at the modern JVM frameworks today, you should be able to see that they&apos;re all pretty awesome.
&lt;/p&gt;
&lt;p&gt;
I mentioned how I think &lt;em&gt;Web&lt;/em&gt; developers should know JavaScript and CSS. If you&apos;re a &lt;em&gt;Java&lt;/em&gt; developer and you call yourself a web developer, you&apos;re letting your framework do too much of the work for you. I mentioned Rich Manalang&apos;s &lt;a href=&quot;http://blogs.atlassian.com/2012/01/modern-principles-in-web-development/&quot;&gt;Modern Principles in Web Development&lt;/a&gt;, where he talks about his core web development principles.
&lt;ul&gt;
&lt;li&gt;Designing for mobile first (even if you&#8217;re not building a mobile app)&lt;/li&gt;
&lt;li&gt;Build only single page apps&lt;/li&gt;
&lt;li&gt;Create and use your own REST API&lt;/li&gt;
&lt;li&gt;&#8220;Sex sells&#8221; applies to web apps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;ve found these principles to be true in my own experience and suggested that if you want to be a web developer, the frameworks you might want to learn are not traditional JVM web frameworks, but rather &lt;a href=&quot;http://paulhammant.com/2012/02/13/client-side-mvc-frameworks-compared/&quot;&gt;client-side MVC frameworks&lt;/a&gt;. For those Java developers that don&apos;t want to be web developers, I suggest they strengthen their services development knowledge by reading &lt;a href=&quot;http://www.infoq.com/articles/webber-rest-workflow&quot;&gt;Hot to GET a Cup of Coffee&lt;/a&gt;.
&lt;/p&gt;
You can see my updated presentation below, &lt;a href=&quot;http://www.slideshare.net/mraible/comparing-jvm-web-frameworks-jfokus-2012&quot;&gt;on Slideshare&lt;/a&gt; or as a &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/Comparing_JVM_Web_Frameworks_Jfokus2012.pdf&quot;&gt;downloadable PDF&lt;/a&gt;. You can also &lt;a href=&quot;http://www.jfokus.se/jfokus/video.jsp?v=3084&quot;&gt;watch the video&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/11581955?rel=0&quot; width=&quot;510&quot; height=&quot;426&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;I delivered my 2nd presentation on HTML5 with Play Scala, CoffeeScript and Jade on Wednesday morning. This talk is one of my favorites and I prepared for it over the last several weeks by adding &lt;a href=&quot;http://raibledesigns.com/rd/entry/secure_json_services_with_play&quot;&gt;JSON CRUD Services and SecureSocial&lt;/a&gt; to my HTML5 Fitness Tracking application. Right before we left for Jfokus, I was able to get everything to work, but didn&apos;t spend as much time as I&apos;d like working on the mobile client. If this talk gets accepted for &lt;a href=&quot;http://www.devoxx.com/display/FR12/Accueil&quot;&gt;Devoxx France&lt;/a&gt;, I plan on spending most of my time enhancing the mobile client. After my latest experience developing, I can see how Rich&apos;s first principle (above) makes a lot of sense.
&lt;/p&gt;
&lt;p&gt;Below is my presentation for this talk. Of course, it&apos;s &lt;a href=&quot;http://www.slideshare.net/mraible/html5-with-play-scala-coffeescript-and-jade-jfokus-2012&quot;&gt;on Slideshare&lt;/a&gt; and &lt;a href=&quot;http://static.raibledesigns.com/repository/presentations/HTML5_with_Play_Scala_CoffeeScript_and_Jade_Jfokus2012.pdf&quot;&gt;downloadable as a PDF&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/11582395?rel=0&quot; width=&quot;510&quot; height=&quot;426&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;I also updated the &lt;a href=&quot;http://vimeo.com/36826202&quot;&gt;Developing Play More demo video&lt;/a&gt; to show my latest efforts.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;iframe src=&quot;//player.vimeo.com/video/36826202?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;510&quot; height=&quot;287&quot; frameborder=&quot;0&quot; webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;Delivering these talks at Jfokus was a lot of fun. Yes, it was a lot of work and stress to prepare them. However, I also learned a lot creating them and I hope the audience benefitted from that. 
&lt;/p&gt;
&lt;p&gt;  
&lt;a href=&quot;http://www.flickr.com/photos/mcginityphoto/8350751579/&quot; title=&quot;Jfokus 2012 by McGinityPhoto, on Flickr&quot;&gt;&lt;img src=&quot;//farm9.staticflickr.com/8371/8350751579_33fe72872a_t.jpg&quot; width=&quot;67&quot; height=&quot;100&quot; alt=&quot;Jfokus 2012&quot; style=&quot;border: 1px solid black; float: left; margin: 0 10px 0 0&quot;&gt;&lt;/a&gt;
The conference itself was incredible. I got to meet &lt;a href=&quot;https://twitter.com/peterhilton&quot;&gt;Peter Hilton&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/javahelena&quot;&gt;Helena Hjert&#233;n&lt;/a&gt; as I was registering.
The speaker&apos;s dinner at &lt;a href=&quot;http://f12.se/&quot;&gt;F12&lt;/a&gt; was off-the-hook good and I had the pleasure of finally meeting &lt;a href=&quot;http://rickardoberg.wordpress.com/&quot;&gt;Rickard &#214;berg&lt;/a&gt;. 

&lt;/p&gt;
&lt;p&gt;I also attended some fantastic presentations, including Peter Hilton&apos;s &lt;a href=&quot;http://raibledesigns.com/rd/entry/play_framework_2_0_with&quot;&gt;Play Framework 2.0&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/bodiltv&quot;&gt;Bodil Stokke&apos;s&lt;/a&gt; &lt;a href=&quot;http://bodil.github.com/coffeescript/#landing-slide&quot;&gt;CoffeeScript: JavaScript without the Fail&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/pamelafox&quot;&gt;Pamela Fox&apos;s&lt;/a&gt; &lt;a href=&quot;http://client-side-storage.appspot.com&quot;&gt;Client-side Storage&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/hseeberger&quot;&gt;Heiko Seeberger&apos;s&lt;/a&gt; Scala in Action. I don&apos;t know if Heiko has published any slides, but I&apos;m guessing not since most of his presentation was live coding. 
&lt;/p&gt;
&lt;p&gt;I have lots of good memories from Jfokus. Many thanks to &lt;a href=&quot;http://twitter.com/matkar&quot;&gt;Mattias&lt;/a&gt; for inviting me!</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/play_framework_2_0_with</id>
        <title type="html">Play Framework 2.0 with Peter Hilton at Jfokus</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/play_framework_2_0_with"/>
        <published>2012-02-14T07:17:08-07:00</published>
        <updated>2012-02-14T13:19:40-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="playframework" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jfokus" scheme="http://roller.apache.org/ns/tags/" />
        <category term="scala" scheme="http://roller.apache.org/ns/tags/" />
        <category term="http" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">This week, I&apos;m at &lt;a href=&quot;http://jfokus.se&quot;&gt;Jfokus&lt;/a&gt; in Stockholm, Sweden. After a fun speaker&apos;s dinner last night, I got up this morning and polished up my presentations and demo before attending the conference. The first session I attended was &lt;a href=&quot;http://twitter.com/PeterHilton&quot;&gt;Peter Hilton&apos;s&lt;/a&gt; &lt;a href=&quot;http://www.jfokus.se/jfokus/talks.jsp#Play%20Framework%202.0&quot;&gt;Play Framework 2.0&lt;/a&gt; presentation. Below are my notes from this talk.
&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 10px&quot;&gt;Peter is a Senior &lt;em&gt;Web&lt;/em&gt; Developer, not a Java Developer. His first slide states the following:&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&quot;Play brings type safe high-productivity web development to the JVM.&quot;
&lt;/p&gt;
&lt;p&gt;
New features in Play 2.0: type-safety, template syntax, compile-time checking and asynchronous HTTP programming. Java, Scala - the language you use is less important than the fact that Play is a &lt;em&gt;web&lt;/em&gt; framework. It&apos;s a full-stack framework and has everything you need out-of-the-box to build a web application. Play focuses on HTTP and doesn&apos;t try to hide it. It&apos;s designed &lt;em&gt;by&lt;/em&gt; web developers &lt;em&gt;for&lt;/em&gt; web developers.
&lt;/p&gt;
&lt;p&gt;
With Play, the Back button just works. Your web framework shouldn&apos;t break the first button on your browser&apos;s toolbar. The Reload button also works: make a change, hit reload and your changes (even in Scala classes) are shown. You design the URLs and you can use &quot;clean&quot; URLs. DX (Developer eXperience) is Peter&apos;s new term. Usability matters: as a developer, you deserve a framework that provides a good experience.
&lt;/p&gt;
&lt;p&gt;
Play doesn&apos;t fight HTTP or the browser. It&apos;s stateless and HTTP-centric. A few years ago, it seemed like a good idea to try and keep state on the server. It sounded like a good idea, but in practice, it&apos;s a really bad idea - especially for things like the back button. Play matches the web&apos;s stateless HTTP architecture. 
&lt;/p&gt;
&lt;p&gt;
As a Java EE developer, PHP and Rails developers have been laughing at us for years. Like Father Christmas, Peter&apos;s heard of class-reloading, but he hasn&apos;t actually seen it. Code reloading is the most important part of DX and about achieving high-productivity in web development. 
&lt;/p&gt;
&lt;p&gt;
URLs want to be loved too. REST architecture isn&apos;t just for web service APIs. When you have clean URLs, you can tweet them, post them and email them. 
&lt;/p&gt;
&lt;p&gt;
&quot;You would need to be a super-hero to successfully use some web frameworks.&quot; They show you a blank screen in the browser and you have to look at your console&apos;s stack trace to figure it out. With Play, the error is shown in your browser and you can see the exact line it happens on.
&lt;/p&gt;
&lt;p&gt;
In Play 1.x, there was a lot of magic and a lot of bytecode enhancement at runtime. This allowed the API to be a lot nicer than traditional Java APIs. However, it caused issues when users viewed the enhanced source and it also caused issues in IDEs. With Play 2.0, the framework itself is implemented in Scala. Scala removes the need for so much bytecode enhancement. There is less &apos;magic&apos; and strangeness in the API. The code you see in the IDE is the code that runs. Scala source code is not necessarily harder to read. 1.x had some pretty hairy Java code, and you could tell when you dug into it. Especially when you were deep into the source code and saw that a lot of the comments were in French.
&lt;/p&gt;
&lt;p&gt;
Play 2.0&apos;s template system is based on Scala. It&apos;s similar to the lightweight template syntax in Play 1.x. Templates are compiled into class files for run-time speed. For example:
&lt;/p&gt;
&lt;pre class=&quot;brush: scala&quot;&gt;
@(products: Seq[Product])

&amp;lt;ul&gt;
@for(product &amp;lt;- products) {
  &amp;lt;li&gt;@product.name&amp;lt;/li&gt;
}
&amp;lt;/ul&gt;

@summary(products)
&lt;/pre&gt;
&lt;p&gt;We used to think XML-based templates were great, but it turns out it&apos;s a terrible idea. Mostly because you end up having to invent an expression language to create valid XML (to avoid putting XML in your HTML attributes). With Play 2.0&apos;s templates, you can define tags in your templates as regular Scala methods.
&lt;/p&gt;
&lt;pre class=&quot;brush: scala&quot;&gt;
@display(product: models.Product) ={
 &amp;lt;a href=&quot;@routes.Product.details(product.id)&quot;&gt;@product.name&amp;lt;/a&gt; 
}

@for(product &amp;lt;- products) {
  @display(product)
}
&lt;/pre&gt;
&lt;p&gt;The compile-time checking in Play 2.0 is not just for Java and Scala classes. It also compiles your HTTP routes file (which maps requests to controller actions). Furthermore, it compiles your templates, JavaScript files (using Google Closure Compiler), CoffeeScript files and LESS stylesheets. 
&lt;/p&gt;
&lt;p&gt;
Play supports modern web development. It&apos;s designed to work with HTML5, but there&apos;s no constraints on HTML output. It&apos;s front-end developer friendly and has great DX. UI components belong in the client, e.g. jQuery UI. It also has built-in support for improvements to CSS (LESS) and JavaScript (CoffeeScript).
&lt;/p&gt;
&lt;p&gt;
A few years ago, it seemed like a really good idea to hide JavaScript from the web developer. Web frameworks used to say &quot;You don&apos;t need to see the JavaScript or the HTML, we&apos;ll handle generating your components for you.&quot; Now, if you&apos;re building a web application and you don&apos;t know any jQuery, you doing it the hard way. You should learn how to work with front-end developers or learn how to do it yourself. And make sure your web framework allows this sort of development. 
&lt;/p&gt;
&lt;p&gt;
The future of web programming is asynchronous. You&apos;ll perform simultaneous web service requests. You&apos;ll process streams of data, instead of filling up memory or disk. You&apos;ll publish real-time data and have predictable and minimal resource consumption. In the long term, this changes everything. The future of the web is real-time and asynchronous. With Play 2.0, it&apos;s not just another feature, it&apos;s a fundamental aspect of the architecture. Play&apos;s internal architecture uses a reactive model based on Iteratee IO. 
&lt;/p&gt;
&lt;p&gt;In summary, use Play 2, use HTML5, deploy to the Cloud. There&apos;s two forthcoming books on Play (both from Manning) and Play 2.0 RC1 will be released today.&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 10px&quot;&gt;
I think Peter did a good job of summarizing the new features in Play 2.0, especially how templates work. I enjoyed his emphasis on HTTP and how Play leverages the browser (back, reload and as a console). I liked his humorous speaking style, and agree with his emphasis that client-side development skills are important for modern web applications. I think Play 2.0 is making a big bet on Scala and asynchronous programming, but if they live up to the hype, it should be a very enjoyable web framework to develop with.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/livin_it_up_in_vegas</id>
        <title type="html">Livin&apos; it up in Vegas at TSSJS 2011</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/livin_it_up_in_vegas"/>
        <published>2011-03-22T09:04:17-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="vegas" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tssjs" scheme="http://roller.apache.org/ns/tags/" />
        <category term="perfbench" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vaadin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="liftweb" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="video" scheme="http://roller.apache.org/ns/tags/" />
        <category term="playframework" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rubyonrails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="onlinevideo" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/jsr_303_and_web_framework</id>
        <title type="html">JSR 303 and JVM Web Framework Support</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/jsr_303_and_web_framework"/>
        <published>2011-03-08T11:33:24-07:00</published>
        <updated>2012-11-08T14:30:37-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tapestry" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsr303" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vaadin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="lift" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Emmanuel Bernard recently sent an email to the JSR 303 Experts Group about the next revision of the Bean Validation JSR (303). Rather than sending the proposed changes privately, he &lt;a href=&quot;http://in.relation.to/Bloggers/JSRBeanValidation11WhatToPutIn&quot;&gt;blogged about them&lt;/a&gt;. I left a comment with what I&apos;d like to see:
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
+1 for Client-side validation. I&apos;d love to see an API that web frameworks can hook into to add &quot;required&quot; to their tags for HTML5. Or some service that can be registered so the client can make Ajax requests to an API to see if an object is valid.
&lt;/p&gt;
&lt;p&gt;Emmanuel replied that most of the necessary API already exists for this, but frameworks have been slow to adopt it.
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
Hi Matt,
&lt;br/&gt;&lt;br/&gt;
The sad thing is that the API is present on the Bean Validation side but presentation frameworks are slow to adopt it and use it :(
&lt;br/&gt;&lt;br/&gt;
RichFaces 4 now has support for it but I wished more presentation frameworks had worked on the integration. If you can convince a few people or have access to a few people, feel free to send them by me :)
&lt;br/&gt;&lt;br/&gt;
The integration API is &lt;a href=&quot;http://people.redhat.com/~ebernard/validation/#constraintmetadata&quot;&gt;described here&lt;/a&gt;. Let me know if you think some parts are missing or should be improved. We should definitely do some more buzz around it.
&lt;/p&gt;
&lt;p&gt;In the interest of generating more buzz around it, I decided to do some research and see what JVM Frameworks support JSR 303. Here&apos;s what I&apos;ve come up with so far (in no particular order):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://relation.to/Bloggers/RichFaces4ClientSideValidation&quot;&gt;RichFaces 4 - Client Side Validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tapestry.apache.org/bean-validation.html&quot;&gt;Tapestry&apos;s JSR 303 - Bean Validation Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.zenika.com/index.php?post/2010/02/24/Wicket-JSR-303-Validators&quot;&gt;Wicket JSR-303 Validators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://static.springsource.org/spring/docs/3.0.x/reference/validation.html#validation-mvc-jsr303&quot;&gt;Configuring a JSR-303 Validator for use by Spring MVC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/gwt-validation/&quot;&gt;GWT Validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dev.vaadin.com/ticket/3156&quot;&gt;Vaadin Bean Validation JSR 303 support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wstrange.wordpress.com/2009/12/07/inline-field-validation-in-scalalift-using-jpa-and-jsr-303/&quot;&gt;Inline field validation in Scala/Lift using JPA and JSR 303&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Struts 2 has an &lt;a href=&quot;https://issues.apache.org/jira/browse/WW-2563&quot;&gt;open issue&lt;/a&gt;, but doesn&apos;t seem to support JSR 303. Since I did a quick-n-dirty google search for most of these, I&apos;m not sure if they support client-side JavaScript or HTML5&apos;s required. If you know of other JVM-based web frameworks that support JSR 303, please let me know in the comments. </content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/implementing_extensionless_urls_with_tapestry</id>
        <title type="html">Implementing Extensionless URLs with Tapestry, Spring MVC, Struts 2 and JSF</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/implementing_extensionless_urls_with_tapestry"/>
        <published>2011-02-10T16:53:27-07:00</published>
        <updated>2011-02-11T00:04:52-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="tapestry5" scheme="http://roller.apache.org/ns/tags/" />
        <category term="extensionlessurls" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appfuse" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">For the past couple of weeks, I&apos;ve spent several evening hours implementing extensionless URLs in &lt;a href=&quot;http://appfuse.org&quot;&gt;AppFuse&lt;/a&gt;. I&apos;ve been wanting to do this ever since I &lt;a href=&quot;http://raibledesigns.com/rd/entry/extensionless_urls_in_java_web&quot;&gt;wrote about how to do it&lt;/a&gt; a few years ago. This article details my experience and will hopefully help others implement this feature in their webapps.
&lt;/p&gt;
&lt;p&gt;First of all, I used the &lt;a href=&quot;http://www.tuckey.org/urlrewrite/&quot;&gt;UrlRewriteFilter&lt;/a&gt;, one of my favorite Java open source projects. Then I followed a pattern I found in Spring&apos;s &quot;mvc-basic&quot; sample app from &lt;a href=&quot;http://blog.springsource.com/2009/12/21/mvc-simplifications-in-spring-3-0/&quot;&gt;MVC Simplifications in Spring 3.0&lt;/a&gt;. The app has since changed (because SpringSource integrated UrlRewriteFilter-type functionality in Spring MVC), but the pattern was basically path-matching instead of extension-mapping. That is, the &quot;dispatcher&quot; for the web framework was mapped to /app/* instead of *.html. 
&lt;/p&gt;
&lt;p&gt;
Prior to the move to extensionless URLs, AppFuse used *.html for its mapping and this seemed to cause users problems when they wanted to serve up static HTML files. To begin with, I removed all extensions from URLs in tests (&lt;a href=&quot;http://webtest.canoo.com&quot;&gt;Canoo WebTest&lt;/a&gt; is used for testing the UI). I also did this for any links in the view pages and redirects in the Java code. This provided a decent foundation to verify my changes worked. Below are details about each framework I did this for, starting with the one that was easiest and moving to hardest.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tapestry 5&lt;/strong&gt;&lt;br/&gt;
Tapestry was by far the easiest to integrate extensionless URLs into. This is because it&apos;s a native feature of the framework and was already integrated as part of &lt;a href=&quot;http://issues.appfuse.org/browse/APF-1116&quot;&gt;Serge Eby&apos;s Tapestry 5 implementation&lt;/a&gt;. In the end, the only things I had to do where 1) add a couple entries for CXF (mapped to /services/*) and DWR (/dwr/*) to my urlrewrite.xml and 2) change the UrlRewriteFilter so it was only mapped to REQUEST instead of both REQUEST and FORWARD. Below are the mappings I added for CXF and DWR.
&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;urlrewrite default-match-type=&quot;wildcard&quot;&amp;gt;
    ...
    &amp;lt;rule&amp;gt;
        &amp;lt;from&amp;gt;/dwr/**&amp;lt;/from&amp;gt;
        &amp;lt;to&amp;gt;/dwr/$1&amp;lt;/to&amp;gt;
    &amp;lt;/rule&amp;gt;
    &amp;lt;rule&amp;gt;
        &amp;lt;from&amp;gt;/services/**&amp;lt;/from&amp;gt;
        &amp;lt;to&amp;gt;/services/$1&amp;lt;/to&amp;gt;
    &amp;lt;/rule&amp;gt;
&amp;lt;/urlrewrite&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spring MVC&lt;/strong&gt;&lt;br/&gt;
I had a fair amount of experience with Spring MVC and extensionless URLs. Both the Spring MVC applications we developed last year at Time Warner Cable used them. To change from a *.html mapping to /app/* was pretty easy and involved removing more code than I added. Previously, I had a &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/common/src/main/java/org/appfuse/webapp/filter/StaticFilter.java?r=3250&quot;&gt;StaticFilter&lt;/a&gt; that looked for HTML files and if it didn&apos;t find them, it dispatched to Spring&apos;s DispatcherServlet. I was able to remove this class and make the web.xml file quite a bit cleaner. 
&lt;/p&gt;
&lt;p&gt;To make UrlRewriteFilter and Spring Security play well together, I had to move the securityFilter so it came &lt;em&gt;after&lt;/em&gt; the rewriteFilter and add an INCLUDE dispatcher so included JSPs would have a security context available to them. 
&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;filter-mapping&amp;gt;
    &amp;lt;filter-name&amp;gt;rewriteFilter&amp;lt;/filter-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
&amp;lt;/filter-mapping&amp;gt;
&amp;lt;filter-mapping&amp;gt;
    &amp;lt;filter-name&amp;gt;securityFilter&amp;lt;/filter-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
    &amp;lt;dispatcher&amp;gt;REQUEST&amp;lt;/dispatcher&amp;gt;
    &amp;lt;dispatcher&amp;gt;FORWARD&amp;lt;/dispatcher&amp;gt;
    &amp;lt;dispatcher&amp;gt;INCLUDE&amp;lt;/dispatcher&amp;gt;
&amp;lt;/filter-mapping&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The only other things I had to change were &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/spring/src/main/webapp/WEB-INF/security.xml?r2=3458&amp;r1=3379&quot;&gt;security.xml&lt;/a&gt; and &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/spring/src/main/webapp/WEB-INF/dispatcher-servlet.xml?r2=3458&amp;r1=3334&quot;&gt;dispatcher-servlet.xml&lt;/a&gt; to remove the .html extensions. The urlrewrite.xml file was fairly straightforward. I used the following at the bottom as a catch-all for dispatching to Spring MVC.
&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;rule&amp;gt;
    &amp;lt;from&amp;gt;/**&amp;lt;/from&amp;gt;
    &amp;lt;to&amp;gt;/app/$1&amp;lt;/to&amp;gt;
&amp;lt;/rule&amp;gt;
&amp;lt;outbound-rule&amp;gt;
    &amp;lt;from&amp;gt;/app/**&amp;lt;/from&amp;gt;
    &amp;lt;to&amp;gt;/$1&amp;lt;/to&amp;gt;
&amp;lt;/outbound-rule&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Then I added a number of other rules for j_security_check, DWR, CXF and static assets (/images, /scripts, /styles, /favicon.ico). You can view the &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/spring/src/main/webapp/WEB-INF/urlrewrite.xml?r=HEAD&quot;&gt;current urlrewrite.xml in FishEye&lt;/a&gt;. The only major issue I ran into was that Spring Security recorded protected URLs as /app/URL so I had to add a rule to redirect when this happened after logging in.
&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;rule&amp;gt;
    &amp;lt;from&amp;gt;/app/**&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;true&quot; type=&quot;redirect&quot;&amp;gt;%{context-path}/$1&amp;lt;/to&amp;gt;
&amp;lt;/rule&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Struts 2&lt;/strong&gt;&lt;br/&gt;
Using extensionless URLs with Struts 2 is likely pretty easy thanks to the &lt;a href=&quot;http://struts.apache.org/2.1.8/docs/convention-plugin.html&quot;&gt;Convention Plugin&lt;/a&gt;. Even though this plugin is included in AppFuse, it&apos;s not configured with the proper &lt;a href=&quot;http://struts.apache.org/2.1.8/docs/converting-application-from-codebehind-to-convention-plugin.html&quot;&gt;constants&lt;/a&gt; and I have struts.convention.action.disableScanning=true in struts.xml. It looks like I had to do this when I &lt;a href=&quot;http://appfuse.markmail.org/thread/ktbqtx2mslvrkjkq&quot;&gt;upgraded from Struts 2.0.x to Struts 2.1.6&lt;/a&gt;. It&apos;s true AppFuse&apos;s Struts 2 support could use a bit of love to be aligned with Struts 2&apos;s recommended practices, but I didn&apos;t want to spend the time doing it as part of this exercise. 
&lt;/p&gt;
&lt;p&gt;With Struts 2, I tried the path-mapping like I did with Spring MVC, but ran into issues. Instead, I opted to use an &quot;.action&quot; extension by changing &lt;code&gt;struts.action.extension&lt;/code&gt; from &quot;html&quot; to &quot;action,&quot; in struts.xml. Then I had to do a bunch of filter re-ordering and dispatcher changes. Before, with a .html extension, I had all filters mapped to /* and in the following order.&lt;/p&gt;
&lt;table class=&quot;comparison&quot; style=&quot;width: 250px&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter Name&lt;/th&gt;&lt;th&gt;Dispatchers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;securityFilter&lt;/td&gt;
&lt;td&gt;request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rewriteFilter&lt;/td&gt;
&lt;td&gt;request, forward&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;struts-prepare&lt;/td&gt;
&lt;td&gt;request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sitemesh&lt;/td&gt;
&lt;td&gt;request, forward, include&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;staticFilter&lt;/td&gt;
&lt;td&gt;request, forward&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;struts&lt;/td&gt;
&lt;td&gt;request&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Similar to Spring MVC, I had to remove the rewriteFilter in front of the securityFilter and I was able to remove the staticFilter. I also had to map the struts filter to *.action instead of /* to stop Struts from trying to catch static asset and DWR/CXF requests. Below is the order of filters and their dispatchers that seems to work best.
&lt;table class=&quot;comparison&quot; style=&quot;width: 250px&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter Name&lt;/th&gt;&lt;th&gt;Dispatchers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;rewriteFilter&lt;/td&gt;
&lt;td&gt;request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;securityFilter&lt;/td&gt;
&lt;td&gt;request, forward, include&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;struts-prepare&lt;/td&gt;
&lt;td&gt;request, forward&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sitemesh&lt;/td&gt;
&lt;td&gt;request, forward, include&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;struts&lt;/td&gt;
&lt;td&gt;forward&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;From there, it was a matter of modifying &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/struts/src/main/webapp/WEB-INF/urlrewrite.xml?r=HEAD&quot;&gt;urlrewrite.xml&lt;/a&gt; to have the following catch-all and rules for static assets, j_security_check and DWR/CXF.&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;rule match-type=&quot;regex&quot;&amp;gt;
    &amp;lt;from&amp;gt;^(&amp;#91;^?&amp;#93;*)/(&amp;#91;^?/\.&amp;#93;+)(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;true&quot;&amp;gt;$1/$2.action$3&amp;lt;/to&amp;gt;
&amp;lt;/rule&amp;gt;
&amp;lt;outbound-rule match-type=&quot;regex&quot;&amp;gt;
    &amp;lt;from&amp;gt;^(.*)\.action(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;false&quot;&amp;gt;$1$2&amp;lt;/to&amp;gt;
&amp;lt;/outbound-rule&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;JSF&lt;/strong&gt;&lt;br/&gt;
JSF was by far the most difficult to get extensionless URLs working with. I&apos;m not convinced it&apos;s impossible, but I spent a several hours over a few days and was unsuccessful in completely removing them. I was able to make things work so I could request pages without an extension, but found when clicking buttons and links, the extension would often show up in the URL. I&apos;m also still using JSF 1.2, so it&apos;s possible that upgrading to 2.0 would solve many of the issues I encountered. &lt;/p&gt;
&lt;p&gt;For the time being, I&apos;ve changed my FacesServlet mapping from *.html to *.jsf. As with Struts, I had issues when I tried to map it to /app/*. Other changes include &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/jsf/src/main/webapp/WEB-INF/web.xml?r1=3384&amp;r2=3458#l188&quot;&gt;changing the order of dispatchers and filters&lt;/a&gt;, the good ol&apos; catch-all in &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/jsf/src/main/webapp/WEB-INF/urlrewrite.xml?r=HEAD&quot;&gt;urlrewrite.xml&lt;/a&gt; and &lt;a href=&quot;http://source.appfuse.org/browse/appfuse/trunk/web/jsf/src/main/webapp/WEB-INF/security.xml?r1=3384&amp;r2=3458#l188&quot;&gt;modifying security.xml&lt;/a&gt;. For some reason, I wasn&apos;t able to get file upload working without adding an exception to the outbound-rule.&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;rule match-type=&quot;regex&quot;&amp;gt;
    &amp;lt;from&amp;gt;^(&amp;#91;^?&amp;#93;*)/(&amp;#91;^?/\.&amp;#93;+)(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;true&quot;&amp;gt;$1/$2.jsf&amp;lt;/to&amp;gt;
&amp;lt;/rule&amp;gt;
&amp;lt;outbound-rule match-type=&quot;regex&quot;&amp;gt;
  &amp;lt;!-- TODO: Figure out how to make file upload work w/o using *.jsf --&amp;gt;
    &amp;lt;condition type=&quot;path-info&quot;&amp;gt;selectFile&amp;lt;/condition&amp;gt;
    &amp;lt;from&amp;gt;^(.*)\.jsf(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;false&quot;&amp;gt;$1$2&amp;lt;/to&amp;gt;
&amp;lt;/outbound-rule&amp;gt;
&lt;/pre&gt;
&lt;p&gt;I also spent a couple hours trying to get &lt;a href=&quot;http://ocpsoft.com/prettyfaces/&quot;&gt;Pretty Faces&lt;/a&gt; to work. I wrote about my issues &lt;a href=&quot;http://ocpsoft.com/support/topic/rewrite-every-jsf&quot;&gt;on the forums&lt;/a&gt;. I tried writing a custom Processor to strip the extension, but found that I&apos;d get into an infinite loop where the processor kept getting called. To workaround this, I tried using Spring&apos;s RequestContextHolder to ensure the processor only got invoked once, but that proved fruitless. Finally, I tried inbound &lt;em&gt;and&lt;/em&gt; outbound custom processors, but failed to get those working. The final thing I tried was url-mappings for each page in pretty-config.xml.
&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;url-mapping&amp;gt;
  &amp;lt;pattern value=&quot;/admin/users&quot;/&amp;gt;
  &amp;lt;view-id value=&quot;/admin/users.jsf&quot;/&amp;gt;
&amp;lt;/url-mapping&amp;gt;
&amp;lt;url-mapping&amp;gt;
  &amp;lt;pattern value=&quot;/mainMenu&quot;/&amp;gt;
  &amp;lt;view-id value=&quot;/mainMenu.jsf&quot;/&amp;gt;
&amp;lt;/url-mapping&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The issue with doing this was that some of the navigation rules in my faces-config.xml stopped working. I didn&apos;t spend much time trying to diagnose the problem because I didn&apos;t like having to add an entry for each page in the application. The one nice thing about Pretty Faces is it did allow me to do things like the following, which I formerly did with a form that auto-submitted when the page loaded.
&lt;/p&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;
&amp;lt;url-mapping&amp;gt;
  &amp;lt;pattern value=&quot;/passwordHint/#{username}&quot;/&amp;gt;
  &amp;lt;view-id value=&quot;/passwordHint.jsf&quot;/&amp;gt;
  &amp;lt;action&amp;gt;#{passwordHint.execute}&amp;lt;/action&amp;gt;
&amp;lt;/url-mapping&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br/&gt;
My journey implementing extensionless URLs was an interesting one, and I solidified my knowledge about ordering of filters, dispatchers and the UrlRewriteFilter. I still think I have more to learn about properly implementing extensionless URLs in Struts 2 and JSF and I hope to do that in the near future. I believe Struts&apos; Convention Plugin will help me and JSF 2 + Pretty Faces will hopefully work nicely too. Of course, it&apos;d be great if all Java Web Frameworks had an easy mechanism for producing and consuming extensionless URLs. In the meantime, thank goodness for the UrlRewriteFilter.
&lt;/p&gt;
&lt;p&gt;If you&apos;d like to try AppFuse and its shiny new URLs, see the &lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+QuickStart&quot;&gt;QuickStart Guide&lt;/a&gt; and choose the 2.1.0-SNAPSHOT version.

</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/how_i_calculated_ratings_for</id>
        <title type="html">How I Calculated Ratings for My JVM Web Frameworks Comparison</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/how_i_calculated_ratings_for"/>
        <published>2010-12-06T11:55:18-07:00</published>
        <updated>2014-05-08T19:47:26-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="devoxx2010" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jvm" scheme="http://roller.apache.org/ns/tags/" />
        <category term="lift" scheme="http://roller.apache.org/ns/tags/" />
        <category term="comparingwebframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworksmatrix" scheme="http://roller.apache.org/ns/tags/" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vaadin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wicket" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="stripes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rubyonrails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="devoxx" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="playframework" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;
</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/an_awesome_trip_to_amsterdam</id>
        <title type="html">An Awesome Trip to Amsterdam and Antwerp for Devoxx 2010</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/an_awesome_trip_to_amsterdam"/>
        <published>2010-11-25T12:36:10-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="guinness" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vacation" scheme="http://roller.apache.org/ns/tags/" />
        <category term="travel" scheme="http://roller.apache.org/ns/tags/" />
        <category term="parleys.com" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="beer" scheme="http://roller.apache.org/ns/tags/" />
        <category term="belgium" scheme="http://roller.apache.org/ns/tags/" />
        <category term="kwak" scheme="http://roller.apache.org/ns/tags/" />
        <category term="amsterdam" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="antwerp" scheme="http://roller.apache.org/ns/tags/" />
        <category term="photography" scheme="http://roller.apache.org/ns/tags/" />
        <category term="trishmcginity" scheme="http://roller.apache.org/ns/tags/" />
        <category term="devoxx" scheme="http://roller.apache.org/ns/tags/" />
        <category term="pelgrom" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">I&apos;ve often heard that Devoxx (formerly Javapolis) is one of the best Java-related conferences in the world. I&apos;ve also heard it has the best speaking and viewing facilities (a movie theater) of any conference. When I was invited to speak earlier this year, I jumped at the opportunity. When I met Trish last summer, I even used it in a pickup line: &quot;Wanna go to Belgium with me in November?&quot;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://farm6.static.flickr.com/5241/5205155245_f20d951aee.jpg&quot; rel=&quot;lightbox[devoxx2010]&quot; title=&quot;I bet &amp;quot;chug your beer&amp;quot; for every touchdown with these 3&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5241/5205155245_f20d951aee_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;I bet &amp;quot;chug your beer&amp;quot; for every touchdown with these 3&quot; class=&quot;picture&quot; style=&quot;margin-bottom: 5px; margin-top: 5px&quot; /&gt;&lt;/a&gt;
Last week was one of the most memorable weeks of my life. It all started with a tremendously fun Broncos vs. Chiefs game at Invesco Field in Denver. Trish&apos;s company, &lt;a href=&quot;http://www.fishnetsecurity.com/&quot;&gt;FishNet Security&lt;/a&gt;, was hosting a tailgate party and had rented a suite for the game. I was irrationally confident that the Broncos would win, so proceeded to place bets with many of her co-workers. Since FishNet is headquartered out of Kansas City, most of the folks in the suite were Kansas City fans. You can imagine my excitement when the CEO&apos;s wife agreed to chug a beer every time the Broncos scored. I talked a couple of other folks into the same bet and proceeded to giggle and grin for the duration of the 49-29 routing.
&lt;/p&gt;
&lt;p&gt;I tell this story because it put us in the perfect mood to begin our trip to &lt;a href=&quot;http://www.devoxx.com/display/Devoxx2K10/Home&quot;&gt;Devoxx&lt;/a&gt; the next day.
&lt;/p&gt;
&lt;p&gt;Trish and I left Denver at noon on Monday, stopped in Chicago for a 2-hour layover and continued to Amsterdam on an overnight flight. In Chicago, we journeyed into the Red Carpet Club, where I performed a long overdue &lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_2_1_milestone_2&quot;&gt;release of AppFuse&lt;/a&gt;. We&apos;d both started to come down with my kids&apos; cold, so we popped some NyQuil a couple hours into the flight and slept through the night.
&lt;/p&gt;
&lt;p id=&quot;amsterdam&quot;&gt;&lt;strong&gt;Amsterdam&lt;/strong&gt;&lt;br/&gt;
We arrived in Amsterdam on Tuesday morning and proceeded on a walkabout of the city. We stumbled into &lt;a href=&quot;http://en.wikipedia.org/wiki/Dam_Square&quot;&gt;Dam Square&lt;/a&gt;, found some breakfast and checked our bags into a nearby hotel. Our first stop was the &lt;a href=&quot;http://www.vangoghmuseum.nl/vgm/index.jsp?lang=en&quot;&gt;Van Gogh Museum&lt;/a&gt;, where we proceeded to enjoy the audio tour and learn about the life and works of Van Gogh. From there, we headed to the Heineken Brewery for a tour and some extra cold beers. While walking back to Amsterdam Central Station to catch a train to Antwerp, we stopped in at the &lt;a href=&quot;http://www.xtracold.com/&quot;&gt;Ice Bar&lt;/a&gt; to experience drinks in sub-zero temperatures. All the brochures said it was the #1 attraction in Amsterdam, but that was obviously just good marketing. Regardless, we enjoyed the &quot;4D&quot; experience and &lt;a href=&quot;http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1173.snc4/154567_1721912134461_1438065285_31784951_4875490_n.jpg&quot; rel=&quot;lightbox[devoxx2010]&quot; title=&quot;Cool Bartender Tricks&quot;&gt;cool bartender tricks&lt;/a&gt;.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4131/5205295929_e91d69e5a6.jpg&quot; title=&quot;Beautiful day in Amsterdam&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4131/5205295929_e91d69e5a6_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Beautiful day in Amsterdam&quot; style=&quot;border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5241/5205894352_ff5cb798d9.jpg&quot; title=&quot;Best. Travel Partner. Ever.&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5241/5205894352_ff5cb798d9_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Best. Travel Partner. Ever.&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4104/5205296707_1abb9df521.jpg&quot; title=&quot;Bikes&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4104/5205296707_1abb9df521_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Bikes&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5247/5205895668_966f19f350.jpg&quot; title=&quot;Rijksmuseum Amsterdam&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5247/5205895668_966f19f350_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Rijksmuseum Amsterdam&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5166/5205298949_626d4fdaa9.jpg&quot; title=&quot;Heineken Brewery&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5166/5205298949_626d4fdaa9_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Heineken Brewery&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5289/5205897422_b01973acbe.jpg&quot; title=&quot;Be The Beer&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5289/5205897422_b01973acbe_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Be The Beer&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5081/5205299893_f8300a7147.jpg&quot; title=&quot;Extra Cold&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5081/5205299893_f8300a7147_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Extra Cold&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Amsterdam is one of my favorite cities in the world, offering some of the best scenes and photo opportunities I&apos;ve ever seen. We marveled at a gorgeous sunset over a canal on our walk back to the train station.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4111/5205300493_0fa88e937a.jpg&quot; title=&quot;Sunset in Amsterdam&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4111/5205300493_0fa88e937a_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Sunset in Amsterdam&quot; style=&quot;border: 1px solid black&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;On the train to Antwerp, we scarfed down delicious bread and cheese, chased it with wine and watched a movie on my iPad. Upon arrival, we were instantly mesmerized by the architecture and beauty of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Antwerpen-Centraal_railway_station&quot;&gt;Antwerpen Centraal Station&lt;/a&gt;. We hailed a taxi and proceeded to our accommodations at the &lt;a href=&quot;http://www.hiexpress.com/hotels/us/en/antwerp/anrhe/hoteldetail&quot;&gt;Holiday Inn Express&lt;/a&gt;.
&lt;/p&gt;
&lt;p id=&quot;devoxx&quot;&gt;&lt;strong&gt;Devoxx&lt;/strong&gt;&lt;br/&gt;
I knew that Devoxx was a great conference and I could learn a lot by attending. However, it was also my first time in Belgium and I knew there was a lot to learn by exploring too. Much to my delight, while lying in bed on Wednesday morning, I quickly realized I could get all the key highlights via Twitter. I also learned that, as a speaker, I&apos;d get full access to all the sessions via &lt;a href=&quot;http://parleys.com&quot;&gt;Parleys.com&lt;/a&gt;. So Wednesday was spent registering for the conference and traveling to Antwerp&apos;s shopping district to explore and drink a few delicious Belgium beers. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4149/5205900062_986f477673.jpg&quot; title=&quot;Hey Good Lookin&apos; - wanna go to Devoxx with me?&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4149/5205900062_986f477673_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Hey Baby - wanna go to Devoxx with me?&quot; style=&quot;border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5125/5205901714_c642f9ff0a.jpg&quot; title=&quot;Shopping District with Antwerpen Centraal in the background&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5125/5205901714_c642f9ff0a_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Shopping District with Antwerpen Centraal in the background&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5203/5205303557_641968e0b4.jpg&quot; title=&quot;Delicious Beer&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5203/5205303557_641968e0b4_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Delicious Beer&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5249/5205303797_15255b8f5f.jpg&quot; title=&quot;Always Time for a Guinness&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5249/5205303797_15255b8f5f_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Always Time for a Guinness&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;/p&gt;
That evening, we attended the Open Source Dinner at &lt;a href=&quot;http://www.zuiderterras.be/&quot;&gt;Zuiderterras&lt;/a&gt; with &lt;a href=&quot;http://be.linkedin.com/in/mathiasbogaert&quot;&gt;Mathias Bogaert&lt;/a&gt;, &lt;a href=&quot;http://processdevelopments.blogspot.com/&quot;&gt;Tom Baeyens&lt;/a&gt;, a couple ZeroTurnaround guys, a few Struts 2 Developers and many other fun folks. We walked to Pelgrom after dinner and savored a few &lt;a href=&quot;http://en.wikipedia.org/wiki/Pauwel_Kwak&quot;&gt;Kwaks&lt;/a&gt; in the coolest beer-drinking establishment I&apos;ve ever been to.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm6.static.flickr.com/5246/5205304275_33915177d2.jpg&quot; title=&quot;Open Source Dinner&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5246/5205304275_33915177d2_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Open Source Dinner&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4131/5205902822_066a6f76ed.jpg&quot; title=&quot;Open Source Dinner&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4131/5205902822_066a6f76ed_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Open Source Dinner&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4112/5205304709_532ce5a2ee.jpg&quot; title=&quot;Open Source Dinner&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4112/5205304709_532ce5a2ee_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Open Source Dinner&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5007/5205306689_19645e5206.jpg&quot; title=&quot;Kwak!&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5007/5205306689_19645e5206_t.jpg&quot; width=&quot;75&quot; height=&quot;100&quot; alt=&quot;Kwak!&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;On Thursday, we woke up early and walked the 35 minute journey to the conference to catch The Future Roadmap of Java EE talk. The session was so packed that many overflow rooms were created and we nestled ourselves into the front row of one across the hall. My talk on &lt;a href=&quot;http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks&quot;&gt;Comparing JVM Web Frameworks&lt;/a&gt; was next and I fought the crowd to get into the keynote room to deliver it. I don&apos;t know how many people attended (est. 500), but it was definitely the largest audience I&apos;d ever spoken in front of. Based on Twitter mentions, the majority of people seemed to enjoy it and that put a smile on my face for the rest of the day.
&lt;/p&gt;
&lt;p&gt;Since Trish and I didn&apos;t have time for breakfast, we walked back to the hotel, dropped off my laptop and headed downtown to find some grub. We found &lt;a href=&quot;http://www.madretierra.be/&quot;&gt;Madre Tierra&lt;/a&gt;, had a delicious breakfast and continued on to &lt;a href=&quot;http://en.wikipedia.org/wiki/Cathedral_of_Our_Lady_%28Antwerp%29&quot;&gt;Cathedral of Our Lady&lt;/a&gt;. The artwork inside was amazing, as demonstrated by the pictures below.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4151/5205906228_bee33f452a.jpg&quot; title=&quot;Cathedral of our Lady, Antwerp&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4151/5205906228_bee33f452a_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Cathedral of our Lady, Antwerp&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5125/5205308059_5c377f5e53.jpg&quot; title=&quot;Cathedral of our Lady, Antwerp&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5125/5205308059_5c377f5e53_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Cathedral of our Lady, Antwerp&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4132/5205906672_5c092c4b2b.jpg&quot; title=&quot;Cathedral of our Lady, Antwerp&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4132/5205906672_5c092c4b2b_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Cathedral of our Lady, Antwerp&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4127/5205308779_bfe5d08629.jpg&quot; title=&quot;Cathedral of our Lady, Antwerp&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4127/5205308779_bfe5d08629_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Cathedral of our Lady, Antwerp&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;That evening, we joined the &lt;a href=&quot;http://javaposse.com/&quot;&gt;Java Posse&lt;/a&gt; dinner at &lt;a href=&quot;http://www.pelgrom.be&quot;&gt;Pelgrom&lt;/a&gt;. This was a fun dinner where we got to sit with Dick Wall and Carl Quinn on one side and Mark Reinhold, Chet Haase and Romain Guy on the other. Good food, great beer and excellent conversation. From there, we met up with James Ward and other Adobe folks before attending the Devoxx party to close the night.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5047/5205310525_35786d0758.jpg&quot; title=&quot;Partying with the Adobe Folks&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5047/5205310525_35786d0758_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Partying with the Adobe Crew&quot; style=&quot;border: 1px solid black&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5007/5205310727_0fc9f5c337.jpg&quot; title=&quot;Devoxx Party with the Norway Crew&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5007/5205310727_0fc9f5c337_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Devoxx Party with the Norway Crew&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Friday, we slept in and tracked down some delicious Belgium Waffles at D&#233;sir&#233; de Lille before catching a train to &lt;a href=&quot;http://en.wikipedia.org/wiki/Ghent&quot;&gt;Ghent&lt;/a&gt;. We arrived at sunset, but that didn&apos;t stop Trish&apos;s Nikon D300 from capturing &lt;a href=&quot;http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1163.snc4/150513_1722028177362_1438065285_31785199_3329080_n.jpg&quot; rel=&quot;lightbox[devoxx2010]&quot; title=&quot;many&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1183.snc4/150534_1722030537421_1438065285_31785215_1661852_n.jpg&quot; rel=&quot;lightbox[devoxx2010]&quot; title=&quot;spectacular&quot;&gt;spectacular&lt;/a&gt; &lt;a href=&quot;http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs602.ash2/155445_1722032817478_1438065285_31785228_5694342_n.jpg&quot; rel=&quot;lightbox[devoxx2010]&quot; title=&quot;shots&quot;&gt;shots&lt;/a&gt; throughout the night.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm6.static.flickr.com/5165/5205310971_8908fc905f.jpg&quot; title=&quot;Waffles at D&#233;sir&#233; de Lille&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5165/5205310971_8908fc905f_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Waffles at D&#233;sir&#233; de Lille&quot; style=&quot;border: 1px solid black&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;a href=&quot;http://farm2.static.flickr.com/1409/5205910344_4caa257726.jpg&quot; title=&quot;The Canal in Ghent&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm2.static.flickr.com/1409/5205910344_4caa257726_s.jpg&quot; width=&quot;75&quot; height=&quot;75&quot; alt=&quot;The Canal in Ghent&quot; style=&quot;border: 1px solid black&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4103/5205911042_aa201ac9d6.jpg&quot; title=&quot;Ghent&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4103/5205911042_aa201ac9d6_s.jpg&quot; width=&quot;75&quot; height=&quot;75&quot; alt=&quot;Ghent&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4149/5205911660_718ab0bcd4.jpg&quot; title=&quot;Ghent&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4149/5205911660_718ab0bcd4_s.jpg&quot; width=&quot;75&quot; height=&quot;75&quot; alt=&quot;Ghent&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;On Saturday, we began our journey back to the US, starting with taking the &lt;a href=&quot;http://www.thalys.com/&quot;&gt;fast train&lt;/a&gt; from Antwerp to Amsterdam. We checked into a &lt;a href=&quot;http://www.pulitzeramsterdam.com/&quot;&gt;fancy hotel&lt;/a&gt; and snuggled in for a cozy dinner at &lt;a href=&quot;http://www.tripadvisor.com/Restaurant_Review-g188590-d1027253-Reviews-Tibetaanse_restaurant_Tibet-Amsterdam_Noord_Holland.html&quot;&gt;Tibet Restaurant&lt;/a&gt;. We spent most of the night walking around, taking &lt;a href=&quot;http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1153.snc4/149558_1722105059284_1438065285_31785390_6214191_n.jpg&quot; rel=&quot;lightbox[devoxx2010]&quot; title=&quot;&amp;copy; Trish McGinity&quot;&gt;sweet photos&lt;/a&gt; and making our Irish heritage proud.
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4083/5205913710_28d00bc311.jpg&quot; title=&quot;Amsterdam by Night&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4083/5205913710_28d00bc311_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Amsterdam by Night&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4154/5205316895_f6516ea74c.jpg&quot; title=&quot;Shooting the Swans&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4154/5205316895_f6516ea74c_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Shooting the Swans&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm6.static.flickr.com/5247/5205915576_02f58c3b33.jpg&quot; title=&quot;Car Bombs in Amsterdam&quot; rel=&quot;lightbox[devoxx2010]&quot;&gt;&lt;img src=&quot;//farm6.static.flickr.com/5247/5205915576_02f58c3b33_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Car Bombs in Amsterdam&quot; style=&quot;margin-left: 10px; border: 1px solid black&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Traveling to Belgium and speaking at Devoxx was definitely a highlight of my life. Not only were the sites fantastic, but the conference attendees were super nice and I had the best travel partner in the world. The beers were delicious, the food was excellent and I can&apos;t wait to return in the future. Thanks to the Devoxx Crew for having me!
&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 5px; color: #666&quot;&gt;
To see all the pictures I took on this trip, check out my &lt;a href=&quot;http://www.flickr.com/photos/mraible/sets/72157625338129561&quot; style=&quot;color: #555&quot;&gt;Devoxx 2010 set on Flickr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks</id>
        <title type="html">My Comparing JVM Web Frameworks Presentation from Devoxx 2010</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks"/>
        <published>2010-11-18T05:23:10-07:00</published>
        <updated>2015-08-23T18:57:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="stripes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rubyonrails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jvm" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="devoxx2010" scheme="http://roller.apache.org/ns/tags/" />
        <category term="playframework" scheme="http://roller.apache.org/ns/tags/" />
        <category term="lift" scheme="http://roller.apache.org/ns/tags/" />
        <category term="devoxx" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wicket" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vaadin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/appfuse_2_1_milestone_2</id>
        <title type="html">AppFuse 2.1 Milestone 2 Released</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/appfuse_2_1_milestone_2"/>
        <published>2010-11-15T15:28:57-07:00</published>
        <updated>2010-11-15T22:37:10-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="myfaces" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appfuse-light" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appfuse" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="freemarker" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wicket" scheme="http://roller.apache.org/ns/tags/" />
        <category term="maven2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="maven" scheme="http://roller.apache.org/ns/tags/" />
        <category term="stripes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="hibernate" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java5" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ibatis" scheme="http://roller.apache.org/ns/tags/" />
        <category term="archetypes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jpa" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tapestry" scheme="http://roller.apache.org/ns/tags/" />
        <category term="maven3" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">I&apos;m pleased to announce the 2nd milestone release of AppFuse 2.1. This release includes upgrades to all dependencies to bring them up-to-date with their latest releases. Most notable are Spring 3 and Struts 2.1. This release fixes many issues with archetypes and contains many improvements to support Maven 3. For more details on specific changes see the &lt;a href=&quot;http://appfuse.org/display/APF/Release+Notes+2.1.0+M2&quot;&gt;2.1.0 M2 release notes&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What is AppFuse?&lt;/strong&gt;&lt;br/&gt;
AppFuse is an open source project and application that uses open source frameworks to help you develop Web applications quickly and efficiently. It was originally developed to eliminate the ramp-up time when building new web applications. At its core, AppFuse is a project skeleton, similar to the one that&apos;s created by your IDE when you click through a wizard to create a new web project. If you use &lt;a href=&quot;http://raibledesigns.com/rd/entry/using_jrebel_with_intellij_idea&quot;&gt;JRebel with AppFuse&lt;/a&gt;, you can achieve zero-turnaround in your project and develop features without restarting the server.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;
Release Details&lt;/strong&gt;&lt;br/&gt;
Archetypes now include all the source for the web modules so using jetty:run and your IDE will work much smoother now. The backend is still embedded in JARs, enabling you to choose with persistence framework (Hibernate, iBATIS or JPA) you&apos;d like to use. If you want to modify the source for that, &lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+Core+Classes&quot;&gt;add the core classes to your project&lt;/a&gt; or run &quot;appfuse:full-source&quot;.
&lt;/p&gt;
&lt;p&gt;
AppFuse comes in a number of different flavors. It offers &quot;light&quot;, &quot;basic&quot; and &quot;modular&quot; and archetypes. Light archetypes use an embedded H2 database and contain a simple CRUD example. In the final 2.1.0 release, the light archetypes will allow code generation like the basic and modular archetypes. Basic archetypes have web services using CXF, authentication from Spring Security and features including signup, login, file upload and CSS theming. Modular archetypes are similar to basic archetypes, except they have multiple modules which allows you to separate your services from your web project.
&lt;/p&gt;
&lt;p&gt;
AppFuse provides &lt;a href=&quot;http://static.appfuse.org/archetype.html&quot;&gt;archetypes&lt;/a&gt; for JSF, Spring MVC, Struts 2 and Tapestry 5. The light archetypes are available for these frameworks, as well as for Spring MVC + FreeMarker, Stripes and Wicket.
&lt;/p&gt;
&lt;p&gt;
Please note that this release does not contain updates to the documentation. Code generation will work, but it&apos;s likely that some content in the &lt;a href=&quot;http://appfuse.org/display/APF/Tutorials&quot;&gt;tutorials&lt;/a&gt; won&apos;t match. For example, you can use annotations (vs. XML) for Spring MVC and Tapestry is a whole new framework. I&apos;ll be working on documentation over the next several weeks in preparation for the 2.1 final release.
&lt;/p&gt;
&lt;p&gt;
For information on creating a new project, please see the &lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+QuickStart&quot;&gt;QuickStart Guide&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you have questions about AppFuse, please read the &lt;a href=&quot;http://appfuse.org/display/APF/FAQ&quot;&gt;FAQ&lt;/a&gt; or join the &lt;a href=&quot;http://appfuse.org/display/APF/Mailing+Lists&quot;&gt;user mailing list&lt;/a&gt;. If you find bugs, please &lt;a href=&quot;http://issues.appfuse.org/browse/APF&quot;&gt;create an issue in JIRA&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Thanks to everyone for their help contributing patches, writing documentation and participating on the mailing lists.
</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/re_moving_from_spring_to</id>
        <title type="html">RE: Moving from Spring to Java EE 6: The Age of Frameworks is Over</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/re_moving_from_spring_to"/>
        <published>2010-10-16T15:19:07-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="javaee" scheme="http://roller.apache.org/ns/tags/" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="frameworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Last Tuesday, Cameron McKenzie wrote an interesting article on TheServerSide titled &lt;a href=&quot;http://www.theserverside.com/discussions/thread.tss?thread_id=61023&quot;&gt;Moving from Spring to Java EE 6: The Age of Frameworks is Over&lt;/a&gt;. In this article, Cameron says the following:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
J2EE represents the past, and Java EE 6 represents the future. Java EE 6 promises us the ability to go beyond frameworks. Frameworks like Spring are really just a bridge between the mistakes of the J2EE past and the success of the Java EE 6 future. Frameworks are out, and extensions to the Java EE 6 platform are in. Now is the time to start looking past Spring, and looking forward to Seam and Weld and CDI technologies.
&lt;/p&gt;
&lt;p&gt;He then links to an article titled &lt;a href=&quot;http://ocpsoft.com/java/spring-to-java-ee-a-migration-guide-cdi-jsf-jpa-jta-ejb/&quot;&gt;Spring to Java EE - A Migration Experience&lt;/a&gt;, an article written by JBoss&apos;s Lincoln Baxter. In this article, Lincoln talks about many of the technologies in Java EE 6, namely JPA, EJB, JSF, CDI and JAX-RS. He highlights all the various XML files you&apos;ll need to know about and the wide variety of Java EE 6 application servers: JBoss AS 6 and GlassFish v3.&lt;/p&gt;
&lt;p&gt;I don&apos;t have a problem with Lincoln&apos;s article, in fact I think it&apos;s very informative and some of the best documentation I&apos;ve seen for Java EE 6. 
&lt;/p&gt;
&lt;p&gt;
I do have some issues with Cameron&apos;s statements that frameworks are mistakes of the J2EE past and that Java EE 6 represents the future. Open source frameworks made J2EE successful. Struts and Hibernate came out in the early days of J2EE and still exist today. Spring came out shortly after and has turned into the do-everything J2EE implementation it was trying to fix. Java EE 6 &lt;em&gt;might be&lt;/em&gt; a better foundation to build upon, but it&apos;s certainly not going to replace frameworks.
&lt;/p&gt;
&lt;p&gt;
To prove my point, let&apos;s start by looking at the persistence layer. We used to have Hibernate based on JDBC, now we have JPA implementations built on top of the JPA API. Is JPA a replacement for all persistence frameworks? I&apos;ve worked with it and think it&apos;s a good API, but the 2.0 version &lt;a href=&quot;https://repository.sonatype.org/index.html#nexus-search;quick~javax.persistence&quot;&gt;isn&apos;t available in a Maven repo&lt;/a&gt; and &lt;a href=&quot;http://wiki.alfresco.com/wiki/Alfresco_Community_3.4.a#Hibernate_Removal&quot;&gt;Alfresco recently moved away from Hibernate&lt;/a&gt; (which == JPA IMO) to iBATIS for greater data access layer control and scalability. Looks like the age of frameworks isn&apos;t over for persistence frameworks.&lt;/p&gt;
&lt;p&gt;The other areas that Java EE 6 covers that I believe frameworks will continue to excel in: EJB, CDI, JSF and JAX-RS. Personally, I don&apos;t have a problem with EJB 3 and think it&apos;s a vast improvement on EJB 2.x. I don&apos;t have an issue with CDI either, and as long as it resembles Guice for dependency injection, it works for me. However, when you get into the space I&apos;ve been living in for the last couple years (high-traffic public internet sites), EJB and things like the &quot;conversation-scope&quot; feature of CDI don&apos;t buy you much. The way to make web application scale is to eliminate state and cache as much as possible, both of which Java EE doesn&apos;t provide much help for. In fact, to disable sessions in a servlet-container, you have to write a Filter like the following:&lt;/p&gt;
&lt;pre class=&quot;brush: java&quot;&gt;
public class DisabledSessionFilter extends OncePerRequestFilter {

    /**
     * Filters requests to disable URL-based session identifiers.
     */
    @Override
    protected void doFilterInternal(final HttpServletRequest request,
                                    final HttpServletResponse response,
                                    final FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequestWrapper wrappedRequest = new HttpServletRequestWrapper(request) {

            @Override
            public HttpSession getSession(final boolean create) {
                if (create) {
                    throw new UnsupportedOperationException(&quot;Session support disabled&quot;);
                }
                return null;
            }

            @Override
            public HttpSession getSession() {
                throw new UnsupportedOperationException(&quot;Session support disabled&quot;);
            }
        };

        // process next request in chain
        chain.doFilter(wrappedRequest, response);
    }
}
&lt;/pre&gt;
&lt;p&gt;What about JAX-RS? Does it replace the need for frameworks? I like the idea of having a REST API in Java. However, its reference implementation is &lt;a href=&quot;https://jersey.dev.java.net/&quot;&gt;Jersey&lt;/a&gt;, which seems more like a framework than just Java EE. If you choose to use JAX-RS in your application, you still have to choose between CXF, Jersey, RESTEasy and Restlet. &lt;a href=&quot;http://raibledesigns.com/rd/entry/my_experience_with_java_rest&quot;&gt;I compared these frameworks last year&lt;/a&gt; and found the Java EE implementation lacking in the features I needed. 
&lt;/p&gt;
&lt;p&gt;Finally, let&apos;s talk about my-least-framework-web-framework: JSF. The main reason I don&apos;t like JSF is because of its 1.x version. JSF 1.0 was released a year before the Ajax term was coined (see timeline below). Not only did it take forever to develop as a spec, but it tried to be a client-component framework that was very stateful by default. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4067/4378559350_aef7d39d06_o.png&quot; title=&quot;History of Web Frameworks&quot; rel=&quot;lightbox&quot;&gt;
&lt;img src=&quot;//farm5.static.flickr.com/4067/4378559350_13f0755403.jpg&quot; width=&quot;500&quot; height=&quot;234&quot; alt=&quot;History of Web Frameworks&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Now that JSF 2.0 is out, it has Ajax integrated and allows you to use GET instead of POST-for-everything. However, the only people that like Ajax integrated into their web frameworks are programmers scared of JavaScript (who probably shouldn&apos;t be developing your UI). Also, the best component development platform for the web &lt;em&gt;is&lt;/em&gt; JavaScript. I recommend using an Ajax framework for your components if you really want a rich UI. 
&lt;/p&gt;
&lt;p&gt;
Sure you can use the likes of Tapestry and Wicket if you like POJO-based web development, but if you&apos;re looking to develop a webapp that&apos;s easy to maintain and understand, chances are that you&apos;ll do much better with traditional MVC frameworks like Spring MVC and Struts 2. The simplicity and popularity of Rails and Grails further emphasize that developers prefer these types of web frameworks.&lt;/p&gt;
&lt;p&gt;Another reason I don&apos;t like JSF: there&apos;s very few developers in the wild happy with it. The major promoters of JSF are book authors, trainers, Java EE Vendors and MyFaces developers. Whenever I speak at conferences, I ask folks to raise their hands for the various web frameworks they&apos;re using. I always ask the JSF users to keep their hands up if they like it. Rarely do they stay up.
&lt;/p&gt;
&lt;p&gt;
So it looks like we still need web frameworks. 
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://jandiandme.blogspot.com/2010/10/spring-vs-java-ee-and-why-i-dont-care.html&quot;&gt;Eberhard Wolff has an interesting post&lt;/a&gt; where he defends Spring and talks about the productivity comparisons between Spring and Java EE. He recommends using Grails or Spring Roo if you want the level of productivity that Ruby on Rails provides. That&apos;s a valid recommendation if you&apos;re building CRUD-based webapps, but I haven&apos;t developed those in quite some time. Nowadays, the apps I develop are true SOFEA apps, where the backend serves up XML or JSON and the frontend client is HTML/JavaScript/CSS, Android, iPad or Sony Blu-Ray players. On my current project, our services don&apos;t even talk to a database, they talk to a CMS via RESTful APIs. We use Spring&apos;s RestTemplate for this and HttpClient when it doesn&apos;t have the features we need. Not much in Java EE 6 for this type of communication. Sure, &lt;a href=&quot;http://blogs.sun.com/enterprisetechtips/entry/consuming_restful_web_services_with&quot;&gt;Jersey has a client&lt;/a&gt;, but it&apos;s certainly not part of the Java EE spec.
&lt;/p&gt;
&lt;p&gt;As far as getting Ruby on Rails&apos; zero-turnaround productivity, I don&apos;t need Grails or Spring Roo, I simply use &lt;a href=&quot;http://www.jetbrains.com/idea/&quot;&gt;IDEA&lt;/a&gt; and &lt;a href=&quot;http://www.zeroturnaround.com/jrebel/&quot;&gt;JRebel&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br/&gt;
I don&apos;t see how new features in Java EE 6 can mean the age of frameworks is over. Java SE and J2EE have always been foundations for frameworks. The Java EE 6 features are often frameworks in themselves that can be used outside of a Java EE container. Furthermore, Java EE 6 doesn&apos;t provide all the features you need to build a high-scale web app today. There&apos;s no caching, no stateless web framework that can serve up JSON and HTML and no hot-reload productivity enhancements like JRebel. Furthermore, there&apos;s real excitement in Javaland for languages like Scala, Groovy and JRuby. All of these languages have web frameworks that&apos;ve made many developers happy. 
&lt;/p&gt;
&lt;p&gt;
Here&apos;s to the Age of Frameworks - may it live as long as the JVM!
&lt;/p&gt;
&lt;p style=&quot;padding-top: 5px; border-top: 1px dotted silver; color: #666&quot;&gt;
P.S. If you&apos;d like to hear me talk about web frameworks on the JVM, I&apos;ll be speaking at &lt;a href=&quot;http://www.meetup.com/csopensource/calendar/15088624/&quot; style=&quot;color: #666&quot;&gt;The Colorado Springs Open Source Meetup&lt;/a&gt; and &lt;a href=&quot;http://www.devoxx.com/display/Devoxx2K10/Comparing+JVM+Web+Frameworks&quot; style=&quot;color: #666&quot;&gt;Devoxx 2010&lt;/a&gt; in the near future.&lt;/p&gt;
&lt;p&gt;
&lt;!--p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I am an independent consultant and don&apos;t have any affiliations with Java EE vendors. I do have an affection for open source frameworks, particularly Spring and web frameworks. This is because I&apos;ve seen them successfully implemented at high scale web sites such as LinkedIn, Evite and Time Warner Cable.&lt;/p--&gt; </content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland</id>
        <title type="html">My Incredible Trip to Ireland</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland"/>
        <published>2010-06-14T23:42:55-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="kalin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="guinness" scheme="http://roller.apache.org/ns/tags/" />
        <category term="irishsoftwareshow" scheme="http://roller.apache.org/ns/tags/" />
        <category term="johnwillis" scheme="http://roller.apache.org/ns/tags/" />
        <category term="dublin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="joshlong" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jameson" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jamievandyke" scheme="http://roller.apache.org/ns/tags/" />
        <category term="iss2010" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="glendalough" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ireland" scheme="http://roller.apache.org/ns/tags/" />
        <category term="dublinia" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;em&gt;If you ever get a chance to travel to Ireland, take it!&lt;/em&gt; I don&apos;t know when I heard these words, or how they came into my head, but I remembered them clearly when I was first introduced to &lt;a href=&quot;http://ie.linkedin.com/in/irishdev&quot;&gt;Barry Alistair&lt;/a&gt; by &lt;a href=&quot;http://www.linkedin.com/in/jgenender&quot;&gt;Jeff Genender&lt;/a&gt;. Soon after, I was able to negotiate my way into being a speaker at &lt;a href=&quot;http://epicenter.ie/2010.html&quot;&gt;The 2010 Irish Software Show&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The show was last week and I had a blast traveling to Dublin to speak and explore. &lt;a href=&quot;http://twitter.com/kraible&quot;&gt;My sister&lt;/a&gt; came me on this trip, but missed a connection in Seattle and had to join me a day late.  I left Denver at noon on Monday and arrived at &lt;a href=&quot;http://www.dublinairport.com/&quot;&gt;Dublin Airport&lt;/a&gt; at 7 am. I was on the same flight as &lt;a href=&quot;http://www.joshlong.com/&quot;&gt;Josh Long&lt;/a&gt; and thoroughly enjoyed my iPad as a travel companion. When I got off the plane, my battery life was at 60% and I&apos;d been watching movies and listening to music for 6 hours. 
&lt;/p&gt;
&lt;p&gt;I took a cab through the misty, cool morning to &lt;a href=&quot;http://en.wikipedia.org/wiki/Trinity_Capital_Hotel&quot;&gt;my hotel&lt;/a&gt;. I grabbed a coffee, cleaned up, and walked a few blocks to &lt;a href=&quot;http://www.tcd.ie/&quot;&gt;Trinity College&lt;/a&gt; for the conference. I made it in time for the &lt;a href=&quot;http://epicenter.ie/2010.html?zone_id=19&amp;amp;mode=agenda&amp;amp;session=164%23session&quot;&gt;opening keynote&lt;/a&gt; by &lt;a href=&quot;http://chrisjhorn.wordpress.com&quot;&gt;Chris Horn&lt;/a&gt;. It was an interesting talk, focusing on what needed to happen to make Ireland the Innovation Hub of Europe. After that, I attended &lt;a href=&quot;http://augusttechgroup.com/tim/blog&quot;&gt;Tim Berglund&apos;s&lt;/a&gt; session on &lt;a href=&quot;http://epicenter.ie/2010.html?zone_id=19&amp;amp;mode=agenda&amp;amp;session=160%23session&quot;&gt;Complexity Theory and Software Development&lt;/a&gt;. After lunch and a few more talks, I teamed up with &lt;a href=&quot;http://www.jroller.com/aalmiray/&quot;&gt;Andres Almiray&lt;/a&gt; and Josh Long for a pint at the hotel bar.
&lt;/p&gt;
&lt;p&gt;That evening, we attended &lt;a href=&quot;http://www.linkedin.com/in/jgenender&quot;&gt;Jeff Genender&apos;s&lt;/a&gt; talk on &lt;a href=&quot;http://epicenter.ie/2010.html?zone_id=19&amp;amp;mode=agenda&amp;amp;session=189%23session&quot;&gt;Getting into Open Source&lt;/a&gt;. The free drinks loosened everyone up and Jeff did a great job with a humorous presentation on how to get Committer Status. After Jeff&apos;s talk, about 10 of us headed to a Moroccan restaurant for a late dinner. I was in bed around midnight.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm2.static.flickr.com/1297/4699497085_b551c7a58f.jpg&quot; title=&quot;Andres Almiray and Josh Long&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm2.static.flickr.com/1297/4699497085_b551c7a58f_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Andres Almiray and Josh Long&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4029/4699497659_19812e51bf.jpg&quot; title=&quot;The Genenders&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4029/4699497659_19812e51bf_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;The Genenders&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4049/4700126996_f29207d60c.jpg&quot; title=&quot;Heading for Indian After Jeff&apos;s Talk&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4049/4700126996_f29207d60c_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Heading for Indian After Jeff&apos;s Talk&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4070/4699498241_c076566b11.jpg&quot; title=&quot;Streets of Dublin in the early morning&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4070/4699498241_c076566b11_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Streets of Dublin in the early morning&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Wednesday morning, my sister arrived in my hotel room at 8 and promptly fell into bed. I set my alarm to sleep an hour and closed the Vegas-style, no-light-allowed curtains. We awoke much later (12:30) than we&apos;d planned (9:00). We quickly got up and headed for some sight-seeing in Dublin. First off, we hit &lt;a href=&quot;http://www.dublinia.ie/&quot;&gt;Dublinia&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Christ_Church_Cathedral,_Dublin&quot;&gt;Christ Church Cathedral&lt;/a&gt;. Both sites were spectacular and we both learned a lot about the history of Dublin. From there, we skipped across the bridge to &lt;a href=&quot;http://www.jamesonwhiskey.com/Heritage-US/Visitor-Centres/The-Old-Jameson-Distillery-Tour-Info.aspx&quot;&gt;The Old Jameson Distillery&lt;/a&gt; for a tour and a bit of whiskey. &lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4063/4699499527_602302bea9.jpg&quot; title=&quot;Runes Exhibit in Dublinia&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4063/4699499527_602302bea9_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Runes Exhibit in Dublinia&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4070/4700130192_25a9cfcf52.jpg&quot; title=&quot;Christ Church Cathedral and Dublinia&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4070/4700130192_25a9cfcf52_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Christ Church Cathedral and Dublinia&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4022/4699501899_b92347236e.jpg&quot; title=&quot;Tasting Whiskey&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4022/4699501899_b92347236e_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Tasting Whiskey&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm2.static.flickr.com/1279/4700131426_db95eb5c9b.jpg&quot; title=&quot;The 18 Year&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm2.static.flickr.com/1279/4700131426_db95eb5c9b_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;The 18 Year&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;The picture below was taken on the &lt;a href=&quot;http://en.wikipedia.org/wiki/Ha%27penny_Bridge&quot;&gt;Ha&apos;penny Bridge&lt;/a&gt; as we were heading back from Jameson. The expression of the girl on the left is priceless. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4033/4700134408_d5f99cb5d0.jpg&quot; title=&quot;Kalin on the Half Penny&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4033/4700134408_d5f99cb5d0_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Kalin on the Half Penny&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;A couple hours later and I was delivering my talk on &lt;a href=&quot;http://raibledesigns.com/rd/entry/presentations_from_the_irish_software&quot;&gt;The Future of Web Frameworks&lt;/a&gt;. The crowd was lively; the Guinness I drank while talking was lovely. My session was followed by a Web Framework Experts Panel with &lt;a href=&quot;http://www.cacoethes.co.uk/blog/&quot;&gt;Peter Ledbrook&lt;/a&gt; (Grails), &lt;a href=&quot;http://www.jamievandyke.com/&quot;&gt;Jamie van Dyke&lt;/a&gt; (Rails), &lt;a href=&quot;http://www.ironshay.com/&quot;&gt;Shay Friedman&lt;/a&gt; (ASP.NET MVC), &lt;a href=&quot;http://blog.fitzell.ca/&quot;&gt;Julian Fitzell&lt;/a&gt; (Seaside) and myself (Java Frameworks). The debate was good and there was much discussion about the right apps for each framework and how important statelessness is for scalable applications. After 3 hours of talking, my sister and I headed back to the hotel. I was particularly happy about the evening since it was the first time a family member of mine had seen me speak.
&lt;/p&gt;
&lt;p style=&quot;font-style: italic; color: #666&quot; class=&quot;quote&quot;&gt;Correction from my Dad: This wasn&apos;t the first time a family member saw me speak. He attended my talk at &lt;a href=&quot;http://raibledesigns.com/rd/entry/what_a_trip_amsterdam_was&quot;&gt;ApacheCon EU 2007&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;A block from the hotel, we spotted a nice looking pub (&lt;a href=&quot;http://www.doylesintown.com/&quot;&gt;Doyles&lt;/a&gt;) and stopped in for a pint. As we bellied up to the end of the bar, we recognized Jamie (from the panel) and got introduced to his friend &lt;a href=&quot;http://yrobs.blogspot.com/&quot;&gt;Rob&lt;/a&gt;. We quickly got lost in conversation, stories and laughter and were surprised when we discovered it was 2:30am. Since I had a talk first thing in the morning, we ducked out shortly after.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4017/4699506393_3b1fedd531.jpg&quot; title=&quot;Web Framework Experts Panel&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4017/4699506393_3b1fedd531_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Web Framework Experts Panel&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4048/4700135162_f3099a46c4.jpg&quot; title=&quot;Barry on Evangelist Night&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4048/4700135162_f3099a46c4_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Barry on Evangelist Night&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4008/4700135912_6b71bcd50c.jpg&quot; title=&quot;The Night we met Jamie and Rob&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4008/4700135912_6b71bcd50c_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;The Night we met Jamie and Rob&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Thursday started with my talk &lt;a href=&quot;http://raibledesigns.com/rd/entry/presentations_from_the_irish_software&quot;&gt;Comparing Kick-Ass Web Frameworks&lt;/a&gt;. Then my sister and I did some more site-seeing, starting at the &lt;a href=&quot;http://www.guinness-storehouse.com/en/Index.aspx&quot;&gt;Guinness Storehouse&lt;/a&gt;. We met Josh and &lt;a href=&quot;http://www.johnmwillis.com/&quot;&gt;John Willis&lt;/a&gt; as they were leaving and they advised we go straight to The Gravity Bar at the top. We took there advise and were getting great views of Dublin and savoring sweet pints of Guinness moments later. The tour facility was freakin&apos; awesome and I loved how it was shaped like a pint glass. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4006/4699508311_77a05c609a.jpg&quot; title=&quot;Straight to the top!&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4006/4699508311_77a05c609a_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Straight to the top!&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4015/4699508737_612d1b1b42.jpg&quot; title=&quot;Mmmmm, Guinness&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4015/4699508737_612d1b1b42_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Mmmmm, Guinness&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4052/4700141820_3943b0dea6.jpg&quot; title=&quot;The Storehouse is shaped like a pint glass&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4052/4700141820_3943b0dea6_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;The Storehouse is shaped like a pint glass&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm2.static.flickr.com/1285/4700143032_120cd3d789.jpg&quot; title=&quot;Brainwave&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm2.static.flickr.com/1285/4700143032_120cd3d789_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Brainwave&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
We grabbed some gear from the gift shopped and landed (by accident) at &lt;a href=&quot;http://www.brazenhead.com/&quot;&gt;The Brazen Head&lt;/a&gt; (Ireland&apos;s Oldest Pub, Est. 1198) for a pint of cider and Guinness. Since my sister &lt;a href=&quot;http://raibledesigns.com/rd/entry/chelan_hard_cider&quot;&gt;used to be in the cider business&lt;/a&gt;, she was particularly happy there was so much on tap in Ireland.
&lt;/p&gt;
&lt;p&gt;
From the pub, we headed to &lt;a href=&quot;http://www.johnmwillis.com/&quot;&gt;John Willis&apos;s&lt;/a&gt; session on &lt;a href=&quot;http://epicenter.ie/2010.html?zone_id=21&amp;amp;mode=agenda&amp;amp;session=157#session&quot;&gt;The Cambrian Cloud Explosion&lt;/a&gt;. Following John&apos;s session, we headed to the Speaker&apos;s Dinner for a very fun evening with the hosts and speakers of the conference.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4027/4700144746_2a6f095f07.jpg&quot; title=&quot;John Willis and Barry Alistair&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4027/4700144746_2a6f095f07_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;John Willis and Barry Alistair&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4053/4699515883_49068fc757.jpg&quot; title=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4053/4699515883_49068fc757_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4039/4700145482_9e809aa875.jpg&quot; title=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4039/4700145482_9e809aa875_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4067/4699516499_61333b6e25.jpg&quot; title=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4067/4699516499_61333b6e25_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&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://farm5.static.flickr.com/4004/4699516869_9bdda79ac4.jpg&quot; title=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4004/4699516869_9bdda79ac4_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4022/4699517415_46575ba674.jpg&quot; title=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4022/4699517415_46575ba674_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4016/4700153542_a46fca1c58.jpg&quot; title=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4016/4700153542_a46fca1c58_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Speaker&apos;s Dinner at Irish Software Show 2010&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
On Friday, we woke up in the early afternoon and quickly decided the &lt;a href=&quot;http://en.wikipedia.org/wiki/Book_of_Kells&quot;&gt;Book of Kells&lt;/a&gt; was our best chance of getting some site seeing in. After visiting the Book of Kells, my favorite quote of the conference happened in the courtyard. 
&lt;/p&gt;
&lt;p&gt;
Josh looked at Jamie (with his bad hangover) and exclaimed, &quot;My God Man. Your skin is so white it&apos;s hurting my eyes!&quot;. You probably had to be there (or know Josh) to enjoy the humor, but I wanted to capture the memory in this post so I could laugh whenever I read this in the future. After that, Jamie, Josh, Kalin and I enjoyed a Starbuck&apos;s patio talking about living in the South of France for a couple hours. Then we walked 2 blocks to the &lt;a href=&quot;http://www.porterhousebrewco.com/&quot;&gt;Porterhouse Brewing Co.&lt;/a&gt; to watch the World Cup and enjoy more interesting conversations. 
&lt;/p&gt;

&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4049/4699526381_b93c7d22a4.jpg&quot; title=&quot;The Book of Kells&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4049/4699526381_b93c7d22a4_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;The Book of Kells&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4025/4700168324_26c13c6b46.jpg&quot; title=&quot;Jamie with the Wenches&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4025/4700168324_26c13c6b46_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Jamie with the Wenches&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4066/4700168582_88b49c92c2.jpg&quot; title=&quot;Lovely Wenches&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4066/4700168582_88b49c92c2_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Lovely Wenches&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4006/4699540829_ca5481a452.jpg&quot; title=&quot;Jamie and his Lady Drink&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4006/4699540829_ca5481a452_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Jamie and his Lady Drink&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;Jamie left the conference that evening and we joined a whole slew of other speakers for dinner at an excellent Lebanese restaurant near Temple Bar. Good times where had afterwards at a nearby Silent Disco.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4044/4700172766_b7b82c29b5.jpg&quot; title=&quot;Kalin and Craig&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4044/4700172766_b7b82c29b5_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Kalin and Craig&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4071/4699543397_e997b2b8ff.jpg&quot; title=&quot;Post Absinthe&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4071/4699543397_e997b2b8ff_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Post Absinthe&quot; style=&quot;border: 1px solid black&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Saturday, we woke up early to catch a tour bus out to &lt;a href=&quot;http://en.wikipedia.org/wiki/Glendalough&quot;&gt;Glendalough&lt;/a&gt; with Josh and John. The bus ride was not pleasant, but the destination was spectacular. We hung out there for several hours, exploring the buildings, walking to the lake and humoring each other.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://farm5.static.flickr.com/4068/4700176486_aa86563fbf.jpg&quot; title=&quot;Glendalough&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4068/4700176486_aa86563fbf_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Glendalough&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm2.static.flickr.com/1287/4699547639_3904ddaaf1.jpg&quot; title=&quot;Beautiful Views at Glendalough&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm2.static.flickr.com/1287/4699547639_3904ddaaf1_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Beautiful Views at Glendalough&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4031/4700178148_23b6c2852a.jpg&quot; title=&quot;Glendalough&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4031/4700178148_23b6c2852a_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Glendalough&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm5.static.flickr.com/4070/4699549013_40916ab088.jpg&quot; title=&quot;Lower Lake at Glendalough&quot; rel=&quot;lightbox[ireland2010]&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4070/4699549013_40916ab088_t.jpg&quot; width=&quot;100&quot; height=&quot;75&quot; alt=&quot;Lower Lake at Glendalough&quot; style=&quot;border: 1px solid black; margin-left: 10px&quot;/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Our last night in Dublin was an early, relaxing one. As you can tell, I really enjoyed this trip, particularly hanging out with my sister and all the cool people we met. I can easily say that this trip registers as one of my favorite conference experiences to date.
&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 5px; color: #666&quot;&gt;
To see all the pictures I took on this trip, check out my &lt;a href=&quot;http://www.flickr.com/photos/mraible/sets/72157624148828777/&quot; style=&quot;color: #555&quot;&gt;Irish Software Show 2010 set on Flickr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/presentations_from_the_irish_software</id>
        <title type="html">My Presentations from The Irish Software Show 2010</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/presentations_from_the_irish_software"/>
        <published>2010-06-10T07:11:35-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="iss2010" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rubyonrails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/tssjs_2010_presentations_and_summary</id>
        <title type="html">My TSSJS 2010 Presentations and Summary</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/tssjs_2010_presentations_and_summary"/>
        <published>2010-03-19T17:29:08-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="future" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vegas" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tssjs" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">This afternoon, I delivered my last talk at &lt;a href=&quot;http://javasymposium.techtarget.com/&quot;&gt;TSSJS 2010&lt;/a&gt; on &lt;a href=&quot;http://javasymposium.techtarget.com/html/frameworks.html#MRaibleFrameworks&quot;&gt;The Future of Web Frameworks&lt;/a&gt;. It&apos;s true that I made some &lt;a href=&quot;http://twitter.com/xgerman/status/10741037460&quot; title=&quot;JSF and Wicket are dead! Bold statement but GWT is a better alternative to begin with anyway #tssjs&quot;&gt;bold statements&lt;/a&gt;, but please remember that this is my personal opinion, based on my experience. For the most part, I&apos;ve been involved in super high-traffic websites for the last few years and this has influenced my opinion on web frameworks. Just because I don&apos;t recommend your favorite framework doesn&apos;t mean it won&apos;t work for you. In fact, many of the best web applications today were built without an open source (or commercial) web framework. In the end, it&apos;s not as much about the web framework you&apos;re using as it is about hiring smart people. Below is my slide deck from this talk.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;&lt;object 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;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 src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=thefutureofwebframeworks-100225012146-phpapp02&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;Yesterday, I did a &lt;a href=&quot;http://javasymposium.techtarget.com/html/theclientside.html#MRaibleSmack&quot;&gt;GWT vs. Flex Smackdown&lt;/a&gt; with &lt;a href=&quot;http://jamesward.com&quot;&gt;James Ward&lt;/a&gt;. While there wasn&apos;t as much trash talking as I&apos;d hoped, I enjoyed delivering it and disputing the greatness of Flex. Below is the presentation that James and I delivered.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;object 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=flexvsgwtsmackdown-100311234937-phpapp01&amp;stripped_title=flex-vs-gwt-smackdown&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=flexvsgwtsmackdown-100311234937-phpapp01&amp;stripped_title=flex-vs-gwt-smackdown&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;The show itself was great this year. It had more attendees than I&apos;ve seen in a long time. There were a lot of really interesting sessions and and an often humorous &lt;a href=&quot;http://twitter.com/search?q=%23tssjs&quot;&gt;Twitter back-channel&lt;/a&gt;. I attended quite a few talks and jotted down my notes from several of them. Please see the links below if you&apos;re interested in the sessions I attended. You can view all of the presentations from TSSJS 2010 on &lt;a href=&quot;http://slideshare.net/javasymposium&quot;&gt;SlideShare&lt;/a&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/what_s_happening_in_the&quot;&gt;What&apos;s Happening in the Java World?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/software_quality_the_quest_for&quot;&gt;Software Quality: The Quest for the Holy Grail?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/the_cloud_computing_continuum_with&quot;&gt;The Cloud Computing Continuum with Bob McWhirter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/highly_interactive_software_with_java&quot;&gt;Highly Interactive Software with Java and Flex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/c_java_and_net_lessons&quot;&gt;C++, Java and .NET: Lessons Learned from the Internet Age&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/developing_rich_web_service_apis&quot;&gt;Developing Rich Web Service APIs with Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/what_s_new_in_spring&quot;&gt;What&apos;s New in Spring 3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to everyone who came to Vegas and to &lt;a href=&quot;http://theserverside.com&quot;&gt;TheServerSide&lt;/a&gt; for an excellent conference.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/my_future_of_web_frameworks</id>
        <title type="html">My Future of Web Frameworks Presentation</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/my_future_of_web_frameworks"/>
        <published>2010-02-26T08:55:39-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="vegas" scheme="http://roller.apache.org/ns/tags/" />
        <category term="theserverside" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jvm" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tssjs" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="future" scheme="http://roller.apache.org/ns/tags/" />
        <category term="presentation" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Earlier this week, I &lt;a href=&quot;http://twitter.com/mraible/status/9467279089&quot;&gt;tweeted about a history of web frameworks timeline&lt;/a&gt; I created for my upcoming &lt;a href=&quot;http://javasymposium.techtarget.com/html/frameworks.html#MRaibleFrameworks&quot;&gt;Future of Web Frameworks talk&lt;/a&gt; at &lt;a href=&quot;http://javasymposium.techtarget.com/&quot;&gt;TSSJS Vegas 2010&lt;/a&gt;. I immediately received a lot of feedback and requests for adding new frameworks and releases. The image below is the result of that Twitter conversation. Thanks to everyone who contributed.
&lt;/p&gt;
&lt;p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/4378559350/&quot; title=&quot;History of Web Frameworks&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4067/4378559350_13f0755403.jpg&quot; width=&quot;500&quot; height=&quot;239&quot; alt=&quot;History of Web Frameworks&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Back in &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_future_of_web_frameworks&quot;&gt;November&lt;/a&gt;, I wrote about my proposals for TSSJS. I&apos;ve been thinking a lot about web frameworks lately and I can&apos;t help but think we live in a very exciting time. As a Java developer, I&apos;ve been exposed to one of the most vibrant language ecosystems on the planet. As &lt;a href=&quot;http://www.javaworld.com/podcasts/jtech/2009/020909jtech-bray.html&quot;&gt;Tim Bray talks about&lt;/a&gt;, the Java Platform has 3 legs: the language, the virtual machine and a huge, immense library of APIs (both in the JDK and in open source libraries). The diagram below is something I created based on Tim&apos;s podcast.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/4388528613/&quot; title=&quot;Java has 3 Legs&quot;&gt;&lt;img src=&quot;//farm5.static.flickr.com/4003/4388528613_18df5e164f_o.png&quot; width=&quot;418&quot; height=&quot;290&quot; alt=&quot;Java has 3 Legs&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Tim says, &quot;One of those legs is replaceable and that&apos;s the language.&quot; And he&apos;s right, there&apos;s many &lt;a href=&quot;http://blog.thinkrelevance.com/2008/9/24/java-next-overview&quot;&gt;Java.next&lt;/a&gt; languages that run efficiently on the JVM. This is one of the most exciting parts of being a Java web developer today. There&apos;s many proven web frameworks and languages that you can pick to build your next web application. 
&lt;/p&gt;
&lt;p&gt;
The best part is many of the best web frameworks run on the JVM. Not only that, but the best code editors are the IDEs that you&apos;re familiar with and have grown to love. Furthermore, much of the literature for Java.next languages is written &lt;em&gt;for&lt;/em&gt; Java developers. As someone who knows Java, you have wealth of web frameworks and languages just waiting for you to learn them. &lt;!--I think the biggest mistake you can make as developer is to stop learning. Just because you know one language/framework well doesn&apos;t mean you shouldn&apos;t learn about it&apos;s competition. Java vs. Scala, Maven vs. Ant, Rails vs. Grails, GWT vs. Flex, Tomcat vs. Jetty, Spring vs. Guice, Hibernate vs. iBATIS - your knowledge about more than one language/framework can be very rewarding.--&gt;
&lt;/p&gt;
&lt;p&gt;
To create my presentation on the future of web frameworks, I followed the outline I &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_future_of_web_frameworks&quot;&gt;posted previously&lt;/a&gt;. I plan on explaining the evolution and history of web frameworks and how we got to where we are today. From there, I&apos;ll be speculating on what web applications we&apos;ll be developing in the future. Finally, I&apos;ll touch on the necessary features of web frameworks that will allow us to develop these applications. 
&lt;/p&gt;
&lt;p&gt;
Of course, I haven&apos;t actually presented this talk yet, so it&apos;s likely to change in the coming weeks before the conference. The good news is this gives you the opportunity to provide constructive criticism on this presentation and help make it better. I realize that a presentation rarely represents the conversation that takes place during a conference. However, I believe it can portray the jist of my thinking and lead to a meaningful conversation in the comments of this post.
Below is the presentation I created - thanks in advance for any feedback. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;&lt;object 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;rel=0&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 src=&quot;//static.slidesharecdn.com/swf/ssplayer2.swf?doc=thefutureofwebframeworks-100225012146-phpapp02&amp;rel=0&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;
For those who will be joining me at TSSJS ... it&apos;s gonna be a great show. St. Patrick&apos;s Day in Vegas, what more could you ask for? &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;&lt;strong&gt;Update:&lt;/strong&gt; This article has been &lt;a href=&quot;http://java.dzone.com/articles/my-future-web-frameworks&quot;&gt;re-posted on Javalobby&lt;/a&gt; and contains additional community feedback in the comments.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/appfuse_2_1_milestone_1</id>
        <title type="html">AppFuse 2.1 Milestone 1 Released</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/appfuse_2_1_milestone_1"/>
        <published>2009-11-19T07:16:36-07:00</published>
        <updated>2014-05-08T19:47:26-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tapestry" scheme="http://roller.apache.org/ns/tags/" />
        <category term="archetypes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appfuse-light" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appfuse" scheme="http://roller.apache.org/ns/tags/" />
        <category term="freemarker" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wicket" scheme="http://roller.apache.org/ns/tags/" />
        <category term="maven2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="stripes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="maven" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="hibernate" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java5" scheme="http://roller.apache.org/ns/tags/" />
        <category term="myfaces" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ibatis" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jpa" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://appfuse.org&quot;&gt;&lt;img src=&quot;//appfuse.dev.java.net/images/icon.gif&quot; class=&quot;picture&quot; style=&quot;border: 0&quot;&gt;&lt;/a&gt;
The AppFuse Team is pleased to announce the first milestone release of AppFuse 2.1. This release includes upgrades to all dependencies to bring them up-to-date with their latest releases. Most notable are &lt;a href=&quot;http://raibledesigns.com/rd/entry/upgrading_hibernate_to_3_4&quot;&gt;Hibernate&lt;/a&gt;, &lt;a href=&quot;http://raibledesigns.com/rd/entry/moving_from_spring_s_xml&quot;&gt;Spring&lt;/a&gt; and Tapestry 5. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is AppFuse?&lt;/strong&gt;&lt;br/&gt;
AppFuse is an open source project and application that uses open source tools built on the Java platform to help you develop Web applications quickly and efficiently. It was originally developed to eliminate the ramp-up time found when building new web applications for customers. At its core, AppFuse is a project skeleton, similar to the one that&apos;s created by your IDE when you click through a wizard to create a new web project.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release Details&lt;/strong&gt;&lt;br/&gt;
&lt;a href=&quot;http://static.appfuse.org/archetypes.html&quot;&gt;Archetypes&lt;/a&gt; now include all the source for the web modules so using &lt;em&gt;jetty:run&lt;/em&gt; and your IDE will work much smoother now. The backend is still embedded in JARs, enabling you to choose which persistence framework (Hibernate, iBATIS or JPA) you&apos;d like to use. If you want to modify the source for that, &lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+Core+Classes&quot;&gt;add the core classes to your project&lt;/a&gt; or run &lt;em&gt;appfuse:full-source&lt;/em&gt;. 
&lt;/p&gt;
&lt;p&gt;
In addition, AppFuse Light has been &lt;a href=&quot;http://raibledesigns.com/rd/entry/appfuse_light_converted_to_maven&quot;&gt;converted to Maven&lt;/a&gt; and has archetypes available. AppFuse provides archetypes for JSF, Spring MVC, Struts 2 and Tapestry 5. The &lt;em&gt;light&lt;/em&gt; archetypes are available for these frameworks, as well as for Spring MVC + FreeMarker, Stripes and Wicket.
&lt;/p&gt;
&lt;p&gt;Other notable improvements:&lt;/p&gt;
&lt;ul&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. Thanks to &lt;a href=&quot;http://sonatype.com&quot;&gt;Sonatype&lt;/a&gt; for this great service and its &lt;a href=&quot;http://raibledesigns.com/rd/entry/nexus_is_a_kick_ass&quot;&gt;excellent repository manager&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Upgraded to Canoo WebTest 3.0. &lt;em&gt;Now if we could just get its &lt;a href=&quot;http://people.apache.org/~sgoeschl/download/maven-plugins/webtest-maven-plugin/site/index.html&quot;&gt;Maven Plugin&lt;/a&gt; moved to Codehaus.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&quot;http://raibledesigns.com/rd/entry/ajaxified_body&quot;&gt;Ajaxified Body&lt;/a&gt; to AppFuse Light archetypes.&lt;/li&gt;
&lt;li&gt;Infrastructure upgrades, including &lt;a href=&quot;http://issues.appfuse.org/&quot;&gt;JIRA 4&lt;/a&gt;, &lt;a href=&quot;http://appfuse.org/&quot;&gt;Confluence 3&lt;/a&gt;, &lt;a href=&quot;http://source.appfuse.org&quot;&gt;FishEye 2&lt;/a&gt;, &lt;a href=&quot;http://builds.appfuse.org&quot;&gt;Bamboo 2&lt;/a&gt; and &lt;a href=&quot;http://login.appfuse.org&quot;&gt;Crowd 1.6&lt;/a&gt;. Many thanks to &lt;a href=&quot;http://www.atlassian.com/c/NPOS/10160&quot;&gt;Atlassian&lt;/a&gt; and &lt;a href=&quot;http://contegix.com&quot;&gt;Contegix&lt;/a&gt; for their excellent products and services.&lt;/li&gt;
&lt;li&gt;For more details on specific changes see the &lt;a href=&quot;http://appfuse.org/display/APF/Release+Notes+2.1.0+M1&quot; title=&quot;Release Notes 2.1.0 M1&quot;&gt;release notes&lt;/a&gt;.
&lt;/ul&gt;
&lt;p&gt;Please note that this release does not contain updates to the documentation. Code generation will work, but it&apos;s likely that some content in the &lt;a href=&quot;http://appfuse.org/display/APF/Tutorials&quot;&gt;tutorials&lt;/a&gt; won&apos;t match. For example, you can use annotations (vs. XML) for dependency injection and Tapestry is a whole new framework. I&apos;ll be working on documentation over the next several weeks in preparation for Milestone 2.
&lt;/p&gt;
&lt;p&gt;AppFuse is available as several Maven archetypes. For information on creating a new project, please see the &lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+QuickStart&quot; title=&quot;AppFuse QuickStart&quot;&gt;QuickStart Guide&lt;/a&gt;.
&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;
To learn more about AppFuse, please read Ryan Withers&apos; &lt;a href=&quot;http://www.ociweb.com/jnb/jnbMay2008.html&quot;&gt;Igniting your applications with AppFuse&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;The 2.x series of AppFuse has a minimum requirement of the following specification versions:&lt;/p&gt;

&lt;ul class=&quot;glassList&quot;&gt;
	&lt;li&gt;Java Servlet 2.4 and JSP 2.0 (2.1 for JSF)&lt;/li&gt;
	&lt;li&gt;Java 5+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have questions about AppFuse, please read the &lt;a href=&quot;http://appfuse.org/display/APF/FAQ&quot; title=&quot;FAQ&quot;&gt;FAQ&lt;/a&gt; or join the &lt;a href=&quot;http://appfuse.org/display/APF/Mailing+Lists&quot; title=&quot;Mailing Lists&quot;&gt;user mailing list&lt;/a&gt;. If you find bugs, please &lt;a href=&quot;http://issues.appfuse.org/secure/CreateIssue!default.jspa&quot;&gt;create an issue in JIRA&lt;/a&gt;.&lt;/p&gt; 

&lt;p&gt;Thanks to everyone for their help contributing code, writing documentation, posting to the mailing lists, and logging issues. </content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/the_future_of_web_frameworks</id>
        <title type="html">The Future of Web Frameworks at TSSJS</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/the_future_of_web_frameworks"/>
        <published>2009-11-10T13:24:39-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="vegas" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tssjs" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gears" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="html5" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://www.wayfaring.info/2009/08/09/caesars-palace-las-vegas/&quot; title=&quot;Caesars Palace, Las Vegas&quot;&gt;&lt;img src=&quot;//farm3.static.flickr.com/2757/4092935229_4324eb8af9_t.jpg&quot; width=&quot;100&quot; height=&quot;83&quot; alt=&quot;Caesars Palace&quot; style=&quot;border: 1px solid black&quot; class=&quot;picture&quot; /&gt;&lt;/a&gt;

For &lt;a href=&quot;http://javasymposium.techtarget.com/&quot;&gt;TSSJS Vegas 2010&lt;/a&gt;, I submitted two proposals for talks: &lt;em&gt;GWT vs. Flex Smackdown&lt;/em&gt; and &lt;em&gt;The Future of Web Frameworks&lt;/em&gt;. As of today, the 2nd is the only one that &lt;a href=&quot;http://javasymposium.techtarget.com/html/frameworks.html#MRaibleFrameworks&quot;&gt;shows up on the conference agenda&lt;/a&gt;, but hopefully the former will get accepted too. Here&apos;s a description of this talk:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
With rich Ajax applications and HTML5 on the horizon, are web frameworks still relevant? Java web frameworks like Struts and Spring MVC were all the rage 5 years ago. Component-based frameworks like Tapestry, JSF and Wicket made it easier to create re-usable applications. But what about the Mobile Web and offline applications?
&lt;br/&gt;&lt;br/&gt;
Are Titanium, Adobe Air and Gears the future? If you&apos;re embracing the RESTfulness of the web, do you even need a web framework, or can you use use JAX-RS with an Ajax toolkit?
&lt;br/&gt;&lt;br/&gt;
These questions and many more are examined, answered and debated in this lively session. Bring your opinions and experiences to this session to learn about what&apos;s dead, what&apos;s rising and what&apos;s here to stay. If you&apos;re a web framework fan, this session is sure to please.
&lt;/p&gt;
&lt;p&gt;I believe this talk will be a lot of fun to create and deliver. To create it, I&apos;d like to make it a collaborative effort with the web framework community (users and developers). To kick things off, below is an initial rough outline/agenda: &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Title&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Introduction&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Problem/Purpose&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Agenda&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;How did we get here?&lt;/li&gt;&lt;li&gt;Where are we going?&lt;/li&gt;&lt;li&gt;How do we get there?&lt;/li&gt;&lt;li&gt;Q and A&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;History of Web Frameworks&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Deep History (CGI, etc.)&lt;/li&gt;&lt;li&gt;Java&apos;s Rise&lt;/li&gt;&lt;li&gt;PHP&lt;/li&gt;&lt;li&gt;Rails -&amp;gt; Grails&lt;/li&gt;&lt;li&gt;Ajax Frameworks&lt;/li&gt;&lt;li&gt;RESTify!&lt;/li&gt;&lt;li&gt;SOFEA, APIs, etc.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;The Future&lt;/li&gt;&lt;ul&gt;&lt;li&gt;HTML5&lt;/li&gt;&lt;li&gt;GWT, Cappucino and Spoutcore (compare to Java and compilers)&lt;/li&gt;&lt;li&gt;The Binary Players (Flex, JavaFX and Silverlight)&lt;/li&gt;&lt;li&gt;Getting Rich&lt;/li&gt;&lt;li&gt;Speed (is it a problem? YES!)&lt;/li&gt;&lt;li&gt;IE 6 will die.&lt;/li&gt;&lt;li&gt;Chrome OS&lt;/li&gt;&lt;li&gt;The Mobile Web&lt;/li&gt;&lt;li&gt;Desktop Webapps (Titanium, AIR, etc.)&lt;/li&gt;&lt;li&gt;Or is this the present? Future is bleeding edge.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Getting There: It&apos;s all about the APIs&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Allows for any client&lt;/li&gt;&lt;li&gt;Web Framework skills transfer to desktop - and phone!&lt;/li&gt;&lt;li&gt;Speed will continue to be *very* important&lt;/li&gt;&lt;li&gt;Innovation, something we haven&apos;t thought of&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Fallout&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Interest in server-side frameworks will continue, but frameworks will become unmaintained&lt;/li&gt;&lt;li&gt;Ajax Frameworks will continue to innovate&lt;/li&gt;&lt;li&gt;HTML5 Frameworks?&lt;/li&gt;&lt;li&gt;IE 6 (hopefully!)&lt;/li&gt;&lt;li&gt;Desktop and Mobile with Web Technologies&lt;/li&gt;&lt;li&gt;Watch out for the next big thing! (or What do you think is the next big thing?)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Conclusion&lt;/li&gt;&lt;li&gt;Q and A&lt;/li&gt;&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;Is there anything I&apos;m missing that&apos;s important for the future of web frameworks? Are there items that should be removed? Any advice is most welcome.
&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; color: #666; font-style: italic; padding-top: 5px&quot;&gt;
Reminder: I&apos;ll be &lt;a href=&quot;http://raibledesigns.com/rd/entry/consulting_sofea_grails_and_gwt&quot;&gt;speaking at tomorrow&apos;s DJUG&lt;/a&gt; if you&apos;d like to discuss your thoughts in person.&lt;/p&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/optimizing_a_gwt_application_with</id>
        <title type="html">Optimizing a GWT Application with Multiple EntryPoints</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/optimizing_a_gwt_application_with"/>
        <published>2009-03-25T16:00:37-06:00</published>
        <updated>2009-03-25T22:00:52-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="gzip" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt-maven" scheme="http://roller.apache.org/ns/tags/" />
        <category term="optimization" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="entrypoint" scheme="http://roller.apache.org/ns/tags/" />
        <category term="maven" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Building a GWT application is an easy way for Java Developers to write Ajax applications. However, it can be difficult to release a GWT application to production before it&apos;s finished. One of the most important things I&apos;ve learned in Software Development is to get a new application into production as soon as possible. Not only does getting it from dev &amp;rarr; qa &amp;rarr; prod verify your process works, it also can do a lot to test the viability of the new application.
&lt;/p&gt;
&lt;p&gt;One of the biggest issues with GWT applications is size. The project I&apos;m working on compiles Java to JavaScript and creates ~570K *.cache.html files (one for each modern browser). These files end up being around 180K gzipped. I believe this is an OK size for an entire application. However, if you&apos;re going to &lt;em&gt;release early, release often&lt;/em&gt; with GWT, chances are you&apos;ll just want to release one feature at a time. &lt;/p&gt;
&lt;p&gt;When the first feature was completed on my project, the *.cache.html files were around 300K. Rather than using branches to release to QA and UAT, bug fixes and new features were developed on trunk. Unfortunately, the QA and UAT process took several weeks longer than expected so by the time the feature was ready to release, the *.cache.html files had grown to around ~570K. The reason the file had grown so much was because it included all of the other features.&lt;/p&gt;
&lt;p&gt;Earlier this week, while running to a dentist appointment, I thought of a solution to this problem. The basic idea was to optimize the compilation process so only the to-be-released feature was included. Even better, the solution didn&apos;t require &lt;a href=&quot;http://raibledesigns.com/rd/entry/modularizing_gwt_applications_with_gwt&quot;&gt;more modularization&lt;/a&gt;. The results:&lt;/p&gt;
&lt;pre&gt;
Before: *.cache.html -&gt; 569K, gzipped 175K
After: *.cache.html -&gt; 314K, gzipped 100K
&lt;/pre&gt;
&lt;p&gt;According to my calculations, that&apos;s a 56% reduction in size. How did I do it?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Created a new &lt;code&gt;FeatureName.java&lt;/code&gt; EntryPoint with only the to-be-released features imported. &lt;/li&gt;
&lt;li&gt;Created a new &lt;code&gt;FeatureName.gwt.xml&lt;/code&gt; that references the new EntryPoint.&lt;/li&gt;
&lt;li&gt;Copied old (kitchen-sink) EntryPoint.html to &lt;code&gt;FeatureName.html&lt;/code&gt; and changed the reference to the nocache.js file.&lt;/li&gt;
&lt;li&gt;Created a Maven profile that allows using -PFeatureName to build a FeatureName-only module.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One downside to doing things this way is it&apos;s possible to create a WAR that has the same name and different features. Surely the Maven Overlords would frown upon this. Since this is just a temporary solution to release features incrementally, I&apos;m not too worried about it. A possible workaround is to create different WAR names when a feature&apos;s profile is activated. I believe the true &quot;Maven way&quot; would be to make the &quot;kitchen sink&quot; application into a JAR and have several WAR modules with the different EntryPoints. Seems a bit complicated to me.
&lt;/p&gt;
&lt;p&gt;Other than this Maven publishing issue, the only other issue I can foresee is keeping the two EntryPoints and HTML files in synch. Then again, the separate files allow a feature to be customized for the release and can be deleted when its no longer needed.
&lt;/p&gt;
&lt;p&gt;What do you think? Do you know of a better way to compile a GWT application so it only contains certain features?</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/comparing_web_frameworks_book</id>
        <title type="html">Comparing Web Frameworks Book</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/comparing_web_frameworks_book"/>
        <published>2009-02-23T09:49:15-07:00</published>
        <updated>2012-11-08T14:33:13-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="zend" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rubyonrails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="django" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts" scheme="http://roller.apache.org/ns/tags/" />
        <category term="book" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">A publisher recently sent me an e-mail asking some advice. They received a proposal for a book that compares CakePHP, Symfony, Zend, TurboGears, Django, Struts, RoR. Here&apos;s a quote from the proposal:
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
We would like to compare a couple of frameworks and present their advantages and disadvantages in various applications.
&lt;br/&gt;&lt;br/&gt;
Obviously, that kind of manual would be very useful for readers who are starting their &apos;adventures&apos; with web applications, as it would facilitate their choosing the best framework for their particular application. The manuscript would offer a comparison of the most popular solutions (CakePHP, Symfony, Zend Framework, TurboGears, Django, Struts, Ruby on Rails) and demonstrate the main differences between each.
&lt;br/&gt;&lt;br/&gt;
Therefore, the target audience would mainly be project managers, responsible for deciding on the technologies to be used for in-house projects, as well as less experienced, web application beginners.
&lt;br/&gt;&lt;br/&gt;
Another purpose of the book would be to present &apos;good practices&apos; in various frameworks, such as code re-factoring, design patterns and application security. From this point of view, it could become a valuable asset for experienced and learner programmers alike.
&lt;/p&gt;
&lt;p&gt;Since I got a lot of feedback from my &lt;a href=&quot;http://twitter.com/mraible/status/1240791644&quot;&gt;tweet on this subject&lt;/a&gt;, I figured I&apos;d ask it here. 
&lt;/p&gt;
&lt;p&gt;
What do you think of such a book?&lt;/p&gt;
&lt;p&gt;
Here&apos;s my response:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
How do PHP books do these days? Of the list of frameworks (CakePHP,
Symfony, Zend Framework, TurboGears, Django, Struts, Ruby on Rails), I
think there&apos;s interest in Django and Rails, but not so much the
others. And Struts sucks, so having that as a comparison is obviously
going to make it look bad. I wouldn&apos;t buy it, but I&apos;m a Java guy
that&apos;s mostly interested in web frameworks that make developing
SOFEA-based applications easier. In my mind, these are Flex and GWT.
&lt;br/&gt;&lt;br/&gt;
The book I&apos;d like to see would cover developing RESTful backends and
SOFEA front-ends. RoR, Grails or Django could be used to develop the
backend and Flex, GWT and X could be for the front-end. In reality,
this is probably a tough book to write b/c things move so fast. If you
decide to do it, I&apos;d keep it short and sweet so you can get it to
market and update it quickly.
&lt;/p&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/choosing_an_ajax_framework</id>
        <title type="html">Choosing an Ajax Framework</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/choosing_an_ajax_framework"/>
        <published>2009-01-08T21:36:22-07:00</published>
        <updated>2009-01-09T04:42:59-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <category term="extjs" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="dojo" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ajax" scheme="http://roller.apache.org/ns/tags/" />
        <category term="yui" scheme="http://roller.apache.org/ns/tags/" />
        <category term="frameworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">This past week, my colleagues and I have been researching Ajax Frameworks. We&apos;re working on a project that&apos;s following SOFEA-style architecture principles and we want the best framework for our needs. I&apos;m writing this post to see 1) if you, the community, agree with our selection process and 2) to learn about your experiences with the frameworks we&apos;re evaluating. Below is the process we&apos;re following to make our choice.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Choose a short list of frameworks to prototype with.&lt;/li&gt;
&lt;li&gt;Create an application prototype with each framework.&lt;/li&gt;
&lt;li&gt;Document findings and create a matrix with important criteria.&lt;/li&gt;
&lt;li&gt;Create presentation to summarize document.&lt;/li&gt;
&lt;li&gt;Deliver document, presentation (with demos) and recommendation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For #1, we chose  &lt;a href=&quot;http://extjs.com/products/extjs/&quot;&gt;Ext JS&lt;/a&gt;, &lt;a href=&quot;http://dojotoolkit.org/&quot;&gt;Dojo&lt;/a&gt;, &lt;a href=&quot;http://developer.yahoo.com/yui/&quot;&gt;YUI&lt;/a&gt; and &lt;a href=&quot;http://code.google.com/intl/nl/webtoolkit/&quot;&gt;GWT&lt;/a&gt; because we feel these Ajax libraries offer the most UI widgets. We also considered Prototype/Scriptaculous, jQuery and MooTools, but decided against them because of their lack of UI widgets.&lt;/p&gt;
&lt;p&gt;For #2, we time-boxed ourselves to 3 days of development. In addition to basic functionality, we added several features (i.e. edit in place, drag and drop, calendar widgets, transitions, charts, grid) that might be used in the production application. We all were able to complete most of the functionality of the application. Of course, there&apos;s still some code cleanup as well as styling to make each app look good for the demo. The nice thing about doing this is we&apos;re able to look at each others code and see how the same thing is done in each framework. None of us are experts in any of the frameworks, so it&apos;s possible we could do things better. However, I think it&apos;s good we all started somewhat green because it shows what&apos;s possible for someone relatively new to the frameworks.&lt;/p&gt;
&lt;p&gt;For #3, we&apos;re creating a document with the following outline:&lt;/p&gt;
&lt;pre style=&quot;font-family: inherit; background: #CDFFCC; border: 1px solid #54FF52; width: 250px; padding-left: 20px&quot;&gt;
Introduction

Ajax Framework Candidates
(intro and explanation)

  Project Information
  (history)
  (license / cost)
  (number of committers)
  (support options)
  (mailing list traffic (nov/dec 2008))

Matrix and Notes

Conclusion
&lt;/pre&gt;
&lt;p&gt;For the Matrix referenced in the outline above, we&apos;re using a table with weights and ranks:&lt;/p&gt;

&lt;table class=&quot;comparison&quot; style=&quot;width: 500px&quot;&gt;
    &lt;thead&gt;
    &lt;tr&gt;
        &lt;th&gt;Weight&lt;/th&gt;
        &lt;th&gt;Criteria&lt;/th&gt;
        &lt;th&gt;Dojo&lt;/th&gt;
        &lt;th&gt;YUI&lt;/th&gt;
        &lt;th&gt;GWT&lt;/th&gt;
        &lt;th style=&quot;white-space: nowrap&quot;&gt;Ext JS&lt;/th&gt;
        &lt;th&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
    &lt;tr&gt;
        &lt;td&gt;#&lt;/td&gt;
        &lt;td&gt;Important Criteria for Customer&lt;/td&gt;
        &lt;td&gt;0..1&lt;/td&gt;
        &lt;td&gt;0..1&lt;/td&gt;
        &lt;td&gt;0..1&lt;/td&gt;
        &lt;td&gt;0..1&lt;/td&gt;
        &lt;td&gt;Notes about rankings&lt;/td&gt;
    &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Our strategy for filling in this matrix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Customer adjusts the weight for each criteria (removing/adding as needed) so all weights add up to 1.&lt;/li&gt;
&lt;li&gt;We rank each framework with 0, .5 or 1 where 0 = doesn&apos;t satisfy criteria, .5 = partially satisfies, 1 = satisfies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The list of criteria provided to us by our client is as follows (in no particular order).&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Quality of Documentation/Tutorials/Self Help&lt;/li&gt;
&lt;li&gt;Browser support (most important browsers/versions based on web stats)&lt;/li&gt;
&lt;li&gt;Testability (esp. Selenium compatibility)&lt;/li&gt;
&lt;li&gt;Licensing&lt;/li&gt;
&lt;li&gt;Project health/adoption&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Flexibility/extensibility&lt;/li&gt;
&lt;li&gt;Productivity (app dev, web dev)&lt;/li&gt;
&lt;li&gt;Richness of widget/component library&lt;/li&gt;
&lt;li&gt;Charting capability&lt;/li&gt;
&lt;li&gt;Ability to create new widgets&lt;/li&gt;
&lt;li&gt;Match to existing Java team skill-set&lt;/li&gt;
&lt;li&gt;Ease of deployment (on Ops, QA, Users)&lt;/li&gt;
&lt;li&gt;Degree of risk generally&lt;/li&gt;
&lt;li&gt;Ability to integrate with existing site (which includes Prototype)&lt;/li&gt;
&lt;li&gt;Easy to style with CSS&lt;/li&gt;
&lt;li&gt;Validation (esp. marking form elements invalid)&lt;/li&gt;
&lt;li&gt;Component Theme-ing/Decoration&lt;/li&gt;
&lt;li&gt;CDN Availability (i.e. Google&apos;s Ajax Libraries API or Ext CDN)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What do you think? How could this process be improved? Of course, if you have framework answers (0, .5 or 1) for our matrix, we&apos;d love to hear your opinions.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/dojo_comet_support_in_java</id>
        <title type="html">Dojo/Comet support in Java Web Frameworks</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/dojo_comet_support_in_java"/>
        <published>2008-12-18T15:58:37-07:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="dojo" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wicket" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tapestry5" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tapestry" scheme="http://roller.apache.org/ns/tags/" />
        <category term="comet" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://dojotoolkit.org/&quot; title=&quot;Dojo Toolkit&quot;&gt;&lt;img src=&quot;//farm4.static.flickr.com/3283/3118492275_8d4cb574d5_t.jpg&quot; width=&quot;100&quot; height=&quot;66&quot; alt=&quot;Dojo Logo&quot; class=&quot;picture&quot; style=&quot;border: 0; margin-top: -10px&quot; /&gt;&lt;/a&gt;
This week I&apos;m doing a research project for a client. The main purpose of the project is to find out which Java-based web framework works best with Dojo and Comet. Here&apos;s the key requirement from the client:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
It&apos;s all about Comet, we want Comet everywhere we can put it, but we want to isolate the icky bits of fiddling with pages with JavaScript. We&apos;re kind of wed to the Dojo implementation of the client-side bit, so we may as well use more of the Dojo widgets for a richer UI. For us, &quot;works best with&quot; needs to pay a certain amount of consideration to &quot;fits naturally with&quot;, if you understand what I mean. I know that any framework that lets you spit out raw HTML will let you hand code in your Dojo / Comet, but that&apos;s certain to become very tiresome very quickly.&lt;/p&gt;
&lt;p&gt;The candidate frameworks they asked me to look at are &lt;a href=&quot;http://wicket.apache.org&quot;&gt;Wicket&lt;/a&gt; and &lt;a href=&quot;http://tapestry.apache.org&quot;&gt;Tapestry 5&lt;/a&gt;. They&apos;re willing to upgrade to Struts 2 since they&apos;re already using Struts 1. However, they don&apos;t feel that action-based frameworks naturally lead to rich UIs, so they&apos;d prefer a component-based framework. They&apos;re currently using &lt;a href=&quot;http://seamframework.org&quot;&gt;Seam&lt;/a&gt; for an administration-type application and feel it&apos;s too heavy for their customer-facing application.&lt;/p&gt;
&lt;p&gt;Here&apos;s what I&apos;ve found so far in my research. Please let me know if anything is incorrect.
&lt;ul&gt;
&lt;li&gt;Tapestry 5 doesn&apos;t have Dojo or Comet support (Prototype and Scriptaculous are the &lt;a href=&quot;http://tapestry.apache.org/tapestry5/tapestry-core/guide/ajax.html&quot;&gt;baked-in Ajax frameworks&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Struts 2 has old (version 0.4.3) and somewhat deprecated &lt;a href=&quot;http://struts.apache.org/2.0.11/docs/ajax-tags.html&quot;&gt;Dojo support&lt;/a&gt;. The developers seem to be in favor of removing it and promoting people hand-code Dojo instead. Struts 2 doesn&apos;t have support for Comet.&lt;/li&gt;
&lt;li&gt;Wicket has &lt;a href=&quot;http://wicketstuff.org/confluence/display/STUFFWIKI/wicketstuff-dojo-1.1&quot;&gt;support for Dojo 1.1 that includes Comet support&lt;/a&gt;. This was written by Stefan Fu&#223;enegger and &lt;a href=&quot;http://www.nabble.com/Dojo-1.1-integration-available-from-wicketstuff-td20625220.html#a20625220&quot;&gt;posted to the mailing list last month&lt;/a&gt;. I e-mailed Stefan and asked him about documentation. His response: &quot;I lost my ambition to document it properly since I didn&apos;t receive any feedback on the mailing list. :)&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At this point, it seems that if the client &lt;em&gt;really&lt;/em&gt; wants to use Dojo, they should use Wicket, and possibly pay Stefan to document it properly. However, they&apos;re willing to consider other options, as long as they have Comet support.
&lt;/p&gt;
&lt;p&gt;
One option I thought of is to use DWR and its &lt;a href=&quot;http://directwebremoting.org/dwr/reverse-ajax&quot;&gt;Reverse Ajax/Comet support&lt;/a&gt;. Another option would be to add better Dojo support to Tapestry 5. However, I don&apos;t think this is possible since the Prototype/Scriptaculous code is generated by the framework and would likely require a changes to switch it to Dojo. 
&lt;/p&gt;
&lt;p&gt;Are there any other Java-based web frameworks that support easily creating Dojo widgets and working with Comet? &lt;a href=&quot;http://www.springsource.com/people/kdonald&quot;&gt;Keith Donald&lt;/a&gt; tweeted that &lt;a href=&quot;http://twitter.com/kdonald/status/1064067717&quot;&gt;Spring MVC has Dojo support&lt;/a&gt;. However, I believe it&apos;s only for widgets and it still requires you to write JavaScript. If your framework doesn&apos;t have Dojo/Comet support, how hard would it be to add it?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I also posted this question on LinkedIn. Make sure and check &lt;a href=&quot;http://www.linkedin.com/answers/technology/web-development/TCH_WDD/385881-5747&quot;&gt;my question&lt;/a&gt; for additional thoughts from folks.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/restful_web_applications_with_subbu</id>
        <title type="html">RESTful Web Applications with Subbu Allamaraju</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/restful_web_applications_with_subbu"/>
        <published>2008-10-24T09:52:02-06:00</published>
        <updated>2009-06-04T20:04:17-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="sofea" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appcelerator" scheme="http://roller.apache.org/ns/tags/" />
        <category term="softwaresummit" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rest" scheme="http://roller.apache.org/ns/tags/" />
        <category term="servlets" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Subbu works at Yahoo! developing standards, patterns and practices for HTTP web languages. In the past, he was a web service and Java developer. He was also a standards contributor at BEA and an author of books on Java EE. His current passion is HTTP and REST. Subbu confesses that he&apos;s not a web developer, has no interest in the internals of programming models used for web frameworks and he&apos;s only interested in the visible aspects of the architecture.
&lt;/p&gt;
&lt;p&gt;&quot;The Web is Mostly Restful&quot;&lt;/p&gt;
&lt;p&gt;Being RESTful in an abstract sense means:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resources are named by URIs&lt;/li&gt;
&lt;li&gt;Resources have representations (Atom, HTML, JSON, XML)&lt;/li&gt;
&lt;li&gt;Resources contain contextual links to allow navigation of state&lt;/li&gt;
&lt;li&gt;There&apos;s a Uniform Interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In the web today, some resources and URIs are personalized, but most are not. Some depend on sessions, but most do not. The consequence of a personalized UI with a non-unique URI is you cannot rely on browser caching. &lt;/p&gt;
&lt;p&gt;The web is full of different representations (HTML, XML, JS, PDF, CSS, Flash). The problem with HTML is you can&apos;t tell links that you want a particular representation based of a link. The links are hard-coded to be a particular content-type. However, some media types on responses are ignored. This is often a problem with browsers and whether the user has plugins installed.&lt;/p&gt;
&lt;p&gt;The Uniform Interface for the web is HTML and primarily links and forms (GET and POST). There&apos;s still some misconceptions (e.g. POST is secure). However, it&apos;s not about security, it&apos;s about idempotency and safety. You need to make sure you only use POST when you&apos;re changing data. POSTs are not repeatable. GET URIs are not always refreshable, which is quite unfortunate. Users shouldn&apos;t have to fight the back button.&lt;/p&gt;
&lt;p&gt;Caching is a fundamental aspect of the web. Even in a personalized site, most of the content can be cached. The web is read-only for the most part. However, many enterprise web applications don&apos;t take advantage of caching. This is fine when there&apos;s not that many users, but it&apos;s bad when you want to scale to thousands of users. There&apos;s several frameworks that use cache-busting and prefer backend caching over HTTP caching. These frameworks are not using the web like they should.&lt;/p&gt;
&lt;p&gt;Backend caching (e.g. Memcached) uses a non-uniform interface and you need to explicitly program to it. Frontend/HTTP caching has a uniform interface that&apos;s pluggable. Backend caching is generally more expensive to develop and deploy. There are cases where data should be cached on the backend, but you shouldn&apos;t focus all on backend caching w/o doing some frontend caching.
&lt;/p&gt;
&lt;p&gt;With Ajax, you get more opportunities to be RESTful. XMLHttpRequest is another HTTP client that can be programmed to. It has full support for the uniform interface, which allows content negotiation, optimistic concurrency and caching. Cross-domain hacks can be done with &amp;lt;script&gt; and &amp;lt;iframe&gt; to tunnel requests over GET. The W3C has been working for the last two years on how to do cross-domain Ajax w/o using hacks. The problem with current cross-domain implementations is they often use GET for everything, which isn&apos;t very RESTful. Subbu recommends using a proxy on the same domain if you do need to talk to other domains. This will allow your Ajax code to remain RESTful.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Frameworks&lt;/strong&gt;&lt;br/&gt;
Web development is hard because of all the moving pieces that exist. Because of this, many web frameworks have been created to solve the various problems. In 1997, there were servlets. They provided basic plumbing and closely reflected HTTP/1.1. Servlets provided a poor programming model, but it allowed a lot of frameworks to be built on top of it. We don&apos;t use servlets to write applications, only to write application frameworks. The second era came about in 2001 when Action-oriented frameworks became popular. In 2004, JSF and friends came to play. JSF is a component-based framework with known limitations (complex, slow, uses POST for almost everything, Ajax is difficult). These limitations have resulted in a number of third-party patches being developed to solve these issues.&lt;/p&gt;
&lt;p&gt;JSF was designed to use the request to create a component tree that maintains state. Unfortunately, the state is not something the developer has control over. It&apos;s not the state of the application, it&apos;s the state of the components. The client&apos;s knowledge of the state is mentioned with a cookie and the server keeps the state in the session. The problem with JSF is you don&apos;t have a choice of state in your application - you can&apos;t write stateless applications like you can with servlets.
&lt;/p&gt;
&lt;p&gt;JSF uses overloaded URIs for its resources. When you have one URI with multiple representations, there&apos;s no way to tell how a representation was chosen. JSF&apos;s compromise is to allow client-side state saving. However, they do this by putting hidden field in the form and requiring POST for navigation. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSF vs. REST&lt;/strong&gt;&lt;br/&gt;
Basically, these two are at opposite extremes. JSF is focused heavily on a UI component model. The people that developed it misinterpreted how the web works and made some fundamental questionable choices. You can patch it, but you can not fix it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web 2.0 Frameworks&lt;/strong&gt;&lt;br/&gt;
GWT is a cross-compilation based framework. You write Java to generate JavaScript (b/c everyone hates writing JavaScript). It mashes client and server code into a single source. These layers communicate using GWT-RPC. Typical RPC concerns do not apply since code generation handles coupling and the client is downloaded from the same application. GWT-PRC does POSTs to the server and uses HTTP like a transport layer. To be fair, GWT does allow you to use a RequestBuilder to use the web like it should be used.
This class allows more control over HTTP requests, it supports GET and POST and it allows so-called RESTful layers (GWT-REST and GET-Restlet). GWT is focused heavily on ease-of-use, which is good. It&apos;s modeled after RPC and breaks the uniform interface and focuses on backend caching. Unlike JSF, GWT is fixable, but the community tends to use RPC instead of RequestBuilder.
&lt;/p&gt;
&lt;p&gt;SOFEA has a central promise of SOA. Business logic is a reusable service that changes less often. The presentation application calls those services and changes more often. The nice thing about this type of architecture is it allows a separation of concerns and loose coupling. However, it doesn&apos;t embrace REST like it should. Appcelerator is an implementation of SOFEA that has a Ruby on Rails-like usability. However, it uses a SOAP/HTTP style with messaging and POSTs to a single URI. Appcelerator is interesting, but it introduces a different style of coupling. It breaks URI opacity and client deals with POX instead of links. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br/&gt;
Don&apos;t fight the architecture of the web. Innovate and enhance instead of breaking. If nothing else, break judiciously. As developers, we should demand more from our frameworks and make sure they use the web and HTTP like it should be used.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/building_rich_applications_with_appcelerator</id>
        <title type="html">Building Rich Applications with Appcelerator</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/building_rich_applications_with_appcelerator"/>
        <published>2008-10-22T16:18:42-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="appcelerator" scheme="http://roller.apache.org/ns/tags/" />
        <category term="softwaresummit" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ria" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="presentation" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">This afternoon, I delivered my &lt;a href=&quot;http://softwaresummit.com/2008/speakers/raible.htm&quot;&gt;Building Rich Applications with Appcelerator&lt;/a&gt; talk for the 3rd time at Colorado Software Summit. When I first proposed this topic, I hadn&apos;t used &lt;a href=&quot;http://appcelerator.org&quot;&gt;Appcelerator&lt;/a&gt; and saw this as a good opportunity to learn more about it. I&apos;m glad I did.
&lt;/p&gt;
&lt;p&gt;
IMO, Appcelerator is a lot like Dojo in how it parses pages and turns HTML with special attributes into JavaScript widgets. I can&apos;t help but think a pre-compilation step would be nice to speed things up. I like Appcelerator&apos;s extensive &lt;a href=&quot;http://doc.appcelerator.org/reference/widget_reference/index.html&quot;&gt;Widget Library&lt;/a&gt;, and I especially like that they re-use many widgets rather than re-creating their own. Finally, I really dig the &quot;SOA in a browser&quot; approach where everything is a message and you can easily publish and subscribe to events - on the client and server. Below is my presentation, please let me know if you have any questions.
&lt;/p&gt;
&lt;div 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=building-rich-applications-with-appcelerator-12002&amp;stripped_title=building-rich-applications-with-appcelerator&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=building-rich-applications-with-appcelerator-12002&amp;stripped_title=building-rich-applications-with-appcelerator&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:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&quot;&gt;&lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/mraible/building-rich-applications-with-appcelerator?type=powerpoint&quot; title=&quot;View Building Rich Applications with Appcelerator on SlideShare&quot;&gt;View on Slideshare&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/applying_flash_to_java_flex</id>
        <title type="html">Applying Flash to Java: Flex and OpenLaszlo with Dustin Marx</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/applying_flash_to_java_flex"/>
        <published>2008-10-22T14:31:10-06:00</published>
        <updated>2008-10-22T20:33:08-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="softwaresummit" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flash" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ria" scheme="http://roller.apache.org/ns/tags/" />
        <category term="openlaszlo" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="adobe" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">If you&apos;re going to choose Flex or OpenLaszlo, chances are you&apos;re targeting Flash. The Flash Player allows you to abstract the browser idiosyncrasies and give users a better experience. It hides the browser quirks from both developers and users. It&apos;s also a highly ubiquitous web browser runtime environment. It provides a user experience way beyond traditional HTTP request-response. Also, its visual effects and &quot;richness&quot; rival of non-browser desktop applications.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://marxsoftware.blogspot.com/&quot;&gt;Mark&apos;s blog&lt;/a&gt; stats show that 95% of readers are using Flash 9 and 1% is Flash 10. All others don&apos;t have their version exposed. Most other sources claim that Flash 9 has 98% penetration in mature markets. One of the nicest things about Flash is it frees users from limitations of traditional web applications. Request/response is largely a thing of the past and Ajax-like behavior was built-in from the beginning.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flash Criticisms&lt;/strong&gt;: has reduced SEO as well as bookmarking and URL history support. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flash Player Criticisms&lt;/strong&gt;: not open source, no significant alternative, no 64-bit player, loading performance and it&apos;s only useful for games, movies and annoying advertisements.&lt;/p&gt;
&lt;p&gt;
The good news is Flash is getting better. There&apos;s currently a SWF Searchability initiative with Google and Yahoo!. For bookmarking and URL History, you can use &quot;deep linking&quot; with &lt;code&gt;mx.managers.BrowserManager&lt;/code&gt; and &lt;code&gt;mx.managers.HistoryManager&lt;/code&gt;. Flash Player issues are also being addressed. There&apos;s a Flash Open Screen Project, there&apos;s a 64-bit player in Adobe Labs and Flash 9/10 is much better than in the past.
&lt;/p&gt;
&lt;p&gt;
To prove that Flash is a compelling technology, all you have to do is look at Microsoft&apos;s Silverlight and Sun&apos;s JavaFX. These are direct competitors that are fairly new and prove that companies like what Flash has.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flex&lt;/strong&gt;&lt;br/&gt;
Flex is not Flash. Flex requires Flash (9+), but Flash does not require Flex. Flex is a language and framework and applications are compiled into &lt;strong&gt;.swf&lt;/strong&gt; files. Flash is the runtime environment that executes .swf files. Flex 3 is FREE. The Flex SDK, compiler and debugger are open source. They have no license costs. BlazeDS is also open source and has no license cost.
&lt;/p&gt;
&lt;p&gt;Flex MXML was formerly called &lt;em&gt;Macromedia XML&lt;/em&gt;. It&apos;s an XML-based presentation/layout language that&apos;s editable with any text editor or IDE. MXML is to ActionScript 3 as JSP is to Java. MXML provides the layout and ActionScript provides the dynamic business logic.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ActionScript&lt;/strong&gt;&lt;br/&gt;
ActionScript is an ECMAScript implementation that&apos;s been proposed as the Edition 4 implementation. It&apos;s not your older sibling&apos;s JavaScript. It uses class-based object-oriented features and static typing. Thanks to the Flash Player, it works the same across multiple browsers. Most of the things you can do with MXML, you can do with ActionScript. However, MXML typically requires less LOC.
&lt;/p&gt;
&lt;p&gt;ActionScript allows packages, interfaces, inheritance, objects and methods. It includes extensive XML Support, particularly E4X (ECMAScript for XML). It has a large class library and can talk directly to the Flash Player. Finally, it has many Java-like features and it&apos;s syntax looks similar.
&lt;/p&gt;
&lt;p&gt;At this point, Dustin started doing demos of two popular Flex components: RichText Editor (which creates horrible HTML) and Data Grid. More third-party Flex components seem to appear every day. Examples include &lt;a href=&quot;http://code.google.com/p/flexlib/&quot;&gt;flexlib&lt;/a&gt;, &lt;a href=&quot;http://code.google.com/p/asdia/&quot;&gt;ASDIA&lt;/a&gt; as well as all those listed on &lt;a href=&quot;http://flexbox.mrinalwadhwa.com/&quot;&gt;FlexBox&lt;/a&gt;. Additionally, it&apos;s not too difficult to create your own Flex components (no proof provided).&lt;/p&gt;
&lt;p&gt;
Flex&apos;s property binding is one of Dustin&apos;s favorite features, but he says he has a difficult time conveying how cool it is. Property binding allows you to tie data in one object to data in another object. Updates in one object affect another. To use it in MXML, you can use curly braces or the &lt;code&gt;&lt;mx:Binding&gt;&lt;/code&gt; tag. In ActionScript, you can use the &lt;code&gt;BindingUtils&lt;/code&gt; object. You can also use Flex&apos;s metadata annotation &quot;Bindable&quot; to denote bindable objects.
&lt;/p&gt;
&lt;p&gt;To compile Flex applications, you can use &lt;strong&gt;mxmlc&lt;/strong&gt; from the command line. You can use Ant with the &lt;code&gt;&amp;lt;exec&gt;&lt;/code&gt; task or using Flex&apos;s Ant Tasks. You can also invoke mxmlc from Java as long as you include mxmlc.jar in your classpath. FlexBuilder is an Eclipse-based IDE that&apos;s not included with the free Flex SDK. It&apos;s not a free product and can be used as a plugin or a standalone IDE.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flex and Java&lt;/strong&gt;&lt;br/&gt;
There&apos;s two predominant out-of-the-box methods for Flex to communicate with Java EE backends.
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;HttpService&lt;/strong&gt;: traditional HTTP request/response.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebService&lt;/strong&gt;: SOAP-based Web Services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the above two methods aren&apos;t fast enough, you can use BlaseDS and it&apos;s additional options.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Web Messaging&lt;/strong&gt;: HTTP publish/subscribe with JMS, ColdFusion and/or other Flash/Ajax client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remoting with AMF&lt;/strong&gt;: access server-side objects from Flash client-tier as if they were hosted there.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Flash applications can access either a client&apos;s machine or a remote site, but not both. You can use a &lt;em&gt;crossdomain.xml&lt;/em&gt; file on your server to allow remote Flash clients to connect. This file allows access for both Flex and OpenLaszlo applications.
&lt;/p&gt;
&lt;p&gt;BlazeDS adds proxy server support for HTTPService and WebService. To use, set the &lt;em&gt;useProxy&lt;/em&gt; attribute to &quot;true&quot;. Features include authentication and logging. It adds a new RPC mechanisms called &lt;strong&gt;RemoteObject&lt;/strong&gt;. This object allows ActionScript and Java EE transparent integration. It also adds publish/subscribe messaging with a JMS Adapter available. Lastly, it adds Ajax support to your Flex application.&lt;/p&gt;
&lt;p&gt;GraniteDS is an open-source (LGPL) alternative to Adobe LiveCycle and is similar to BlazeDS. It has COMET-like functionality and supports Spring, Spring Security, EJB 3, Seam and Guice.&lt;/p&gt;
&lt;p&gt;Flex Frameworks: Cairngorm (Adobe Consulting), Pure MVC, Mate and many others.&lt;/p&gt;
&lt;p&gt;Flex 4 (Gumbo) will have improvements for designers (easier customization, better tool support), improvements for developers (faster compiler, two-way data binding) and will leverage new features of Flash 10.
&lt;p&gt;&lt;strong&gt;OpenLazlo&lt;/strong&gt;&lt;br/&gt;
OpenLaszlo 4 is XML-based and uses an XPath syntax for data access. OpenLaszlo was actually created before Flex and is ECMAScript-based. Unlike Flex that requires Flash 9, OpenLaszlo is architected to deploy on different runtime environments, including: Flash 7/8/9 and DHTML. Dustin believes OpenLaszlo would be a lot more appealing if your source code could be compiled into Silverlight or JavaFX.
&lt;/p&gt;
&lt;p&gt;OpenLaszlo&apos;s syntax looks a lot like Flex, except it does not use namespaces. OpenLaszlo&apos;s Constraints are similar to Flex&apos;s property binding, except the syntax is a bit different. You use &lt;code&gt;${}&lt;/code&gt; in LZX tags or &lt;code&gt;applyConstraint()&lt;/code&gt; and &lt;code&gt;LzDelegate&lt;/code&gt; in scripts. OpenLaszlo&apos;s event handling is similar to Flex and JavaScript event handling. All attributes have an implicit &quot;on&quot; event that is triggered when an attribute&apos;s value is changed. Event handlers can be written CSS-style in LZX nodes or using the &lt;code&gt;&amp;lt;handler&gt;&amp;lt;/handler&gt;&lt;/code&gt; tag. Script code can be embedded in LZX XML in many ways:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Inside event attributes&lt;/li&gt;
&lt;li&gt;Within &lt;code&gt;&amp;lt;script&gt;&amp;lt/script&gt;&lt;/code&gt; tags&lt;/li&gt;
&lt;li&gt;Within &lt;code&gt;&amp;lt;method&gt;&amp;lt/method&gt;&lt;/code&gt; tags&lt;/li&gt;
&lt;li&gt;Within &lt;code&gt;&amp;lt;handler&gt;&amp;lt/handler&gt;&lt;/code&gt; tags&lt;/li&gt;
&lt;li&gt;In a separate file (&lt;code&gt;&amp;lt;script src=&quot;someFile.js&quot; /&gt;&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dustin believes the debugger and view-source tools in OpenLaszlo are much better than the ones available for Flex.&lt;/p&gt;
&lt;p&gt;For the rest of the presentation, Dustin covered many of Laszlo&apos;s feature, how they relate to Java as well as how to integrate SWF and HTML. &lt;a href=&quot;http://code.google.com/p/swfobject/&quot;&gt;SWFObject&lt;/a&gt; is Dustin&apos;s preferred method for adding Flash to HTML. One of its nifty features is it allows SWF-to-SWF communication.&lt;/p&gt;
&lt;p&gt;This talk was an excellent and in-depth overview of Flash, Flex and OpenLaszlo. I especially liked all the details on ActionScript and the different methods for remote communication. &lt;em&gt;Nice job Dustin!&lt;/em&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/what_s_coming_in_spring</id>
        <title type="html">What&apos;s Coming in Spring 3.0</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/what_s_coming_in_spring"/>
        <published>2008-10-22T11:51:12-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springframework" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rest" scheme="http://roller.apache.org/ns/tags/" />
        <category term="presentation" scheme="http://roller.apache.org/ns/tags/" />
        <category term="annotations" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="softwaresummit" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springexpressionlanguage" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">This morning, I delivered my &lt;a href=&quot;http://softwaresummit.com/2008/speakers/raible.htm&quot;&gt;What&apos;s Coming in Spring 3.0&lt;/a&gt; talk for the 2nd time at Colorado Software Summit. Since there is no Spring 3.0 source code to speak of, I was unable to do the &quot;Choose Your Own Adventure&quot; demo at the end. &lt;img src=&quot;https://raibledesigns.com/images/smileys/sad.gif&quot; class=&quot;smiley&quot; alt=&quot;:(&quot; title=&quot;:(&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
The good news is I was able to easily upgrade the &lt;a href=&quot;http://spring-kickstart.googlecode.com&quot;&gt;Spring Kickstart&lt;/a&gt; application from Spring 2.0 to Spring 2.5.5 (using annotations). When 3.0 is released, I hope to update this project to use 3.0 as well as show what I needed to change. If I get ambitious, I might even change the UI to use Flex or Ext JS to show a RESTful client. Below is my presentation - hope you enjoy.
&lt;/p&gt;
&lt;div 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=whats-coming-in-spring-30-18636&amp;stripped_title=whats-coming-in-spring-30&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=whats-coming-in-spring-30-18636&amp;stripped_title=whats-coming-in-spring-30&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:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&quot;&gt;&lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/mraible/whats-coming-in-spring-30?type=powerpoint&quot; title=&quot;View What&amp;#39;s Coming in Spring 3.0 on SlideShare&quot;&gt;View on Slideshare&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/xebia_ria_framework_contest</id>
        <title type="html">Xebia RIA Framework Contest</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/xebia_ria_framework_contest"/>
        <published>2008-10-07T08:06:48-06:00</published>
        <updated>2012-11-08T14:33:55-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="silverlight" scheme="http://roller.apache.org/ns/tags/" />
        <category term="echo3" scheme="http://roller.apache.org/ns/tags/" />
        <category term="javafx" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ria" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Last year, I blogged about the &lt;a href=&quot;http://raibledesigns.com/rd/entry/xebia_web_framework_contest&quot;&gt;Xebia Web Framework Contest&lt;/a&gt; where Struts 2, GWT, Wicket and MyFaces (JSF) were all used to develop the same applications. It seems they&apos;ve done it again this year, &lt;a href=&quot;http://blog.xebia.fr/2008/10/03/ria-contest-flex-silverlight-gwt-echo3-javafx/&quot;&gt;comparing RIA frameworks&lt;/a&gt; (&lt;a href=&quot;http://translate.google.com/translate?u=http://blog.xebia.fr/2008/10/03/ria-contest-flex-silverlight-gwt-echo3-javafx/&amp;amp;hl=fr&amp;amp;ie=UTF-8&amp;amp;sl=fr&amp;amp;tl=en&quot;&gt;English translation&lt;/a&gt;) this time. 
&lt;/p&gt;
&lt;div style=&quot;margin-left: 0; margin-bottom: 10px&quot; class=&quot;quote&quot;&gt;
&lt;p&gt;Five teams were formed, five frameworks have been selected:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flex 3 Flex 3&lt;/li&gt;
&lt;li&gt;Silverlight 2.0 beta 2 Silverlight 2.0 beta 2&lt;/li&gt;
&lt;li&gt;Google GWT 1.5 Google GWT 1.5&lt;/li&gt;
&lt;li&gt;Echo3 Echo3&lt;/li&gt;
&lt;li&gt;JavaFX Preview SDK JavaFX SDK Preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin-bottom: 0&quot;&gt;The number of teams is limited, the list of frameworks is also selected, and we have therefore necessarily set aside some frameworks that would have certainly had their place in the contest. Examples Ext JS, Yahoo! UI, Curl, XUL, ZK or OpenLaszlo. If you have experience on one of these frameworks, feel free to share in the comments on this article! [&lt;a href=&quot;http://blog.xebia.fr/2008/10/03/ria-contest-flex-silverlight-gwt-echo3-javafx/&quot;&gt;Read More &amp;raquo;&lt;/a&gt;]&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The winner? &lt;strong&gt;Flex&lt;/strong&gt; - which doesn&apos;t surprise me a whole lot.&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
After this day, the Flex team, has clearly demarcated from its competitors. After two sprints of development and ownership, it could devote the third and final sprint to get rich quick and easy application, focusing only on the features and user experience. It is thanks to the wealth of high-level components, the wealth of documentation available and a maturity framework that the team has made the Flex application&apos;s most successful.
&lt;/p&gt;
&lt;p&gt;Good stuff - thanks Xebia!</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/what_s_wrong_with_jsf</id>
        <title type="html">What&apos;s wrong with JSF</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/what_s_wrong_with_jsf"/>
        <published>2008-08-25T18:53:31-06:00</published>
        <updated>2008-08-26T01:00:07-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="seam" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">The developers of Seam have come up with a list of &lt;a href=&quot;http://seamframework.org/Documentation/JSF2&quot;&gt;major issues with JSF&lt;/a&gt;. I&apos;m assuming many of these issues are fixed by Seam, but it&apos;s interesting to note how they&apos;ve somewhat admitted that JSF has many flaws. Note that there&apos;s a lot of references to Struts and WebWork.
&lt;/p&gt;
&lt;p&gt;
Hopefully many of these will be fixed in JSF 2. If REST support is an important feature for web frameworks, it&apos;ll be be interesting to see how the component frameworks handle it. It&apos;d be great if they provided native support. Oh wait, then they&apos;d be action-based frameworks. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/presenting_web_frameworks_of_the</id>
        <title type="html">Presenting Web Frameworks of the Future Tomorrow in Denver</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/presenting_web_frameworks_of_the"/>
        <published>2008-07-30T21:56:17-06:00</published>
        <updated>2008-07-31T04:01:12-06:00</updated> 
        <category term="/Open Source" label="Open Source" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rest" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oscon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of</id>
        <title type="html">[OSCON 2008] Web Frameworks of the Future: Flex, GWT, Grails and Rails</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of"/>
        <published>2008-07-23T16:25:23-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Open Source" label="Open Source" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oscon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rest" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oscon08" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/oscon_2008_an_introduction_to</id>
        <title type="html">[OSCON 2008] An Introduction to Ruby Web Frameworks by Ryan Carmelo Briones</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/oscon_2008_an_introduction_to"/>
        <published>2008-07-23T12:33:08-06:00</published>
        <updated>2008-07-23T18:34:48-06:00</updated> 
        <category term="/Open Source" label="Open Source" />
        <category term="ruby" scheme="http://roller.apache.org/ns/tags/" />
        <category term="merb" scheme="http://roller.apache.org/ns/tags/" />
        <category term="conference" scheme="http://roller.apache.org/ns/tags/" />
        <category term="frameworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rubyonrails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oscon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oscon08" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Ryan is a Server Monkey / Code Sumari for &lt;a href=&quot;http://www.theedgecase.com/&quot;&gt;Edgecase&lt;/a&gt;, LLC in Columbus, Ohio. A framework allows you to create re-usable code. Frameworks allow you to use encapsulation.  Frameworks tend to be domain specific. For example, Rails works really for CRUD application, but not for others (i.e. Twitter).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Why Ruby?&lt;/strong&gt;&lt;br/&gt;
Ruby has been Object Oriented since day 1. Ruby promotes Beautiful Code that&apos;s easy to read and maintain. Yes, MRI has performance issues. Matz has said &quot;I&apos;m a language designer&quot; and has turned over the VM to others for Ruby 1.9. Another thing that might keep folks from using Ruby or its web frameworks is the libraries available. This is understandable, but it&apos;s being solved by alternative implementations. This includes YARV (the official 1.9 implementation), JRuby, IronRuby (not ready for production) and MagLev.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rack&lt;/strong&gt;&lt;br/&gt;
A framework that provides a minimal API for connecting web services and web frameworks. As a web application developer, this framework allows us to know about web services, but not worry about the details of talking to it. Below is a very simple Rack application.&lt;/p&gt;

&lt;pre&gt;
class HelloWorld
  def call(env)
    [200, {&quot;Content-Type&quot; =&gt; &quot;text/plain&quot;}, [&quot;Hello World!&quot;]]
  end
end
&lt;/pre&gt;
&lt;p&gt;Rack allows the handlers do the work and not worry about the web server abstraction. Handlers exist for WEBrick, LightSpeed, Mongrel, Fast-CGI and many others. As an application developer, it allows you to choose different architectures (threaded, evented, etc.). Ryan is talking about Rack first because it&apos;s used in all the other Ruby web frameworks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ruby on Rails&lt;/strong&gt;&lt;br/&gt;
Rails is 4 years old now and was written by DHH when he was a contractor at 37Signals. Rails doesn&apos;t define and grand new ideas, everything has been done before (MVC, code generation, etc.). What Rails did is package everything in a unique way that makes it very easy to use. Rails has influenced a lot of what has come from web frameworks in the last few years. One of Rails&apos; nicest feature is code generation. Ryan showed part of DHH&apos;s &lt;a href=&quot;http://www.rubyonrails.org/screencasts&quot;&gt;Create a weblog in 15 minutes&lt;/a&gt; video to demonstrate code generation. He noted that the minute he showed was picked because David said &quot;Whoops!&quot; and &quot;Look at all the things I&apos;m not doing&quot;. Rails popularized Convention over Configuration using naming conventions and load paths. While this is definitely a cool feature, I think most web frameworks have adopted CoC by now. Maybe not JSF, but who wants to use JSF w/o a framework on top of it anyway?
&lt;/p&gt;
&lt;p&gt;One warning about Rails: &quot;The Golden Path&quot; can get in your way. Rails is very Opinionated Software and that&apos;s how Rails works. As long as you follow that, you should be very productivity. If you decide to go off the Rails (i.e. namespaces), it can be difficult.
&lt;/p&gt;
&lt;p&gt;Rails uses a DSL in its models (i.e. has_many, has_one for relationships) and in the Rails router. It allows you to very simply map a URL to a controller/method. In addition to DSLs, Rails has first-class testing and its generators create stub tests for you.&lt;/p&gt;
&lt;p&gt;Bad things about Rails: too much magic, moves to fast (too many releases).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Merb&lt;/strong&gt;&lt;br/&gt;
Merb was originally developed by Ezra Zygmuntowicz to run alongside a Rails app to handle file uploads. It grew from there and became it&apos;s own beast. Merb is very much about using only what you need. It has &quot;package repos&quot; that allow you to add additional features. For example, merb-core doesn&apos;t contain an ORM framework, just a web framework. Merb also allows you to choose your ORM. It&apos;s standardized on Rack, so it can run on just about any web server. It also included &quot;deferred actions&quot; that allow you to send some URLs to evented web servers and others to threaded web servers. Merb eschews the &quot;magic&quot; that Rails has. It tries to stay away from making it&apos;s code a &quot;monument to personal cleverness&quot;. Simple code scales better and runs faster.&lt;/p&gt;
&lt;p&gt;One of the downers to Merb is that it&apos;s flexibility allows you to get down to the nitty gritty. However, it can be less productive than Rails because of its flexibility. Another downside is its documentation and examples are sparse. Merb is not recommended if you&apos;re just getting into Ruby.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Camping&lt;/strong&gt;&lt;br/&gt;
Camping is a micro framework (&amp;lt; 4K) developed by &lt;a href=&quot;http://whytheluckystiff.net/&quot;&gt;why the lucky stiff&lt;/a&gt;. It&apos;s designed to develop small applications. You can do everything in one file and create prototypes very quickly. It uses &lt;a href=&quot;http://code.whytheluckystiff.net/markaby/&quot;&gt;Markaby&lt;/a&gt; to write HTML code in a builder-style fashion. 
&lt;/p&gt;
&lt;p&gt;
Since a Camping application is all in one file, it can be difficult to develop large applications. The solution is to write small apps and mount them in the same URL space. The only issue with small apps sharing the same space is they have to use the same database. One downside to Camping is there is no standard test framework. Mosquito was developed as a solution, but doesn&apos;t seem to be maintained.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sinatra&lt;/strong&gt;&lt;br/&gt;
Simple. Fast. Effective. It&apos;s designed to allow creating REST applications with minimal dependencies. Similar to Camping, it has one file for the entire application. Unlike Camping, Sinatra doesn&apos;t follow MVC conventions, so it may be difficult to port a Sinatra application to another framework.
&lt;/p&gt;
&lt;p&gt;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/re_what_s_a_good</id>
        <title type="html">RE: What&apos;s a good RIA to develop in 20 hours?</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/re_what_s_a_good"/>
        <published>2008-06-11T11:02:23-06:00</published>
        <updated>2008-06-13T21:39:40-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="flex" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gwt" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/re_which_is_the_hottest</id>
        <title type="html">RE: Which is the Hottest Java Web Framework?</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/re_which_is_the_hottest"/>
        <published>2008-06-10T22:39:08-06:00</published>
        <updated>2014-05-08T19:47:19-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="struts2" scheme="http://roller.apache.org/ns/tags/" />
        <category term="seam" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wicket" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://www.breakitdownblog.com&quot;&gt;The &quot;Break it Down&quot; Blog&lt;/a&gt; has a lengthy post on &lt;a href=&quot;http://www.breakitdownblog.com/which-is-the-hottest-java-web-framework-or-maybe-not-java/&quot;&gt;Which is the Hottest Java Web Framework? Or Maybe Not Java?&lt;/a&gt; Comparing Java Web Frameworks is hard because so many people are passionate about the framework they know best. Add a couple more like Flex and Ruby on Rails and its downright difficult. Nevertheless, this post is good in that it contains a lot of pretty trend graphs and it looks like the author has done some good research. It&apos;s likely the folks that will scream foul are the ones that did poor in the comparison (Tapestry and Stripes, I&apos;m talking about you).
&lt;/p&gt;
&lt;p&gt;
Surprising among the top Java Web Frameworks is the rise of Struts 2:&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.google.com/trends?q=(apache+wicket)+|+wicket%2C+(jboss+seam)%2C+(spring+mvc)+|+(spring+webflow)+|+(spring+web+flow)%2C+(struts+2)+|+(struts2)&amp;amp;ctab=0&amp;amp;geo=all&amp;amp;date=all&amp;amp;sort=0&quot;&gt;
&lt;img src=&quot;//farm4.static.flickr.com/3273/2569872382_c230627f2d.jpg&quot; alt=&quot;Google Trends Graph&quot; width=&quot;500&quot; height=&quot;270&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;To quote:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
Which is much more interesting I think is how Wicket adoption has stayed almost flat while Struts 2 adoption has spiked. Spring MVC/WebFlow seems to be going no where fast and racing JBoss Seam there.
&lt;br/&gt;&lt;br/&gt;
The popularity of Struts 2 really caught me off guard with it being quite a bit different from Struts 1, I figured it got thrown into the &quot;just another web framework&quot; category, but I guess there is something in a name and it&apos;s doing quite well.
&lt;/p&gt;
&lt;p&gt;Regardless of what you think of the post and trends, you have to appreciate the amount of time the author put into it.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/spring_mvc_vs_jsf_and</id>
        <title type="html">Spring MVC vs. JSF and The State of Spring Web</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/spring_mvc_vs_jsf_and"/>
        <published>2008-05-16T18:17:52-06:00</published>
        <updated>2012-11-08T14:34:44-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://altadult.blogspot.com&quot;&gt;Alternative Adult&lt;/a&gt; has only posted a couple times in 2008, but his entries have peaked my interest.&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
&lt;a href=&quot;http://altadult.blogspot.com/2008/05/spring-mvc-or-jsf.html&quot;&gt;Spring MVC or JSF+?&lt;/a&gt;&lt;br/&gt;My business unit is trying to standardize if we can on a single Java-based Web framework going forward to simplify the Web development process, especially as individual developers move from one division to another, or centralized support groups need to maintain multiple applications from multiple divisions.
&lt;br/&gt;&lt;br/&gt;
At the enterprise level within my company, the architecture group says that they will provide support for either Spring MVC or JSF+ (where the + represents the accompanying technologies you would use to provide a more maintainable application and a more rich user experience, e.g. Facelets, Richfaces, etc.).
&lt;br/&gt;&lt;br/&gt;
Now my business unit is trying to decide which of these two frameworks, Spring MVC or JSF+, is the most appropriate to standardize upon for our development community. [&lt;a href=&quot;http://altadult.blogspot.com/2008/05/spring-mvc-or-jsf.html&quot;&gt;Read More&lt;/a&gt;]&lt;br/&gt;
&lt;br/&gt;...and...&lt;br/&gt;&lt;br/&gt;
&lt;a href=&quot;http://altadult.blogspot.com/2008/05/state-of-spring-web.html&quot;&gt;State of Spring Web&lt;/a&gt;&lt;br/&gt;
For those that are interested, the following is a summary of the notes I captured from a conversation with SpringSource on the state of Spring Web. [&lt;a href=&quot;http://altadult.blogspot.com/2008/05/state-of-spring-web.html&quot;&gt;Read More&lt;/a&gt;]
&lt;/p&gt;
&lt;p&gt;Good stuff Michael - keep it coming.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/extensionless_urls_in_java_web</id>
        <title type="html">Extensionless URLs with Java Web Frameworks</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/extensionless_urls_in_java_web"/>
        <published>2008-05-13T21:50:51-06:00</published>
        <updated>2008-05-14T04:01:37-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="urlmanagement" scheme="http://roller.apache.org/ns/tags/" />
        <category term="urlrewritefilter" scheme="http://roller.apache.org/ns/tags/" />
        <category term="urls" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Last week, I had a go of making a Spring MVC application use extensionless URLs. I did some googling, found some tips on the &lt;a href=&quot;http://forum.springframework.org&quot;&gt;Spring Forums&lt;/a&gt; and believe I arrived at a solid solution. Using the &lt;a href=&quot;http://tuckey.org/urlrewrite/&quot;&gt;UrlRewriteFilter&lt;/a&gt; (version 3), I was able to create a rule that looks for any URLs without an extension. If it finds one, it appends the extension and forwards to the controllers. This rule is as follows (where *.html is my servlet-mapping for DispatcherServlet in web.xml):
&lt;/p&gt;
&lt;pre&gt;
  &amp;lt;rule&amp;gt;
    &amp;lt;from&amp;gt;^(&amp;#91;^?&amp;#93;*)/(&amp;#91;^?/\.&amp;#93;+)(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;true&quot;&amp;gt;$1/$2.html$3&amp;lt;/to&amp;gt;
  &amp;lt;/rule&amp;gt;
&lt;/pre&gt;
&lt;p&gt;As long as I hand-write all my URLs without an extension (&amp;lt;a href=&quot;home&quot;&gt; vs. &amp;lt;a href=&quot;home.html&quot;&gt;), this seems to work. To combat developers that use &quot;home.html&quot;, one solution is to require all links to be wrapped with &amp;lt;c:url value=&quot;url&quot;/&gt; (or some other macro that call response.encodeURL()). If you can convince everyone to do this, you can write an outbound-rule that strips the .html extension from URLs.
&lt;/p&gt;
&lt;pre&gt;
  &amp;lt;outbound-rule&amp;gt;
    &amp;lt;from&amp;gt;^(.*)\.html(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;false&quot;&amp;gt;$1$2&amp;lt;/to&amp;gt;
  &amp;lt;/outbound-rule&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
In an ideal world, it&apos;d be possible to modify the &amp;lt;a&gt; tag at the very core of the view framework you&apos;re using to automatically encode the URL of any &quot;href&quot; attributes. I don&apos;t think this is possible with JSP, FreeMarker, Facelets or any other Java Web Framework templates (i.e. Tapestry or Wicket). If it is, please let me know. 
&lt;/p&gt;
&lt;p&gt;
Below is my final urlrewrite.xml with these rules, as well as my &quot;welcome-file&quot; rule at the top.
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;!DOCENGINE urlrewrite PUBLIC &quot;-//tuckey.org//DTD UrlRewrite 3.0//EN&quot;
  &quot;http://tuckey.org/res/dtds/urlrewrite3.0.dtd&quot;&amp;gt;

&amp;lt;urlrewrite&amp;gt;
  &amp;lt;rule&amp;gt;
    &amp;lt;from&amp;gt;/$&amp;lt;/from&amp;gt;
    &amp;lt;to type=&quot;forward&quot;&amp;gt;home&amp;lt;/to&amp;gt;
  &amp;lt;/rule&amp;gt;

  &amp;lt;rule&amp;gt;
    &amp;lt;from&amp;gt;^(&amp;#91;^?&amp;#93;*)/(&amp;#91;^?/\.&amp;#93;+)(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;true&quot;&amp;gt;$1/$2.html$3&amp;lt;/to&amp;gt;
  &amp;lt;/rule&amp;gt;

  &amp;lt;outbound-rule&amp;gt;
    &amp;lt;from&amp;gt;^(.*)\.html(\?.*)?$&amp;lt;/from&amp;gt;
    &amp;lt;to last=&quot;false&quot;&amp;gt;$1$2&amp;lt;/to&amp;gt;
  &amp;lt;/outbound-rule&amp;gt;

&amp;lt;/urlrewrite&amp;gt;
&lt;/pre&gt;
&lt;p&gt;If you have other solutions for extensionless URLs with Java web frameworks, I&apos;d love to hear about them. With any luck, 2008 will be the year we drop extensions (and path-mappings) from our URLs. The stat packages might not like it, but I do.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/the_web_framework_smackdown_questions</id>
        <title type="html">The Web Framework Smackdown Questions</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/the_web_framework_smackdown_questions"/>
        <published>2008-03-28T10:04:02-06:00</published>
        <updated>2008-03-31T19:18:06-06:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="conference" scheme="http://roller.apache.org/ns/tags/" />
        <category term="smackdown" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">I&apos;m doing my &lt;a href=&quot;http://raibledesigns.com/rd/entry/java_web_framework_smackdown_at&quot;&gt;Web Frameworks Smackdown&lt;/a&gt;  this morning at TheServerSide Conference. A few weeks ago, I asked &lt;strong&gt;What Would You Ask the Web Framework Experts?&lt;/strong&gt; on &lt;a href=&quot;http://java.dzone.com/news/what-would-you-ask-web-framewo&quot;&gt;Javalobby&lt;/a&gt; and &lt;a href=&quot;http://tinyurl.com/2clqqw&quot;&gt;LinkedIn&lt;/a&gt;. Here&apos;s a summary of those questions:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;What is the overall performance of your framework as it compares to others?&lt;/li&gt;
&lt;li&gt;How does your web framework position themselves in relation to Web Beans?&lt;/li&gt;
&lt;li&gt;How easy is it to create a re-useable component in your framework? Is it as easy as sub-classing an existing component?&lt;/li&gt;
&lt;li&gt;What is the key differentiating characteristic of your framework that makes it better than the rest?&lt;/li&gt;
&lt;li&gt;What do you think about the various scopes introduced by Seam, e.g. conversation vs request or session? If you support these additional scopes, do you also provide some sort of concurrency control?&lt;/li&gt;
&lt;li&gt;Why can&apos;t we, the Java Community, come together and adopt the best application framework and settle the web development subject?&lt;/li&gt;
&lt;li&gt;What are you doing to help with developer productivity?&lt;/li&gt;
&lt;li&gt;2008 is a huge year for the mobile web. How do you help developers build great mobile web applications?&lt;/li&gt;
&lt;li&gt;If you couldn&apos;t use your framework, what would you use and why?&lt;/li&gt;
&lt;li&gt;How do you enable rich Ajax applications?&lt;/li&gt;
&lt;li&gt;Can a developer make a change to source, and hit RELOAD in the browser to see the change? If not, why not? &lt;/li&gt;
&lt;li&gt;What do you think about the whole Flex revolution, and do you think you are competitors to this technology?&lt;/li&gt;
&lt;li&gt;How easy is it to create a module and plug it into a bigger application, complete with configuration, code, and view? &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, there&apos;s many more questions on the aforementioned pages, these are just some that I hope to ask during the panel. Sitting on the panel: Don Brown (Struts 2), Keith Donald (Spring MVC), Ed Burns (JSF), David Geary (GWT), Geert Bevin (RIFE/OpenLaszlo) and Justin Gehtland (Rails). I tried to get Flex and Grails folks, but they&apos;d either left the conference already or are speaking at the same time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; InfoWorld has some modest coverage of this event in &lt;a href=&quot;http://www.infoworld.com/article/08/03/28/java-webframeworks-debated_1.html&quot;&gt;Web frameworks debated at TheServerSide Java Symposium&lt;/a&gt;.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/the_thin_server_architecture_working</id>
        <title type="html">The Thin Server Architecture Working Group</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/the_thin_server_architecture_working"/>
        <published>2008-03-19T09:23:56-06:00</published>
        <updated>2012-11-11T02:00:40-07:00</updated> 
        <category term="/The Web" label="The Web" />
        <category term="sofea" scheme="http://roller.apache.org/ns/tags/" />
        <category term="soui" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">From &lt;a href=&quot;http://wisdomofganesh.blogspot.com/2008/03/new-home-for-sofea-thin-server.html&quot;&gt;The Wisdom of Ganesh&lt;/a&gt;:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
&lt;a href=&quot;http://unclescript.blogspot.com/&quot;&gt;Peter Svensson&lt;/a&gt; has set up a &lt;a href=&quot;http://www.thinserverarchitecture.com/home&quot;&gt;website&lt;/a&gt; where like-minded people can discuss the brave new world of applications whose common characteristic is that no aspect of presentation logic resides on the server side. I admit that&apos;s an overly broad-brush generalisation, and it will be necessary to read what the various authors of this camp have to say.
&lt;/p&gt;
&lt;p&gt;I thought about doing something similar when &lt;a href=&quot;http://raibledesigns.com/rd/entry/re_life_above_the_service&quot;&gt;I first read about SOFEA&lt;/a&gt;. I&apos;m glad to see that someone has taken on this challenge. However, doesn&apos;t it seem ironic that this site doesn&apos;t use SOFEA/SOUI for its own architecture? 
&lt;/p&gt;
&lt;p&gt;
IMO, if this site isn&apos;t written with some sort of SOFEA-based framework like it advocates, it&apos;s pretty much worthless.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/grails_vs_rails_my_thoughts</id>
        <title type="html">Grails vs. Rails - My Thoughts</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/grails_vs_rails_my_thoughts"/>
        <published>2008-03-07T05:12:00-07:00</published>
        <updated>2012-11-08T14:35:24-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <category term="groovy" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/the_linkedin_journey_continues</id>
        <title type="html">The LinkedIn Journey Continues</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/the_linkedin_journey_continues"/>
        <published>2008-03-06T08:00:49-07:00</published>
        <updated>2008-03-06T15:02:41-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="productivity" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="career" scheme="http://roller.apache.org/ns/tags/" />
        <category term="linkedin" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/david_sachdev_on_web_framework</id>
        <title type="html">David Sachdev on Web Framework Proliferation</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/david_sachdev_on_web_framework"/>
        <published>2008-02-22T14:47:44-07:00</published>
        <updated>2008-02-22T21:49:54-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="jsf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="springmvc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="spring" scheme="http://roller.apache.org/ns/tags/" />
        <category term="grails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jruby" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">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;.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/leasons_learned_from_using_seam</id>
        <title type="html">Leasons learned from using Seam</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/leasons_learned_from_using_seam"/>
        <published>2008-02-13T12:19:27-07:00</published>
        <updated>2008-02-13T20:25:41-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="seam" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Yesterday, I noticed the Seam Developers &lt;a href=&quot;http://in.relation.to/8577.lace&quot;&gt;released a new seamframework.org&lt;/a&gt; site. It&apos;s great to see a web framework team eating their own dog food. Of course, if all open source framework developers were paid full-time to work on their respective project, we&apos;d likely see more of this.&lt;/p&gt;
&lt;p&gt;My favorite part of the new site is the &lt;a href=&quot;http://seamframework.org/Community/Forums&quot;&gt;Forums&lt;/a&gt;, which has an &lt;a href=&quot;http://seamframework.org/service/Feed/atom/Area/Community/Node/SeamUsers&quot;&gt;Atom Feed&lt;/a&gt; you can use to monitor topics posted. This morning, I noticed a topic from &lt;a href=&quot;http://www.evolutionnext.com/blog/&quot;&gt;Daniel Hinojosa&lt;/a&gt; titled &lt;a href=&quot;http://seamframework.org/Community/ANNAmazinggatescomIsAliveWithSeamLessonsLearned&quot;&gt;ANN: amazinggates.com is alive with Seam &amp;amp; lessons learned&lt;/a&gt;. In this topic, Daniel lists a number of lessons he learned from working with Seam.
&lt;/p&gt;
&lt;div class=&quot;smokey&quot; style=&quot;margin-bottom: 10px&quot;&gt;
&lt;p&gt;We deployed our web site at &lt;a href=&quot;http://www.amazinggates.com&quot;&gt;amazinggates&lt;/a&gt; using JBoss Seam.  I would lie if I said it was it easy, but the reason I had some issues is that I didn&apos;t believe a lot of documentation.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I had refused to use Facelets, instead I used JSP.  All I can say to newbies is don&apos;t do it.  You owe to yourself to drop JSP like a bad habit.&lt;/li&gt;
&lt;li&gt;I had refused to use Seam Managed Persistence and ended with LIES.&lt;/li&gt;
&lt;li&gt;I had refused to use Seam-Gen, and used my own folder structure.  I still use my folder structure, but only after I used Seam-Gen and learned what I had to do to make my integration tests work.&lt;/li&gt;
&lt;li&gt;I had used 2.0 when it was still in CR and Beta releases. Although that is neither my fault or the Seam&apos;s fault, the greatest result was that I learned tremendously what Seam had to offer, and I was able to provide JBoss with some bugs, and help users in the forum.&lt;/li&gt;
&lt;li&gt;It took 8 hours to learn that Seam&apos;s AJAX4JSF solution was the best solution on the planet.  &lt;/li&gt;
&lt;li&gt;I used faces-config for page navigation. Ok, and that was just stupid.  &lt;/li&gt;
&lt;li&gt;I didn&apos;t know what components.xml was for the longest time.  I&apos;m really going to take part of the blame on this one.  I read the documentation and even after reading it I still had no idea what components.xml was for.  I realized that if the documentation said that components.xml maps components to names the way it does in Spring XML configuration.  I wouldn&apos;t have spent that much time.&lt;/li&gt;
&lt;li&gt;I had refused to use Renderer.render for email, because I didn&apos;t believe that the view should be the place for the rendering.  So I was going to use a StringTemplate solution.  That was dumb, it took a while for me to realize that generating emails in the view was the BEST place to do so.&lt;/li&gt;
&lt;li&gt;Integration testing was a bitch.  That wasn&apos;t my fault, or Seam&apos;s fault.  It really was the Microcontainer&apos;s fault, and I hope that that ends up better in the long run.  I heard through the grapevine that really no one is working on the EJB Microcontainer and it is still stuck in Alpha. Redhat needs to invest some people into it.  It really is THAT important.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin-bottom: 0&quot;&gt;
So, all in all, I love the new website, and I love what JBoss Seam has to offer.  I am excited with what it has to offer, and I will still continue to build my business around it.  Good work to the team that made JBoss Seam possible.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The one thing I noticed about Daniel&apos;s &quot;Amazing Gates&quot; site is it seems extremely fast. Do you think this is because of Seam or did he follow &lt;a href=&quot;http://developer.yahoo.com/performance/index.html#rules&quot;&gt;the rules for high performance websites&lt;/a&gt;?</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/web_application_frameworks_based_on</id>
        <title type="html">Web Application Frameworks based on Real-World Popularity</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/web_application_frameworks_based_on"/>
        <published>2008-02-11T15:10:57-07:00</published>
        <updated>2012-11-11T02:00:40-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">I received an interesting (spam?) &lt;a href=&quot;http://raibledesigns.com/rd/entry/re_what_web_application_framework#comment-1202766141000&quot;&gt;comment&lt;/a&gt; on my &lt;a href=&quot;http://raibledesigns.com/rd/entry/re_what_web_application_framework&quot;&gt;What Web Application framework should you use?&lt;/a&gt; entry today:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
A useful resource to compare Java web frameworks (Spring, Tapestry, Struts, OpenLaszlo,...) and  also PHP, Python, Ruby web frameworks:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&quot;http://www.therightsoft.com/softwaretechnologies/webframeworks/&quot;&gt;http://www.therightsoft.com/softwaretechnologies/webframeworks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you go to the site, you&apos;ll see they have a &lt;strong&gt;hierarchical list of web application frameworks based on real-word popularity&lt;/strong&gt;. First of all, I&apos;m unsure of what &quot;real-&lt;em&gt;word&lt;/em&gt;&quot; popularity is. 
&lt;/p&gt;
&lt;p&gt;
Let&apos;s assume this is a typo and it should be &quot;real-&lt;em&gt;wor&lt;strong&gt;l&lt;/strong&gt;d&lt;/em&gt;&quot; popularity. Where is the credible source for this data? Where is the link to this credible source? I like the list, its sortability and filterability, but there&apos;s no &lt;em&gt;evidence&lt;/em&gt; that it&apos;s true. Care to elaborate on your sources tom@therightsoft.com?</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/there_is_no_best_web</id>
        <title type="html">There is no &quot;best&quot; web framework</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/there_is_no_best_web"/>
        <published>2008-02-06T15:04:24-07:00</published>
        <updated>2012-11-11T02:00:40-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="comparison" scheme="http://roller.apache.org/ns/tags/" />
        <category term="malcomgladwell" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">From Mike Clark&apos;s blog, I learned about a number of &lt;a href=&quot;http://www.clarkware.com/cgi/blosxom/2008/02/06#TEDTalks&quot;&gt;TED Talks&lt;/a&gt;. As a fan of Malcom Gladwell, I was drawn to &lt;a href=&quot;http://www.ted.com/index.php/talks/view/id/20&quot;&gt;What we can learn from spaghetti sauce&lt;/a&gt;. In this talk, he talks about the research that Howard Moskowitz did for spaghetti sauce and how it changed the food industry forever. Here&apos;s a couple of quotes I wrote down:
&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
&quot;When we pursue universal principles in food, we aren&apos;t just making an error, we are actually doing ourselves a massive disservice.&quot;&lt;br/&gt;
&lt;!--break--&gt;
...&lt;br/&gt;
&quot;The difference between coffee at 60 (% satisfied) and coffee at 78 is the difference between coffee that makes you wince and coffee that makes you deliriously happy.&quot;&lt;br/&gt;
...&lt;br/&gt;
In embracing the diversity of human beings, we will find a sure way to true happiness.&lt;/p&gt;
&lt;p&gt;Can this thinking be applied to web frameworks as well? What if it&apos;s not about &lt;a href=&quot;http://raibledesigns.com/rd/entry/choosing_a_jvm_web_framework&quot;&gt;choosing the best framework for your type of application&lt;/a&gt;? What if it&apos;s all personality related?&lt;/p&gt;
&lt;p&gt;&amp;raquo; &lt;a href=&quot;http://java.dzone.com/news/there-no-best-web-framework&quot;&gt;Read more and comment on Javalobby&lt;/a&gt;.</content>
    </entry>
    <entry>
        <id>https://raibledesigns.com/rd/entry/groovy_rails_with_components_ria</id>
        <title type="html">Groovy, Rails needs Components, RIA Frameworks compared and faster WebTests</title>
        <author><name>Matt Raible</name></author>
        <link rel="alternate" type="text/html" href="https://raibledesigns.com/rd/entry/groovy_rails_with_components_ria"/>
        <published>2008-02-05T00:30:34-07:00</published>
        <updated>2008-02-05T07:33:29-07:00</updated> 
        <category term="/Java" label="Java" />
        <category term="rails" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webtest" scheme="http://roller.apache.org/ns/tags/" />
        <category term="webframeworks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="canoo" scheme="http://roller.apache.org/ns/tags/" />
        <category term="groovy" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Here&apos;s some interesting snippets I found while reading blogs today:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;em&gt;Stop writing plain old Java code. Groovy obsoletes plain old Java. We ought to just say &quot;Java 7 = Groovy&quot; and move on.&lt;/em&gt; -- &lt;a href=&quot;http://relevancellc.com/2008/2/4/layering-and-platform-choice&quot;&gt;Stuart Halloway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;So far my experience is that I love the Ruby language and don&apos;t want to go back to doing Java except when/if I need to to pay the bills. But Rails I&apos;m not as sold on. Mind you I&apos;m not here to bash on Rails, there are some great things there and other people have done a fine job of praising them. But there are some things I definitely miss from Tapestry, and the most significant one is components.&lt;/em&gt; -- &lt;a href=&quot;http://mysterycoder.blogspot.com/2008/02/rails-components-i-do-not-think-that.html&quot;&gt;MysteryCoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;If you&apos;re looking for maximum control over presentation and the best possible appearance for the finished product, I would say Flex is probably the way to go. If you&apos;re a Java developer using Java on the server side, or you just can&apos;t stand the thought of having your app run in the Flash player and would prefer JavaScript, GWT is probably going to work out very well for you. Open Laszlo is going to offer a great deal of platform versatility, but at the expense of some polish and features available in the other two frameworks.&lt;/em&gt; - Kevin Whinnery in &lt;a href=&quot;http://www.sys-con.com/read/489336_1.htm&quot;&gt;Three RIA Platforms Compared: Adobe Flex, Google Web Toolkit, and OpenLaszlo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;A new experimental feature of WebTest allows to specify the number of threads that should be used for the tests what can bring enormous speed improvements without modification of the tests.&lt;/em&gt; -- &lt;a href=&quot;http://mguillem.wordpress.com/2008/02/04/boost-your-webtests-50-faster-or-more/&quot;&gt;Marc Guillemot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To summarize: use Groovy over Java, Rails needs components, Flex is the best RIA framework and WebTest keeps getting better. These aren&apos;t my words, but I don&apos;t see much fault in them either.</content>
    </entry>
</feed>

