<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.9.2 (http://www.squarespace.com/) on Wed, 10 Mar 2010 18:12:03 GMT--><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><title>Rimple on Tech</title><subtitle>Rimple on Tech</subtitle><id>http://www.rimple.com/tech/</id><link rel="alternate" type="application/xhtml+xml" href="http://www.rimple.com/tech/"/><link rel="self" type="application/atom+xml" href="http://www.rimple.com/tech/atom.xml"/><updated>2010-01-21T12:59:19Z</updated><generator uri="http://www.squarespace.com/" version="Squarespace Site Server v5.9.2 (http://www.squarespace.com/)">Squarespace</generator><entry><title>Venkat Subramaniam on Groovy, DSL adoption, other dynamic languages - TechCast</title><category term="Podcast Episodes"/><category term="chariot-news"/><category term="techcast"/><id>http://www.rimple.com/tech/2010/1/21/venkat-subramaniam-on-groovy-dsl-adoption-other-dynamic-lang.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2010/1/21/venkat-subramaniam-on-groovy-dsl-adoption-other-dynamic-lang.html"/><author><name>Ken Rimple</name></author><published>2010-01-21T11:36:34Z</published><updated>2010-01-21T11:36:34Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>I have been absolutely thrilled with the roster of speakers on the TechCast. This show is with one of my favorite speakers, Venkat Subramaniam. Venkat is a long-time Groovy proponent, but is quick to point out that he uses other languages, and always strives to use the right tool for the job.</p>
<p>Here is the link to the show notes page : <a class="offsite-link-inline" href="http://ow.ly/YUWF" target="_blank">Episode #49 - Venkat Subramanaim</a></p>
<p>In this interview we talk about the adoption of languages such as Groovy, Ruby and Scala, and hear a few good stories along the way. <br /> <br />Venkat is speaking this year at our Emerging Technologies for the Enterprise conference (April 8-9) on Domain Specific Languages.</p>
<p>Up next we will feature Jeremy Grelle from SpringSource on thier web and RIA initiatives, and just afterward Brian Sletten on the Semantic Web.  I hope you are enjoying listening to these interviews as much as I am recording them.</p>]]></content></entry><entry><title>New! DevNews in TechCast stream</title><category term="Chariot Solutions"/><category term="Podcast Episodes"/><category term="Technology News"/><id>http://www.rimple.com/tech/2010/1/18/new-devnews-in-techcast-stream.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2010/1/18/new-devnews-in-techcast-stream.html"/><author><name>Ken Rimple</name></author><published>2010-01-19T03:41:13Z</published><updated>2010-01-19T03:41:13Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>I've just started a new series of podcasts called DevNews - things Charioteers are reading, interested in, or generally want to share with our listeners. &nbsp;You can <a class="offsite-link-inline" href="http://media.libsyn.com/media/chariottechcast/Chariot-DevNews-1-01-18-2010.mp3" target="_blank">listen to the NewsCast</a> (episode 1) and also review the links at our <a class="offsite-link-inline" href="http://delicious.com/developernews/1" target="_blank">delicious page.</a></p>
<p>We hope you enjoy, and find something useful in each news cast.</p>
<p>Ken</p>
<p>&nbsp;</p>]]></content></entry><entry><title>Philadelphia Emerging Technologies Conference (4/8 − 4/9 2010) Registration Now Open</title><category term="ETE"/><category term="News"/><id>http://www.rimple.com/tech/2009/12/14/philadelphia-emerging-technologies-conference-48-49-2010-reg.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/12/14/philadelphia-emerging-technologies-conference-48-49-2010-reg.html"/><author><name>Ken Rimple</name></author><published>2009-12-14T19:37:08Z</published><updated>2009-12-14T19:37:08Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>We are excited to announce the opening of the 2010 Philadelphia Emerging Technologies for the Enterprise conference, being held on April 8 &minus; 9, 2010. &nbsp;The event will be held downtown at the Society Hill Sheraton in Philadelphia, Pennsylvania.</p>
<p>The show promises to be a great one. &nbsp;With keynotes from "Uncle Bob" Martin, a founder of the Agile movement and Michael Cote, analyst with RedMonk, several evening events, five rooms of speakers in technologies from Agile to Dynamic Languages, Management to Web Services and more, this is one of the premiere conferences on the east coast this spring.</p>
<p>Speakers for the conference include: Dan Allen (JBoss/RedHat), Jeff Barr (Amazon), David A. Black (Ruby Power and Light), Joe Conway (iPhone instructor, Big Nerd Ranch), Scott Davis (ThirstyHead.com), Joe Gregorio (Google), Yehuda Katz (Engine Yard), Jon Kern (Software Architect, Agile Mentor), Brian Marick (Agile Consultant), Alex Miller (Terracotta), Alex Payne (Twitter), Chris Richardson (SpringSource), Venkat Subramanium (Agile Developer, Inc. founder), James Ward (Adobe) and many more.</p>
<p>To register, visit <a class="offsite-link-inline" href="http://www.phillyemergingtech.com" target="_blank">phillyemergingtech.com</a></p>
<p><em>Disclosure : I work as the Education Director for Chariot Solutions, which organizes this conference.</em></p>
<div><em><br /></em></div>]]></content></entry><entry><title>Podcasts online - Jonas Boner on Akka/Scala as well as Guillaume LaForge on Groovy an Gaelyk</title><category term="Podcast Episodes"/><category term="techcast"/><id>http://www.rimple.com/tech/2009/12/7/podcasts-online-jonas-boner-on-akkascala-as-well-as-guillaum.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/12/7/podcasts-online-jonas-boner-on-akkascala-as-well-as-guillaum.html"/><author><name>Ken Rimple</name></author><published>2009-12-07T18:24:04Z</published><updated>2009-12-07T18:24:04Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>I'm blessed with a bevy of great guests this month.&nbsp; Our first two shows of December are:</p>
<ul>
<li>An <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=555618" target="_blank">interview with Groovy savior and developer of Gaelyk, Guillaume LaForge</a>.&nbsp; We talk about Guillaume's involvement in the Groovy language and details how you can develop Google App Engine web applications using Gaelyk, a Groovy-based library.</li>
<li>A deeply technical <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=557314" target="_blank">interview with Jonas Boner</a>, the creator of the Akka framework.&nbsp; Akka provides access to both Actors and Software Transactional Memory, in the form of Transactors.&nbsp; So, you can mix approaches between transactional memory, message-based asynchronous processing with Actors, and the combination of the two.&nbsp; Very interesting podcast and complements Episode #37 well (like a good wine and cheese)...</li>
</ul>
<p>Enjoy!</p>
<p>Ken</p>
<p>&nbsp;</p>]]></content></entry><entry><title>Java EE, Seam, Weld and JSF</title><category term="Opinion"/><category term="chariot-news"/><id>http://www.rimple.com/tech/2009/12/5/java-ee-seam-weld-and-jsf.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/12/5/java-ee-seam-weld-and-jsf.html"/><author><name>Ken Rimple</name></author><published>2009-12-05T13:04:17Z</published><updated>2009-12-05T13:04:17Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>Very interesting article from Gavin King. Essentially my original opinion on Seam, based on interviews this Spring with a number of JBoss developers, is that it would be cannibalized to help the Java EE 6 spec.</p>
<p>Gavin says that EJBs are now needed less (only for exposing web services) and that Weld - the maybe 4th name for JSR-299 would take the injection technology.</p>
<p>Also he goes on to say that JSF 2 really took it's major shift in simplicity from Seam (no more page beans config file) and that the Seam programming model will be the JavaEE programming model.</p>
<p>The full article here:</p>
<p><a class="offsite-link-inline" href="http://www.infoq.com/news/2009/11/weld10" target="_blank">http://www.infoq.com/news/2009/11/weld10</a></p>]]></content></entry><entry><title>SpringSource Core Spring training @ Fort Washington - 12/8 - 12/11 2009</title><category term="Training"/><category term="chariot-news"/><id>http://www.rimple.com/tech/2009/11/23/springsource-core-spring-training-fort-washington-128-1211-2.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/11/23/springsource-core-spring-training-fort-washington-128-1211-2.html"/><author><name>Ken Rimple</name></author><published>2009-11-23T18:11:48Z</published><updated>2009-11-23T18:11:48Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>On December 8, 2009, Chariot Solutions will be holding official Core Spring training at our Fort Washington, PA training center, just outside Philadelphia. This is the SPR-001 Core Spring Framework course, which provides an in-depth look at the core container, AOP, JDBC, ORM, JMS, MVC and more.&nbsp;&nbsp;</p>
<p>Upon course completion, each attendee gets a free voucher to test for the Core Spring certification test.&nbsp;</p>
<p><span>To register, visit SpringSource's training site at <a href="http://www.springsource.com/training/spr001/phi-20091208"><span>http://www.springsource.com/training/spr001/phi-20091208</span></a>.</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content></entry><entry><title>Philly Spring User Group Meeting Tonight 11/19</title><category term="Events"/><category term="spring"/><category term="tc Server"/><id>http://www.rimple.com/tech/2009/11/19/philly-spring-user-group-meeting-tonight-1119.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/11/19/philly-spring-user-group-meeting-tonight-1119.html"/><author><name>Ken Rimple</name></author><published>2009-11-19T18:12:11Z</published><updated>2009-11-19T18:12:11Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>The meeting is being held downtown at 2001 Market Street, and will feature SpringSource's Tom McCutch. &nbsp;He will be talking about Spring 3.0, and giving a demonistration of the developer version of SpringSource's tc Server, an optimized and instrumented version of Tomcat.</p>
<p>Details : <a class="offsite-link-inline" href="http://phillyspring.ning.com/events/november-meeting-spring" target="_blank">http://phillyspring.ning.com/events/november-meeting-spring</a><br /></p>]]></content></entry><entry><title>SpringSource Tool Suite 2.2.0 and Grails</title><category term="Technologies"/><category term="grails"/><id>http://www.rimple.com/tech/2009/10/22/springsource-tool-suite-220-and-grails.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/10/22/springsource-tool-suite-220-and-grails.html"/><author><name>Ken Rimple</name></author><published>2009-10-22T10:19:44Z</published><updated>2009-10-22T10:19:44Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p><em style="font-size: 120%;"><span style="font-size: 120%;">Note - this is potentially a second option. &nbsp;According to </span></em><a class="offsite-link-inline" href="http://mrhaki.blogspot.com/2009/10/adding-groovy-and-grails-support-to.html" target="_blank"><span style="text-decoration: none;"><em style="font-size: 120%;"><span style="font-size: 120%;">this link</span></em></span></a><em style="font-size: 120%;"><span style="font-size: 120%;">&nbsp;you just have to select both plugins (for some reason when I downloaded the tool suite and tried the artifact wasn't there for the codehaus groovy core plugin). &nbsp;Try the above link first, then if that doesn't work, go ahead and follow the instructions below.</span></em></p>
<p>Ken</p>
<p>[original message]</p>
<p>Correlated with this STS forums post:</p>
<p><a class="offsite-link-inline" href="http://forum.springsource.org/showthread.php?t=79409  " target="_blank">http://forum.springsource.org/showthread.php?t=79409</a></p>
<p>Grails is not included automatically in the new STS 2.2.0 release just issued on Wednesday 10/12. &nbsp;You have to go to the Add New Software menu and add it from the optional STS tools menu.</p>
<p>If you're having trouble with installing Grails because it complains about a missing dependency, add the following repository (in Add New Software) and restart STS:</p>
<p><code>http://dist.codehaus.org/groovy/distributions/greclipse/snapshot/e3.5/</code></p>
<p>If that doesn't work, manually add the groovy core feature from that library while adding Grails. &nbsp;At that point you should be off to the races.</p>
<p>It's not IntelliJ Idea yet, but they are committed to getting things working in the IDE. &nbsp;Right now, based on my own hacking, I see you can:</p>
<ul>
<li>Hit Command-G (CTRL-G for non-apple people) and get the 'enter a grails command' yellow tool popup. &nbsp;This is great for any create-domain-class etc.</li>
<li>Run as Grails Command (run-app), Groovy Shell, added to right click menu.</li>
<li>Run as JUnit Test for Grails test classes</li>
<li>Although the debugger complains that it can't debug, due to missing line number information, click the ignore future warnings checkbox - it works fine. &nbsp;Got it to debug a bootstrap and a controller method.</li>
</ul>
<p>That's it so far, pretty impressive. &nbsp;I noted you have to hit F5 if you add a plugin or other artifact, as it didn't seem to refresh the file system (gdsflex adds a views/flex and views/swf directory, for example). &nbsp;However I think you can turn an auto-refresh setting on in the IDE.</p>
<p>Now if I could just configure the flex plugin from Adobe on the same instance, I could actually get a flex and grails project working in a single IDE instance. &nbsp;Yeah&hellip; &nbsp;Time to try to break my configuration!</p>
<p>&nbsp;</p>]]></content></entry><entry><title>Chariot TechCast reaches 40th episode (middle age?)</title><category term="Announcements"/><category term="Chariot Solutions"/><category term="Podcasts"/><category term="techcast"/><id>http://www.rimple.com/tech/2009/9/11/chariot-techcast-reaches-40th-episode-middle-age.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/9/11/chariot-techcast-reaches-40th-episode-middle-age.html"/><author><name>Ken Rimple</name></author><published>2009-09-11T18:43:32Z</published><updated>2009-09-11T18:43:32Z</updated><summary type="html" xml:lang="en-US"><![CDATA[Like Danny Glover in Lethal Weapon, the podcast is now over 40, and asking questions like "Am I too old for this stuff?"  However, I'm not.  Turns out we have a lot of quality podcasts recorded over the last few months...]]></summary></entry><entry><title>Using the gsql plugin for Griffon</title><category term="Groovy/Grails"/><category term="chariot-news"/><category term="griffon"/><category term="groovy"/><id>http://www.rimple.com/tech/2009/9/3/using-the-gsql-plugin-for-griffon.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/9/3/using-the-gsql-plugin-for-griffon.html"/><author><name>Ken Rimple</name></author><published>2009-09-03T21:23:29Z</published><updated>2009-09-03T21:23:29Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>Recently Andres Almiray has added a gsql plugin to Griffon.&nbsp; This is very cool, as it lets you configure datasources ala' grails, and then inject the Groovy SQL API into your controllers.</p>
<p>Here is how it works:</p>
<p>First, install the plugin by using the instruction</p>
<p style="padding-left: 30px;"><strong>griffon install-plugin gsql 1.0-SNAPSHOT</strong></p>
<p>Next, configure your database connection using the ./griffon-app/conf/DataSource.groovy file, the same way you would a grails app.</p>
<p>Once configured, you may use the withSql closure to inject the Groovy SQL object, pre-initialized via your data source, into your code.&nbsp; Here is a simple example:</p>
<p style="padding-left: 30px;"><strong>def rows = [];</strong></p>
<p style="padding-left: 30px;"><strong>withSql { sql -&gt;<br />&nbsp;&nbsp; sql.eachRow("select name from city") { row -&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows &lt;&lt; row.name<br />&nbsp;&nbsp; }<br />}</strong></p>
<p>There, that wasn't so hard, now was it?</p>
<p>Programming note:&nbsp; I am recording a Chariot TechCast with Andres tonight and will have it posted sometime next week.&nbsp; Thanks, Andres!</p>
<p>Ken</p>
<p>&nbsp;</p>]]></content></entry><entry><title>My Philly Spring User Group slides and zip on Spring Roo</title><category term="Presentations"/><category term="SpringSource Roo"/><category term="chariot-news"/><id>http://www.rimple.com/tech/2009/7/14/my-philly-spring-user-group-slides-and-zip-on-spring-roo.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/7/14/my-philly-spring-user-group-slides-and-zip-on-spring-roo.html"/><author><name>Ken Rimple</name></author><published>2009-07-14T14:25:21Z</published><updated>2009-07-14T14:25:21Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>For those interested in SpringSource's <a class="offsite-link-inline" href="http://www.springsource.org/roo" target="_blank">Roo framework</a>, here are the <a href="http://www.rimple.com/storage/presentations/PhillySUGSpringRooKenRimple.pdf" target="_blank">slides</a> and <a href="http://www.rimple.com/storage/presentations/roocontracksolution.zip" target="_blank">zip file</a> of a simple project I hacked around on with the tool.&nbsp; In the slides I discuss a little about the internals, how Roo works overall, and what I see as the benefits of the platform once it matures.</p>
<p>I've been contributing with <a class="offsite-link-inline" href="http://jira.springframework.org/browse/ROO" target="_blank">JIRA issues</a> and <a class="offsite-link-inline" href="http://forum.springsource.org/forumdisplay.php?f=67" target="_blank">forum posts</a> on the SpringSource Roo forum pages, and the team has been outstanding in getting to issues.&nbsp; One problem I ran into was fixed in 3 hours.&nbsp; It definitely looks like SpringSource is pulling out the stops to build this framework, so watch for it over the next 3-6 months as it becomes more production ready.</p>
<p>&nbsp;</p>]]></content></entry><entry><title>TechCast with James Ward of Adobe</title><category term="Podcast Episodes"/><category term="Tech Cast"/><id>http://www.rimple.com/tech/2009/7/14/techcast-with-james-ward-of-adobe.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/7/14/techcast-with-james-ward-of-adobe.html"/><author><name>Ken Rimple</name></author><published>2009-07-14T10:39:06Z</published><updated>2009-07-14T10:39:06Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>In <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=502955" target="_blank">Episode 34</a>, I speak to James Ward about Adobe's plans for Flex 4.0, slated for release later this year.&nbsp; James spoke to me last year in <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=372625" target="_blank">Episode 17</a> when Flex 3 was gaining a lot of momentum, and is a regular at the Philadelphia Emerging Tech conferences.&nbsp; He also hosts <a class="offsite-link-inline" href="http://www.drunkonsoftware.com" target="_blank">Drunk on Software</a>, a videoblog where <a class="offsite-link-inline" href="http://www.jamesward.com/blog" target="_blank">he</a> and <a class="offsite-link-inline" href="http://www.ectropic.com/wordpress/" target="_blank">Jon Rose</a> ply their guests with drink and get 'em to spill the beans.&nbsp; I've seen a few of them, and they are entertaining and informative.</p>
<p>Anyway, enjoy the podcast.</p>]]></content></entry><entry><title>Chariot TechCast summer vacation about to end</title><category term="Announcements"/><category term="chariot-news"/><category term="techcast"/><id>http://www.rimple.com/tech/2009/7/2/chariot-techcast-summer-vacation-about-to-end.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/7/2/chariot-techcast-summer-vacation-about-to-end.html"/><author><name>Ken Rimple</name></author><published>2009-07-02T15:32:19Z</published><updated>2009-07-02T15:32:19Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>For those of you who listen to my Chariot TechCast, I've been busy with other things lately, including launching Chariot's training practice, which now features official Spring Framework Training.&nbsp; So, the TechCast has been on a bit of a vacation.&nbsp; I feel like Click and Clack putting the puzzler to bed.</p>
<p>Lucky for me, I'm not on a scheduled 1-hour radio program that has to deliver every week.&nbsp; Nevertheless, I've been getting antsy to do more recordings, so coming up in July and August (subject to change):</p>
<ul>
<li>A discussion with James Ward on Flex 4.0 and other topics</li>
<li>A 'beer night' recording with Chariot's Integration and SOA team about the state of Open Source Integration</li>
<li>Potentially a discussion about SpringSource Roo (speakers TBD)</li>
<li>Discussion with members of The Open Source Alliance</li>
<li>A discussion on CouchDB</li>
<li>Talk with a very influential consultant and blogger on Java Concurrency.</li>
</ul>
<p>Whet your appetite?&nbsp; If you haven't listened to the archives, we have lots of interesting topics to choose from, including discussions on <a class="offsite-link-inline" href="http://feedproxy.google.com/~r/ChariotTechCast/~3/AH6nIaGJ32Q/index.php" target="_blank">Spring</a>, <a class="offsite-link-inline" href="http://feedproxy.google.com/~r/ChariotTechCast/~3/MhZvYER2vHk/index.php" target="_blank">Seam</a>, <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=478352" target="_blank">JSR-299</a> and <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=449889" target="_blank">303</a> (yes, JSRs are interesting too!) <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=388426" target="_blank">Mule</a>, <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=372625" target="_blank">Flex</a>, <a class="offsite-link-inline" href="http://feedproxy.google.com/~r/ChariotTechCast/~3/1LFkK704PJg/index.php" target="_blank">Grails</a>, <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=324562" target="_blank">Rails</a>, <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/index.php?post_id=364833" target="_blank">The Google Map Reduce Process and Hadoop</a>, and much more.</p>
<p>As usual, you can subscribe via <a class="offsite-link-inline" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=276488929" target="_blank">iTunes</a> or <a class="offsite-link-inline" href="http://techcast.chariotsolutions.com/rss" target="_blank">RSS</a>.</p>
<p>Happy early summer,</p>
<p>Ken</p>
<p>&nbsp;</p>]]></content></entry><entry><title>SpringSource Roo 1.0.0.M2 released, great blog post by Ben Alex on internals...</title><category term="SpringSource Roo"/><category term="chariot-news"/><category term="spring"/><id>http://www.rimple.com/tech/2009/6/18/springsource-roo-100m2-released-great-blog-post-by-ben-alex.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/6/18/springsource-roo-100m2-released-great-blog-post-by-ben-alex.html"/><author><name>Ken Rimple</name></author><published>2009-06-18T20:44:07Z</published><updated>2009-06-18T20:44:07Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>SpringSource just released Milestone 1.0.0.M2 of Roo, their developer productivity tool. It's 'getting better all the time', to quote a Beatles tune.</p>
<p>I was about to set aside some time to go over the internals of SpringSource's Roo and blog about it, but the creator, Ben Alex, beat me to the punch. Read his <a class="offsite-link-inline" href="http://blog.springsource.com/2009/06/18/roo-part-3/" target="_blank">article on the SpringSource blog</a>.</p>
<p>One interesting part of Roo for me is how you can start by scaffolding the UI pages, and then stop and manually customize things. There is an annotation on the Controller like this:</p>
<p><span>@RooWebScaffold</span>(automaticallyMaintainView = <span>true</span>,&nbsp;<br />&nbsp;&nbsp; formBackingObject = Conference.<span>class</span>)</p>
<p>The key item here is the automaticallyMaintainView entry. &nbsp;If set to false, Roo no longer generates and replaces the jsp code. &nbsp;Which means that you can start by scaffolding the view, and then stop and customize it to your heart's content.</p>
<p>Also the Eclipse AJDT plugin apparently has a 'push generation' feature that will turn all aspect-driven code into actual classes, and remove your dependency on Roo altogether. &nbsp;This is important, as you can use Roo to get started, get work done, and eventually part with it if need be.</p>
<p>Interesting stuff to watch going forward.</p>
<p>&nbsp;</p>]]></content></entry><entry><title>SpringSource Roo - What is it?</title><category term="Spring Framework"/><category term="SpringSource Roo"/><category term="Technologies"/><category term="chariot-news"/><id>http://www.rimple.com/tech/2009/6/12/springsource-roo-what-is-it.html</id><link rel="alternate" type="text/html" href="http://www.rimple.com/tech/2009/6/12/springsource-roo-what-is-it.html"/><author><name>Ken Rimple</name></author><published>2009-06-12T12:32:55Z</published><updated>2009-06-12T12:32:55Z</updated><content type="html" xml:lang="en-US"><![CDATA[<h3>Overview</h3>
<p>I just did a talk with our development team at Chariot on SpringSource's latest application platform builder, Roo. As with most new projects, I approached it with some skepticism--why do we need another convention over configuration framework?&nbsp; Re: Spring, I was happy working in Grails! After spending a couple of days with it, I now realize that it was a very smart move to create this project.&nbsp; This series of posts will outline what I'm learning, and hopefully will get you off to a good start in your own experiments.</p>
<p>Much of what I'm saying was written up very well by Ben Alex himself in <a class="offsite-link-inline" title="Ben Alex' excellent post on the SpringSource Roo framework." href="http://blog.springsource.com/2009/05/27/roo-part-2/" target="_blank">this blog post</a>.  I suggest reading his post as well.</p>
<h3>They're using Maven?</h3>
<p>Roo is headed up by Ben Alex, and it was refreshing to see that his approach is centered around using Maven as the build system.&nbsp; Essentially, the roo platform gives you a command line (named, aptly, 'roo'), which lets you issue commands to build and modify your platform.</p>
<p>For example, to build a new project, you issue:</p>
<pre><code>roo&gt; create project -topLevelPackage com.chariot.demo.roodemo<br /></code></pre>
<p>This builds a new Maven project.  Under the covers, the team has installed the following features:</p>
<ul>
<li>Spring Framework 3.0.0 beta</li>
<li>Spring <span class="caps">MVC, </span>annotation driven</li>
<li>A Web application plus the mvc context</li>
<li>Spring context loaders in web.xml</li>
<li>Jetty and Tomcat runner support</li>
<li>Eclipse and SpringSource Tool Suite project natures, including <span class="caps">ADJT,</span> Spring, <span class="caps">STS</span></li>
</ul>
<h3><span class="caps">JPA</span> Support</h3>
<p>This is a fully functional application from the get-go.  What's more, you can add features to the project easily.  Since it's a convention-over-configuration, domain-driven application platform, let's create a <span class="caps">JPA </span>domain class.  First, we have to install <span class="caps">JPA</span>:</p>
<pre><code>roo&gt; <strong>install jpa -provider HIBERNATE -database MYSQL</strong><br /></code></pre>
<p>This installs <span class="caps">JPA </span>support.  You could also pick <span class="caps">ECLIPSELINK </span>or OpenJPA as providers.  The Maven build is configured to add the relevant libraries, and the applicationContext.xml file reflects the installation of <span class="caps">JPA </span>as a platform.  In addition, roo sets up the transaction management platform, including annotation-driven transactions, and gives you a database.properties file.</p>
<p>One thing to note:  right now Roo gives you a DriverManagerDataSource, which doesn't do connection pooling, but you are free to modify that and add the relevant support for DBCP or C3P0 instead.  In fact, roo has an "add dependency" command to add Maven Artifacts, if you'd like to use their command line.</p>
<h3>Creating a <span class="caps">JPA</span> Domain Object</h3>
<p>Normally Spring developers are used to building <span class="caps">JPA </span>entities, wrapping them with Repository objects, and then coordinating access to these data layer repositories with Service-level beans. Ben and his team seem to have realized that one of the key features of Grails is <span class="caps">GORM, </span>a domain-driven object relational modeling system.  In <span class="caps">GORM, </span>you can define and add constraints to an object, and have it persist itself.</p>
<p>The clever way that the Roo team solved this challenge was to add special annotations and some <span class="caps">AOP </span>magic to weave in validation and persistence code using Aspects.  For example, if I define a simple <span class="caps">JPA </span>bean using 'new persistent class jpa' and edit it like this:</p>
<pre><code><br />// the roo command to generate the class skeleton:<br />roo&gt; <strong>new persistent class jpa -name Conference</strong><br /><br /><strong>// (without imports) the code:<br />@Entity<br />@RooEntity<br />@RooJavaBean<br />@RooPlural("conferences")<br />@RooToString<br />public class Conference {<br />    @Column(nullable=false)<br />    @Size(min = 5, max = 30, <br />       message = "Please enter a name between {min} <br />                  and {max} characters.")<br />    private String name;<br /><br />    @Size(min = 10, max=512, <br />       message = "{description.required}")<br />    private String description;<br /><br />    @Temporal(TemporalType.TIMESTAMP)<br />    @Column(insertable=true, updatable=false)<br />    @NotNull<br />    private Date created;<br />}</strong><br /></code></pre>
<p>You are getting the following functionality:</p>
<ul>
<li> You get an id and version column automatically by default</li>
<li>You can use <span class="caps">JSR</span>-303 annotations like @NotNull, @Size, and others.  These will modify the UI pages and generate error messages using Spring <span class="caps">MVC'</span>s errors object.</li>
<li>Roo will <strong>automatically</strong> generate getters and setters and helper methods for your domain objects, and do it by watching your @Entity classes and sensing that they are changed</li>
<li><strong>Hint</strong>:&nbsp; If you place a ValidationMessages.properties file in the root of the src/main/resources directory you can externalize the error messages as in the {description.required} message above.&nbsp; Roo doesn't look for these in the MessageSources as this is a JSR-303 spec requirement.</li>
</ul>
<p>Roo will also write persistence mechanisms and attach them to the Entity's class.  For example, you get:</p>
<ul>
<li><strong>persist()</strong> - saves your entity for the first time</li>
<li><strong>remove()</strong> - deletes the entity</li>
<li><strong>findAllConferences()</strong> - does a jpa entity manager query to get the all conferences</li>
<li><strong>findConferenceById()</strong> - does a get by the primary key</li>
<li><strong>flush() </strong>- flushes to the persistent storage mechanism (Hibernate in this case)</li>
<li><strong>countAllConferences()</strong> - does a select count(*) query to count the rows</li>
</ul>
<p>How does it do that?</p>
<h3>How Roo does that ;-)</h3>
<p>(Ok, I couldn't resist.)  Here's how it works:  Roo uses AspectJ to install .aj files to shadow all of the key objects (Domain Classes, Controllers, etc).  It also installs certain <span class="caps">AOP </span>features that look for key annotations such as @RooEntity and @RooJavaBean to generate and synchronize those .aj files.</p>
<p>The Conference file generates (as of today) the following AJ files:</p>
<ul>
<li> <strong>Conference_Roo_Entity.aj</strong> - wires in the id and version fields, as well as flush(), merge(), countConferences(), findAllConferences(), findConference() and findConferenceEntries()</li>
<li><strong>Conference_Roo_JavaBean.aj</strong> - generates getters and setters for fields in the domain class</li>
<li><strong>Conference_Roo_Plural.aj</strong> - looks like it determines how to ask for multiples of the object.  So, for example, Entity would be defaulted to Entitys.  Apparently there is an @RooPlural annotation that lets you modify what gets generated here.</li>
<li><strong>Conference_Roo_ToString.aj</strong> - automatically creates an Apache ToStringBuilder on the fields including the id and version.  Nice touch.</li>
<li><strong>Conference_Roo_Configurable.aj</strong> - adds the @Configurable annotation to the entity. This is where my spring-fu needs a little dusting off ;)</li>
</ul>
<p>So, now roo can issue calls to the Conference object as if it is a domain class. &nbsp;</p>
<p>Update, I was attempting to do this in IntelliJ Maia within a controller, and I couldn't issue the code. It looks like if you want to edit the code yourself you need to further configure Maia and on Eclipse you really need SpringSource Tool Suite with the Roo plugin. &nbsp;I'm testing this with the 2.1.0.M2 release of STS. &nbsp;</p>
<pre><code>Conference c = Conference.findConference(2L);<br />c.setName("BasketWeaving 101");<br />c.update();</code></pre>
<h3>The Story So Far...</h3>
<p>So, in a few steps, we've created a project and configured it with <span class="caps">JPA, </span>then written a fully domain-driven database model object that can be persisted using this platform.  If it wasn't obvious, I keep a roo command line open all the time, run SpringSource Tool Suite (or IntelliJ Idea Maia beta, which has support for Aspects), and run the app using 'mvn jetty:run' or 'mvn tomcat:run'.  That's pretty nifty.</p>
<h3><span class="caps">IDE</span> Support</h3>
<p>To use Roo under <span class="caps">STS </span>/ Eclipse, just use 'mvn eclipse:eclipse' and import the existing project into your workspace.  To use it under Idea, you'll have to download the Maia beta (it works pretty well and can view aspect files without screwing up your project).  I've also tested this from NetBeans and it opened and let me view the aspects as text files.  You should <strong><span class="caps">NOT</span></strong> edit the .aj files directly, as they are re-generated and you'll lose code.</p>
<p>One word of warning:  On <span class="caps">STS </span>/ Eclipse, you'll have to refresh the project if you add support for any feature that updates the maven pom.  To build the eclipse project, do 'mvn eclipse:eclipse' and then go and refresh (F5) the project tree.  Also, I've seen where I have to manually referesh contents of files because Eclipse doesn't watch them very well.  IntelliJ or NetBeans 6.7 <span class="caps">RC2 </span>do fine re-reading the <span class="caps">POM </span>automatically.</p>
<h3>Why not Groovy/Grails?</h3>
<p>That's a good question.&nbsp; Rod/Ben answered this somewhere in the blog post comments with the comment that many Spring developers can't or won't move to Groovy and/or another persistence framework like GORM.&nbsp; If your company insists on doing Spring development in Java, or wants you to use the Spring APIs directly rather than wrap them in something like Grails, this is a great alternative.&nbsp; Also, I can't think of a better way to kick the tires of features like Spring Security, JMS Templating, Spring IoC 3.0, Bean Validation annotations, JPA, and others from within Spring itself.</p>
<p>I'm still a huge Groovy on Grails fan, and see this as one of two ways to build applications on top of the Spring core.&nbsp; The fact that regular Spring developers can take advantage of domain-driven application persistence is a huge bonus for our industry.</p>
<h3>Early Days</h3>
<p>This product still has a way to go, and was released as a milestone build recently (1.0.0.M1).&nbsp; I've asked questions in the forum and posted JIRA issues, and the team has been absolutely responsive.&nbsp; They will take your input and are welcoming contributors.</p>
<h3>Resources</h3>
<ul>
<li><a class="offsite-link-inline" title="Spring Roo Forums" href="http://forum.springsource.org/forumdisplay.php?f=67" target="_blank">The Spring Roo Developer Forum</a></li>
<li><a class="offsite-link-inline" title="SpringSource JIRA for Roo" href="http://jira.springframework.org/browse/ROO" target="_blank">Spring Roo JIRA Defect Tracking</a></li>
<li>Ben Alex's Posts:&nbsp; <a class="offsite-link-inline" title="Ben Alex Roo Part 1" href="http://blog.springsource.com/2009/05/01/roo-part-1/?__utma=1.890248640173074200.1238776446.1238776446.1242417726.2&amp;__utmb=1.1.10.1244590143&amp;__utmc=1&amp;__utmx=-&amp;__utmz=1.1242417726.2.3.utmcsr=googleutmccn=organicutmcmd=organicutmctr=how%20to%20redirect%20to%20error%20page%20in%20HandlerInterceptorAdapter&amp;__utmv=-&amp;__utmk=58459050" target="_blank">Part One</a>, <a class="offsite-link-inline" title="Ben Alex Post Part 2" href="http://blog.springsource.com/2009/05/27/roo-part-2/" target="_blank">Part Two</a></li>
</ul>
<h3>Coming up...</h3>
<p>Over the next series of posts, I'll dig deeper into the <span class="caps">JPA </span>configuration, talk about scripting roo, outline the web framework, and show you how you can use Roo to automatically scaffold your web application and interact with the domain-driven Entities, using annotations and aspects.</p>]]></content></entry></feed>