<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-6243670623010502252</atom:id><lastBuildDate>Wed, 15 May 2013 19:36:16 +0000</lastBuildDate><category>The clean coder</category><category>test distributed applications</category><category>logs</category><category>KeyedObjectPool</category><category>development</category><category>Review</category><category>apt-get</category><category>grep4j</category><category>youtube</category><category>Uncle Bob Martin</category><category>jvisualvm</category><category>distributed systems</category><category>NullPointerexception</category><category>ordered autowired list</category><category>test</category><category>design pattern</category><category>Theories</category><category>uncle bob</category><category>latency test</category><category>ApacheBench</category><category>hornetq-configuration.xml</category><category>agile</category><category>apache commons</category><category>Parameterized</category><category>CompletionService</category><category>treeset</category><category>tips</category><category>oneric</category><category>kiss</category><category>performance</category><category>eclipse</category><category>connectors</category><category>Spring</category><category>Step Builder Pattern</category><category>java design</category><category>Iteration Restrospective and Demo</category><category>ExecutorService</category><category>BaseKeyedPoolableObjectFactory</category><category>Maverick</category><category>java7</category><category>lean</category><category>bad code</category><category>stand</category><category>Iteration Planning Meetings</category><category>checkbox</category><category>distributed</category><category>tricks</category><category>builder design</category><category>Hornetq</category><category>old</category><category>java 7</category><category>java</category><category>bridges</category><category>Baobab</category><category>analyse</category><category>best practices</category><category>Stand-Up Meetings</category><category>chain of responsability</category><category>monitoring</category><category>meeting</category><category>memory</category><category>ssh connections pool</category><category>SLA</category><category>JUnit4</category><category>Theory</category><category>component</category><category>rest</category><category>Parameters</category><category>Robert C. Martin</category><category>builder</category><category>garbage collector</category><category>stand-ups</category><category>disk space</category><category>hornetq-jms.xml</category><category>scrum</category><category>sources.list</category><category>Linux</category><category>juno</category><category>dsl</category><category>design</category><category>meetings</category><category>old distribution</category><category>step</category><category>Builder pattern</category><category>distribution</category><category>performance test</category><title>Remove duplications and fix bad names</title><description>&lt;i&gt;
New ideas pass through three periods: 
&lt;br&gt;
1) It can’t be done. 
&lt;br&gt;
2) It probably can be done, but it’s not worth doing. 
&lt;br&gt;
3) I knew it was a good idea all along!
&lt;br&gt;
&lt;/i&gt;
- Arthur C. Clarke</description><link>http://rdafbn.blogspot.com/</link><managingEditor>noreply@blogger.com (marcocast)</managingEditor><generator>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-6328042571052129670</guid><pubDate>Wed, 15 May 2013 08:46:00 +0000</pubDate><atom:updated>2013-05-15T20:36:16.513+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>agile</category><category domain='http://www.blogger.com/atom/ns#'>lean</category><category domain='http://www.blogger.com/atom/ns#'>stand</category><category domain='http://www.blogger.com/atom/ns#'>meeting</category><category domain='http://www.blogger.com/atom/ns#'>stand-ups</category><category domain='http://www.blogger.com/atom/ns#'>scrum</category><title>When do you think a daily stand up is too crowded?</title><description>&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;Recently, looking at the daily stand-ups in my company, it makes me smile a bit.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-1dKANMeey2g/UZNKKej458I/AAAAAAAAAuM/sEMNeNgzFl4/s1600/toomuchs.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/-1dKANMeey2g/UZNKKej458I/AAAAAAAAAuM/sEMNeNgzFl4/s640/toomuchs.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;I think too many = chaos and dispersion.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;Proper and efficient stand-ups should be 4 pigs and occasionally 2 or 3 chickens.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;This is my opinion, what is yours?&lt;/span&gt;</description><link>http://rdafbn.blogspot.com/2013/05/when-do-you-think-daily-stand-up-is-too.html</link><author>noreply@blogger.com (marcocast)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-1dKANMeey2g/UZNKKej458I/AAAAAAAAAuM/sEMNeNgzFl4/s72-c/toomuchs.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-7459683523473738127</guid><pubDate>Fri, 10 May 2013 16:20:00 +0000</pubDate><atom:updated>2013-05-11T11:30:03.842+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>best practices</category><category domain='http://www.blogger.com/atom/ns#'>java design</category><category domain='http://www.blogger.com/atom/ns#'>design pattern</category><category domain='http://www.blogger.com/atom/ns#'>Step Builder Pattern</category><title>Building smart Builders</title><description>&lt;div class="separator" style="clear: both; text-align: justify;"&gt;When building an API, you should always think about who is going to use it.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;When the API is simply and clear to use, then the users are happy. When the users are happy then everyone is happy too :).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;But great usability is not always easy to achieve.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;There are patterns that help on this, on this post I will focus on the &lt;a href="http://en.wikipedia.org/wiki/Builder_pattern"&gt;classic builder pattern&lt;/a&gt; and how you can enhance it with the&amp;nbsp;&lt;a href="http://rdafbn.blogspot.co.uk/2012/07/step-builder-pattern_28.html"&gt;step builder pattern&lt;/a&gt; in order to build objects with a &lt;u&gt;no brain interface, easy to use,&amp;nbsp;impossible&amp;nbsp;to get wrong&lt;/u&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;So lets start painting some context, we have 2 domain objects representing a user configuration to connect to some remote or local server. When remote credentials are required, when local no.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em; text-align: start;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;serverDetails &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; getServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em; text-align: start;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;host &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;user &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setPassword&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;password &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getHost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getPassword&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;We want to abstract the construction of the objects above using 2 different techniques, the classic builder pattern and the step builder pattern.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The classic builder pattern is pretty&amp;nbsp;straightforward, it works masking the creation of the UserConfiguration and the ServerDetails using properly named methods like onLocalHost, onRemoteHost, etc.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em; text-align: start;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;builder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassicBuilder&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassicBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassicBuilder&lt;/span&gt;&lt;span class="pln"&gt; onLocalHost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;host &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"localhost"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassicBuilder&lt;/span&gt;&lt;span class="pln"&gt; onRemoteHost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; remoteHost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;host &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; remoteHost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassicBuilder&lt;/span&gt;&lt;span class="pln"&gt; credentials&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;user &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;password &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pln"&gt; build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pln"&gt; userConfiguration &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; serverDetails &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setPassword&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; userConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; userConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The step builder pattern is still using smart names to construct the object, but it's exposing these methods only when needed using interfaces and proper encapsulation.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em; text-align: start;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;builder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sbp&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/** "Step Builder" */&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StepBuilder&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;NameStep&lt;/span&gt;&lt;span class="pln"&gt; newBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Steps&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StepBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;NameStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @param name&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unique identifier for this User Configuration&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return ServerStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerStep&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* The hostname of the server where the User Configuration file is stored will be set to "localhost".&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return BuildStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; onLocalhost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* The hostname of the server where the User Configuration file is stored.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return CredentialsStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CredentialsStep&lt;/span&gt;&lt;span class="pln"&gt; onRemotehost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CredentialsStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Username required to connect to remote machine Password required to connect to remote machine&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return BuildStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; credentials&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return an instance of a UserConfiguration based on the parameters passed during the creation.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pln"&gt; build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Steps&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;implements&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;NameStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CredentialsStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; onLocalhost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;host &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"localhost"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerStep&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CredentialsStep&lt;/span&gt;&lt;span class="pln"&gt; onRemotehost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;host &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; credentials&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;user &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;password &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pln"&gt; build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pln"&gt; userConfiguration &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; serverDetails &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;host&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setPassword&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;password&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; userConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; userConfiguration&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Lets see now what is the user experience with both of our builders.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The classic builder &amp;nbsp;will be constructed using the name of the user configuration, then it will expose all of its methods leaving the user a bit too free to choose what's next.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-U0zPefv-A_U/UYz4P06GqKI/AAAAAAAAAtk/wCQVEtClo3Y/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://1.bp.blogspot.com/-U0zPefv-A_U/UYz4P06GqKI/AAAAAAAAAtk/wCQVEtClo3Y/s640/1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;For example, a not careful user could end up with a UserConfiguration set with localhost where no authentication is required, still passing user and password.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This is confusing and it can lead to run-time&amp;nbsp;exceptions.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-j4vLbwkoI8c/UYz4Pov18lI/AAAAAAAAAto/hMdqrZnHFrU/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="148" src="http://3.bp.blogspot.com/-j4vLbwkoI8c/UYz4Pov18lI/AAAAAAAAAto/hMdqrZnHFrU/s640/2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;These are some of the possible combinations of UserConfigurations that the user can end up with, some are correct, lots are wrong:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-L5lfGokx81Y/UYz4KSUp6wI/AAAAAAAAAtE/V2jQ9Dj1CKw/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="http://3.bp.blogspot.com/-L5lfGokx81Y/UYz4KSUp6wI/AAAAAAAAAtE/V2jQ9Dj1CKw/s640/3.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A complete different story is with the step builder, here only one step at the time is exposed:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://2.bp.blogspot.com/-JBIFpn6agOs/UYz4KsmehHI/AAAAAAAAAtI/CdZwEV1a3G4/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://2.bp.blogspot.com/-JBIFpn6agOs/UYz4KsmehHI/AAAAAAAAAtI/CdZwEV1a3G4/s640/4.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;If the credentials are not needed they will not be exposed and the build() method is offered only when the state of the object is sure to be coherent and complete:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-n3IIAXMk1Zk/UYz4K5X1SZI/AAAAAAAAAtg/7sTSgHPbz6E/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://4.bp.blogspot.com/-n3IIAXMk1Zk/UYz4K5X1SZI/AAAAAAAAAtg/7sTSgHPbz6E/s640/5.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Only 2 possible UserConfigurations can be built with this pattern, and both make sense and are clear to the user.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-B6JnLvPO0Mg/UYz4LRUywGI/AAAAAAAAAtQ/af6S7vlQX_o/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="178" src="http://4.bp.blogspot.com/-B6JnLvPO0Mg/UYz4LRUywGI/AAAAAAAAAtQ/af6S7vlQX_o/s640/6.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4&gt;&amp;nbsp;Conclusion&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="color: #42474a; font-family: 'Helvetica Neue', arial, sans-serif; font-size: 15px; line-height: 21px;"&gt;&lt;a href="http://rdafbn.blogspot.co.uk/2012/10/step-builder-pattern-definition-and.html"&gt;The step builder pattern&lt;/a&gt; is not the replacement of the classic Bloch one, sometimes you want to force the user to fill some parameter before advancing with the creation, in this case the step builder is doing the job, otherwise when a more open approach is required than the classic builder is your guy.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;</description><link>http://rdafbn.blogspot.com/2013/05/building-smart-builders.html</link><author>noreply@blogger.com (marcocast)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-U0zPefv-A_U/UYz4P06GqKI/AAAAAAAAAtk/wCQVEtClo3Y/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-3953507709335528382</guid><pubDate>Sun, 28 Apr 2013 15:02:00 +0000</pubDate><atom:updated>2013-04-28T16:02:48.805+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java 7</category><category domain='http://www.blogger.com/atom/ns#'>treeset</category><category domain='http://www.blogger.com/atom/ns#'>NullPointerexception</category><category domain='http://www.blogger.com/atom/ns#'>bad code</category><category domain='http://www.blogger.com/atom/ns#'>java7</category><title>Even in the jdk there is bad code.</title><description>&lt;h2&gt;Java 7, TreeSet and NullPointerException.&lt;/h2&gt;Recently I tried to compile with java 7 a project developed with java 6.&lt;br /&gt;&lt;br /&gt;Lot of fun happened during tests execution, tests that in java 6 were &amp;nbsp;running smoothly, with java 7, they were&amp;nbsp;strangely&amp;nbsp;failing!&lt;br /&gt;So, I had to understand why and this is what I discovered...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The context first:&lt;br /&gt;In that project I have a simple Hibernate Entity more or less like the following.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;pre class="prettyprint" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; javax&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;persistence&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Column&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; javax&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;persistence&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Entity&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; javax&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;persistence&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Table&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; javax&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;persistence&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UniqueConstraint&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;hibernate&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;validator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;NotNull&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Entity&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Table&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(...)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Column&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"name"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; nullable &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;false&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@NotNull&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;div&gt;note that the field "name" is&lt;b&gt; nullable=false&lt;/b&gt; and marked with &lt;b&gt;@NotNull&lt;/b&gt;.&lt;br /&gt;This to tell Hibernate to fail the validation in the case a user tries to create or update this column to Null.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;I also have a comparator for that Entity.&lt;br /&gt;This comparator uses the name field to compare the Entity&amp;nbsp;&lt;span style="font-size: x-small;"&gt;( this is just a simplified version of what I have in the project, of course I don't order a bean based on the string&amp;nbsp;length&amp;nbsp;:)&amp;nbsp;&lt;/span&gt;)&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;pre class="prettyprint" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Comparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABeanComparator&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;implements&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Comparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; compare&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pln"&gt; o1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pln"&gt; o2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;o1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;length&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; o2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;length&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;())&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;else&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;o1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;length&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt; o2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;length&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;())&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; -&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;else&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;0&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;note that there is no null check on the field name, in my project, Hibernate is already taking care of it.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Now, I have a test that create &lt;b&gt;&lt;u&gt;one&lt;/u&gt;&lt;/b&gt; empty Entity and it stores it into a TreeSet, and then doees other stuff that we do not really care here.&lt;br /&gt;The beginning of the test is similar to the code below: &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SortedSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SortedTestTest&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[]&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pln"&gt; aBean &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SortedSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; sortedSet &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABean&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABeanComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sortedSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;add&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;aBean&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;If I run this with java 6, everything is OK.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;But, with java 7 I have a NullPointerException. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="typ" style="color: #660066;"&gt;Exception&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;in&lt;/span&gt;&lt;span class="pln"&gt; thread &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"main"&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;lang&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;NullPointerException&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABeanComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;compare&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABeanComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;9&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABeanComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;compare&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ABeanComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeMap&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;compare&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeMap&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1188&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeMap&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;put&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeMap&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;531&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;add&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TreeSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;255&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SortedTestTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;main&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SortedTestTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;14&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Why?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is why:&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="pln"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; V put&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;K key&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; V value&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Entry&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt;K&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;V&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; t &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; root&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;t &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;==&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; compare&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;key&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; key&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// type (and possibly null) check&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; root &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Entry&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span class="pln"&gt;key&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; value&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; modCount&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;In java 7 when the first Object is added (&amp;nbsp;&lt;span class="kwd" style="color: #000088; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;if&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;(&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;t &lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;==&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;)&lt;/span&gt;&amp;nbsp;) to a &lt;a href="http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/TreeSet.java"&gt;TreeSet&lt;/a&gt;, a compare against itself (compare(key,key)) is executed. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The compare method will then call the comparator (if there is one) and we will have the NullPointerException on the name property.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="pln"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// Little utilities&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Compares two keys using the correct comparison method for this TreeMap.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; compare&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Object&lt;/span&gt;&lt;span class="pln"&gt; k1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Object&lt;/span&gt;&lt;span class="pln"&gt; k2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; comparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;==&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;((&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Comparable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;super&lt;/span&gt;&lt;span class="pln"&gt; K&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;)&lt;/span&gt;&lt;span class="pln"&gt;k1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;compareTo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;((&lt;/span&gt;&lt;span class="pln"&gt;K&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;k2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; comparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;compare&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;((&lt;/span&gt;&lt;span class="pln"&gt;K&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;k1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;K&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;k2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;This raises more questions than answers:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Why running a compare if you know that the Object in the TreeSet is the first and only one ?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;My guess is that what they wanted to do was running a simple Null check.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Why not create a proper null check method ?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;No Answer&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Why wasting CPU and memory running a comparison that is not needed ?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;No Answer&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Why compare an object against itself (compare(key,key))??&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;No Answer&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is the put method of the &lt;a href="http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/TreeSet.java"&gt;TreeSet&lt;/a&gt; in java 6 and as you can see the compare was commented out.&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; V put&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;K key&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; V value&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Entry&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt;K&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; V&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; t &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; root&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;t &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;==&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// TBD:&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// 5045147: (coll) Adding null to an empty TreeSet should&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// throw NullPointerException&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;//&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// compare(key, key); // type check&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; root &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Entry&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt;K&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; V&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="pln"&gt;key&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; value&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; modCount&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;You see the comment?&amp;nbsp;&lt;span style="background-color: #eeeeee; color: #880000; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; Adding null to an empty TreeSet should &lt;/span&gt;&lt;span class="com" style="color: #880000; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;throw NullPointerException&lt;/span&gt;&lt;br /&gt;So just check if key is null, don't run a useless comparison!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The conclusion? Always try to analyze the code you use, because even in the jdk there is bad code!&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2013/04/even-in-jdk-there-is-bad-code.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-1948550181979373696</guid><pubDate>Fri, 22 Mar 2013 10:15:00 +0000</pubDate><atom:updated>2013-03-22T10:15:12.395Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>old</category><category domain='http://www.blogger.com/atom/ns#'>old distribution</category><category domain='http://www.blogger.com/atom/ns#'>Linux</category><category domain='http://www.blogger.com/atom/ns#'>apt-get</category><category domain='http://www.blogger.com/atom/ns#'>distribution</category><category domain='http://www.blogger.com/atom/ns#'>oneric</category><category domain='http://www.blogger.com/atom/ns#'>Maverick</category><category domain='http://www.blogger.com/atom/ns#'>sources.list</category><title>How to update apt-get repositories in your old Linux distribution?</title><description>&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;Are you using a Linux distribution that is really old?.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;The apt-get repositories for the distribution are not supported anymore, but you would like to update the repositories so that you can install new packages?&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;Cool, so here it's how to do that:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: #e9e9ff; border: medium none; font-family: sans-serif; font-size: 13px; line-height: 18px; margin-bottom: 13px; max-width: 700px; padding: 0px;"&gt;You need to update /etc/apt/sources.list with new (valid) urls. e.g. in Ubuntu 11.04 (Maverick, no longer supported) you might want to update the URLs to (for example) "oneiric". You might have to do the following:&lt;/div&gt;&lt;div style="background-color: #e9e9ff; border: medium none; font-family: sans-serif; font-size: 13px; line-height: 18px; margin-bottom: 13px; max-width: 700px; padding: 0px;"&gt;1) Backup /etc/apt/sources.list&lt;/div&gt;&lt;div style="background-color: #e9e9ff; border: medium none; font-family: sans-serif; font-size: 13px; line-height: 18px; margin-bottom: 13px; max-width: 700px; padding: 0px;"&gt;2) Find and replace (inline) the old distro name ("maverick" in this example) with the new one ("oneiric" in this example)&lt;/div&gt;&lt;div style="background-color: #e9e9ff; border: medium none; font-family: sans-serif; font-size: 13px; line-height: 18px; margin-bottom: 13px; max-width: 700px; padding: 0px;"&gt;3) Update apt-get cache to see the changes reflected.&lt;/div&gt;&lt;pre style="background-color: whitesmoke; font-family: Consolas, Monaco, 'Liberation Mono', 'Lucida Console', monospace; font-size: 12px; line-height: 20px; margin-bottom: 10px; overflow: auto; padding-left: 5px; padding-top: 5px; white-space: pre-wrap; width: 580px;"&gt;&lt;code style="font-family: Consolas, Monaco, 'Liberation Mono', 'Lucida Console', monospace; font-size: 11px;"&gt;sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup&lt;br /&gt;sudo sed -i 's/maverick/oneiric/g' /etc/apt/sources.list&lt;br /&gt;sudo apt-get update&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e9e9ff; border: medium none; font-family: sans-serif; font-size: 13px; line-height: 18px; margin-bottom: 13px; max-width: 700px; padding: 0px;"&gt;And that's it, make sure the replaced sources.list file has the same permissions as the original one and bear in mind that you might want to use "sudo" since /etc/apt is usually owned by root.&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2013/03/how-to-update-apt-get-repositories-in.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-2886014122325393148</guid><pubDate>Wed, 27 Feb 2013 22:18:00 +0000</pubDate><atom:updated>2013-02-27T22:42:58.285Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SLA</category><category domain='http://www.blogger.com/atom/ns#'>grep4j</category><category domain='http://www.blogger.com/atom/ns#'>distributed systems</category><category domain='http://www.blogger.com/atom/ns#'>distributed</category><category domain='http://www.blogger.com/atom/ns#'>latency test</category><category domain='http://www.blogger.com/atom/ns#'>performance test</category><category domain='http://www.blogger.com/atom/ns#'>component</category><title>Easy testing SLAs on distributed components with grep4j</title><description>So your distributed architecture looks something like the&amp;nbsp;picture&amp;nbsp;below and you just have received a requirement from the business to make sure that the SLAs of the messages sent by the Producer and then traveling to the downstream systems (consumers) must be fast and never slower than 400 milliseconds.&lt;br /&gt;&lt;br /&gt;Requirement says :&lt;br /&gt;&lt;b&gt;&lt;i&gt;The Latency of a message sent from the Producer to any of the Consumers should be never slower than 400 milliseconds.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SZq-70qzkk8/US5EpnBrjXI/AAAAAAAAAlk/1XX62cPp_YU/s1600/consumer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-SZq-70qzkk8/US5EpnBrjXI/AAAAAAAAAlk/1XX62cPp_YU/s640/consumer.png" width="530" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sounds familiar? To me yes, and experience taught me that if I want to protect the SLAs in the future, I need as well to automate the test in order to not introduce bottlenecks that then increase the latency of the messages.&lt;br /&gt;&lt;br /&gt;But how to do it? Producer and Consumers are in separate machines and some of the consumers are not written in Java.&lt;br /&gt;Also, between the producer and the consumers there is a Queue (or web-service or RMI or an ESB or another component or whatever), so things are not getting easier for me to test.&lt;br /&gt;&lt;br /&gt;Well, all components write logs in a similar way, so &lt;a href="http://rdafbn.blogspot.co.uk/2012/08/testing-distributed-applications.html"&gt;why not using logs as a data to test&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;For example these are 2 sample logs, one from the producer firing a message (id&amp;nbsp;&lt;span style="font-size: x-small;"&gt;1546366&lt;/span&gt;) and the other from one of the consumer receiving the message (id&amp;nbsp;&lt;span style="font-size: x-small;"&gt;1546366&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;u&gt;Producer logs&lt;/u&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;......&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;2013-02-19 10:09:05,795 INFO &amp;nbsp;[org.grep4j.demo.input.core.InputCoreMessageSender] (pool-19-thread-9) Input::MessageSender::Message(1546366) Sent Successfully&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;......&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;Consumer logs&lt;/u&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;.....&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;2013-02-19 10:09:06,161 INFO &amp;nbsp;[org.grep4j.demo.handler.bean.mdb.SingleDestPacketHandler] (Thread-62314 (HornetQ-client-global-threads-989457197)) Handler::Packet::Message(1546366) Received::PacketId(982336426)::State(NORMAL)::Dest(CONSUMER4, 1)::DataLevel(EVENT, 7)::Op(CREATE, C)::GlobalId(1546366)::Priority(1)::Src(GUI, 1::Ids(EventId=1546366,SFBId=1546366,isBirType=false,inBir=false))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;.....&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And this is how my automated performance test looks like using &lt;a href="http://code.google.com/p/grep4j/"&gt;Grep4j&lt;/a&gt;&amp;nbsp;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gdg&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;demo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gdg&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;demo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;consumer1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gdg&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;demo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;consumer2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gdg&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;demo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;consumer3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gdg&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;demo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;producer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gdg&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;demo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;services&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TimeService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;extractTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;constantExpression&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fluent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Dictionary&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;on&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;hamcrest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CoreMatchers&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;hamcrest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;number&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;OrderingComparison&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;lessThan&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;junit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Assert&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;assertThat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;result&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GrepResults&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;testng&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;annotations&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BeforeTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;testng&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;annotations&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Test&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;MessageDistributionPerformanceTest&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;long&lt;/span&gt;&lt;span class="pln"&gt; MAX_ACCETABLE_LATENCY &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;400L&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;long&lt;/span&gt;&lt;span class="pln"&gt; producerTime &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;0&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GrepResults&lt;/span&gt;&lt;span class="pln"&gt; consumersResults&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@BeforeTest&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; triggerMessageDispatcher&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Producing and firing a Message(1546366) to downstream systems..."&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@BeforeTest&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; extractProducerTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GrepResults&lt;/span&gt;&lt;span class="pln"&gt; producerResult &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; grep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;constantExpression&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Message(1546366) Sent Successfully"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln"&gt; &amp;nbsp; &amp;nbsp; on&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;producer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; producerTime &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; extractTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;producerResult&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;toString&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@BeforeTest&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; grepConsumerLogs&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; consumersResults &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; grep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;constantExpression&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Message(1546366) Received"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; on&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;consumer1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; consumer2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; consumer3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; testConsumer1Latency&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;long&lt;/span&gt;&lt;span class="pln"&gt; consumer1Time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; extractTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;consumersResults&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;filterOnProfile&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;consumer1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;toString&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertThat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;((&lt;/span&gt;&lt;span class="pln"&gt;consumer1Time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln"&gt; producerTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;lessThan&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;MAX_ACCETABLE_LATENCY&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; testConsumer2Latency&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;long&lt;/span&gt;&lt;span class="pln"&gt; consumer2Time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; extractTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;consumersResults&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;filterOnProfile&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;consumer2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;toString&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertThat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;((&lt;/span&gt;&lt;span class="pln"&gt;consumer2Time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln"&gt; producerTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;lessThan&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;MAX_ACCETABLE_LATENCY&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; testConsumer3Latency&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;long&lt;/span&gt;&lt;span class="pln"&gt; consumer3Time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; extractTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;consumersResults&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;filterOnProfile&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;consumer3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;toString&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertThat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;((&lt;/span&gt;&lt;span class="pln"&gt;consumer3Time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln"&gt; producerTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;lessThan&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;MAX_ACCETABLE_LATENCY&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;A profile is the grep target context, in my case all the profiles are remote machines (for a better understanding of Profiles see &lt;a href="http://code.google.com/p/grep4j/"&gt;Grep4j page&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;TimeService is just a simple service class extracting the time in the logs.&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gdg&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;demo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;services&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;text&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ParseException&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;text&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SimpleDateFormat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Date&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TimeZone&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;regex&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Matcher&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;regex&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Pattern&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TimeService&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Pattern&lt;/span&gt;&lt;span class="pln"&gt; timePattern &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Pattern&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;compile&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9]) ([0-9][0-9]|2[0-3]):([0-9][0-9]):([0-9][0-9]),([0-9][0-9][0-9])"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;long&lt;/span&gt;&lt;span class="pln"&gt; extractTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; text&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Matcher&lt;/span&gt;&lt;span class="pln"&gt; lm &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; timePattern&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;matcher&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;text&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;lm&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;find&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;())&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SimpleDateFormat&lt;/span&gt;&lt;span class="pln"&gt; sdf &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SimpleDateFormat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"yyyy-MM-dd HH:mm:ss,SSS"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sdf&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setTimeZone&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;TimeZone&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getTimeZone&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"UTC"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; inputString &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; lm&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;group&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Date&lt;/span&gt;&lt;span class="pln"&gt; date &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; date &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; sdf&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;parse&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;inputString&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ParseException&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;printStackTrace&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; date&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getTime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;else&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;throw&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"timePattern not found"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;In few simple lines of code I have my extremely &lt;b&gt;flexible&lt;/b&gt; test (I can test anything that was produced in the logs) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;For the full code :&amp;nbsp;&lt;a href="https://github.com/marcocast/grep4j-gdg.git"&gt;https://github.com/marcocast/grep4j-gdg.git&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2013/02/easy-testing-slas-on-distributed.html</link><author>noreply@blogger.com (marcocast)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-SZq-70qzkk8/US5EpnBrjXI/AAAAAAAAAlk/1XX62cPp_YU/s72-c/consumer.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-388734185767858258</guid><pubDate>Mon, 25 Feb 2013 15:42:00 +0000</pubDate><atom:updated>2013-02-27T08:53:58.520Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Uncle Bob Martin</category><title>9 Must read books for developers by Uncle Bob Martin </title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BU6iHxhQUDY/UStH-5Z-6UI/AAAAAAAAAlU/P3H5mjWiLDs/s1600/cVbzXL8h7rEh6gzr0A3fTKpmRlBsvK4Gk_J8ZQ5_CrA.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;img border="0" height="480" src="http://3.bp.blogspot.com/-BU6iHxhQUDY/UStH-5Z-6UI/AAAAAAAAAlU/P3H5mjWiLDs/s640/cVbzXL8h7rEh6gzr0A3fTKpmRlBsvK4Gk_J8ZQ5_CrA.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Last week&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin"&gt;Uncle Bob Martin&lt;/a&gt; gave a speech in my company about Components and Architecture.&lt;br /&gt;Needless to say it was a great pleasure and fun to listen to him.&lt;br /&gt;At the end of the speech, during the Q&amp;amp;A, a guy asked him which books he considers to be a must in order to&amp;nbsp;improve&amp;nbsp;your dev skills, so here we go with the 9 books a developer should read in his career:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262510871"&gt;Structure and implementation of computer programs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Controlling-Software-Projects-Management-Measurement/dp/0131717111"&gt;Controlling Software Projects: Management, Measurement, and Estimates&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Elements-Programming-Style-Brian-Kernighan/dp/0070342075"&gt;The element of programming style&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959"&gt;The mythical man-month&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.uk/Design-patterns-elements-reusable-object-oriented/dp/0201633612"&gt;Design pattern elements of reusable object-oriented software&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0201616416"&gt;Extreme programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Deadline-Novel-About-Project-Management/dp/0932633390"&gt;The deadline&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X"&gt;The pragmatic programmer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Passionate-Programmer-Remarkable-Development-Pragmatic/dp/1934356344"&gt;The passionate programmer&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Hope you will have some free time to read these fundamental books!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;Note on the picture : I was lucky enough to capture him passing in front of a slide of my opensource library at some point during the speech :)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://rdafbn.blogspot.com/2013/02/9-must-read-books-for-uncle-bob-martin.html</link><author>noreply@blogger.com (marcocast)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-BU6iHxhQUDY/UStH-5Z-6UI/AAAAAAAAAlU/P3H5mjWiLDs/s72-c/cVbzXL8h7rEh6gzr0A3fTKpmRlBsvK4Gk_J8ZQ5_CrA.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-3719824912504894348</guid><pubDate>Thu, 21 Feb 2013 16:00:00 +0000</pubDate><atom:updated>2013-02-21T16:00:39.864Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Baobab</category><category domain='http://www.blogger.com/atom/ns#'>memory</category><category domain='http://www.blogger.com/atom/ns#'>analyse</category><category domain='http://www.blogger.com/atom/ns#'>disk space</category><title>Baobab to analyse remote disk space</title><description>I just discovered this nice tool to analyze the disk space usage in local or more important, in remote pc.&lt;br /&gt;&lt;a href="http://www.marzocca.net/linux/baobab/"&gt;Baobab&lt;/a&gt;&amp;nbsp;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;is a graphical, menu-driven application to analyse disk usage in any Gnome environment.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;This is how my Downloads folder looks like using Baobab&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-A4X36wwvpNY/USZDq9-xSRI/AAAAAAAAAk8/oS1OyxadJQw/s1600/baobab.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="355" src="http://4.bp.blogspot.com/-A4X36wwvpNY/USZDq9-xSRI/AAAAAAAAAk8/oS1OyxadJQw/s640/baobab.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;Baobab uses ssh to obtain the data it needs and you can launch it with :&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 13px;"&gt;ssh user@url &amp;nbsp;-Y baobab&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 13px;"&gt;So you can check easily when some of the remote machines you are working with, is complaining about disk space!&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana; font-size: 13px; text-align: justify;"&gt;&lt;br /&gt;&lt;/span&gt;</description><link>http://rdafbn.blogspot.com/2013/02/baobab-to-analyse-your-disk-space.html</link><author>noreply@blogger.com (marcocast)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-A4X36wwvpNY/USZDq9-xSRI/AAAAAAAAAk8/oS1OyxadJQw/s72-c/baobab.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-8322779340126757071</guid><pubDate>Tue, 19 Feb 2013 09:20:00 +0000</pubDate><atom:updated>2013-02-19T22:24:58.008Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>performance</category><category domain='http://www.blogger.com/atom/ns#'>rest</category><category domain='http://www.blogger.com/atom/ns#'>ApacheBench</category><category domain='http://www.blogger.com/atom/ns#'>test</category><title>ApacheBench - A quick n' easy performance test for your REST applications</title><description>&lt;br /&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;a href="http://en.wikipedia.org/wiki/ApacheBench"&gt;ApacheBench&lt;/a&gt; is only useful for benchmarking POST or GET requests but is quick to set up and gives details results.&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;ab – ApacheBench is should be installed by default on Ubuntu&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;/div&gt;&lt;pre class="de1" style="background-color: #f9f9f9; background-image: none; border: 0px none white; font-size: 13px; line-height: 1.2em; padding: 0px; vertical-align: top;"&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;Example:&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;/div&gt;&lt;pre class="de1" style="background-color: #f9f9f9; background-image: none; border: 0px none white; font-size: 13px; line-height: 1.2em; padding: 0px; vertical-align: top;"&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;ab -n 100 -T 'application/xml' -A 'user:password' -p customer.xml -d&amp;nbsp;&lt;a href="https://mail.ext.paddypower.com/owa/redir.aspx?C=VrkNykk8Z0yYh6gDpYTtUutRDCwX4s8I7fUBsr9fHahQiqA-IccLzBjRNwqO4em4oCZcU_o-JaU.&amp;amp;URL=http%3a%2f%2f172.18.48.67%3a8080%2fws%2f1.1.1%2fresources%2fevents%2f1398526%2fmarkets%2f20426410%2fselections%2f129345494%2fvariants" target="_blank"&gt;http://172.18.48.67:8080/ws/1.1.1/resources/customers&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;-n number of requests&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;-c number of threads&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;-T content-type&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;-A authentication&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;-p POST filename&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;The output:&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Licensed to The Apache Software Foundation, http://www.apache.org/&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Benchmarking 172.18.48.67 (be patient).....done&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Server Software:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Apache-Coyote/1.1&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Server Hostname: &amp;nbsp; &amp;nbsp; &amp;nbsp;172.18.48.67&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Server Port: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8080&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Document Path: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/ws/1.1.1/resources/customers&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Document Length:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1035 bytes&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Concurrency Level: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Time taken for tests: &amp;nbsp; &amp;nbsp; &amp;nbsp; 660.109 seconds&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Complete requests: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 100&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Failed requests: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Write errors: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Total transferred: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 132700 bytes&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Total POSTed: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 79000&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;HTML transferred:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 103500 bytes&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Requests per second:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.15 [#/sec] (mean)&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Time per request: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6601.087 [ms] (mean)&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Time per request: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6601.087 [ms] (mean, across all concurrent requests)&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Transfer rate: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.20 [Kbytes/sec] received&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.12 kb/s sent&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.31 kb/s total&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Connection Times (ms)&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; min&amp;nbsp; mean[+/-sd] median&amp;nbsp;&amp;nbsp; max&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Connect:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 1.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Processing:&amp;nbsp; 5363 6601 810.4&amp;nbsp;&amp;nbsp; 6590&amp;nbsp;&amp;nbsp;&amp;nbsp; 8179&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Waiting:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5362 6600 810.2&amp;nbsp;&amp;nbsp; 6590&amp;nbsp;&amp;nbsp;&amp;nbsp; 8178&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;span style="font-family: Consolas; font-size: 9pt;"&gt;Total:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5363 6601 810.3&amp;nbsp;&amp;nbsp; 6590&amp;nbsp;&amp;nbsp;&amp;nbsp; 8179&lt;/span&gt;&lt;/div&gt;&lt;div class="x_MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; margin: 0cm 0cm 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2013/02/apachebench-quick-n-easy-performance.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-4319008763794782440</guid><pubDate>Mon, 11 Feb 2013 17:08:00 +0000</pubDate><atom:updated>2013-02-11T17:08:36.908Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>BaseKeyedPoolableObjectFactory</category><category domain='http://www.blogger.com/atom/ns#'>ssh connections pool</category><category domain='http://www.blogger.com/atom/ns#'>apache commons</category><category domain='http://www.blogger.com/atom/ns#'>KeyedObjectPool</category><title>Pool of ssh connections using Apache KeyedObjectPool</title><description>&lt;div&gt;I found the org.apache.commons.pool extremely useful and robust, but not well documented.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, I'll try to help a bit here explaining how to use an&amp;nbsp;Apache&amp;nbsp;&lt;a href="http://commons.apache.org/pool/api-1.6/org/apache/commons/pool/KeyedObjectPool.html"&gt;KeyedObjectPool&lt;/a&gt;&lt;b&gt;.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;What is a &lt;a href="http://commons.apache.org/pool/api-1.6/org/apache/commons/pool/KeyedObjectPool.html"&gt;KeyedObjectPool&lt;/a&gt;?&amp;nbsp;&lt;/div&gt;&lt;div&gt;It's a map that contains a pool of instances of multiple types. Each type may be accessed using an arbitrary key.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;In this example I'll create a pool of JSch ssh connections and I will use a simple getter setter object called ServerDetails as a key.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Basically for each server I want to have a pool of 10 reusable ssh connections.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;So first thing to do is to create a Sessionfactory, a class in charge of creating the actual object you want to store in the pool. In our example that would be an ssh connection.&lt;/div&gt;&lt;div&gt;Sessionfactory needs to extend the&amp;nbsp;&lt;span style="background-color: #eeeeee; color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;a href="http://commons.apache.org/pool/api-1.6/org/apache/commons/pool/BaseKeyedPoolableObjectFactory.html"&gt;BaseKeyedPoolableObjectFactory&lt;/a&gt;&amp;lt;K,V&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;where&lt;/span&gt;&lt;span style="background-color: #eeeeee; color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;K&lt;/code&gt;&lt;span style="background-color: white;"&gt;&amp;nbsp;is&lt;/span&gt;&lt;span style="background-color: white;"&gt;&amp;nbsp;the type of keys in this pool and&amp;nbsp;&lt;/span&gt;&lt;code&gt;V&lt;/code&gt;&lt;span style="background-color: white;"&gt;&amp;nbsp;is&lt;/span&gt;&lt;span style="background-color: white;"&gt;&amp;nbsp;the type of objects held in this pool.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code style="background-color: white;"&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code style="background-color: white;"&gt;All you need to do is implement the&amp;nbsp;&lt;/code&gt;&lt;span style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;makeObject&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;method where you need to actually create the object in the pool and&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;destroyObject&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;where obviously you need to implement the code when the object is released and put back in the pool.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="background-color: white;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;code style="background-color: white;"&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;command&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;linux&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;apache&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;commons&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;pool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BaseKeyedPoolableObjectFactory&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jcraft&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;JSch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jcraft&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jcraft&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserInfo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp;* This class is used to handle ssh Session inside the pool.&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;* @author Marco Castigliego&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SessionFactory&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;extends&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BaseKeyedPoolableObjectFactory&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This creates a Session if not already present in the pool.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pln"&gt; makeObject&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;throws&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Exception&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pln"&gt; session &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;JSch&lt;/span&gt;&lt;span class="pln"&gt; jsch &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;JSch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getSession&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getHost&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getPort&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setConfig&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"StrictHostKeyChecking"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"no"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// &lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UserInfo&lt;/span&gt;&lt;span class="pln"&gt; userInfo &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;JschUserInfo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getPassword&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setUserInfo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;userInfo&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setTimeout&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;60000&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setPassword&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getPassword&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;connect&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Exception&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;throw&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;RuntimeException&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"ERROR: Unrecoverable error when trying to connect to serverDetails : &amp;nbsp;"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This is called when closing the pool object&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; destroyObject&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pln"&gt; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;disconnect&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Second thing you need to do, is to create the actual keyed pool Object. In our example we create a singleton that holds a&amp;nbsp;&lt;span style="background-color: #eeeeee; color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;StackKeyedObjectPool.&lt;/span&gt;&lt;br /&gt;The number&amp;nbsp;&lt;span style="background-color: #eeeeee; color: #006666; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;10&amp;nbsp;&lt;/span&gt;is a&amp;nbsp;&lt;span style="background-color: white;"&gt;cap on the number of "sleeping" instances in the pool.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;If 11 clients try to obtain an ssh connection for the same server, the 11th will wait until one of the first 10 will release his connection.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;command&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;linux&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;apache&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;commons&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;pool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;KeyedObjectPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;apache&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;commons&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;pool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;impl&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackKeyedObjectPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jcraft&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp;* Pool controller. This class exposes the org.apache.commons.pool.KeyedObjectPool class.&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;* @author Marco Castigliego&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;KeyedObjectPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; pool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SingletonHolder&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pln"&gt; INSTANCE &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pln"&gt; getInstance&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SingletonHolder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;INSTANCE&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; startPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return the org.apache.commons.pool.KeyedObjectPool class&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;KeyedObjectPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; getPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; pool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return the org.apache.commons.pool.KeyedObjectPool class&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; startPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pool &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackKeyedObjectPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;SessionFactory&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;10&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;How to use it, it's simple and straightforward.&lt;br /&gt;To obtain a ssh connection from the pool, we just need to call :&lt;br /&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; color: black; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="typ" style="color: #660066; white-space: normal;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pun" style="color: #666600; white-space: normal;"&gt;.&lt;/span&gt;&lt;span class="pln" style="white-space: normal;"&gt;getInstance&lt;/span&gt;&lt;span class="pun" style="color: #666600; white-space: normal;"&gt;().&lt;/span&gt;&lt;span class="pln" style="white-space: normal;"&gt;getPool&lt;/span&gt;&lt;span class="pun" style="color: #666600; white-space: normal;"&gt;()&lt;/span&gt;&lt;span class="pun" style="color: #666600; white-space: normal;"&gt;.&lt;/span&gt;&lt;span class="pln" style="white-space: normal;"&gt;borrowObject&lt;/span&gt;&lt;span class="pun" style="color: #666600; white-space: normal;"&gt;(&lt;/span&gt;&lt;span class="pln" style="white-space: normal;"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600; white-space: normal;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small;"&gt;where serverDetails is our key (we want a pool of ssh connections per server).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small;"&gt;When the connection is not needed anymore we put it back on the pool with :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; color: black; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getInstance&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;getPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;returnObject&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;command&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;linux&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;command&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutableCommand&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jcraft&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Channel&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jcraft&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ChannelExec&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jcraft&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jsch&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp;* The SshCommandExecutor uses the net.schmizz.sshj library to execute remote&lt;br /&gt;&amp;nbsp;* commands.&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;* &amp;lt;ol&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;Establish a connection using the credential in the {@link serverDetails}&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;Opens a session channel&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;Execute a command on the session&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;Closes the session&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;Disconnects&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;/ol&amp;gt;&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;* @author Marco Castigliego&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;JschCommandExecutor&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;extends&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CommandExecutor&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;JschCommandExecutor&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ServerDetails&lt;/span&gt;&lt;span class="pln"&gt; serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;super&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CommandExecutor&lt;/span&gt;&lt;span class="pln"&gt; execute&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutableCommand&lt;/span&gt;&lt;span class="pln"&gt; command&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Session&lt;/span&gt;&lt;span class="pln"&gt; session &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Channel&lt;/span&gt;&lt;span class="pln"&gt; channel &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getInstance&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;getPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;borrowObject&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;//...do stuff&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Exception&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;throw&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;RuntimeException&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"ERROR: Unrecoverable error when performing remote command "&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getMessage&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;finally&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!=&lt;/span&gt;&lt;span class="pln"&gt; channel &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="pln"&gt; channel&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;isConnected&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;())&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; channel&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;disconnect&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!=&lt;/span&gt;&lt;span class="pln"&gt; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;StackSessionPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getInstance&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;getPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;returnObject&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;serverDetails&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; session&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Exception&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;printStackTrace&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;Remember to close the pool when you don't need it anymore with&amp;nbsp;&lt;/span&gt;&lt;br /&gt;StackSessionPool.getInstance().getPool().close();&lt;br /&gt;&lt;br /&gt;Hope this will clarify a bit this extremely helpful and robust&amp;nbsp;Apache&amp;nbsp;API.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2013/02/pool-of-ssh-connections-using-apache.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-5431649998134780852</guid><pubDate>Tue, 29 Jan 2013 11:05:00 +0000</pubDate><atom:updated>2013-02-01T10:32:30.215Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>garbage collector</category><category domain='http://www.blogger.com/atom/ns#'>jvisualvm</category><category domain='http://www.blogger.com/atom/ns#'>monitoring</category><title>Monitoring the GC</title><description>&lt;br /&gt;&lt;h3&gt;&lt;strong&gt;GCHisto for Offline Analysis of Garbage Collection Data&lt;/strong&gt;&lt;/h3&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;GCHisto is a tool designed to do offline analysis, it’s free and it’s hosted on&amp;nbsp;&lt;a href="http://java.net/projects/gchisto" style="color: #5a8238;" title="http://java.net/projects/gchisto"&gt;http://java.net/projects/gchisto&lt;/a&gt;.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;To run it you need to download it, cd into gchisto folder and type:&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;em style="font-style: normal;"&gt;sudo ant run&lt;/em&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;You can then load any gc log file and this tool will give you a visual view on the log.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;The tab “GC Pause stats” will help you to identify the duration of the young and full GC action.&lt;br /&gt;The overhead column is useful to identify how good your GC is tuned. Documentations says that a concurrent GC should be less than 10% overhead (ideal is 1% or less). If it’s above 10% it may required some tuning (increase the heap space can be one).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7rjl9tITT8E/UQjsCmFbyGI/AAAAAAAAAkA/EQRlfVcJjTg/s1600/getfile+(1).jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://2.bp.blogspot.com/-7rjl9tITT8E/UQjsCmFbyGI/AAAAAAAAAkA/EQRlfVcJjTg/s640/getfile+(1).jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;It will also provide useful graphs which are always better and less boring the raw data:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-C3OPu9nAFZE/UQjsgts8VBI/AAAAAAAAAkI/t1v3X3Uliyg/s1600/Screenshot-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="420" src="http://2.bp.blogspot.com/-C3OPu9nAFZE/UQjsgts8VBI/AAAAAAAAAkI/t1v3X3Uliyg/s640/Screenshot-3.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;The GC Pause Distribution is used to analyse how many pauses occurs and how they are distributed:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GsM3Nsey-HM/UQjsoBHbV-I/AAAAAAAAAkQ/oO021bd-VuU/s1600/Screenshot-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="422" src="http://1.bp.blogspot.com/-GsM3Nsey-HM/UQjsoBHbV-I/AAAAAAAAAkQ/oO021bd-VuU/s640/Screenshot-4.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;a more detailed guide on all the gchisto features can be found here :&amp;nbsp;&lt;a href="http://sysadminsjourney.com/2008/09/15/profile-gc-with-gchisto/"&gt;http://sysadminsjourney.com/2008/09/15/profile-gc-with-gchisto/&lt;/a&gt;&lt;a href="http://sysadminsjourney.com/2008/09/15/profile-gc-with-gchisto/" style="color: #5a8238;" title="profile-gc-with-gchisto"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;—————————————————————-&lt;/div&gt;&lt;h3&gt;&lt;strong&gt;Visual GC plugin + VisualVM for Live Analysis of Garbage Collection Data&lt;/strong&gt;&lt;/h3&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;In case you want to monitor what’s happening in the GC in real time you can use the visualVM that come together with your jdk.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;To run it just type&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;em style="font-style: normal;"&gt;jvisualvm&lt;/em&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;To add the viusualGC click on Tools–&amp;gt;Plugins–&amp;gt;Available plugins and select and install&amp;nbsp;&lt;strong&gt;Visual GC&lt;/strong&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;Restart visual VM.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;With the basic VisualVM you can monitor memory usage, CPU consumption and how the Threads behave. The visual GC gives you a realtime view on the 3 heap memory spaces usage.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zYYayIV6tlM/UQjsu3MvrPI/AAAAAAAAAkY/nv3hgw-9C0k/s1600/Screenshot-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="350" src="http://4.bp.blogspot.com/-zYYayIV6tlM/UQjsu3MvrPI/AAAAAAAAAkY/nv3hgw-9C0k/s640/Screenshot-5.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;As you can see, a full and immediate vision on the Permanent, old and young space is given, helping a lot during analysis.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;You can use this tool locally without any other required step, but it’s also possible to monitor remote VM (UAT,SYS,etc) using the jstatd deamon provided by java in sdk (same place where the jvisualvm is).&lt;br /&gt;The jstatd daemon launches a Java RMI server application that watches for the creation and termination of HotSpot VMs and provides an interface to allow remote monitoring tools such as VisualVM to attach and monitor Java applications remotely, here is how to use it and configure it :&amp;nbsp;&lt;a href="http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html"&gt;http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html&lt;/a&gt;&lt;a href="http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html" style="color: #5a8238;" title="http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;Hope this will help you a bit guys!&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2013/01/monitoring-gc.html</link><author>noreply@blogger.com (marcocast)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-7rjl9tITT8E/UQjsCmFbyGI/AAAAAAAAAkA/EQRlfVcJjTg/s72-c/getfile+(1).jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-6108279926634255806</guid><pubDate>Mon, 14 Jan 2013 11:15:00 +0000</pubDate><atom:updated>2013-01-14T20:48:58.418Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>CompletionService</category><category domain='http://www.blogger.com/atom/ns#'>ExecutorService</category><title>ExecutorService VS CompletionService VS normal loop</title><description>This is to show the difference between handling jobs with a pure&amp;nbsp;ExecutorService VS a CompletionService VS a normal loop.&lt;br /&gt;&lt;br /&gt;The CompletionServiceTest class simply prints numbers at predefined intervals (&amp;nbsp;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;waittime &lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;=&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;200&amp;nbsp;&lt;/span&gt;that simulates a work done by the thread, for example reading or parsing a file or run calculations, etc).&lt;br /&gt;&lt;br /&gt;We do the same job in 3 different ways and we print the result together with the total execution time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Arrays&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;HashSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Set&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;concurrent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Callable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;concurrent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CompletionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;concurrent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutionException&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;concurrent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutorCompletionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;concurrent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutorService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;concurrent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Executors&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;concurrent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Future&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CompletionServiceTest&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; waittime &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;200&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; numberOfThreadsInThePool &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; printRequests &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Arrays&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;asList&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"2"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"3"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"4"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"5"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"6"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"7"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"9"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"10"&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; normalLoop&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; image &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; printRequests&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Thread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sleep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;waittime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;InterruptedException&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;printStackTrace&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;print&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;image&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; normalExecutorService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutorService&lt;/span&gt;&lt;span class="pln"&gt; executor &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Executors&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;newFixedThreadPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;numberOfThreadsInThePool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Set&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Future&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; printTaskFutures &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;HashSet&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Future&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&amp;gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; printRequest &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; printRequests&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printTaskFutures&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;add&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;executor&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;submit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;printRequest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Future&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; future &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; printTaskFutures&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;print&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;future&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;get&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Exception&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Thread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentThread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;interrupt&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;finally&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;executor &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; executor&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;shutdownNow&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; completionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutorService&lt;/span&gt;&lt;span class="pln"&gt; executor &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Executors&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;newFixedThreadPool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;numberOfThreadsInThePool&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CompletionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; completionService &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutorCompletionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="pln"&gt;executor&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; printRequest &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; printRequests&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; completionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;submit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;printRequest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; t &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;0&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; n &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; printRequests&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;size&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt; t &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt; n&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt; t&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Future&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; f &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; completionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;take&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;print&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;f&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;get&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;InterruptedException&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Thread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentThread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;interrupt&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ExecutionException&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Thread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentThread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;interrupt&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;finally&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;executor &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; executor&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;shutdownNow&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;implements&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Callable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; toPrint&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; toPrint&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;toPrint &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; toPrint&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; call&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;try&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Thread&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sleep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;waittime&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;catch&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;InterruptedException&lt;/span&gt;&lt;span class="pln"&gt; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;printStackTrace&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; toPrint&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[]&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Normal Executor Service"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;long&lt;/span&gt;&lt;span class="pln"&gt; start &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CompletionServiceTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;normalExecutorService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Execution time : "&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln"&gt; start&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Completion Service"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CompletionServiceTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;completionService&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Execution time : "&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln"&gt; start&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Normal Loop"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CompletionServiceTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;normalLoop&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Execution time : "&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&lt;/span&gt;&lt;span class="pln"&gt; start&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The output :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="typ" style="color: #660066;"&gt;Normal&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Executor&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Service&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;4865447106310711038976137104163378132553196955489824610105761329674254896133105110752911167871022184410147885282715959248479622229673310496981056331010958&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Execution&lt;/span&gt;&lt;span class="pln"&gt; time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;9410&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Completion&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Service&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1234567891012345678910123456789101234567891012345678109123456789101234567891012345678910123456789101235647891012345678910123456789101234568791012435687109&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Execution&lt;/span&gt;&lt;span class="pln"&gt; time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;9405&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Normal&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Loop&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1234567891012345678910123456789101234567891012345678910123456789101234567891012345678910123456789101234567891012345678910123456789101234567891012345678910&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Execution&lt;/span&gt;&lt;span class="pln"&gt; time &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;28013&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As you can see the &lt;b&gt;&lt;u&gt;total&lt;/u&gt;&lt;/b&gt; execution time between&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Normal&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Executor&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Service&amp;nbsp;&lt;/span&gt;and&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Completion&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Service&amp;nbsp;&lt;/span&gt;is the same, while the normal loop was more than 3 times slower. This is easily explained by the fact that the normal loop was single threaded and the others 2 were run with 3 threads.&lt;br /&gt;&lt;br /&gt;The difference between&amp;nbsp;&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Normal&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Executor&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Service&amp;nbsp;&lt;/span&gt;and&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Completion&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Service&amp;nbsp;&lt;/span&gt;is visible at runtime,&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Normal&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Executor&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Service &lt;/span&gt;always waits &amp;nbsp;for the next thread to finish the job before printing the number, the client needs to wait until a big bunch of threads return all together.&lt;br /&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Completion&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Service&amp;nbsp;&lt;/span&gt;is&amp;nbsp;behaving differently, it follows a producer/consumer philosophy: as soon a thread &lt;b&gt;is done,&lt;/b&gt; it puts the result into a &lt;b&gt;non blocking queue&lt;/b&gt; so that the consumer can &lt;b&gt;take&lt;/b&gt; it.&lt;br /&gt;&lt;br /&gt;I hope this simple example will help you to better clarify the completion service as it did for me.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://rdafbn.blogspot.com/2013/01/executorservice-vs-completionservice-vs.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-908792353637145414</guid><pubDate>Thu, 03 Jan 2013 15:46:00 +0000</pubDate><atom:updated>2013-01-03T15:48:36.532Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>performance</category><category domain='http://www.blogger.com/atom/ns#'>juno</category><category domain='http://www.blogger.com/atom/ns#'>eclipse</category><title>Fix for bad performance in Eclipse Juno SR1</title><description>&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: white; line-height: 24px; margin-bottom: 10px; margin-top: 0.4em;"&gt;&lt;span style="font-family: inherit;"&gt;Several major&amp;nbsp;&lt;b&gt;performance defects&lt;/b&gt;&amp;nbsp;have been addressed in the Juno SR2 stream (4.2.2). Community members have confirmed that these fixes substantially address the performance problems with&amp;nbsp;&lt;b&gt;editor and view opening, closing, and switching&lt;/b&gt;.&amp;nbsp;&lt;b&gt;These fixes will be widely available in&lt;/b&gt;&amp;nbsp;the Juno Service Release 2 (&lt;b&gt;February 2013&lt;/b&gt;) and Kepler (June 2013) releases.&amp;nbsp;&lt;b&gt;Meanwhile, a patch is available for those using Juno SR1&lt;/b&gt;&amp;nbsp;that provides early access to these fixes. To install this patch:&lt;/span&gt;&lt;/div&gt;&lt;ol style="background-color: white; line-height: 24px; margin: 0.3em 0px 0px 3.2em; padding: 0px;"&gt;&lt;li style="list-style-type: decimal; margin-bottom: 0.1em;"&gt;&lt;span style="font-family: inherit;"&gt;Ensure you are already running on a package from the Juno SR1 release (September 2012)&lt;/span&gt;&lt;/li&gt;&lt;li style="list-style-type: decimal; margin-bottom: 0.1em;"&gt;&lt;span style="font-family: inherit;"&gt;Invoke&lt;span class="x_Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Help &amp;gt; Install New Software&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="list-style-type: decimal; margin-bottom: 0.1em;"&gt;&lt;span style="font-family: inherit;"&gt;Select this repository:&lt;span class="x_Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a class="x_external x_free" href="https://mail.ext.paddypower.com/owa/redir.aspx?C=BbrbCN7KUUehrRCVynBL-Kra-p4uvc8IMW3J60qsQ8RMFYXTnXUMFQcThIMmu1x3CNPysPfMsAM.&amp;amp;URL=http%3a%2f%2fdownload.eclipse.org%2feclipse%2fupdates%2f4.2" rel="nofollow" style="color: #3366bb; padding-right: 13px; text-decoration: initial;" target="_blank" title="http://download.eclipse.org/eclipse/updates/4.2"&gt;http://download.eclipse.org/eclipse/updates/4.2&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="list-style-type: decimal; margin-bottom: 0.1em;"&gt;&lt;span style="font-family: inherit;"&gt;Expand&lt;span class="x_Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Juno SR1 Patches&lt;/b&gt;&lt;span class="x_Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;and install&lt;span class="x_Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Eclipse UI Juno SR1 Optimizations&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;Source:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://mail.ext.paddypower.com/owa/redir.aspx?C=BbrbCN7KUUehrRCVynBL-Kra-p4uvc8IMW3J60qsQ8RMFYXTnXUMFQcThIMmu1x3CNPysPfMsAM.&amp;amp;URL=http%3a%2f%2fwiki.eclipse.org%2fPlatform_UI%2fJuno_Performance_Investigation" target="_blank"&gt;http://wiki.eclipse.org/Platform_UI/Juno_Performance_Investigation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope this helps someone&lt;/span&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2013/01/fix-for-bad-performance-in-eclipse-juno.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-7055706722248580320</guid><pubDate>Mon, 19 Nov 2012 10:33:00 +0000</pubDate><atom:updated>2012-11-20T11:10:18.589Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>design pattern</category><category domain='http://www.blogger.com/atom/ns#'>Builder pattern</category><category domain='http://www.blogger.com/atom/ns#'>youtube</category><category domain='http://www.blogger.com/atom/ns#'>Step Builder Pattern</category><title>Step builder pattern on youtube</title><description>&lt;div class="separator" style="clear: both; text-align: left;"&gt;Djorgje Popovic just published an &lt;a href="http://www.javing.blogspot.co.uk/2012/11/fancy-cup-of-tea.html"&gt;article&lt;/a&gt; on the &lt;a href="http://rdafbn.blogspot.co.uk/2012/07/step-builder-pattern_28.html"&gt;Step builder pattern&lt;/a&gt; which includes a nice video explaining the how and the why of this design.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So thanks to Djorgje and enjoy the video.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/KJ27DyU5bho/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/KJ27DyU5bho&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/KJ27DyU5bho&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;</description><link>http://rdafbn.blogspot.com/2012/11/step-builder-pattern-on-youtube.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-3396576235157030875</guid><pubDate>Thu, 15 Nov 2012 16:11:00 +0000</pubDate><atom:updated>2012-11-18T16:50:03.210Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>design pattern</category><category domain='http://www.blogger.com/atom/ns#'>Spring</category><category domain='http://www.blogger.com/atom/ns#'>chain of responsability</category><category domain='http://www.blogger.com/atom/ns#'>ordered autowired list</category><title>Chain of responsibility using Spring @Autowired List </title><description>There is a way in Spring 3.1 to auto populate a typed List which is very handy when you want to push a bit the decoupling and the cleaning in your code.&lt;br /&gt;&lt;br /&gt;To show you how it works, I will implement a simple chain of responsibility that will take care of&amp;nbsp;printing some greetings for a passed User.&lt;br /&gt;&lt;br /&gt;Let start from the (only) domain class we have, the User:&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;User&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;char&lt;/span&gt;&lt;span class="pln"&gt; gender&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;User&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;char&lt;/span&gt;&lt;span class="pln"&gt; gender&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;super&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;gender &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; gender&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;char&lt;/span&gt;&lt;span class="pln"&gt; getGender&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; gender&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then we create an interface that defines the type for our command objects to be used in our chain:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;print&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;User&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is the generic class (the template) for a Printer implementation.&lt;br /&gt;The&amp;nbsp;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;org&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;.&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;.&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Ordered&amp;nbsp;&lt;/span&gt;is used to tell the AnnotationAwareOrderComparator how we want our List to be ordered.&lt;br /&gt;&lt;b&gt;You don't need to implement the&amp;nbsp;&lt;span style="background-color: #eeeeee; color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Ordered&amp;nbsp;&lt;/span&gt;interface and to&amp;nbsp;override the getOrder method if you don't need your chain to have an execution order.&lt;/b&gt;&lt;br /&gt;Also notice that this abstract class return&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Ordered&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;.&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;LOWEST_PRECEDENCE, t&lt;/span&gt;his because I want some Printer commands to just run at the end of the chain and I don't care about their execution order (everything will be clearer after, I promise!).&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Ordered&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;abstract&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GenericPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;implements&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Ordered&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;print&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;User&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; prefix &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Mr"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getGender&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;==&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'F'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prefix &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Mrs"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;getGreeting&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;" "&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; prefix &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;" "&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;abstract&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getGreeting&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; getOrder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Ordered&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;LOWEST_PRECEDENCE&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is our first real Printer command. I want this to have absolute precedence in the chain,&amp;nbsp;hence the order is&amp;nbsp;&amp;nbsp;&lt;span style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;HIGHEST_PRECEDENCE.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Ordered&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stereotype&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Component&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Component&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;HelloPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;extends&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GenericPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; GREETING &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Hello"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getGreeting&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; GREETING&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; getOrder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Ordered&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;HIGHEST_PRECEDENCE&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #eeeeee; color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;WelcomePrinter&lt;/span&gt;&amp;nbsp;to be executed as first command (&lt;b&gt;After High precedence ones &lt;/b&gt;).&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stereotype&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Component&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Component&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;WelcomePrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;extends&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GenericPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; GREETING &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Welcome to the autowired chain"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getGreeting&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; GREETING&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; getOrder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #eeeeee; color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;GoodbyePrinter&lt;/span&gt;&amp;nbsp;to be executed as second command&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stereotype&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Component&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Component&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GoodbyePrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;extends&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GenericPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; GREETING &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Goodbye"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getGreeting&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; GREETING&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; getOrder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;These 2 commands need to be executed after the others, but I don't care about their specific order, so I will not override the getOrder method, leaving the&amp;nbsp;&lt;span style="background-color: #eeeeee; color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;GenericPrinter&lt;/span&gt;&amp;nbsp;to return&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Ordered&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;.&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;LOWEST_PRECEDENCE&amp;nbsp;&lt;/span&gt;for both.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stereotype&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Component&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Component&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CleaningMemoryPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;extends&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GenericPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; GREETING &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Cleaning memory after"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getGreeting&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; GREETING&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stereotype&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Component&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Component&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CleaningSpacePrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;extends&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;GenericPrinter&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; GREETING &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Cleaning space after"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getGreeting&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; GREETING&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is the chain context.&lt;br /&gt;Spring&amp;nbsp;will scan (see the spring-config.xml) the package specified in the config file, it&amp;nbsp;will see the typed (&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Printer&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;&amp;gt;&lt;/span&gt;) list,&amp;nbsp;and it will populate the list with an instance of any&amp;nbsp;&lt;span style="background-color: #eeeeee; color: #006666; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;@Component&amp;nbsp;&lt;/span&gt;that implements the type &lt;span style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;Printer&lt;/span&gt;.&lt;br /&gt;To order the List we use&amp;nbsp;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;AnnotationAwareOrderComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;.&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;INSTANCE&amp;nbsp;&lt;/span&gt;that use the getOrder method to re-order the List (&lt;i&gt;&lt;span style="background-color: white; color: #333333; font-family: Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif; font-size: 12px;"&gt;&lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/core/Ordered.html"&gt;the object with the lowest value has highest priority (somewhat analogous to Servlet "load-on-startup" values&lt;/a&gt;)&lt;/span&gt;&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Collections&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; javax&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;annotation&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PostConstruct&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;beans&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;factory&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;annotation&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Autowired&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;annotation&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;AnnotationAwareOrderComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stereotype&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Component&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Component&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PrinterChain&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Autowired&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; printers&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@PostConstruct&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; init&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Collections&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sort&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;printers&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;AnnotationAwareOrderComparator&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;INSTANCE&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; introduceUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;User&lt;/span&gt;&lt;span class="pln"&gt; user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Printer&lt;/span&gt;&lt;span class="pln"&gt; printer &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; printers&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;print&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;user&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The spring-config.xml in the&amp;nbsp;src/main/resources.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln"&gt;xml version&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"1.0"&lt;/span&gt;&lt;span class="pln"&gt; encoding&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"UTF-8"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="tag" style="color: #000088;"&gt;&amp;lt;beans&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;xmlns&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"http://www.springframework.org/schema/beans"&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;xmlns:xsi&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;xmlns:aop&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"http://www.springframework.org/schema/aop"&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;xmlns:tx&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"http://www.springframework.org/schema/tx"&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;xmlns:context&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"http://www.springframework.org/schema/context"&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;xmlns:util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"http://www.springframework.org/schema/util"&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;xsi:schemaLocation&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"&lt;br /&gt;&amp;nbsp; http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&lt;br /&gt;&amp;nbsp; http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd&lt;br /&gt;&amp;nbsp; http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd&lt;br /&gt;&amp;nbsp; http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd&lt;br /&gt;&amp;nbsp; http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;default-lazy-init&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"true"&lt;/span&gt;&lt;span class="tag" style="color: #000088;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="tag" style="color: #000088;"&gt;&amp;lt;context:component-scan&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="atn" style="color: #660066;"&gt;base-package&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="atv" style="color: #008800;"&gt;"com.marco.springchain"&lt;/span&gt;&lt;span class="tag" style="color: #000088;"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="tag" style="color: #000088;"&gt;&amp;lt;/beans&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, a main class to test our chain.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;marco&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springchain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;springframework&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;context&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;support&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassPathXmlApplicationContext&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;MainTest&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[]&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassPathXmlApplicationContext&lt;/span&gt;&lt;span class="pln"&gt; context &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ClassPathXmlApplicationContext&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"spring-config.xml"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PrinterChain&lt;/span&gt;&lt;span class="pln"&gt; printerChain &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PrinterChain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; context&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;getBean&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"printerChain"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printerChain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;introduceUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;User&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Marco Castigliego"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'M'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printerChain&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;introduceUser&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;User&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Julie Marot"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'F'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OUTPUT:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="typ" style="color: #660066;"&gt;Hello&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mr&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marco&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Castigliego&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Welcome&lt;/span&gt;&lt;span class="pln"&gt; to the autowired chain &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mr&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marco&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Castigliego&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Goodbye&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mr&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marco&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Castigliego&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Cleaning&lt;/span&gt;&lt;span class="pln"&gt; space after &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mr&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marco&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Castigliego&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Cleaning&lt;/span&gt;&lt;span class="pln"&gt; memory after &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mr&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marco&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Castigliego&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Hello&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mrs&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Julie&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marot&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Welcome&lt;/span&gt;&lt;span class="pln"&gt; to the autowired chain &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mrs&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Julie&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marot&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Goodbye&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mrs&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Julie&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marot&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Cleaning&lt;/span&gt;&lt;span class="pln"&gt; space after &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mrs&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Julie&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marot&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Cleaning&lt;/span&gt;&lt;span class="pln"&gt; memory after &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Mrs&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Julie&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Marot&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Hope you enjoyed the example. see ya.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://rdafbn.blogspot.com/2012/11/chain-of-responsibility-using-spring.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-506188707211873185</guid><pubDate>Thu, 08 Nov 2012 11:48:00 +0000</pubDate><atom:updated>2012-11-18T16:50:58.138Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>hornetq-jms.xml</category><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>hornetq-configuration.xml</category><category domain='http://www.blogger.com/atom/ns#'>connectors</category><category domain='http://www.blogger.com/atom/ns#'>Hornetq</category><category domain='http://www.blogger.com/atom/ns#'>bridges</category><title>JBoss HornetQ for Kids, Parents and Grandparents – Chapter 1</title><description>&lt;br /&gt;&lt;h1 class="post_title" style="background-color: white; color: #729752; font-family: arial, sans-serif; font-size: 26px; font-weight: 400; line-height: 1.2; margin: 0px; padding: 0px;"&gt;&lt;span style="color: #333333; font-size: 14px; line-height: 21px;"&gt;It’s now almost 4 years that I’m working with HornetQ and I think it’s time to share part of what I learnt so far.&lt;/span&gt;&lt;/h1&gt;&lt;div class="entry group" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin: 10px 0px;"&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;The main purpose of this post is not to rewrite the&amp;nbsp;&lt;a href="http://docs.jboss.org/hornetq/2.2.5.Final/user-manual/en/html_single/index.html" style="color: #5a8238;"&gt;official documentation&lt;/a&gt;, but it’s to clarify, in simple ways, the concepts we use most here in PaddyPower .&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h1 style="font-size: 24px; margin: 0px; padding: 0px;"&gt;What is HornetQ&lt;/h1&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;HornetQ is a JMS implementation.&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Java_Message_Service" style="color: #5a8238;"&gt;JMS&lt;/a&gt;&amp;nbsp;is a message oriented middle-ware API to exchange information between producers and consumers in an asynchronous way.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;HornetQ is one of the numerous framework out there that implement the JMS API.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h1 style="font-size: 24px; margin: 0px; padding: 0px;"&gt;Configuration&lt;/h1&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;All the HornetQ configuration we care about is in 1 folder. How beautiful is that?! The folder is&amp;nbsp;&lt;em style="font-style: normal;"&gt;&lt;strong&gt;hornetq (or hornetq.sar dipending on the jboss version you are using)&lt;/strong&gt;&lt;/em&gt;&amp;nbsp;and you can find it in your jboss profile deploy folder.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;In this folder we have up to 7 xml configuration files. We really care only about 2:&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;strong&gt;hornetq-jms.xml&lt;/strong&gt;&amp;nbsp;and&amp;nbsp;&lt;strong&gt;hornetq-configuration.xml&lt;/strong&gt;.&lt;/div&gt;&lt;h3 style="font-size: 18px; margin: 0px; padding: 0px;"&gt;hornetq-jms.xml&lt;/h3&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;This is where you want to define your JNDI names for queues, topics and connection factories.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;By default all the Connection factories, the dead letter and the expiry Queue are already configured.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;What you need to add is only the queues or topics that your application needs to use.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;For example:&lt;/div&gt;&lt;pre style="font-family: 'courier new', courier, monospace; padding: 0px;"&gt;&amp;lt;queue name="phaseQueueFromEngine"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;entry name="/queue/phaseQueueFromEngine"/&amp;gt;&lt;br /&gt;&amp;lt;/queue&amp;gt;&lt;/pre&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;the entry name is the JNDI name used by your producer and consumer to discover the queue.&lt;/div&gt;&lt;h3 style="font-size: 18px; margin: 0px; padding: 0px;"&gt;hornetq-configuration.xml&lt;/h3&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;This is where you want to define acceptors, connectors, bridges and other cool stuff.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Understanding Connectors &amp;amp; Acceptors&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Ok, this can be tricky, so I’ll try to be simple and essential.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;HornetQ run in a server (JBoss for example) or as standalone application.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;In any of the above cases, HornetQ works by communicating with his own server, the HornetQ server.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;In order to communicate with it, we have to tell how we connect to and what we accept as connection.&lt;/div&gt;&lt;ul style="list-style-image: none; list-style-position: inside; margin: 10px 0px 10px 20px; padding: 0px;"&gt;&lt;li style="margin: 0px; padding: 0px;"&gt;Acceptors define which type of connection are accepted by the HornetQ Server.&lt;/li&gt;&lt;li style="margin: 0px; padding: 0px;"&gt;Connectors define how to connect to the HornetQ server.&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Luckily, only 2 kind of connectors and acceptors are possible, in-vm and netty.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;strong&gt;in-vm&lt;/strong&gt;&amp;nbsp;is used when the producer and the consumer lives in the same virtual machine.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Example:&lt;/div&gt;&lt;pre style="font-family: 'courier new', courier, monospace; padding: 0px;"&gt;&amp;lt;acceptor name="in-vm"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;factory-class&amp;gt;org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory&amp;lt;/factory-class&amp;gt;&lt;br /&gt;&amp;lt;/acceptor&amp;gt;&lt;br /&gt;&amp;lt;connector name="in-vm"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;factory-class&amp;gt;org.hornetq.core.remoting.impl.invm.InVMConnectorFactory&amp;lt;/factory-class&amp;gt;&lt;br /&gt;&amp;lt;/connector&amp;gt;&lt;/pre&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;strong&gt;netty&lt;/strong&gt;&amp;nbsp;must be used when the producer and the consumer lives in different virtual machines.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Example:&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Producer/Consumer in the same machine:&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;pre style="font-family: 'courier new', courier, monospace; padding: 0px;"&gt;&amp;lt;acceptor name="netty"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;factory-class&amp;gt;org.hornetq.integration.transports.netty.NettyAcceptorFactory&amp;lt;/factory-class&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param key="host"&amp;nbsp; value="${host:localhost}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param key="port"&amp;nbsp; value="${port:5445}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/acceptor&amp;gt;&lt;/pre&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&amp;lt;connector name=”netty”&amp;gt;&lt;br /&gt;&amp;lt;factory-class&amp;gt;org.hornetq.integration.transports.netty.NettyConnectorFactory&amp;lt;/factory-class&amp;gt;&lt;br /&gt;&amp;lt;param key=”host”&amp;nbsp; value=”${host:localhost}”/&amp;gt;&lt;br /&gt;&amp;lt;param key=”port”&amp;nbsp; value=”${port:5445}”/&amp;gt;&lt;br /&gt;&amp;lt;/connector&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Producer/Consumer in different machines:&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;span style="text-decoration: underline;"&gt;Consumer Box&lt;/span&gt;&lt;br /&gt;&amp;lt;acceptor name=”netty-external-acceptor”&amp;gt;&lt;br /&gt;&amp;lt;factory-class&amp;gt;org.hornetq.integration.transports.netty.NettyAcceptorFactory&amp;lt;/factory-class&amp;gt;&lt;br /&gt;&amp;lt;param key=”host”&amp;nbsp; value=”172.x.x.62″/&amp;gt;&lt;br /&gt;&amp;lt;param key=”port”&amp;nbsp; value=”5445″/&amp;gt;&lt;br /&gt;&amp;lt;/acceptor&amp;gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;Producer Box&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: 'courier new', courier, monospace; padding: 0px;"&gt;&amp;lt;connector name="remote-engine-connector"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;factory-class&amp;gt; org.hornetq.integration.transports.netty.NettyConnectorFactory&amp;lt;/factory-class&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param key="host" value="172.x.x.62"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param key="port" value="5445"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/connector&amp;gt;&lt;/pre&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;So far so good.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Pay attention when you configure acceptors and connectors because in order to communicate properly they have to be the same kind with the same host and port.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;netty acceptor with netty connector (same host and port )&amp;nbsp;&lt;span style="color: #339966;"&gt;GOOD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;in-vm&amp;nbsp;acceptor with&amp;nbsp;in-vm connector&amp;nbsp;&lt;span style="color: #339966;"&gt;GOOD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;in-vm&amp;nbsp;acceptor with netty connector&amp;nbsp;&lt;span style="color: red;"&gt;BAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;netty acceptor port 5445 with netty connector 5446&amp;nbsp;&lt;span style="color: red;"&gt;BAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;netty acceptor host 172.x.x.60 with netty connector 172.x.x.62&amp;nbsp;&lt;span style="color: red;"&gt;BAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;strong&gt;Understanding Bridges&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Another feature I widely used is the bridge.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;If you have a producer living in the box 172.x.x.60 and the consumer sitting in the box 172.x.x.62 you need to connect them and you do this configuring a bridge in our beloved configuration file hornetq-configuration.xml&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Example :&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&amp;lt;bridge name=”from60to62Bridge”&amp;gt;&lt;br /&gt;&amp;lt;queue-name&amp;gt;jms.queue.phaseQueueToEngine&amp;lt;/queue-name&amp;gt;&lt;br /&gt;&amp;lt;forwarding-address&amp;gt;jms.queue.phaseQueueFromInput&amp;lt;/forwarding-address&amp;gt;&lt;br /&gt;&amp;lt;reconnect-attempts&amp;gt;-1&amp;lt;/reconnect-attempts&amp;gt;&lt;br /&gt;&amp;lt;connector-ref connector-name=”remote-engine-connector”/&amp;gt;&lt;br /&gt;&amp;lt;/bridge&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;Yes, you use the connector to specify where to connect to the other hornetQ server.&amp;nbsp;&lt;strong&gt;Easy!&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;I hope this will clarify a couple of aspects and it will help to understand better the sometime scary Hornetq configuration.&lt;/div&gt;&lt;div style="margin-bottom: 14px; padding: 0px;"&gt;&lt;em style="font-style: normal;"&gt;Coming soon.. HornetQ for Kids, Parents and Grandparents – Chapter 2: the magic of address-settings&lt;/em&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2012/11/hornetq-for-kids-parents-and.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-3871232137586434164</guid><pubDate>Thu, 08 Nov 2012 11:38:00 +0000</pubDate><atom:updated>2012-11-18T16:51:58.129Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Theory</category><category domain='http://www.blogger.com/atom/ns#'>Parameterized</category><category domain='http://www.blogger.com/atom/ns#'>Parameters</category><category domain='http://www.blogger.com/atom/ns#'>Theories</category><category domain='http://www.blogger.com/atom/ns#'>JUnit4</category><title>JUnit4 Parameterized and Theories</title><description>&lt;br /&gt;&lt;h1 style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 24px; margin: 0px; padding: 0px;"&gt;Parameterized&lt;/h1&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;I always relied on TestNG to&amp;nbsp;pass parameters to test methods in order to give a bit of flexibility to my tests or suites.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;However, the same flexibility can be achieved using JUnit4.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;To use it it’s simple:&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;code style="background-color: #f0f2e4; background-position: initial initial; background-repeat: initial initial; font-family: 'courier new', courier, monospace;"&gt;&lt;br /&gt;package com.marco.test;&lt;/code&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;import java.util.Arrays;&lt;br /&gt;import java.util.Collection;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;import junit.framework.Assert;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;import org.junit.Test;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;import org.junit.runners.Parameterized;&lt;br /&gt;import org.junit.runners.Parameterized.Parameters;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@RunWith(Parameterized.class)&lt;br /&gt;public class ParameterizedTest {&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@Parameters&lt;br /&gt;public static Collection data() {&lt;br /&gt;return Arrays.asList(new Object[][] {&lt;br /&gt;/* Sport Nation year totWinners */&lt;br /&gt;{ “basket”, “usa”, 2002, 5, },&lt;br /&gt;{ “soccer”, “argentina”, 2003, 2 },&lt;br /&gt;{ “tennis”, “spain”, 2004, 10 },&lt;br /&gt;{ “chess”, “ireland”, 2005, 0 },&lt;br /&gt;{ “eatingbananas”, “italy”, 2006, 20 }&lt;br /&gt;});&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;private final String sport;&lt;br /&gt;private final String nation;&lt;br /&gt;private final int year;&lt;br /&gt;private final int totWinners;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;public ParameterizedTest(String sport, String nation, int year, int totWinners) {&lt;br /&gt;this.sport = sport;&lt;br /&gt;this.nation = nation;&lt;br /&gt;this.year = year;&lt;br /&gt;this.totWinners = totWinners;&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@Test&lt;br /&gt;public void test() {&lt;br /&gt;Assert.assertTrue(isDataCorrect(sport, nation, year, totWinners));&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;private boolean isDataCorrect(String sport2, String nation2, int year2, int totWinners2) {&lt;br /&gt;return true;&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;JUnit will create an instance of the&amp;nbsp;ParameterizedTest class and run the testCombination() method (or any method marked as @Test) for each row defined in the static collection.&lt;/div&gt;&lt;h1 style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 24px; margin: 0px; padding: 0px;"&gt;Theories&lt;/h1&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;This another interesting feature from JUnit4 that I like.&amp;nbsp; You use Theories in JUnit 4 to test combinations of inputs using the same test method:&lt;br /&gt;&lt;code style="background-color: #f0f2e4; background-position: initial initial; background-repeat: initial initial; font-family: 'courier new', courier, monospace;"&gt;&lt;br /&gt;package com.marco.test;&lt;/code&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;import static org.hamcrest.CoreMatchers.is;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;import java.math.BigDecimal;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;import org.junit.Assert;&lt;br /&gt;import org.junit.Assume;&lt;br /&gt;import org.junit.experimental.theories.DataPoint;&lt;br /&gt;import org.junit.experimental.theories.Theories;&lt;br /&gt;import org.junit.experimental.theories.Theory;&lt;br /&gt;import org.junit.runner.RunWith;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@RunWith(Theories.class)&lt;br /&gt;public class TheoryTest {&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@DataPoint&lt;br /&gt;public static int MARKET_FIRST_GOALSCORERE_ID = 2007;&lt;br /&gt;@DataPoint&lt;br /&gt;public static int MARKET_WDW_ID = 2008;&lt;br /&gt;@DataPoint&lt;br /&gt;public static BigDecimal PRICE_BD = new BigDecimal(6664.0);&lt;br /&gt;@DataPoint&lt;br /&gt;public static double PRICE_1 = 0.01;&lt;br /&gt;@DataPoint&lt;br /&gt;public static double PRICE_2 = 100.0;&lt;br /&gt;@DataPoint&lt;br /&gt;public static double PRICE_3 = 13999.99;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@Theory&lt;br /&gt;public void lowTaxRateIsNineteenPercent(int market_id, double price) {&lt;br /&gt;Assume.assumeThat(market_id, is(2008));&lt;br /&gt;Assume.assumeThat(price, is(100.0));&lt;br /&gt;// run your test&lt;br /&gt;Assert.assertThat(price, is(100.0));&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@Theory&lt;br /&gt;public void highTaxRateIsNineteenPercent(int market_id, double price) {&lt;br /&gt;Assume.assumeThat(market_id, is(2007));&lt;br /&gt;Assume.assumeThat(price, is(13999.99));&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;Assert.assertThat(price, is(13999.99));&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;@Theory&lt;br /&gt;public void highTaxRateIsNineteenPercent(int market_id, BigDecimal price) {&lt;br /&gt;Assume.assumeThat(market_id, is(2007));&lt;br /&gt;Assert.assertThat(price, is(BigDecimal.valueOf(6664)));&lt;br /&gt;}&lt;br /&gt;}&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;This time you need to mark the test class as @RunWith(Theories.class) and use @DataPoint to define properties that you want to test.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;JUnit will call the methods market as @Theory using all the possible combinations based on the DataPoint provided and the type of the variable. PRICE_BD DataPoint will be used only in the last method, the only one accepting BigDecimal in its method parameters.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;Only parameters that satisfy the Assume.assumeThat() condition will make through the asser test. The combinations that don’t satisfy the Assume.assumeThat() condition will be ignored silently.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;Have fun...&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2012/11/junit4-parameterized-and-theories.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-8969045624609913870</guid><pubDate>Mon, 08 Oct 2012 08:37:00 +0000</pubDate><atom:updated>2013-05-10T11:23:23.506+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>design pattern</category><category domain='http://www.blogger.com/atom/ns#'>Step Builder Pattern</category><title>Step Builder Pattern - WIKI-Definition </title><description>&lt;br /&gt;&lt;h2 style="background-color: white; background-image: none; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; font-family: sans-serif; font-size: 19px; font-weight: normal; line-height: 19.200000762939453px; margin: 0px 0px 0.6em; overflow: hidden; padding-bottom: 0.17em; padding-top: 0.5em;"&gt;&lt;span class="mw-headline" id="Definition"&gt;Definition&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;"&gt;The&amp;nbsp;&lt;b&gt;&lt;a href="http://rdafbn.blogspot.co.uk/2012/07/step-builder-pattern_28.html" target="_blank"&gt;step builder pattern&lt;/a&gt;&lt;/b&gt;&amp;nbsp;is an extension of the&amp;nbsp;&lt;b&gt;builder pattern&lt;/b&gt;&amp;nbsp;that fully guides the user through the creation of the object with no chances of confusion.&amp;nbsp;&lt;sup class="reference" id="cite_ref-0" style="line-height: 1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia_talk:Articles_for_creation/Step_Builder_Pattern#cite_note-0" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;"&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/div&gt;&lt;table class="toc" id="toc" style="background-color: #f9f9f9; border: 1px solid rgb(170, 170, 170); color: black; font-family: sans-serif; font-size: 12px; line-height: 19.200000762939453px; padding: 5px; text-align: start;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div id="toctitle" style="direction: ltr; text-align: center;"&gt;&lt;h2 style="background-image: none; border: none; display: inline; font-size: 12px; margin: 0px 0px 0.6em; overflow: hidden; padding: 0px;"&gt;Contents&lt;/h2&gt;&lt;/div&gt;&lt;ul style="line-height: 1.5em; list-style-image: none; list-style-type: none; margin: 0.3em 0px; padding: 0px;"&gt;&lt;li class="toclevel-1 tocsection-1" style="margin-bottom: 0.1em;"&gt;&lt;a href="http://rdafbn.blogspot.co.uk/2012/10/step-builder-pattern-definition-and.html#Definition" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span class="toctext"&gt;Definition&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-1 tocsection-2" style="margin-bottom: 0.1em;"&gt;&lt;a href="http://rdafbn.blogspot.co.uk/2012/10/step-builder-pattern-definition-and.html#Advantages_of_using_the_Step_Builder_over_the_Builder_pattern" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span class="toctext"&gt;Advantages of using the Step Builder over the Builder pattern&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-1 tocsection-3" style="margin-bottom: 0.1em;"&gt;&lt;a href="http://rdafbn.blogspot.co.uk/2012/10/step-builder-pattern-definition-and.html#Examples" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span class="toctext"&gt;Examples&lt;/span&gt;&lt;/a&gt;&lt;ul style="line-height: 1.5em; list-style-image: none; list-style-type: none; margin: 0px 0px 0px 2em; padding: 0px;"&gt;&lt;li class="toclevel-2 tocsection-4" style="margin-bottom: 0.1em;"&gt;&lt;a href="http://rdafbn.blogspot.co.uk/2012/10/step-builder-pattern-definition-and.html#Java" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;"&gt;&lt;span class="tocnumber" style="background-image: none; color: #0b0080; text-decoration: none;"&gt;3.1&lt;/span&gt;&lt;span style="color: #0b0080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="toctext" style="background-image: none; color: #0b0080; text-decoration: none;"&gt;Java&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-2 tocsection-4" style="margin-bottom: 0.1em;"&gt;&lt;a href="http://rdafbn.blogspot.co.uk/2012/10/step-builder-pattern-definition-and.html#Csharp" style="background-image: none; color: #0b0080; text-decoration: none;"&gt;&lt;span class="tocnumber" style="background-image: none; color: #0b0080; text-decoration: none;"&gt;3.2&lt;/span&gt;&lt;span style="background-image: none; color: #0b0080; text-decoration: none;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="toctext" style="background-image: none; color: #0b0080; text-decoration: none;"&gt;C&lt;/span&gt;&lt;/a&gt;#&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;"&gt;The intent of the Step Builder design pattern is to separate the construction of a complex object from its representation by creating defined steps and exposing to the user only selected methods per time.&lt;/div&gt;&lt;div style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;"&gt;&lt;br /&gt;&lt;h2 style="background-image: none; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; font-size: 19px; font-weight: normal; margin: 0px 0px 0.6em; overflow: hidden; padding-bottom: 0.17em; padding-top: 0.5em;"&gt;&lt;span class="mw-headline" id="Advantages_of_using_the_Step_Builder_over_the_Builder_pattern"&gt;Advantages of using the Step Builder over the Builder pattern&lt;/span&gt;&lt;/h2&gt;&lt;ul style="list-style-image: url(data:image/png; list-style-type: square; margin: 0.3em 0px 0px 1.6em; padding: 0px;"&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ul style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; list-style-image: url(data:image/png; list-style-type: square; margin: 0.3em 0px 0px 1.6em; padding: 0px;"&gt;&lt;li style="margin-bottom: 0.1em;"&gt;The user will see only one or few selected methods per time during the Object creation.&lt;/li&gt;&lt;li style="margin-bottom: 0.1em;"&gt;Based on the user choice different paths can be taken during the Object creation.&lt;/li&gt;&lt;li style="margin-bottom: 0.1em;"&gt;The final build step will be available only at the end, after all mandatory steps are completed, returning an Object in a consistent state.&lt;/li&gt;&lt;li style="margin-bottom: 0.1em;"&gt;The user experience will be greatly improved by the fact that he will only see the next step methods available.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2 style="background-color: white; background-image: none; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; font-family: sans-serif; font-size: 19px; font-weight: normal; line-height: 19.200000762939453px; margin: 0px 0px 0.6em; overflow: hidden; padding-bottom: 0.17em; padding-top: 0.5em;"&gt;&lt;span class="mw-headline" id="Examples"&gt;Examples&lt;/span&gt;&lt;/h2&gt;&lt;h3 style="background-color: white; background-image: none; border-bottom-style: none; font-family: sans-serif; font-size: 17px; line-height: 19.200000762939453px; margin: 0px 0px 0.3em; overflow: hidden; padding-bottom: 0.17em; padding-top: 0.5em;"&gt;&lt;span class="mw-headline"&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; font-weight: normal; line-height: normal;"&gt;&lt;h3 style="background-color: white; background-image: none; border-bottom-style: none; font-family: sans-serif; font-size: 17px; line-height: 19.200000762939453px; margin: 0px 0px 0.3em; overflow: hidden; padding-bottom: 0.17em; padding-top: 0.5em;"&gt;&lt;span class="mw-headline" id="Java"&gt;Java&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div class="mw-geshi mw-code mw-content-ltr" dir="ltr" style="background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; font-family: monospace, Courier; font-size: 13px; font-weight: normal; line-height: 1.1em; padding: 1em;"&gt;&lt;div class="java source-java" style="font-family: monospace; line-height: normal;"&gt;&lt;pre class="de1" style="background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;"&gt; &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/** "Product" */&lt;/span&gt;&lt;br /&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;class&lt;/span&gt; UserConfiguration &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;final&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; name&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;final&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; filePath&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; ServerDetails serverDetails&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; UserConfiguration&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; name, &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; filePath&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;       &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;name&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; name&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;filePath&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; filePath&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw4" style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; setServerDetails&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;ServerDetails serverDetails&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;     &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;serverDetails&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; serverDetails&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;    &lt;span class="co1" style="color: #666666; font-style: italic;"&gt;//all the getters&lt;/span&gt;&lt;br /&gt;    ...&lt;br /&gt; &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="kw1" style="font-weight: bold;"&gt;class&lt;/span&gt; ServerDetails &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;final&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; host&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; user&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; password&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="font-size: 1em; line-height: 1.2em;"&gt;ServerDetails&lt;/span&gt;&lt;span class="br0" style="color: #009900; font-size: 1em; line-height: 1.2em;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399; font-size: 1em; line-height: 1.2em;"&gt;String&lt;/span&gt;&lt;span style="font-size: 1em; line-height: 1.2em;"&gt; host&lt;/span&gt;&lt;span class="br0" style="color: #009900; font-size: 1em; line-height: 1.2em;"&gt;)&lt;/span&gt;&lt;span class="br0" style="color: #009900; font-size: 1em; line-height: 1.2em;"&gt;{&lt;/span&gt;&lt;br /&gt;       &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;host&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; host&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw4" style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; setUser&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; user&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;     &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;user&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; user&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw4" style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; setPassword&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; password&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;     &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;password&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; password&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;    &lt;span class="co1" style="color: #666666; font-style: italic;"&gt;//all the getters and isLocalhost() method&lt;/span&gt;&lt;br /&gt;    ...&lt;br /&gt; &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/** "Step Builder" */&lt;/span&gt;&lt;br /&gt;&lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;class&lt;/span&gt; UserConfigurationBuilder &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; NameStep newBuilder&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;return&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;new&lt;/span&gt; Steps&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;  &lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; UserConfigurationBuilder&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;interface&lt;/span&gt; NameStep &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/**&lt;br /&gt;       * @param name unique identifier for this User Configuration&lt;br /&gt;       * @return FileStep&lt;br /&gt;       */&lt;/span&gt;&lt;br /&gt;      FileStep name&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; name&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;interface&lt;/span&gt; FileStep &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/** &lt;br /&gt;       * @param filePath absolute path of where the User Configuration exists.&lt;br /&gt;       * @return ServerStep&lt;br /&gt;       */&lt;/span&gt;&lt;br /&gt;      ServerStep filePath&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; name&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;interface&lt;/span&gt; ServerStep &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/**&lt;br /&gt;       * The hostname of the server where the User Configuration file is stored will be set to "localhost".&lt;br /&gt;       * @return BuildStep&lt;br /&gt;       */&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; BuildStep onLocalhost&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/**&lt;br /&gt;       * The hostname of the server where the User Configuration file is stored.&lt;br /&gt;       * @return CredentialsStep&lt;br /&gt;       */&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; CredentialsStep onRemotehost&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; host&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;interface&lt;/span&gt; CredentialsStep &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/**&lt;br /&gt;        * Username required to connect to remote machine&lt;br /&gt;        * Password required to connect to remote machine&lt;br /&gt;        * @return BuildStep&lt;br /&gt;        */&lt;/span&gt;&lt;br /&gt;       &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; BuildStep credentials&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; user, &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; password&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;interface&lt;/span&gt; BuildStep &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/** &lt;br /&gt;       * @return an instance of a UserConfiguration based on the parameters passed during the creation.&lt;br /&gt;       */&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; Profile build&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;   &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;class&lt;/span&gt; Steps &lt;span class="kw1" style="font-weight: bold;"&gt;implements&lt;/span&gt; NameStep, FileStep, ServerStep, CredentialsStep, BuildStep &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; name&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; host&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; user&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; password&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;private&lt;/span&gt; &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; filePath&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      @Override&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; FileStep name&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; name&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;name&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; name&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kw1" style="font-weight: bold;"&gt;return&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      @Override&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; ServerStep filePath&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; filePath&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;filePath&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; filePath&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;return&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      @Override&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; BuildStep onLocalhost&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;host&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; &lt;span class="st0" style="color: blue;"&gt;"localhost"&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;return&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      @Override&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; CredentialsStep onRemotehost&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; host&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;host&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; host&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;return&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      @Override&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; BuildStep credentials&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; user, &lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt; password&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;user&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; user&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span class="me1" style="color: #006633;"&gt;password&lt;/span&gt; &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; password&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;return&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;this&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;      @Override&lt;br /&gt;      &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; UserConfiguration build&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;         UserConfiguration userConfiguration &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;new&lt;/span&gt; UserConfiguration&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;name, filePath&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         ServerDetails serverDetails &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;new&lt;/span&gt; ServerDetails&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;host&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;if&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;!&lt;/span&gt;serverDetails.&lt;span class="me1" style="color: #006633;"&gt;isLocalhost&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;            serverDetails.&lt;span class="me1" style="color: #006633;"&gt;setUser&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;user&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;            serverDetails.&lt;span class="me1" style="color: #006633;"&gt;setPassword&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;password&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;         userConfiguration.&lt;span class="me1" style="color: #006633;"&gt;setServerDetails&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;serverDetails&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kw1" style="font-weight: bold;"&gt;return&lt;/span&gt; userConfiguration&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span class="co3" style="color: green; font-style: italic; font-weight: bold;"&gt;/** A user creating a configuration. */&lt;/span&gt;&lt;br /&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;class&lt;/span&gt; StepBuilderExample &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class="kw1" style="font-weight: bold;"&gt;public&lt;/span&gt; &lt;span class="kw1" style="font-weight: bold;"&gt;static&lt;/span&gt; &lt;span class="kw4" style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; main&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="kw3" style="color: #003399;"&gt;String&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;[&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;]&lt;/span&gt; args&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt; &lt;span class="br0" style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class="co1" style="color: #666666; font-style: italic;"&gt;// A local user configuration&lt;/span&gt;&lt;br /&gt;        UserConfiguration localUserConfiguration &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; UserConfigurationBuilder&lt;/pre&gt;&lt;pre class="de1" style="background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;"&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;newBuilder&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;name&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="st0" style="color: blue;"&gt;"aLocalConfiguration"&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;filePath&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="st0" style="color: blue;"&gt;"/opt/conf/user.txt"&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;onLocalhost&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;build&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;  &lt;br /&gt;        &lt;span class="co1" style="color: #666666; font-style: italic;"&gt;// A remote user configuration&lt;/span&gt;&lt;br /&gt;        UserConfiguration remoteUserConfiguration &lt;span class="sy0" style="color: #339933;"&gt;=&lt;/span&gt; UserConfigurationBuilder&lt;/pre&gt;&lt;pre class="de1" style="background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;"&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;newBuilder&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;name&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="st0" style="color: blue;"&gt;"aRemoteConfiguration"&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;filePath&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="st0" style="color: blue;"&gt;"/opt/conf/user.txt"&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;onRemotehost&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="st0" style="color: blue;"&gt;"172.x.x.x"&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;credentials&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="st0" style="color: blue;"&gt;"user"&lt;/span&gt;,&lt;span class="st0" style="color: blue;"&gt;"password"&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt;                                              .&lt;span class="me1" style="color: #006633;"&gt;build&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;(&lt;/span&gt;&lt;span class="br0" style="color: #009900;"&gt;)&lt;/span&gt;&lt;span class="sy0" style="color: #339933;"&gt;;&lt;/span&gt;  &lt;br /&gt;    &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span class="br0" style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="background-color: white; background-image: none; border-bottom-style: none; font-family: sans-serif; font-size: 17px; line-height: 19.200000762939453px; margin: 0px 0px 0.3em; overflow: hidden; padding-bottom: 0.17em; padding-top: 0.5em;"&gt;&lt;span class="editsection" style="-webkit-user-select: none; float: right; font-size: 13px; font-weight: normal; margin-left: 5px;"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="Csharp"&gt;C#&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div class="mw-geshi mw-code mw-content-ltr" dir="ltr" style="background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; padding: 1em;"&gt;&lt;div class="java source-java"&gt;&lt;pre class="de1" style="background-image: none; border: 0px none white; padding: 0px; vertical-align: top;"&gt;&lt;span style="line-height: 15px;"&gt;namespace StepBuilder&lt;br /&gt;{&lt;br /&gt;    class Program&lt;br /&gt;    {&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="de1" style="background-image: none; border: 0px none white; padding: 0px; vertical-align: top;"&gt;&lt;span style="line-height: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="de1" style="background-image: none; border: 0px none white; padding: 0px; vertical-align: top;"&gt;&lt;pre class="de1" style="background-image: none; border: 0px none white; padding: 0px; vertical-align: top;"&gt;&lt;span style="line-height: 15px;"&gt;         UserConfiguration &lt;/span&gt;&lt;span style="line-height: 15px;"&gt;localUserConfiguration&lt;/span&gt;&lt;span style="line-height: 15px;"&gt; = UserConfigurationBuilder                        .CreateNewBuilder()&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 15px;"&gt;                        .SetName(@"&lt;/span&gt;&lt;span style="line-height: 15px;"&gt;aLocalConfiguration&lt;/span&gt;&lt;span style="line-height: 15px;"&gt;")&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 15px;"&gt;                        .SetFilePath(@"/opt/conf/user.txt")&lt;br /&gt;                        &lt;/span&gt;&lt;span style="line-height: 15px;"&gt;.OnLocalhost()&lt;/span&gt;&lt;span style="line-height: 15px;"&gt;&lt;br /&gt;                        .Build();&lt;/span&gt;&lt;/pre&gt;&lt;span style="line-height: 15px;"&gt;          UserConfiguration remoteUserConfiguration = UserConfigurationBuilder                        .CreateNewBuilder()                         .SetName(@"aRemoteConfiguration")                         .SetFilePath(@"/opt/conf/user.txt")                         .OnRemoteHost("172.x.x.x")                         .SetCredentials("user", "password")                         .Build();         }     }      public class UserConfiguration     {         public UserConfiguration(string name, string filePath)         {             Name = name;             FilePath = filePath;         }          private ServerDetails _serverDetails;          public string Name { get; private set; }          public string FilePath { get; private set; }          public void SetServerDetails(ServerDetails serverDetails)         {             _serverDetails = serverDetails;         }     }      public class ServerDetails      {         public ServerDetails(string host)         {             Host = host;         }          public string Host { get; private set; }         public string User { get; set; }         public string Password { get; set; }          public bool IsLocalhost          {             get { return Host == "localhost"; }         }     }      public class UserConfigurationBuilder     {         public static INameStep CreateNewBuilder()         {             return new Steps();         }          private UserConfigurationBuilder() { }          public interface INameStep          {              /// &amp;lt;param name="name"&amp;gt;Unique identifier for this User Configuration&amp;lt;/param&amp;gt;             IFileStep SetName(string name);         }          public interface IFileStep          {             /// &amp;lt;param name="filePath"&amp;gt;Absolute path of where the User Configuration exists&amp;lt;/param&amp;gt;             IServerStep SetFilePath(string filePath);          }          public interface IServerStep         {             /// &amp;lt;summary&amp;gt;             /// The hostname of the server where the User Configuration file is store will be set to "localhost".             /// &amp;lt;/summary&amp;gt;             IBuildStep OnLocalhost();              /// &amp;lt;param name="host"&amp;gt;The hostname of the server where the User Configuration is stored&amp;lt;/param&amp;gt;             ICredentialsStep OnRemoteHost(string host);         }          public interface IBuildStep         {             /// &amp;lt;summary&amp;gt;             /// Returns an instance of a UserConfiguration based on the parameters passed during the creation.             /// &amp;lt;/summary&amp;gt;             UserConfiguration Build();         }          public interface ICredentialsStep         {             /// &amp;lt;param name="user"&amp;gt;Username required to connect to remote machine&amp;lt;/param&amp;gt;             /// /// &amp;lt;param name="password"&amp;gt;Password required to connect to remote machine&amp;lt;/param&amp;gt;             IBuildStep SetCredentials(string user, string password);         }          private class Steps : INameStep, IFileStep, IServerStep, IBuildStep, ICredentialsStep         {             private string _name;             private string _host;             private string _user;             private string _password;             private string _filePath;              public IFileStep SetName(string name)             {                 _name = name;                 return this;             }              public IServerStep SetFilePath(string filePath)             {                 _filePath = filePath;                 return this;             }              public IBuildStep OnLocalhost()             {                 _host = "localhost";                 return this;             }              public ICredentialsStep OnRemoteHost(string host)             {                 _host = host;                 return this;             }              public UserConfiguration Build()             {                 UserConfiguration userConfiguration = new UserConfiguration(_name, _filePath);                 ServerDetails serverDetails = new ServerDetails(_host);                 if (!serverDetails.IsLocalhost)                 {                     serverDetails.Password = _password;                     serverDetails.User = _user;                 }                 userConfiguration.SetServerDetails(serverDetails);                  return userConfiguration;             }              public IBuildStep SetCredentials(string user, string password)             {                 _user = user;                 _password = password;                 return this;             }         }     } }&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2012/10/step-builder-pattern-definition-and.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-2003895497782144705</guid><pubDate>Thu, 20 Sep 2012 13:51:00 +0000</pubDate><atom:updated>2012-11-18T16:52:25.003Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>agile</category><category domain='http://www.blogger.com/atom/ns#'>Review</category><category domain='http://www.blogger.com/atom/ns#'>checkbox</category><category domain='http://www.blogger.com/atom/ns#'>scrum</category><title>Review Check box</title><description>&lt;!--[if !mso]&gt;&lt;style&gt;v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/style&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:WordDocument&gt;  &lt;w:View&gt;Normal&lt;/w:View&gt;  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;  &lt;w:PunctuationKerning/&gt;  &lt;w:ValidateAgainstSchemas/&gt;  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;  &lt;w:Compatibility&gt;   &lt;w:BreakWrappedTables/&gt;   &lt;w:SnapToGridInCell/&gt;   &lt;w:WrapTextWithPunct/&gt;   &lt;w:UseAsianBreakRules/&gt;   &lt;w:DontGrowAutofit/&gt;  &lt;/w:Compatibility&gt;  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt; &lt;/w:WordDocument&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt; &lt;/w:LatentStyles&gt;&lt;/xml&gt;&lt;![endif]--&gt; &lt;!--[if gte mso 10]&gt;&lt;style&gt; /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-parent:"";  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-para-margin:0cm;  mso-para-margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:10.0pt;  font-family:"Times New Roman";  mso-ansi-language:#0400;  mso-fareast-language:#0400;  mso-bidi-language:#0400;} table.MsoTableGrid  {mso-style-name:"Table Grid";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  border:solid windowtext 1.0pt;  mso-border-alt:solid windowtext .5pt;  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-border-insideh:.5pt solid windowtext;  mso-border-insidev:.5pt solid windowtext;  mso-para-margin:0cm;  mso-para-margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:10.0pt;  font-family:"Times New Roman";  mso-ansi-language:#0400;  mso-fareast-language:#0400;  mso-bidi-language:#0400;} &lt;/style&gt;&lt;![endif]--&gt;   &lt;!--StartFragment--&gt; &lt;br /&gt;&lt;h1 align="center" style="text-align: center;"&gt;&lt;/h1&gt;&lt;div class="MsoNormal"&gt;One good and necessary&amp;nbsp;practice when developing software is the code review.&lt;br /&gt;&lt;br /&gt;Code review it's an excellent process to reduce bugs in the code and to raise up the quality of the software you are working on.&lt;br /&gt;&lt;br /&gt;Basically, it means that before&amp;nbsp;committing&amp;nbsp;your changes to the repository, you ask to another developer to look at your code and see if &lt;u&gt;&lt;b&gt;everything&lt;/b&gt;&lt;/u&gt; looks fine.&lt;br /&gt;&lt;br /&gt;But what is &lt;b&gt;&lt;u&gt;everything&lt;/u&gt;&lt;/b&gt;?&lt;br /&gt;&lt;br /&gt;Well, this can vary between companies standards, but the following can be a good starting point:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 480;"&gt; &lt;tbody&gt;&lt;tr&gt;  &lt;td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;OVERALL DESIGN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(Is the current design the best   design (i.e. is it scalable, maintainable, Are the algorithms following the   best practise in order to have the best performances? etc.&lt;/span&gt;)&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;FUNCTIONALITY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(Does the code do what is supposed   to do?&lt;/span&gt; &lt;/b&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;Are we covering all the possible   cases?)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;CODE READABILITY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(Is the code EASY to understand?   etc.&lt;/span&gt;)&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" valign="top" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;UNIT TEST&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(Are the tests covering all   possible scenarios? Are the tests reusable? If the developed code does not   have 100% code coverage, why not?)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" valign="top" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;ACCEPTANCE CRITERIA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(What are the Acceptance Criteria,   and if the criteria haven't been expressed as an automated test, why not?)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" valign="top" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;ERROR HANDLING&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(Do we really need checked   exceptions? etc.)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" valign="top" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;WARNING&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(Are the eclipse/intellij warnings   acceptable?)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" valign="top" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" width="284"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;LOG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: 10.0pt;"&gt;(Is the log useful in order to   find issue? Is the log communicating what is necessary? Etc.)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 18.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 213.05pt;" valign="top" width="284"&gt;&lt;div align="right" class="MsoNormal" style="text-align: right;"&gt;&lt;img height="200" src="http://suvendugiri.files.wordpress.com/2012/02/checkbox.png" width="200" /&gt;&lt;!--[endif]--&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;Print this list and stick it in each developer desk. It will help during the review process.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;!--EndFragment--&gt;</description><link>http://rdafbn.blogspot.com/2012/09/review-check-box.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-8540610263289657149</guid><pubDate>Wed, 19 Sep 2012 10:15:00 +0000</pubDate><atom:updated>2012-11-18T23:31:19.498Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Stand-Up Meetings</category><category domain='http://www.blogger.com/atom/ns#'>uncle bob</category><category domain='http://www.blogger.com/atom/ns#'>The clean coder</category><category domain='http://www.blogger.com/atom/ns#'>meetings</category><category domain='http://www.blogger.com/atom/ns#'>Iteration Planning Meetings</category><category domain='http://www.blogger.com/atom/ns#'>Iteration Restrospective and Demo</category><category domain='http://www.blogger.com/atom/ns#'>Robert C. Martin</category><title>The Meetings ERA</title><description>&lt;br /&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;You just opened your outlook calendar and you feel horrified from what you see??4 meetings in the same day??And maybe you really care about half of them??&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;I think it’s good to know how to handle meetings and these are few suggestions coming from&amp;nbsp;&lt;a href="http://www.informit.com/authors/author_bio.aspx?ISBN=9780137081073" style="color: #5a8238;" target="_blank"&gt;Robert C. Martin&lt;/a&gt;&amp;nbsp;in his “&lt;a href="http://www.amazon.co.uk/The-Clean-Coder-Professional-Programmers/dp/0137081073" target="_blank"&gt;The clean coder&lt;/a&gt;” book.&lt;br /&gt;&lt;br /&gt;I highlighted the &lt;b&gt;key part &lt;/b&gt;on each paragraph, so if you are in rush you can just read the&amp;nbsp;&lt;span style="background-color: white;"&gt;paragraph&lt;/span&gt;&lt;span style="background-color: white;"&gt;&amp;nbsp;title and the part in bold ;)&lt;/span&gt;&lt;/div&gt;&lt;h3 style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 18px; margin: 0px; padding: 0px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: medium;"&gt;Meetings&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="Meetings cost" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Meetings cost about $200 per hour per attendee. This takes into account salaries, benefits, facilities costs, and so forth. The next time you are in a meeting, calculate the cost. You may be amazed.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;There are two truths about meeting.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; list-style-image: none; list-style-position: inside; margin: 10px 0px 10px 20px; padding: 0px;"&gt;&lt;li style="margin: 0px; padding: 0px;"&gt;&lt;div align="LEFT" style="margin-bottom: 14px; padding: 0px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;Meetings are necessary.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="margin: 0px; padding: 0px;"&gt;&lt;div align="LEFT" style="margin-bottom: 14px; padding: 0px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;Meetings are huge time wasters.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="in attendance" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Often these two truths equally describe the same meeting. Some in attendance may find them invaluable; others may find them redundant or useless.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="are aware" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1168" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Professionals are aware of the high cost of meetings. They are also aware that their own time is precious; they have code to write and schedules to meet. Therefore, they actively resist attending meetings that don’t have an immediate and significant benefit.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="title-ID0EYCBG" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ch09lev2sec1" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Declining&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="not have" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;You do not have to attend every meeting to which you are invited. Indeed, &lt;b&gt;it is unprofessional to go to too many meetings&lt;/b&gt;. You need to use your time wisely. So be very careful about which meetings you attend and which you politely refuse.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="responsible for" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="receive a" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The person inviting you to a meeting is not responsible for managing your time. Only&amp;nbsp;&lt;em style="font-style: normal;"&gt;you&lt;/em&gt;&amp;nbsp;can do that. So when you receive a meeting invitation, don’t accept unless it is a meeting for which your participation is immediately and significantly necessary to the job you are doing now.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="but is" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Sometimes the meeting will be about something that interests you, but is not immediately necessary. You will have to choose whether you can afford the time. Be careful—there may be more than enough of these meetings to consume your days.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="about something" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="team to" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Sometimes the meeting will be about something that you can contribute to but is not immediately significant to what you are currently doing. You will have to choose whether the loss to your project is worth the benefit to theirs. This may sound cynical, but your responsibility is to&amp;nbsp;&lt;em style="font-style: normal;"&gt;your&lt;/em&gt;&amp;nbsp;projects first. Still, it is often good for one team to help another, so you may want to discuss your participation with your team and manager.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="Sometimes your" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Sometimes your presence at the meeting will be requested by someone in authority, such as a very senior engineer in another project or the manager of a different project. You will have to choose whether that authority outweighs your work schedule. Again, your team and your supervisor can be of help in making that decision.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="is to" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="A good" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;One of the most important duties of your manager is to keep you&amp;nbsp;&lt;em style="font-style: normal;"&gt;out&lt;/em&gt;&amp;nbsp;of meetings. A good manager will be more than willing to defend your decision to decline attendance because that manager is just as concerned about your time as you are.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="title-ID0EWDBG" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ch09lev2sec2" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Leaving&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="go as" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1173" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1170" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1166" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1123" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Meetings don’t always go as planned. Sometimes you find yourself sitting in a meeting that you would have declined had you known more. Sometimes new topics get added, or somebody’s pet peeve dominates the discussion. Over the years I’ve developed a simple rule: When the meeting gets boring, leave.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="you find" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Again, you have an obligation to manage your time well.&lt;b&gt; If you find yourself stuck in a meeting that is not a good use of your time, you need to find a way to politely exit that meeting.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="out of" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Clearly you should not storm out of a meeting exclaiming “This is boring!” There’s no need to be rude. You can simply ask, at an opportune moment, if your presence is still necessary. You can explain that you can’t afford a lot more time, and ask whether there is a way to expedite the discussion or shuffle the agenda.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="a meeting" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The important thing to realize is that remaining in a meeting that has become a waste of time for you, and to which you can no longer significantly contribute, is unprofessional. You have an obligation to wisely spend your employer’s time and money, so it is not unprofessional to choose an appropriate moment to negotiate your exit.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="title-ID0ENFBG" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ch09lev2sec3" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Have an Agenda and a Goal&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="to endure" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="to help" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The reason we are willing to endure the cost of meetings is that we sometimes&amp;nbsp;&lt;em style="font-style: normal;"&gt;do&lt;/em&gt;&amp;nbsp;need the participants together in a room to help achieve a specific goal. To use the participants’ time wisely, the meeting should have a clear agenda, with times for each topic and a stated goal.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="If you" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;If you are asked to go to a meeting, make sure you know what discussions are on the table, how much time is allotted for them, and what goal is to be achieved.&lt;/b&gt; If you can’t get a clear answer on these things, then politely decline to attend.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="that the" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;If you go to a meeting and you find that the agenda has been high-jacked or abandoned, you should request that the new topic be tabled and the agenda be followed. If this doesn’t happen, you should politely leave when possible.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="title-ID0E6FBG" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ch09lev2sec4" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Stand-Up Meetings&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="meetings are" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1267" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1174" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1171" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1149" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;These meetings are part of the Agile cannon. Their name comes from the fact that the participants are expected to stand while the meeting is in session. Each participant takes a turn to answer three questions:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; list-style-image: none; list-style-position: inside; margin: 10px 0px 10px 20px; padding: 0px;"&gt;&lt;li style="margin: 0px; padding: 0px;"&gt;&lt;div align="LEFT" style="margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="I do" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&amp;nbsp;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;What did I do yesterday?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="margin: 0px; padding: 0px;"&gt;&lt;div align="LEFT" style="margin-bottom: 14px; padding: 0px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;What am I going to do today?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="margin: 0px; padding: 0px;"&gt;&lt;div align="LEFT" style="margin-bottom: 14px; padding: 0px;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;What’s in my way?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="one minute" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;That’s all.&lt;b&gt; Each question&lt;/b&gt; should require&amp;nbsp;&lt;b&gt;&lt;em style="font-style: normal;"&gt;no more than&lt;/em&gt;&amp;nbsp;twenty seconds&lt;/b&gt;, so each participant should require no more than one minute. Even in a group of ten people this meeting should be over well before ten minutes has elapsed.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="title-ID0ECIBG" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ch09lev2sec5" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Iteration Planning Meetings&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="meetings in" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;These are the most difficult meetings in the Agile canon to do well. Done poorly, they take far too much time. It takes skill to make these meetings go well, a skill that is well worth learning.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="items that" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Iteration planning meetings are meant to select the backlog items that will be executed in the next iteration. Estimates should already be done for the candidate items. Assessment of business value should already be done. In really good organizations the acceptance/component tests will already be written, or at least sketched out.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="with each" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The meeting should proceed quickly with &lt;b&gt;each candidate backlog item&lt;/b&gt; being briefly discussed and then either selected or rejected. &lt;b&gt;No more than five or ten minutes&lt;/b&gt; should be spent on any given item. If a longer discussion is needed, it should be scheduled for another time with a subset of the team.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="meeting should" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;My rule of thumb is that the meeting should take no more than 5% of the total time in the iteration. So for a one week iteration (forty hours) the meeting should be over within two hours.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="title-ID0ETIBG" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ch09lev2sec6" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Iteration Restrospective and Demo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="These meetings" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1172" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1169" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1167" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1150" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1081" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1075" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1055" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1019" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;These meetings are conducted at the end of each iteration. Team members discuss what went right and what went wrong. Stakeholders see a demo of the newly working features. These meetings can be &lt;b&gt;badly abused and can soak up a lot of time&lt;/b&gt;, so schedule them 45 minutes before quitting time on the last day of the iteration. &lt;b&gt;Allocate no more than 20 minutes for retrospective&lt;/b&gt; and 25 minutes for the demo. Remember, it’s only been a week or two so there shouldn’t be all that much to talk about.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 16px; margin: 0px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="title-ID0EALBG" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ch09lev2sec7" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Arguments/Disagreements&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="settled in" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Kent Beck once told me something profound: “Any argument that can’t be settled in five minutes can’t be settled by arguing.” The reason it goes on so long is that there is no clear evidence supporting either side. The argument is probably religious, as opposed to factual.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="disagreements tend" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Technical disagreements tend to go off into the stratosphere. Each party has all kinds of justifications for their position but seldom any data. Without data, any argument that doesn’t forge agreement within a few minutes (somewhere between five and thirty) simply won’t ever forge agreement. The only thing to do is to go get some data.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;b&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="will try" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Some folks will try to win an argument by force of character. They might yell, or get in your face, or act condescending. It doesn’t matter; force of will doesn’t settle disagreements for long. Data does.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="and then" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Some folks will be passive-aggressive. They’ll agree just to end the argument, and then sabotage the result by refusing to engage in the solution. They’ll say to themselves, “This is the way they wanted it, and now they’re going to get what they wanted.” This is probably the worst kind of unprofessional behavior there is. Never, ever do this. If you agree, then you&lt;em style="font-style: normal;"&gt;must&lt;/em&gt;&amp;nbsp;engage.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="data you" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;How do you get the data you need to settle a disagreement? Sometimes you can run experiments, or do some simulation or modeling. But sometimes the best alternative is to simply flip a coin to choose one of the two paths in question.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="get into" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1327" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="iddle1117" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;If things work out, then that path was workable. If you get into trouble, you can back out and go down the other path. It would be wise to agree on a time as well as a set of criteria to help determine when the chosen path should be abandoned.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;b&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="really just" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Beware of meetings that are really just a venue to vent a disagreement and to gather support for one side or the other. And avoid those where only one of the arguers is presenting.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align="LEFT" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 14px; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=6243670623010502252" name="ask each" style="color: #5a8238; text-decoration: underline;"&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;If an argument must truly be settled, then ask each of the arguers to present their case to the team in five minutes or less. Then have the team vote. The whole meeting will take less than fifteen minutes.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2012/09/the-meetings-era.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-5143805647854379149</guid><pubDate>Wed, 29 Aug 2012 23:43:00 +0000</pubDate><atom:updated>2012-11-18T16:53:10.191Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>tricks</category><category domain='http://www.blogger.com/atom/ns#'>best practices</category><category domain='http://www.blogger.com/atom/ns#'>development</category><category domain='http://www.blogger.com/atom/ns#'>tips</category><category domain='http://www.blogger.com/atom/ns#'>design</category><category domain='http://www.blogger.com/atom/ns#'>kiss</category><title>Some development tips and tricks</title><description>&lt;br /&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;These are just some tips and tricks I learnt over my career that I'd like to share. This list does not contains silver bullets and it doesn't&amp;nbsp;pretend to be complete or be an absolute truth. It's just a list that I hope may be helpful for someone.&lt;/div&gt;&lt;h2 style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"&gt;&lt;/h2&gt;&lt;h2 style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"&gt;1 ) &amp;nbsp;Push the coding to the last&lt;/h2&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;This point can be also be read as&amp;nbsp;&lt;strong&gt;think before coding&lt;/strong&gt;. I found myself, lots of times,&amp;nbsp;especially in the beginning of my career, in rush of writing classes, methods, interfaces as soon as I was receiving a spec for a new functionality.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;This impulse turned out 90% of the times into a PAINFUL situation. The spec was unclear and so unclear was my code; The spec was too "code oriented" and so blindly coding this was producing wrong design/ implementation that needed to be trashed out and completely re-designed;&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;Many other are the disadvantages of writing code straight away after receiving a spec. So, lesson learnt and this is what I'm doing now after receiving a spec/story to develop:&lt;/div&gt;&lt;ol style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;&lt;li style="margin-left: 15px;"&gt;I stay away from the keyboard!&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;I print the spec (sorry&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Jaguar#Conservation_status" style="color: #1155cc;" target="_blank"&gt;amazonian&amp;nbsp;jaguars&lt;/a&gt;&amp;nbsp;) and I take my time to read them carefully. Do not think that everything you will read there is exempt of mistakes or cannot be done in better and simpler ways. At the end of the day, people who wrote the specs, know little or nothing about the software, what they know is how to make more money with new&amp;nbsp;functionality.&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;If something is not clear to you, it will not clarify magically by itself if you start to code. Ask questions to other colleagues, to the business, clarify as much as possible and only when you feel confident, when you see the real pitcure of what they really want, then and only then you can switch the monitor on and click on the eclipse icon...&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"&gt;&lt;/h2&gt;&lt;h2 style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"&gt;2 ) &amp;nbsp;Simple = perfect&lt;/h2&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;Make the 2 famous&amp;nbsp;principles, KISS and YAGNI, &amp;nbsp; part of your blood, skin and bones. Strive for simplicity, forget about the trends, &amp;nbsp;focus on the most basic thing that will give you what is needed. Don't think straight about XML configuration, spring/seam framework, drools, aspects, multithreading solutions, ejbs, or whatever complex/cool technology you know or you heard out there, nobody really cares about the technologies you use.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;What everyone cares is that your code does what is supposed to do, it is READABLE and it is&amp;nbsp;MAINTAINABLE.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;Pure java is enough to cover 90% or more of everything you need.&amp;nbsp;&lt;strong&gt;Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.&lt;/strong&gt;&amp;nbsp;Make him happy, write simple, clear&amp;nbsp;straightforward&amp;nbsp;code.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;I remember I read somewhere that, if you read your code after 1 or 2 years and you&amp;nbsp;immediately understand everything is doing and you&amp;nbsp;cannot&amp;nbsp;simplify it more, than your code is PERFECT.&lt;/div&gt;&lt;h2 style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"&gt;&lt;/h2&gt;&lt;h2 style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"&gt;3 ) &amp;nbsp;Paper and pen&lt;/h2&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;I never found a tool more useful than paper and pen to design software.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;Before writing software I usually spend a bit of time trying to put the idea of the design down on paper.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;I then , if in doubt, go through it with a colleague. Because it is on paper I can fast go to the point with my pair and he can quick tell me if I'm missing something.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;Knowing that you are missing something in a piece of paper, it's far way better then knowing that you are missing something in the code!&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;So don't waste time using UML tools, unless what you are doing is big-fantastic-amazing-new &amp;nbsp;architectural prototype.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;&lt;h2&gt;4 ) &amp;nbsp;Don't leave for tomorrow what you can do today&lt;/h2&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;If you are fixing a bug or adding new&amp;nbsp;functionality and you notice in the existing code, DUPLICATION or BAD NAMES &amp;nbsp;or a POSSIBLE BUG then FIX IT IMMEDIATELY.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;Don't wait for the next sprint and don't add a technical story in the technical backlog.&amp;nbsp;Technical stories laid in the backlog for long time, when/if &amp;nbsp;it will be the time to work on it, it will be more complicated to re-understand the context of the problem and fix it.&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;The exception it's when the fix/refactoring is too complex and required long time, then it's appropriate to create a story in the technical backlog!&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #222222; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"&gt;&lt;h2&gt;5 ) &amp;nbsp;You have time!&lt;/h2&gt;Really, you have time! Don't rush. There is no competition and you are not at the programming&amp;nbsp;Olympics.&lt;br /&gt;Your job is to deliver&amp;nbsp;&lt;strong&gt;good quality code&lt;/strong&gt;. That's it. This is your job!&lt;br /&gt;If you feel that a task takes longer that what you initially estimated, just make the team aware in the next stand up and that's it.&lt;br /&gt;If a client/manager is screaming above your shoulders because he wants something faster than you can deliver, it's not your problem!!! When they say "I want this functionality to be ready asap" translated in&amp;nbsp;&lt;em&gt;Truthlish&lt;/em&gt;&amp;nbsp;it means "I want this functionality to be PERFECT with NO BUGS asap". They will be happier to wait more and have less bugs than having a fast release full of issues.&lt;br /&gt;So take your time and be intransigent on the&amp;nbsp;quality&amp;nbsp;level of your software and forget about external pressures!&lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h2&gt;6 ) Implement leaves first&lt;/h2&gt;So, you just received a brand new story to develop and you want to implement it right.&lt;br /&gt;For example the story is about calculating item prices. One price for each item. Each price is obtained with a different calculation.&lt;br /&gt;Choose one item price logic and as&amp;nbsp;&lt;strong&gt;first thing write a unit test&amp;nbsp;&lt;/strong&gt;against this logic. Don't be stressed about implementing the whole design or writing interfaces, abstract classes etc. Focus on one small leaf per time!&lt;br /&gt;When the first leaf is finished, start with a second test for the second small logic you want to implement. The design will come out almost by itself. The tests will tell you which direction is best to take.&lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h2&gt;7 ) Do Pair programming!&lt;/h2&gt;I fully applied this technique only recently (less than 1 year ago) and I have to say, it's powerful! It is twice productive than working alone, the quality of the code is superior, the development speed is increased.&lt;br /&gt;A strength of this&amp;nbsp;technique is the fact that is funny. being funny and so more stimulating means that you are more focused and you pay more attention to details.&lt;br /&gt;You can learn a lot doing pair programming, so push for it as much as you can!&lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h2&gt;8 ) Rarely use checked Exceptions&lt;/h2&gt;Every time&amp;nbsp;I use an API that force me to put around its method call the try and catch block, it makes me nervous, like a&lt;strong&gt;&amp;nbsp;violent psychopath,&amp;nbsp;&lt;/strong&gt;but often I don't know where they leave.&amp;nbsp;Especially&amp;nbsp;if there is nothing I can do about the exception. What the hell I' m supposed to do with this error?&lt;br /&gt;If you want to use checked Exception used them ONLY if the client can&amp;nbsp;reasonably recover from it at run time! Remember that checked exceptions will spread all over your design in case you need to extend the&amp;nbsp;behavior!&lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h2&gt;9 ) Say NO to Hacks&lt;/h2&gt;&lt;strong&gt;Programming is like sex. One mistake and you have to support it for the rest of your life. (Michael Sinz).&lt;/strong&gt;&amp;nbsp;And Hacks ARE mistakes!&lt;br /&gt;&lt;br /&gt;Simply don't implement hacks. I did it in the past, for whatever reasons (&amp;nbsp;no time,pressure, desire to release a&amp;nbsp;feature as soon as possible, managers screaming, Orcs, Leprechauns,&amp;nbsp;whatever), and now after years we need to&amp;nbsp;maintain&amp;nbsp;them. Hacks are&amp;nbsp;difficult&amp;nbsp;to understand,they break the normal logic flow of your code and they are hard to die! You implement an hack today and tomorrow (1 year after maybe ) someone else will need to fix a bug on this hack and ..well good luck with that!&lt;br /&gt;Spend more time on the spec if the hack is a business request, and explain why this will cost a lot to&amp;nbsp;maintain. Propose other solutions, discuss it with your team, a better solution is on the way!&lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h2&gt;10 ) Forget about comments, just write proper names!&lt;/h2&gt;Write proper names when writing packages, classes, methods and variables.&lt;br /&gt;Write names that make sense, ask a review before committing your code, but don't explain verbally what you have done, try first letting your reviewer read the code, and see how good you were in writing self&amp;nbsp;explanatory&amp;nbsp;code!&lt;br /&gt;Comments need to be&amp;nbsp;maintained, otherwise they are misleading. How often did you fix a bug in the code and you changed the class documentation?me, rarely!Use javadoc only if it is really necessary!and if you do,then remember to update them&amp;nbsp;every time&amp;nbsp;you change the code and enforce the same behavior&amp;nbsp;in your team!&lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h2&gt;11 ) Reinvent the wheels&lt;/h2&gt;Read books, blogs, tutorial, etc as much as possible, but always with a&amp;nbsp;&lt;strong&gt;critical and open mind&lt;/strong&gt;! The same apply when listening to your team or leader. Don't be fooled by authorities, think always with your own mind.&lt;br /&gt;If you decide to go for some approach it must be because you believe in it. Because you see good reasons to do so. If you feel that something could be done better or you see problems in the approach you are using , discuss it with your team and try to clarify your doubts. If after talking to the team you still&amp;nbsp;feel that things should be done differently, then&amp;nbsp;push for better approaches and fight for your ideas!&lt;br /&gt;Sometimes,&amp;nbsp;to progress,&amp;nbsp;you need to reinvent the wheels or at this time we were all developing in FORTRAN.&lt;/div&gt;</description><link>http://rdafbn.blogspot.com/2012/08/these-are-just-some-tips-and-tricks-i.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-7610919435969844058</guid><pubDate>Thu, 02 Aug 2012 11:10:00 +0000</pubDate><atom:updated>2013-02-03T11:49:44.220Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>logs</category><category domain='http://www.blogger.com/atom/ns#'>grep4j</category><category domain='http://www.blogger.com/atom/ns#'>test distributed applications</category><title>A simple way to test distributed applications</title><description>So, testing distributed applications is not easy, we all know it.&lt;br /&gt;Too many variants to take in considerations which usually lead to an high instability of the tests.&lt;br /&gt;&lt;br /&gt;Let say we have a front end application sending messages to a distribution engine which then forward the messages to other remote destinations. Sounds familiar?&lt;br /&gt;&lt;br /&gt;OK so, how you test that messages travelling correctly trough all the predefined servers?&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;What if I want to keep my tests&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;independent from any integration framework&lt;/span&gt;&lt;span style="background-color: white;"&gt;?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My solution is in the &lt;b&gt;logs&lt;/b&gt;.&lt;br /&gt;Why not rely on the logs to prove that your application is working as expected?&lt;br /&gt;&lt;br /&gt;Logs are often underrated for performance/acceptance/smoke tests, but if correctly written, they can provide all the information you need to measure the status of your software at any point of its execution.&lt;br /&gt;&lt;br /&gt;Testing relying on logs is a &lt;b&gt;non intrusive&lt;/b&gt; way to test and no performances or anything will be affected.  Applying this concept to an&amp;nbsp;hypothetical integration test it's&amp;nbsp;easy (at least in&amp;nbsp;UNIX&amp;nbsp;environments :) ), thanks to libraries like &lt;a href="http://code.google.com/p/grep4j/" target="_blank"&gt;Grep4j&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="color: black; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="sidebarcontent"&gt;&lt;/td&gt;&lt;td class="vt" id="wikimaincol" style="min-width: 64em; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 5px; vertical-align: top;"&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;pre class="prettyprint" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;pre class="prettyprint" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;regularExpression&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fluent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Dictionary&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;on&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fluent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Dictionary&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;executing&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Test&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; aCreateMessageShouldPassThroughAllTheFinalDestinations&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pln"&gt; profiles &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &amp;nbsp;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Arrays&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;asList&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;distributionServerLog&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination1ServerLog&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination2ServerLog&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination3ServerLog&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;assertThat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;executing&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;grep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;regularExpression&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"MessageId(.*)Received"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln"&gt; on&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;profiles&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;))).&lt;/span&gt;&lt;span class="pln"&gt;totalLines&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;4&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;/pre&gt;&lt;pre class="prettyprint" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="pln"&gt;&lt;span style="color: #666600;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;profile&gt;&lt;br /&gt;&lt;/profile&gt;&lt;profile&gt;As you can see, in a very simple way you have an efficient end-to-end test across different machines.&lt;/profile&gt;&lt;br /&gt;&lt;profile&gt;&lt;br /&gt;&lt;/profile&gt;&lt;profile&gt;I think this approach is also a good option when you want to build acceptance or regression tests around legacy applications. You can treat your legacy app as a black box and just test the expected output in the log.&amp;nbsp;&lt;/profile&gt;&lt;br /&gt;&lt;profile&gt;&lt;br /&gt;&lt;/profile&gt;&lt;profile&gt;Finally, I reckon this way of test will force the developers to standardize and uniform the way to log in the code which is always good :) &lt;/profile&gt;</description><link>http://rdafbn.blogspot.com/2012/08/testing-distributed-applications.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-6394006565964276712</guid><pubDate>Sun, 29 Jul 2012 21:42:00 +0000</pubDate><atom:updated>2012-11-24T12:20:17.874Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>agile</category><category domain='http://www.blogger.com/atom/ns#'>grep4j</category><category domain='http://www.blogger.com/atom/ns#'>design</category><category domain='http://www.blogger.com/atom/ns#'>dsl</category><title>Fluent mirror methods</title><description>&lt;br /&gt;&lt;div style="max-width: 64em;"&gt;&lt;div style="font-family: arial, sans-serif; line-height: 1.25em;"&gt;How important is the readability of the code you write?&lt;/div&gt;&lt;span style="font-family: arial, sans-serif;"&gt;&lt;span style="line-height: 1.25em;"&gt;I think very important, probably one of the key to success in delivering good working and&amp;nbsp;&lt;/span&gt;&lt;span style="line-height: 16px;"&gt;maintainable&lt;/span&gt;&lt;span style="line-height: 1.25em;"&gt;&amp;nbsp;software.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial, sans-serif;"&gt;&lt;span style="line-height: 1.25em;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial, sans-serif; line-height: 1.25em;"&gt;This article is about a simple technique to help you and the people working on your code to fast understand what's happening.&lt;/div&gt;&lt;div style="font-family: arial, sans-serif; line-height: 1.25em;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: arial, sans-serif; line-height: 1.25em;"&gt;I called this&amp;nbsp;&lt;span style="background-color: white;"&gt;technique&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; line-height: 1.25em;"&gt;fluent mirror methods, and usually I wrap all these kind of methods in a single class called Dictionary.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial, sans-serif; line-height: 1.25em;"&gt;&lt;span style="background-color: white; line-height: 1.25em;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial, sans-serif; line-height: 1.25em;"&gt;A fluent mirror method is a simple static method returning the same object passed. For example:&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt;T&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; T executing&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;T type&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; type&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;&lt;br /&gt;You can use these methods as follows:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd"&gt;&lt;span style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln" style="color: #000088;"&gt; &lt;/span&gt;&lt;span style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="color: #000088;"&gt; &lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;grep&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: #000088;"&gt; &lt;/span&gt;&lt;/pre&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fluent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Dictionary&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;on&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fluent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Dictionary&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;executing&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fluent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Dictionary&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;expression&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; org&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;grep4j&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;core&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fluent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Dictionary&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;with&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;assertThat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;executing&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;grep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;with&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;expression&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Marco"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)),&lt;/span&gt;&lt;span class="pln"&gt; on&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;profile&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;))).&lt;/span&gt;&lt;span class="pln"&gt;totalLines&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;/pre&gt;</description><link>http://rdafbn.blogspot.com/2012/07/fluent-mirror-methods.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-6243670623010502252.post-6052303990542178509</guid><pubDate>Sat, 28 Jul 2012 16:04:00 +0000</pubDate><atom:updated>2013-01-13T13:23:18.456Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>java</category><category domain='http://www.blogger.com/atom/ns#'>Builder pattern</category><category domain='http://www.blogger.com/atom/ns#'>design</category><category domain='http://www.blogger.com/atom/ns#'>builder design</category><category domain='http://www.blogger.com/atom/ns#'>step</category><category domain='http://www.blogger.com/atom/ns#'>builder</category><category domain='http://www.blogger.com/atom/ns#'>Step Builder Pattern</category><title>Step Builder pattern</title><description>Recently I wanted to implement a builder in my &lt;a href="http://code.google.com/p/grep4j/" target="_blank"&gt;Grep4j&lt;/a&gt; API, but, as already happened in the past with the builder or other creational patterns, I was not completely satisfied with the result.   A &lt;a href="http://en.wikipedia.org/wiki/Builder_pattern" target="_blank"&gt;Builder pattern&lt;/a&gt; is a design you implement when you want to separate the creation of an object from its representation.  For example, let say you have a Java Panino object composed of few ingredients:  &lt;br /&gt;&lt;pre&gt;&lt;code class="Java"&gt;&lt;br /&gt;&lt;string&gt;&lt;string&gt;&lt;string&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pln"&gt; vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getBreadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setBreadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;breadType &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getFish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setFish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fish &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;cheese &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getMeat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setMeat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;meat &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pln"&gt; getVegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; setVegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pln"&gt; vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;vegetables &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; getName&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;@Override&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; toString&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Panino [name="&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;", breadType="&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; breadType &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;", fish="&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; fish &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;", cheese="&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; cheese &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;", meat="&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;", vegetables="&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; vegetables &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"]"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;Now, in order to create a Panino you can write your Builder class that, more or less, will look like the following.  &lt;br /&gt;&lt;pre&gt;&lt;code class="Java"&gt;&lt;br /&gt;&lt;string&gt;&lt;string&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ArrayList&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pln"&gt; vegetables &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ArrayList&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pln"&gt; paninoCalled&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;breadType &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pln"&gt; withFish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fish &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pln"&gt; withCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;cheese &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pln"&gt; withMeat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;meat &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pln"&gt; withVegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; vegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;){&lt;/span&gt;&lt;span class="pln"&gt; &amp;nbsp;&lt;br /&gt;&amp;nbsp; vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;add&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;vegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(){&lt;/span&gt;&lt;span class="pln"&gt; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; panino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setBreadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setFish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setMeat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setVegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;A user will be then able to nicely build a Panino using this builder.&lt;br /&gt;&lt;pre&gt;&lt;code class="Java"&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;client&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Bar&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[]&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; marcoPanino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;paninoCalled&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"marcoPanino"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"baguette"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;withCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"gorgonzola"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;withMeat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"ham"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;withVegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"tomatos"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;System&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;out&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;println&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;marcoPanino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/pre&gt;So far so good.&lt;br /&gt;But what I don't like of the traditional Builder pattern is the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It does not really guide the user through the creation.&lt;/li&gt;&lt;li&gt;A user can always call the build method in any moment, even without the needed information.&amp;nbsp;&lt;/li&gt;&lt;li&gt;There is no way to guide the user from a creation path instead of another based on conditions.&amp;nbsp;&lt;/li&gt;&lt;li&gt;There is always the risk to leave your object in an inconsistent state.&lt;/li&gt;&lt;li&gt;All methods are always available, leaving the&amp;nbsp;responsibility&amp;nbsp;of which to use and when to use to the user who did not write the api.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;For instance, in the Panino example, a user could write something like this:&lt;br /&gt;&lt;pre&gt;&lt;code class="Java"&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;client&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Bar&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[]&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; marcoPanino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;paninoCalled&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"marcoPanino"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;withCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"gorgonzola"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// or&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; marcoPanino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;withCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"gorgonzola"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// or&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; marcoPanino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;withMeat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"ham"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="pln"&gt;build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// or&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; marcoPanino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln"&gt;build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/pre&gt;All the above panino instances are wrong, and the user will not know until runtime when he will use the Panino object.&lt;br /&gt;You can put a validation in the build method of course, but still a user will be not able to recover from a badly builder usage.&lt;br /&gt;You could also put default values around all the required properties, but then the readability of the code will be lost (&amp;nbsp;&lt;span class="kwd" style="color: #000088; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;new&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;().&lt;/span&gt;&lt;span class="pln" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;build&lt;/span&gt;&lt;span class="pun" style="color: #666600; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px;"&gt;();&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;what are you building here?) and often you really need some input from the user (a user and password for a connection for example).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So here is my solution called &lt;a href="http://rdafbn.blogspot.ie/2012/10/step-builder-pattern-definition-and.html"&gt;Step builder&lt;/a&gt;, an extension of the Builder patter that fully guides the user through the creation of the object with no chances of confusion.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow: auto; padding: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ArrayList&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; java&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;util&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoStepBuilder&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FirstNameStep&lt;/span&gt;&lt;span class="pln"&gt; newBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Steps&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoStepBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* First Builder Step in charge of the Panino name. &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Next Step available : BreadTypeStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FirstNameStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BreadTypeStep&lt;/span&gt;&lt;span class="pln"&gt; paninoCalled&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This step is in charge of the BreadType. &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Next Step available : MainFillingStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BreadTypeStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;MainFillingStep&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This step is in charge of setting the main filling (meat or fish). &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Meat choice : Next Step available : CheeseStep &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Fish choice : Next Step available : VegetableStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;MainFillingStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CheeseStep&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This step is in charge of the cheese. &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Next Step available : VegetableStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CheeseStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; noCheesePlease&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; withCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This step is in charge of vegetables. &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Next Step available : BuildStep&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; noMoreVegetablesPlease&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; noVegetablesPlease&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; addVegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; vegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/**&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* This is the final step in charge of building the Panino Object.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Validation should be here.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Steps&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;implements&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FirstNameStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BreadTypeStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;MainFillingStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CheeseStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;private&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;final&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;List&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; vegetables &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;ArrayList&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BreadTypeStep&lt;/span&gt;&lt;span class="pln"&gt; paninoCalled&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;name &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;MainFillingStep&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;breadType &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CheeseStep&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;meat &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fish &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; noMoreVegetablesPlease&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;BuildStep&lt;/span&gt;&lt;span class="pln"&gt; noVegetablesPlease&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; addVegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; vegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;add&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;vegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; noCheesePlease&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;VegetableStep&lt;/span&gt;&lt;span class="pln"&gt; withCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;cheese &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; panino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;name&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setBreadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;fish &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setFish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;else&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setMeat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;meat&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;cheese &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setCheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;cheese&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(!&lt;/span&gt;&lt;span class="pln"&gt;vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;isEmpty&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;())&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;setVegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;vegetables&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code class="Java"&gt;&lt;string&gt;&lt;string&gt;&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;The concept is simple:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write creational steps inner classes or interfaces&amp;nbsp;where each method knows what can be displayed next.&lt;/li&gt;&lt;li&gt;Implement all your steps interfaces in an inner static class.&lt;/li&gt;&lt;li&gt;Last step is the BuildStep, in charge of creating the object you need to build.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The user experience will be much more improved by the fact that he will only see the next step methods available, NO build method until is the right time to build the object.&lt;br /&gt;&lt;pre&gt;&lt;code class="Java"&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;package&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;client&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;import&lt;/span&gt;&lt;span class="pln"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;stepbuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoStepBuilder&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Bar&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;static&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;void&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;String&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[]&lt;/span&gt;&lt;span class="pln"&gt; args&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Panino&lt;/span&gt;&lt;span class="pln"&gt; solePanino &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PaninoStepBuilder&lt;/span&gt;&lt;span class="typ" style="color: #666600;"&gt;.newBuilder()&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;paninoCalled&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"sole panino"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;breadType&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"baguette"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;fish&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"sole"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;addVegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"tomato"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;addVegetable&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"lettece"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;noMoreVegetablesPlease&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;build&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/pre&gt;The user will not be able to call the method breadType(String breadType) before calling the paninoCalled(String name) method, and so on.&lt;br /&gt;Plus, using this pattern, if the user choose a fish panino, I will not give him the possibility to add cheese (i'm the chef, I know how to prepare a panino).&lt;br /&gt;In the end,&amp;nbsp;&lt;span style="background-color: white;"&gt;I will have&lt;/span&gt;&lt;span style="background-color: white;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;&amp;nbsp;a consistent Object and user will find extremely easy to use the API because he will have very few and selected choices per time.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;br /&gt;&lt;/span&gt;We could have different panino traditional builders, FishPaninoBuilder, MeatPaninoBuilder, etc, but still we would face the inconsistent problems and the user will still need to understand exactly what was your idea behind the builder.&lt;br /&gt;With the Step Builder the user will know without any doubt what input is required, making his and&amp;nbsp;your&amp;nbsp;&lt;span style="background-color: white;"&gt;life&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;easier.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://rdafbn.blogspot.com/2012/07/step-builder-pattern_28.html</link><author>noreply@blogger.com (marcocast)</author><thr:total>19</thr:total><georss:featurename>Dublino, Co. Dublino, Irlanda</georss:featurename><georss:point>53.3494426 -6.2600825</georss:point><georss:box>53.197787600000005 -6.5759395000000005 53.5010976 -5.9442255</georss:box></item></channel></rss>