<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Code Adept &#187; java</title>
	<atom:link href="http://blog.code-adept.com/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.code-adept.com</link>
	<description>Random thoughts on Agile development and other things geeky.</description>
	<lastBuildDate>Thu, 09 Feb 2012 01:15:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.code-adept.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Code Adept &#187; java</title>
		<link>http://blog.code-adept.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.code-adept.com/osd.xml" title="Code Adept" />
	<atom:link rel='hub' href='http://blog.code-adept.com/?pushpress=hub'/>
		<item>
		<title>JetBrains Open-Sources IntelliJ IDEA</title>
		<link>http://blog.code-adept.com/2009/10/21/jetbrains-open-sources-intellij-idea/</link>
		<comments>http://blog.code-adept.com/2009/10/21/jetbrains-open-sources-intellij-idea/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 23:36:21 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[open-source]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=151</guid>
		<description><![CDATA[Been awfully quiet lately as I am concentrating on finishing my book (http://manning.com/allmon), but this was some great news that I had to share. The makers of the best Java IDE have just announced that they are open-sourcing their IntelliJ IDEA product and offering a community edition for free now. You can read about it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=151&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Been awfully quiet lately as I am concentrating on finishing my book (<a href="http://manning.com/allmon">http://manning.com/allmon</a>), but this was some great news that I had to share.</p>
<p>The makers of the best Java IDE have just announced that they are open-sourcing their IntelliJ IDEA product and offering a community edition for free now.  You can read about it here (<a href="http://www.jetbrains.com/idea/nextversion/free_java_ide.html">The Most Intelligent Java IDE — Now Free and Open Source</a>).</p>
<br /> Tagged: ide, java, open-source <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/151/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=151&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2009/10/21/jetbrains-open-sources-intellij-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Flex on Java update</title>
		<link>http://blog.code-adept.com/2009/04/18/flex-on-java-update/</link>
		<comments>http://blog.code-adept.com/2009/04/18/flex-on-java-update/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 02:03:03 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[Writing]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=142</guid>
		<description><![CDATA[Over the past few months my co-author and I have been working hard at reworking much of what we have already written for our book in order to hopefully result in a much better book for our readers. Earlier today Manning released a letter explaining the delays in any updated chapters to those who have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=142&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over the past few months my co-author and I have been working hard at reworking much of what we have already written for our book in order to hopefully result in a much better book for our readers.  Earlier today Manning released a letter explaining the delays in any updated chapters to those who have purchased a MEAP subscription to our book.  The letter reads as follows:</p>
<blockquote><p>We would like to take a minute to personally update you on the progress of our book. Although we are running behind the originally estimated release date, the end product will be a much better learning experience. From the beginning we have been continually refining the book and have taken the great feedback we&#8217;ve received to align the book more closely to your thoughts and insights. If you are receiving this letter and were part of the reviews, THANK YOU! Much of the feedback received, all helpful, really matched with how we (the authors) were feeling and helped us to really home in on what we felt would be important to include. Here are just some of the things that can be expected out of the new and improved Flex on Java.</p>
<p>Developer accessibility<br />
When we started the Flex on Java journey we wanted to write a book that would assist Java developers in refactoring Java applications with the richness of Flex. Unfortunately, the sample application wasn&#8217;t a good fit for everything we wanted to teach and was absorbing too much of our time trying to make it work properly for the readers. The sample application was an open source product that was not easy to download, build and go. This issue caused us to rethink our approach and we turned to Matt Raible&#8217;s AppFuse framework that is aimed at helping developers build applications quickly and efficiently. AppFuse makes deployment and creation of the sample application a breeze and also opens the door to developers who are new to Java. It allowed us to focus more on the topic of integrating Flex with Java while broadening its audience to those who are not Java or Flex gurus.</p>
<p>Hit the ground running (faster pace)<br />
The free chapter available will become an introduction to the book and chapter 1 will now get readers rolling with development on the first page. Chapter 1 will begin with developing the server-side application with the AppFuse framework and then quickly begin integrating Flex in chapter 2.</p>
<p>Deepening focus on Flex integration with Java<br />
The faster tempo and more narrow focus on the topic of Flex and Java integration allows us to quickly go deeper in that topic. We will discuss how to use BlazeDS to connect to the Java server-side including POJO services, Spring services and Spring security in more detail. We will also include working with real-time JMS applications utilizing the Flex and Java APIs.</p>
<p>More focus on scalable frameworks<br />
Good developers move from technology to technology and look for frameworks that allow them to avoid the common problems when designing an application. Frameworks for doing both dependency injection for creating loosely coupled applications and Model-View-Controller (MVC) will be explored in more detail. Frameworks such as Spring ActionScript, Cairngorm, and Pure MVC (and possibly others) will be demonstrated.</p>
<p>House cleaning<br />
There are other topics like building the application with Ant and setting up continuous integration that are important but not part of the main gist of the book, so we moved those topics into the Appendices of the book. There are other housecleaning items that are being performed to make this the best book possible on integrating Flex with Java.</p>
<p>We hope that you will be delighted with the upcoming changes to the book. Please feel free to provide us with any feedback you may have for us. Thanks again!</p>
<p>Sincerely,<br />
BJ Allmon and Jeremy Anderson<br />
Authors of Flex on Java</p></blockquote>
<br /> Tagged: book, flex, java, RIA <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/142/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=142&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2009/04/18/flex-on-java-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Exploring Groovy at GRJUG</title>
		<link>http://blog.code-adept.com/2009/03/16/exploring-groovy-at-grjug/</link>
		<comments>http://blog.code-adept.com/2009/03/16/exploring-groovy-at-grjug/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 18:14:50 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=134</guid>
		<description><![CDATA[I&#8217;m going to be presenting at the GRJUG meeting this week giving a whirlwind tour of Groovy. Not sure how I&#8217;m going to fit as much as I&#8217;d like to in a one hour bite sized chunk, but it&#8217;ll be interesting nonetheless. If you&#8217;re in the Grand Rapids, MI area on March 19th around 6:00pm, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=134&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be presenting at the <a href="http://gr-jug.org/">GRJUG</a> meeting this week giving a whirlwind tour of Groovy.  Not sure how I&#8217;m going to fit as much as I&#8217;d like to in a one hour bite sized chunk, but it&#8217;ll be interesting nonetheless.  If you&#8217;re in the Grand Rapids, MI area on March 19th around 6:00pm, stop on by.  Here&#8217;s the announcement&#8230;</p>
<blockquote><p>Unless you&#8217;ve been hiding under a rock for the past few years you&#8217;ve probably heard of Java&#8217;s much hipper cousin Groovy. In this presentation we&#8217;re going to begin to explore the Groovy language from the ground up through a series of unit tests. We&#8217;ll start with some of the very basic concepts such as Strings, collections, looping, conditionals, exception handling, truth and introduce you to closures. With any luck we&#8217;ll cover enough of the basics to prepare you for future presentations where we&#8217;ll start to dive into the Grails framework and look at more advanced Groovy features such as meta- programming and building DSLs.</p>
<p>Presenter Bio: Jeremy Anderson is a software craftsman for Pillar Technology Group, an Agile consulting firm in the Great Lakes area. He is a self- proclaimed autodidact, constantly tinkering with cutting edge technologies such as Groovy, Grails and Flex. He’s been developing web-based applications on the JVM in one shape or another for over 5 years. He’s currently co-authoring a book on integrating Flex with Java for Manning Publications due out later this year, and even occasionally finds time to write on his blog. When he’s not sitting behind a keyboard hacking away at code you can usually find him out on the single-track on his mountain bike or sometimes even on foot.</p></blockquote>
<br /> Tagged: groovy, java, presentation, unit testing <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=134&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2009/03/16/exploring-groovy-at-grjug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Agile 2009 submission: Functional Testing Flex</title>
		<link>http://blog.code-adept.com/2009/01/27/functional-testing-in-flex-agile-2009-submission/</link>
		<comments>http://blog.code-adept.com/2009/01/27/functional-testing-in-flex-agile-2009-submission/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 14:07:44 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile 2009]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[functional testing]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=119</guid>
		<description><![CDATA[I threw my hat into the ring this morning with this submission to the Agile 2009 conference (http://agile2009.agilealliance.org/node/579).  Please check it out and submit any comments you may have as I refine the proposal. Tagged: agile, agile 2009, Conferences, flex, functional testing, java, RIA, testing<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=119&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I threw my hat into the ring this morning with this submission to the Agile 2009 conference (<a href="http://agile2009.agilealliance.org/node/579" target="_blank">http://agile2009.agilealliance.org/node/579</a>).  Please check it out and submit any comments you may have as I refine the proposal.</p>
<br /> Tagged: agile, agile 2009, Conferences, flex, functional testing, java, RIA, testing <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/119/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=119&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2009/01/27/functional-testing-in-flex-agile-2009-submission/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>CodeRetreat #1 retrospective</title>
		<link>http://blog.code-adept.com/2009/01/26/coderetreat-1-retrospective/</link>
		<comments>http://blog.code-adept.com/2009/01/26/coderetreat-1-retrospective/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 14:01:38 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[coderetreat]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[kata]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=113</guid>
		<description><![CDATA[This past Saturday we held the first in what I&#8217;m hoping many CodeRetreats.  What is CodeRetreat you ask?  CodeRetreat started as a discussion between Nayan Hajratwala, Patrick Wilson-Welsh, and Corey Haines at CodeMash 2009 just a few short weeks ago about creating a meetup where developers could come together and practice good software craftsmanship with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=113&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-114" title="clean_code" src="http://codeadept.files.wordpress.com/2009/01/clean_code.jpg?w=510" alt="clean_code"   />This past Saturday we held the first in what I&#8217;m hoping many <a href="http://coderetreat.ning.com/" target="_blank">CodeRetreat</a>s.  <a href="http://coderetreat.ning.com/profiles/blogs/what-the-heck-is-coderetreat" target="_blank">What is CodeRetreat</a> you ask?  CodeRetreat started as a discussion between Nayan Hajratwala, Patrick Wilson-Welsh, and Corey Haines at CodeMash 2009 just a few short weeks ago about creating a meetup where developers could come together and practice good <a href="http://en.wikipedia.org/wiki/Software_Craftsmanship" target="_blank">software craftsmanship</a> with the guidance of a few select tomes of good software craftsmanship such as Bob Martin&#8217;s <a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882" target="_blank"><em>Clean Code</em></a>.  Many of us are stuck wading through legacy code day to day in our normal 9 to 5 jobs and don&#8217;t get the opportunity to hone our skills and that is exactly what the CodeRetreat is about.  That and the opportunity to get to pair with great minds like Ron Jeffries, Chet Hendrickson, Bill Wake, Corey Haines, and J.B. Rainsberger, to name a few.<span id="more-113"></span>So I set out early (5:45 am) on a very balmy Saturday morning for Ann Arbor for the CodeRetreat.  Upon arriving we ate some very tasty pastries and bagels for breakfast and began to lay out the plan for the day.  A few days earlier it had been decided that we would work on Conway&#8217;s <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life#Rules" target="_blank">Game of Life</a> as a problem domain for the CodeRetreat, coding in Java during the morning, and then switching over to Ruby in the afternoon.</p>
<p>In the morning I got the opportunity to sit with Corey Haines and a C++ developer (whose name escapes me right now) who was trying to learn Java for a new job.  Though we didn&#8217;t get very far into the problem domain we did have some very good discussions around testing and how in this case and in most we should be testing the behavior of the class rather than trying to assert on the state it contains, as well as how much to test.</p>
<p>After lunch it was now time to dive into doing some Ruby, which is what I was looking forward to.  I&#8217;m starting to do more and more Ruby on the side, and this was definitlely stepping out of my comfort zone to try and improve my Ruby-fu.  We were first treated to a <a href="http://codekata.pragprog.com/" target="_blank">Kata</a> performed by Corey Haines, just a short demonstration of the process of spec, write code, spec, write code, etc.  I could tell that many folks in the room could appreciate the lesson, but would not be able to duplicate it themselves, which I believe is something we&#8217;re going to try to improve for the next CodeRetreat.</p>
<p>Next it was time to start pairing on implementing some of the Game of Life in Ruby.  Chet Hendrickson had the great idea of setting some random time to work on the codebase and then when that time was up, we throw away the code and start over.  Brilliant in the fact that now we were able to &#8220;act in spite of fear&#8221; as Patrick had spoken about in the morning.  For the first round I paired with Nayan and somebody else, who again I&#8217;m horrible with names so I can&#8217;t remember who it was.  We did manage to get some working specs done in the time we had, but I feel like we spent too much time trying to decide how we were going to implement it.  Next I got the opportunity to pair with J.B. Rainsberger and a couple of other guys.</p>
<p>When it was all said and done, we had our retrospective and adjourned to the bar across the street.  The discussions continued into the night ending with Patrick, J.B., Corey, Dan Davis, Nayan and myself trying to solve the worlds problems.  I am looking forward to the next CodeRetreat which will hopefully be next month sometime in Cleveland, OH and the possibility that Corey may swing through Grand Rapids, MI on his pair programming tour and get the opportunity to sit and pair with him again on some Ruby stuff that I&#8217;ve been working on.</p>
<br /> Tagged: clean code, coderetreat, craftsmanship, java, kata, Ruby <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=113&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2009/01/26/coderetreat-1-retrospective/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>

		<media:content url="http://codeadept.files.wordpress.com/2009/01/clean_code.jpg" medium="image">
			<media:title type="html">clean_code</media:title>
		</media:content>
	</item>
		<item>
		<title>Flex on Java to now leverage AppFuse</title>
		<link>http://blog.code-adept.com/2009/01/18/flex-on-java-to-now-leverage-appfuse/</link>
		<comments>http://blog.code-adept.com/2009/01/18/flex-on-java-to-now-leverage-appfuse/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 15:41:03 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[Writing]]></category>
		<category><![CDATA[appfuse]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=101</guid>
		<description><![CDATA[Well the 2/3 review of the book I&#8217;m currently writing, Flex on Java, has just been wrapped up and we&#8217;ve gotten some wonderful feedback from our reviewers, both good and not so good.  I&#8217;m learning that the not so good reviews are sometimes more useful in helping us to refine and improve the book in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=101&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Well the 2/3 review of the book I&#8217;m currently writing, <a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1033_125" target="_blank">Flex on Java</a>, has just been wrapped up and we&#8217;ve gotten some wonderful feedback from our reviewers, both good and not so good.  I&#8217;m learning that the not so good reviews are sometimes more useful in helping us to refine and improve the book in the long run.  More than one reviewer had commented, and I had started to believe this myself before the review even began, was that the sample application that we had decided to use was too cumbersome and involved too many workarounds to make it work.  <span id="more-101"></span></p>
<p>My co-author (<a href="http://bjallmon.wordpress.com/" target="_blank">BJ Allmon</a>) and I had originally intended to leverage an existing application that we would refactor to use a Rich Client interface so that the experience would more closely resemble the audience we were originally targeting; the Java developer who would be tasked to integrate Flex with their existing application.   So after much thought and some suggestions from some co-workers, we decided on <a href="http://xplanner.codehaus.org" target="_blank">XPlanner</a> would be a good candidate.  XPlanner was a project that hadn&#8217;t seen any real development in a couple of years, it&#8217;s infrastructure was not chosen with Flex in mind, and it was a sample application that we really wanted to make work.</p>
<p>Unfortunately the more we tried to make XPlanner work with Flex, the more we realized this was a bad idea.  The SOAP implementation had to be tweaked because for some reason when doing inheritance with Axis the ordering of the elements in the SOAP response are out of order, which screws up Flex&#8217;s parsing resulting in some elements being returned as null when unmarshalling the objects in ActionScript (<a href="http://bugs.adobe.com/jira/secure/attachment/17509/Flex3Bug.txt" target="_blank">http://bugs.adobe.com/jira/secure/attachment/17509/Flex3Bug.txt</a>).  That was fixed fairly painlessly but once we got to the point where we were attempting to integrate with BlazeDS we quickly learned that most of the functionality we needed to populate the screen was not exposed as a service, but rather many of the CRUD operations were implemented in JSP custom tags, so we were forced to have the reader implement those in order to follow along.  It was becoming apparant that this wasn&#8217;t going to work out.</p>
<p>After much reflection over the holidays, I had come to a solution.  We would remove XPlanner from the book as a sample application, even though I was dreading the thought of having to build up a sample Java based web application from scratch so late in the game.  I was longing for some sort of framework that would help me get a web application up and running, and quickly, kind of like Grails but for Java and not Groovy.</p>
<p>Then the answer came to me, <a href="http://appfuse.org/display/APF/Home" target="_blank">AppFuse</a>.  For those of you not familiar with AppFuse, it&#8217;s basically a skeleton Java web project that provides many services for you out of the box.  You then plug in all of your application specific code and build on top of AppFuse to create your application.  This was the answer I needed.  This also allowed us to now address one of the other comments that we received from our review; our book had assumed some high level of Java and Java web application knowledge effectively alienating the Flex developer who wanted to break into Java web development on the back-end.  It also allowed us to not stray too far from our original goal of an existing application for the basis of a sample application.  Even though we&#8217;ll now be building up the Java portion of the sample application in our book instead of using an existing one, by leveraging AppFuse we&#8217;re following many best practices for Java web development that make no assumptions about the view technology being leveraged, and developers with existing applications they want to refactor should easily be able to adapt anything in the book to their specific environment.</p>
<p>I must admit that I&#8217;m getting very excited about this new direction, I had rediscovered AppFuse which had played a role in me learning Spring and Struts, and helped me to refine my views on what good Java web application architecture consisted of.  Even though we&#8217;ll now have to refactor half of our book to accomodate this new sample application, I&#8217;m confident that it will not only improve the quality and clarity of the book, but it will also open up the book to a whole new audience that we weren&#8217;t targeting before.</p>
<br /> Tagged: appfuse, book, flex, java, RIA <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/101/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=101&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2009/01/18/flex-on-java-to-now-leverage-appfuse/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Resurrecting XPlanner</title>
		<link>http://blog.code-adept.com/2008/08/07/resurrecting-xplanner/</link>
		<comments>http://blog.code-adept.com/2008/08/07/resurrecting-xplanner/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 12:14:15 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[RIA]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://codeadept.wordpress.com/?p=54</guid>
		<description><![CDATA[As you may have heard, I am currently writing a book (http://manning.com/allmon) on how to integrate Flex into a Java based web application.  When we started this project, we had many ideas for what we were going to do for a sample application to use throughout the book.  Too many titles out there either use [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=54&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As you may have heard, I am currently writing a book (<a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1033" target="_blank">http://manning.com/allmon</a>) on how to integrate Flex into a Java based web application.  When we started this project, we had many ideas for what we were going to do for a sample application to use throughout the book.  Too many titles out there either use trivial or incomplete examples that work well to showcase as much of the technology as possible but usually fall short in giving the user a clear picture of how to develop an end-to-end solution.  So my co-author and I, through suggestion from a fellow developer, decided to base our sample application on the <a href="http://xplanner.codehaus.org" target="_blank">XPlanner</a> project.<br />
<span id="more-54"></span><br />
For those of you not familiar with XPlanner, it&#8217;s a project planning and tracking tool for agile development teams.  We decided on XPlanner because we felt like it would be a good project that could very well represent the typical type of project that would be a candidate for refactoring to include a Rich Client front-end.  It is a project that is not brand new, hasn&#8217;t been maintained in over a year, doesn&#8217;t have the latest versions of all the popular frameworks, and best of all; it was not designed with the intent of replacing the front-end with Flex.</p>
<p>Soon after I began spiking the sample code for our application, I discovered that a bug in the way Apache Axis handles SOAP inheritance would force us to not be able to connect to the Web Services without some modifications.  This is not including all the changes we would need to make to integrate the BlazeDS server with XPlanner so we could take advantage of the AMF binary protocol.  So we were forced to either host a modified version of the XPlanner sources ourselves, detail the changes that must be made in our book, or attempt to contact the XPlanner maintainers to get the changes introduced to the main project.  I really didn&#8217;t like the idea of forking the project, and felt that providing a patch and making the reader apply that patch before following along with the code examples was less than desirable also.  So I decided to attempt to contact the project maintainer, and after a couple of unsuccessful attempts I finally heard back from the maintainer Jacques.</p>
<p>So to make a long story short, it looks like I may be taking over maintenance for the XPlanner project.  I am currently working with Jacques to figure out what needs to be done in the short term to get the latest release out the door, which is over 2 years in the making.  I&#8217;m very excited about the opportunity to breathe some life back into the XPlanner project, and it would appear that the direction that I envisioned for XPlanner falls in line with the direction that Jacques was hopeful to take before other commitments tore him away from it.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codeadept.wordpress.com/54/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codeadept.wordpress.com/54/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=54&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2008/08/07/resurrecting-xplanner/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>What did I get myself into now&#8230;</title>
		<link>http://blog.code-adept.com/2008/03/12/what-did-i-get-myself-into-now/</link>
		<comments>http://blog.code-adept.com/2008/03/12/what-did-i-get-myself-into-now/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 18:03:39 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[RIA]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://codeadept.wordpress.com/?p=30</guid>
		<description><![CDATA[Well, it&#8217;s now official, I&#8217;m writing a book. I&#8217;ve signed my contract, and there&#8217;s no turning back now. &#8220;You&#8217;re going to do what?&#8221; you may ask. My friend and cohort here at Pillar, BJ Allmon and I have begun the adventure of writing our first book, our first not only writing together but our first [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=30&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Well, it&#8217;s now official, I&#8217;m writing a book.  I&#8217;ve signed my contract, and there&#8217;s no turning back now.  &#8220;You&#8217;re going to do what?&#8221; you may ask.   My friend and cohort here at <a href="http://pillartechnology.com" target="_blank">Pillar</a>, BJ Allmon and I have begun the adventure of writing our first book, our first not only writing together but our first for each of us, tentatively titled &#8220;Flex on Java&#8221; for <a href="http://manning.com" target="_blank">Manning Publications</a>.  Yes, Manning, you know those guys with all the great &#8220;In Action&#8221; books with the funny looking people on the covers.  I&#8217;m really excited about this because I&#8217;ve always felt they put out good quality books, let&#8217;s hope that we don&#8217;t ruin that <a href="http://www.manning.com/links/2006/05/is_manning_efficient.html" target="_blank">trend</a>.</p>
<p><span id="more-30"></span>How we got here is kind of an interesting story.  I&#8217;ve always been a big fan of RIAs and had looked at Flex a few years back in one of my &#8220;I hate HTML&#8221; phases and really fell in love.  Unfortunately the price tag was really expensive and could never show a ROI on this really cool framework that provided such a rich user experience.  Fast forward a couple of years and Adobe has acquired Macromedia, and decided to open source the Flex Framework as well as create an open source fork of their LiveCycle Data Services and now it is possible to do Flex development without spending a dime.  So I decided to pick up a Flex book and re-acquaint myself with RIAs, only to struggle to find a good title that would show me how to integrate Flex into my everyday job as a Java developer.</p>
<p>A few months back I had somehow gotten on Manning&#8217;s list of people they call on to do manuscript and proposal reviews, and I had reviewed a proposal on Flex and AIR, and it looked interesting.  Come to find out the authors pulled out at the last minute, and they were looking for someone to write a title on Flex.  So, for whatever reason, I&#8217;m still not quite sure exactly why, I opened my mouth and volunteered.  After a couple of exciting conversations with the publisher about what I thought would make a good Flex book, I decided to recruit BJ and put together a proposal.</p>
<p>Keep your eyes peeled for the <a href="http://www.manning.com/about/meap">MEAP</a> to show up on Manning&#8217;s site in the near future.  In the meantime I plan on blogging about the experience, when I&#8217;m not up to my ears in writing this book.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codeadept.wordpress.com/30/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codeadept.wordpress.com/30/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=30&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2008/03/12/what-did-i-get-myself-into-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Refactoring to RIAs &#8211; Agile 2008</title>
		<link>http://blog.code-adept.com/2008/01/30/refactoring-to-rias-agile-2008/</link>
		<comments>http://blog.code-adept.com/2008/01/30/refactoring-to-rias-agile-2008/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 19:23:14 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile2008]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=27</guid>
		<description><![CDATA[BJ and I have decided to throw our hat into the ring and submitted a session proposal to the Agile 2008 conference. You can read about it and comment on it on the Agile 2008 submission site here (http://submissions.agile2008.org/node/1676), or I&#8217;ve copied the summary below. In 2002 Macromedia used the term “Rich Internet Applications” (RIA) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=27&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>BJ and I have decided to throw our hat into the ring and submitted a session proposal to the Agile 2008 conference.  You can read about it and comment on it on the Agile 2008 submission site here (<a href="http://submissions.agile2008.org/node/1676" target="_blank">http://submissions.agile2008.org/node/1676</a>), or I&#8217;ve copied the summary below.</p>
<blockquote><p>In 2002 Macromedia used the term “Rich Internet Applications” (RIA) to  describe the next generation of web applications that have all of the benefits  of a traditional desktop application, with the flexibility of being deployed via  the Internet.</p>
<p>However, it’s 2008 and RIA has not been able to penetrate the business  application sector with any real success. The old days of RIA are history.  (Maintenance nightmares, weird or no unit testing, and little friendliness  toward other agile developer practices.)</p>
<p><span id="more-27"></span></p>
<p>With a RIA framework like Adobe Flex it’s now possible to unit test RIA  applications and even write tests first. It’s possible to connect up to a CI  server just like server-side code and pick up coverage stats. It’s possible to  evolve a simple design incrementally and emergently.</p>
<p>The speakers will model how to make standard agile development practices work  in the RIA world: Refactoring, Test First Design, Simple Design, Continuous  Design, and Continuous Integration &amp; Automated Builds.</p>
<p>The bottom line is many businesses have invested much time and money into  their existing applications and their staff. For this reason, this session will  guide the attendees on how to refactor an existing web application with familiar  server-side technologies. We’ll show how to integrate Flex into existing  applications in order to build a next generation application that will delight  users.</p>
<p>Rather than trying to teach the basics of Flex, the speakers will demonstrate  how to develop robust applications leveraging the Flex framework in concert with  enterprise technologies like Java. These applications can be deployed not only  to the web but also to the desktop using the Adobe Integrated Runtime (AIR).</p>
<p class="field field-type-text field-field-processmechanics">&nbsp;</p>
<p class="field-label">Process/Mechanics</p>
<p class="field-items">&nbsp;</p>
<p class="field-item">Refactoring to RIA’s will be a demonstrative (tutorial-like) session geared  towards Java developers that would like to refactor existing applications in an  agile way. Test First, CI, and other friendly agile practices will be key in  making this possible.</p>
<p>The session will consist of live code and practice demonstrations leveraging  an already existing application. Requirements for creating a new rich client  interface will be explored and code will be refactored in a Red/Green/Refactor  manner.</p></blockquote>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codeadept.wordpress.com/27/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codeadept.wordpress.com/27/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=27&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2008/01/30/refactoring-to-rias-agile-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Unit Testing JSP Custom Tags</title>
		<link>http://blog.code-adept.com/2008/01/25/unit-testing-jsp-custom-tags/</link>
		<comments>http://blog.code-adept.com/2008/01/25/unit-testing-jsp-custom-tags/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 13:43:40 +0000</pubDate>
		<dc:creator>Jeremy Anderson</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[custom tags]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[mock testing]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[test first]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://blog.code-adept.com/?p=26</guid>
		<description><![CDATA[Testing J2EE components has always been a difficult task, which is probably why I see so many web projects that have few tests written for the web layer or sometimes none at all. Late last year Spring announced the release of Spring 2.5 , with some nice additions to the suite of mock testing objects [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=26&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Testing J2EE components has always been a difficult task, which is probably why I see so many web projects that have few tests written for the web layer or sometimes none at all. Late last year Spring announced the release of Spring 2.5 , with some nice additions to the suite of mock testing objects for unit testing web components. That&#8217;s right unit testing web components, not in container testing. So like any good agile programmer let&#8217;s start with the test first.<span id="more-26"></span></p>
<p><pre class="brush: java;">

public class SomeCustomTagTest extends TestCase {

    private SomeServiceInterface mockService;
    private SomeCustomTag someCustomTag;
    private MockServletContext mockServletContext;
    private MockPageContext mockPageContext;
    private WebApplicationContext mockWebApplicationContext;

    protected void setUp() throws Exception {
        super.setUp();
        // Create the mock servlet context
        mockServletContext = new MockServletContext();

        // Create the mock Spring Context so that we can mock out the calls to getBean in the custom tag
        // Then add the Spring Context to the Servlet Context
        mockWebApplicationContext = createMock(WebApplicationContext.class);
        mockServletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
                                        mockWebApplicationContext);

        // Create the MockPageContext passing in the mock servlet context created above
        mockPageContext = new MockPageContext(mockServletContext);

        // Create the mock service object using it's interface
        mockService = createMock(SomeServiceInterface.class);

        // Create an instance of the custom tag we want to test
        // set it's PageContext to the MockPageContext we created above
        someCustomTag = new SomeCustomTag();
        someCustomTag.setPageContext(mockPageContext);

        // Whenever you make a call to the doStartTag() method on the custom tag it calls getServletContext()
        // on the WebApplicationContext.  So to avoid having to put this expect statement in every test
        // I've included it in the setUp()
        expect(mockWebApplicationContext.getServletContext()).andReturn(mockServletContext).anyTimes();
    }

}</pre><br />
Some things you&#8217;ll notice in the setUp() method are that we&#8217;re creating a mock for the Spring Context. Since I don&#8217;t know of any way to have Spring inject dependencies into the custom tag, we&#8217;ll be getting a WebApplicationContext object from the container to get our beans from Spring. This mock allows us to fake calls to getBean() and return our mock service objects so we can unit test the custom tag without relying on external dependencies.<br />
Now in order to get this test to compile we need to create the custom tag class. You&#8217;ll notice that we&#8217;re extending the RequestContextAwareTag class instead of TagSupport. The RequestContextAwareTag class is a Spring helper class that gives us some convenience methods for getting the WebApplicationContext among other things. You&#8217;ll also see that the method we need to implement is called doStartTagInternal() instead of doStartTag().<br />
<pre class="brush: java;">

public class SomeCustomTag extends RequestContextAwareTag {

    protected int doStartTagInternal() throws Exception {

        // put some business logic here

        return SKIP_BODY;
    }

}</pre><br />
Now let&#8217;s write a failing test. Back in the unit test lets add a test method and a couple of helper methods for the mock objects.<br />
<pre class="brush: java;">

public void testDoStartTag() throws Exception{
    String param = &quot;Jeremy&quot;;
    String expectedOutput = &quot;Hello, &quot; + param;

    replayAllMocks();

    someCustomTag.setUserName(param);
    int tagReturnValue = someCustomTag.doStartTag();
    String output = ((MockHttpServletResponse) mockPageContext.getResponse()).getContentAsString();

    assertEquals(&quot;Tag should return 'SKIP_BODY'&quot;, TagSupport.SKIP_BODY, tagReturnValue);
    assertEquals(&quot;Output should be 'Hello, Jeremy'&quot;, expectedOutput, output);

    verifyAllMocks();
}

private void replayAllMocks() {
	replay(mockWebApplicationContext);
	replay(mockCompanyQuery);
}

private void verifyAllMocks() {
	verify(mockWebApplicationContext);
	verify(mockCompanyQuery);
} 

</pre><br />
In order to get the test to compile, you&#8217;ll need to modify the SomeCustomTag class to have a setter method for a userName parameter.  We would like our custom tag to say &#8220;Hello&#8221; to a username that is passed in, so let&#8217;s implement the behavior we are trying to accomplish.<br />
<pre class="brush: java;">

public class SomeCustomTag extends RequestContextAwareTag {

    private String userName;

    // A setter for an attribute that will be set in the custom tag
    public void userName(String userName) {
        this.userName = userName;
    }

    protected int doStartTagInternal() throws Exception {

        pageContext.getOut().print(&quot;Hello, &quot; + userName);

        return SKIP_BODY;
    }

}

</pre><br />
Next we would like to get the users full name from our Spring service.  So in order to do that we need to tell the mockWebApplicationContext to return a mock of our service so we can unit test this in isolation.  We also need to tell our mock service that we expect a call to getFullName() and what to return from this call.  So modify our test method to resemble the following.<br />
<pre class="brush: java;">

public void testDoStartTag() throws Exception{
    String param = &quot;Jeremy&quot;;
    String fullName = &quot;Jeremy Anderson&quot;;
    String expectedOutput = &quot;Hello, &quot; + fullName;

    expect(mockWebApplicationContext.getBean(&quot;someService&quot;)).andReturn(mockService);
    expect(someService.getFullName(param)).andReturn(fullName);
    replayAllMocks();

    someCustomTag.setUserName(param);
    int tagReturnValue = someCustomTag.doStartTag();
    String output = ((MockHttpServletResponse) mockPageContext.getResponse()).getContentAsString();

    assertEquals(&quot;Tag should return 'SKIP_BODY'&quot;, TagSupport.SKIP_BODY, tagReturnValue);
    assertEquals(&quot;Output should be 'Hello, Jeremy Anderson'&quot;, expectedOutput, output);

    verifyAllMocks();
}</pre><br />
Now when you run this code, you&#8217;ll get an error from EasyMock complaining about methods that were expected to be called, but weren&#8217;t.  So lets fix that now.  Modify the doStartTagInternal() method to look like the following.<br />
<pre class="brush: java;">

protected int doStartTagInternal() throws Exception {
        // Get the Spring Context from the RequestContext
        WebApplicationContext context = getRequestContext().getWebApplicationContext();

        // Get the service we want to call from the Spring Context
        someService = (SomeServiceInterface) context.getBean(&quot;someService&quot;);

        String fullName = someService.getFullName(userName);
        pageContext.getOut().print(&quot;Hello, &quot; + fullName);

        return SKIP_BODY;
    }

</pre><br />
Congratulations, you&#8217;ve now implemented a JSP Custom Tag using &#8220;Test First&#8221;.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codeadept.wordpress.com/26/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codeadept.wordpress.com/26/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeadept.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeadept.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeadept.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeadept.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codeadept.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codeadept.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codeadept.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codeadept.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeadept.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeadept.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeadept.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeadept.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeadept.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeadept.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.code-adept.com&amp;blog=2511053&amp;post=26&amp;subd=codeadept&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.code-adept.com/2008/01/25/unit-testing-jsp-custom-tags/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/611c688725819bb23742a714a9c33dfe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jeremy</media:title>
		</media:content>
	</item>
	</channel>
</rss>
