<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Jump into Roo for extreme Java productivity</title>
	<atom:link href="http://blog.springsource.com/2009/05/01/roo-part-1/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.springsource.com/2009/05/01/roo-part-1/</link>
	<description>The voice of SpringSource</description>
	<pubDate>Mon, 15 Mar 2010 19:30:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Spring Roo &#171; Jump into</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-167514</link>
		<dc:creator>Spring Roo &#171; Jump into</dc:creator>
		<pubDate>Tue, 07 Jul 2009 23:02:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-167514</guid>
		<description>[...] explanation I like very much: [Roo is a] little genie who sits in the background and handles the things I [...]</description>
		<content:encoded><![CDATA[<p>[...] explanation I like very much: [Roo is a] little genie who sits in the background and handles the things I [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin Sampaleanu</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-167427</link>
		<dc:creator>Colin Sampaleanu</dc:creator>
		<pubDate>Fri, 26 Jun 2009 20:57:33 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-167427</guid>
		<description>Framl,

You're really quoting me out of context here...

I was specifically replying to a comment which complained about Roo generating 3 aspect classes (basically the ITDs) for your main Java class, and this being comparable to EJB 2.1 programming, or writing lots and lots of XML. My main point was that you really don't have to worry about creating these ITDs yourself, or having them impact your code at the code level (i.e. having to extend special base classes, implement special interfaces, or tie yourself to a container, etc. Roo will create (and remove) the helper ITDs automatically... This is fundamentally different than EJB 2.1, which has a huge impact on your code and process in a number of ways, and is fundamentally different to writing and managing lots of XML.

That said, w/respect to having to think about or understand the code in the ITDs, I do think the Roo approach required a fundamentally different level of understanding and involvement with that code, since you don't have to write it. It's one thing to add a field to your entity, and then have Roo automatically create or modify an aspect to add persistence for that field, and then be easily able to go in and see the generated code (and even do push down refactoring if you want to, to bring it into your code), vs. quite another level of understanding and involvement to go the traditional route of having to write the persistence code yourself from scratch...

Colin</description>
		<content:encoded><![CDATA[<p>Framl,</p>
<p>You&#039;re really quoting me out of context here&#8230;</p>
<p>I was specifically replying to a comment which complained about Roo generating 3 aspect classes (basically the ITDs) for your main Java class, and this being comparable to EJB 2.1 programming, or writing lots and lots of XML. My main point was that you really don&#039;t have to worry about creating these ITDs yourself, or having them impact your code at the code level (i.e. having to extend special base classes, implement special interfaces, or tie yourself to a container, etc. Roo will create (and remove) the helper ITDs automatically&#8230; This is fundamentally different than EJB 2.1, which has a huge impact on your code and process in a number of ways, and is fundamentally different to writing and managing lots of XML.</p>
<p>That said, w/respect to having to think about or understand the code in the ITDs, I do think the Roo approach required a fundamentally different level of understanding and involvement with that code, since you don&#039;t have to write it. It&#039;s one thing to add a field to your entity, and then have Roo automatically create or modify an aspect to add persistence for that field, and then be easily able to go in and see the generated code (and even do push down refactoring if you want to, to bring it into your code), vs. quite another level of understanding and involvement to go the traditional route of having to write the persistence code yourself from scratch&#8230;</p>
<p>Colin</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Framl</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-167420</link>
		<dc:creator>Framl</dc:creator>
		<pubDate>Thu, 25 Jun 2009 17:47:39 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-167420</guid>
		<description>Regarding this comment in one of the replies from Colin above:

"The aspects are generated for you and you don't really have to think or know about them to any real extent,..."

I heartily disagree.  If the generated stuff is running or supporting the app, I have to understand how it works because, inevitably, something will go wrong or I will want it to generate differently, etc.  It doesn't matter how much stuff is generated for me.  If I don't understand it, I can't support it.  

I have seen this time and time again with every wiz-bang tool that comes down the pike.  That's just as true with even Spring itself.  You have to understand the concept of dependency-injection and how it works before you can use Spring effectively (especially when it comes to unit testing).  

In fact, I think that requirement is the fundamental driver behind Roo.  The Java development landscape has been greatly enriched by powerful frameworks like Spring, Hibernate, JSF, etc.  But with each gain has also come a significant increase in complexity.  So now, Roo comes along and tries to hide all that and jump start the creation of an app, using all these tools the "right" way.  Kinda ironic I think.

Don't get me wrong.  I applaud your efforts and this looks like a great tool to me. 

Just don't oversell it.  This tool may help by letting us ease our way into the massive complexity of all the frameworks involved.  But it surely does not relieve us from having to deeply understand them all eventually.</description>
		<content:encoded><![CDATA[<p>Regarding this comment in one of the replies from Colin above:</p>
<p>&#034;The aspects are generated for you and you don&#039;t really have to think or know about them to any real extent,&#8230;&#034;</p>
<p>I heartily disagree.  If the generated stuff is running or supporting the app, I have to understand how it works because, inevitably, something will go wrong or I will want it to generate differently, etc.  It doesn&#039;t matter how much stuff is generated for me.  If I don&#039;t understand it, I can&#039;t support it.  </p>
<p>I have seen this time and time again with every wiz-bang tool that comes down the pike.  That&#039;s just as true with even Spring itself.  You have to understand the concept of dependency-injection and how it works before you can use Spring effectively (especially when it comes to unit testing).  </p>
<p>In fact, I think that requirement is the fundamental driver behind Roo.  The Java development landscape has been greatly enriched by powerful frameworks like Spring, Hibernate, JSF, etc.  But with each gain has also come a significant increase in complexity.  So now, Roo comes along and tries to hide all that and jump start the creation of an app, using all these tools the &#034;right&#034; way.  Kinda ironic I think.</p>
<p>Don&#039;t get me wrong.  I applaud your efforts and this looks like a great tool to me. </p>
<p>Just don&#039;t oversell it.  This tool may help by letting us ease our way into the massive complexity of all the frameworks involved.  But it surely does not relieve us from having to deeply understand them all eventually.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: NVISIA - Spring Roo</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-167376</link>
		<dc:creator>NVISIA - Spring Roo</dc:creator>
		<pubDate>Tue, 23 Jun 2009 15:25:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-167376</guid>
		<description>[...] http://blog.springsource.com/2009/05/01/roo-part-1/ [...]</description>
		<content:encoded><![CDATA[<p>[...] <a href="http://blog.springsource.com/2009/05/01/roo-part-1/" rel="nofollow">http://blog.springsource.com/2009/05/01/roo-part-1/</a> [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Exploring Roo&#39;s Architecture &#124; SpringSource Team Blog</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-167331</link>
		<dc:creator>Exploring Roo&#39;s Architecture &#124; SpringSource Team Blog</dc:creator>
		<pubDate>Thu, 18 Jun 2009 13:30:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-167331</guid>
		<description>[...] and objectives that influenced its architectural choices. I explored some of these goals in my original Roo blog entry, but let&#39;s revisit the topic here in a little more [...]</description>
		<content:encoded><![CDATA[<p>[...] and objectives that influenced its architectural choices. I explored some of these goals in my original Roo blog entry, but let&#39;s revisit the topic here in a little more [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Getting Started with Spring Roo &#124; SpringSource Team Blog</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-167107</link>
		<dc:creator>Getting Started with Spring Roo &#124; SpringSource Team Blog</dc:creator>
		<pubDate>Wed, 27 May 2009 08:58:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-167107</guid>
		<description>[...] you missed the first installment in the Spring Roo blog series on 1 May 2009, in brief I introduced the vision of [...]</description>
		<content:encoded><![CDATA[<p>[...] you missed the first installment in the Spring Roo blog series on 1 May 2009, in brief I introduced the vision of [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: xeno</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-167024</link>
		<dc:creator>xeno</dc:creator>
		<pubDate>Wed, 20 May 2009 14:36:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-167024</guid>
		<description>Ben,
Thanks. As usually I don't architect. I just do and adapt. Anyway, last question: any plans for command or switch or config option so I can have Roo generate the code in the java classes?
BTW, I and many others, really appreciate your work and efforts, which we use for free!</description>
		<content:encoded><![CDATA[<p>Ben,<br />
Thanks. As usually I don&#039;t architect. I just do and adapt. Anyway, last question: any plans for command or switch or config option so I can have Roo generate the code in the java classes?<br />
BTW, I and many others, really appreciate your work and efforts, which we use for free!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ben Alex</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-166942</link>
		<dc:creator>Ben Alex</dc:creator>
		<pubDate>Tue, 19 May 2009 23:18:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-166942</guid>
		<description>Xeno, I think the key point behind AOP is really "separation of concerns" , as distinct from cross-cutting behavior:

* The importance of separation of concerns is heavily reflected in formal computer science training as well as in practice. It's why we strive for specific layering techniques and concepts like high cohesion, MVC, the decorator pattern and AOP. There is far less emphasis on "cross cutting concerns", as they're simply a fact we need to deal with (like persistence, user interfaces etc) as opposed to some architectural concept we should be pursuing.

* If cross-cutting behavior were the only objective of AOP, we would not see mix-ins, inter type declarations (ITDs) or alike provided by AOP implementations. These concepts exist because the development community has identified merit in the concept of introducing members to types which did not declare those members in the traditional compilation unit for those types. One compelling benefit of mix-ins (ITDs) is separation of concerns.

I referred to cross-cutting behavior in my original reply because that's what most people associate with AOP and it is where its benefit of separation of concerns has been most visibly proven. If you try the tool you will see it easily supports you writing your own members in your own compilation units just as you always have, and it will automatically and intelligently not generate members in ITDs for manually-coded members. You will also see the tool does not do anything unless you ask it to via an annotation or UI directive, and even then it will not act unless the metadata model indicates it should act. It will automatically monitor your environment and update ITDs (and other files) as appropriate in response to changes. 

Roo is one of those things you need to try out to see that it really does not get in your way. It's fine if you don't want to try it out, but if you don't try it out you should at least qualify your remarks accordingly. And if you did try it out and ran into an issue, please let me know what happened so I can clarify whether it is a design constraint or simply a bug that we will fix (remember Roo is only at alpha 2 stage right now).

In closing I again note we could have put all these members directly into .java compilation units if we wanted to. We simply think it's a bad idea as this is not achieving separation of concerns. People who disagree can still use Roo and move the members into their .java compilation units. But they sacrifice the benefits of separation of concerns and will have higher maintenance costs accordingly.</description>
		<content:encoded><![CDATA[<p>Xeno, I think the key point behind AOP is really &#034;separation of concerns&#034; , as distinct from cross-cutting behavior:</p>
<p>* The importance of separation of concerns is heavily reflected in formal computer science training as well as in practice. It&#039;s why we strive for specific layering techniques and concepts like high cohesion, MVC, the decorator pattern and AOP. There is far less emphasis on &#034;cross cutting concerns&#034;, as they&#039;re simply a fact we need to deal with (like persistence, user interfaces etc) as opposed to some architectural concept we should be pursuing.</p>
<p>* If cross-cutting behavior were the only objective of AOP, we would not see mix-ins, inter type declarations (ITDs) or alike provided by AOP implementations. These concepts exist because the development community has identified merit in the concept of introducing members to types which did not declare those members in the traditional compilation unit for those types. One compelling benefit of mix-ins (ITDs) is separation of concerns.</p>
<p>I referred to cross-cutting behavior in my original reply because that&#039;s what most people associate with AOP and it is where its benefit of separation of concerns has been most visibly proven. If you try the tool you will see it easily supports you writing your own members in your own compilation units just as you always have, and it will automatically and intelligently not generate members in ITDs for manually-coded members. You will also see the tool does not do anything unless you ask it to via an annotation or UI directive, and even then it will not act unless the metadata model indicates it should act. It will automatically monitor your environment and update ITDs (and other files) as appropriate in response to changes. </p>
<p>Roo is one of those things you need to try out to see that it really does not get in your way. It&#039;s fine if you don&#039;t want to try it out, but if you don&#039;t try it out you should at least qualify your remarks accordingly. And if you did try it out and ran into an issue, please let me know what happened so I can clarify whether it is a design constraint or simply a bug that we will fix (remember Roo is only at alpha 2 stage right now).</p>
<p>In closing I again note we could have put all these members directly into .java compilation units if we wanted to. We simply think it&#039;s a bad idea as this is not achieving separation of concerns. People who disagree can still use Roo and move the members into their .java compilation units. But they sacrifice the benefits of separation of concerns and will have higher maintenance costs accordingly.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: xeno</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-166884</link>
		<dc:creator>xeno</dc:creator>
		<pubDate>Tue, 19 May 2009 13:51:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-166884</guid>
		<description>Ben,
The keywords in the AOP is "cross-cutting behavior". I agree logging and security are very good candidates for AOP. Looking at the samples though I see that Roo will lean towards AOP for the application core logic (business logic if you like) and this I don't like ...
Like Zqudlyba and many others I know, I am sick and tired of hearing that there will be something that will do the work for me. Face it - the work will be done by me. The question is how much I'll have to fight with the tools/utilities/languages ...
Looks like Roo can help me bootstrap a complete project but if the project won't match my needs/preference I'd better do it the old-fashioned way with a text editor. Back to my previous statement: great idea, it is an empty niche but the balance between simplicity (of the end product not the tool) and flexibility (of the tool) will decide if it's going to be a hit.</description>
		<content:encoded><![CDATA[<p>Ben,<br />
The keywords in the AOP is &#034;cross-cutting behavior&#034;. I agree logging and security are very good candidates for AOP. Looking at the samples though I see that Roo will lean towards AOP for the application core logic (business logic if you like) and this I don&#039;t like &#8230;<br />
Like Zqudlyba and many others I know, I am sick and tired of hearing that there will be something that will do the work for me. Face it - the work will be done by me. The question is how much I&#039;ll have to fight with the tools/utilities/languages &#8230;<br />
Looks like Roo can help me bootstrap a complete project but if the project won&#039;t match my needs/preference I&#039;d better do it the old-fashioned way with a text editor. Back to my previous statement: great idea, it is an empty niche but the balance between simplicity (of the end product not the tool) and flexibility (of the tool) will decide if it&#039;s going to be a hit.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pages tagged "blessed"</title>
		<link>http://blog.springsource.com/2009/05/01/roo-part-1/comment-page-1/#comment-166792</link>
		<dc:creator>Pages tagged "blessed"</dc:creator>
		<pubDate>Tue, 19 May 2009 00:17:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.springsource.com/?p=1761#comment-166792</guid>
		<description>[...] bookmarks tagged blessed Comment on Jump into Roo for extreme Java producti...&#160;saved by 2 others  &#160;&#160;&#160;&#160;lilscrappy bookmarked on 05/18/09 &#124; [...]</description>
		<content:encoded><![CDATA[<p>[...] bookmarks tagged blessed Comment on Jump into Roo for extreme Java producti&#8230;&nbsp;saved by 2 others  &nbsp;&nbsp;&nbsp;&nbsp;lilscrappy bookmarked on 05/18/09 | [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
