<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUQBRHwzeSp7ImA9WhVTE0k.&quot;"><id>tag:blogger.com,1999:blog-4019909</id><updated>2012-02-27T13:55:55.281+01:00</updated><category term="mobile" /><category term="pc" /><category term="telenor" /><category term="deadline" /><category term="spotify" /><category term="tools" /><category term="s3" /><category term="jobb" /><category term="noncode" /><category term="books" /><category term="socrates" /><category term="avatar" /><category term="development" /><category term="oslo" /><category term="maven" /><category term="hosting" /><category term="sqlmaven" /><category term="method" /><category term="api" /><category term="war" /><category term="presentation" /><category term="chrome" /><category term="united" /><category term="picasa" /><category term="firefox" /><category term="dell" /><category term="grails" /><category term="location" /><category term="encryption" /><category term="t-shirt" /><category term="jrebel" /><category term="salary gadgets work" /><category term="git" /><category term="fantasy" /><category term="tips" /><category term="spring" /><category term="spam" /><category term="sun" /><category term="license" /><category term="video" /><category term="shop" /><category term="username" /><category term="eclipse" /><category term="review" /><category term="work" /><category term="rant" /><category term="facebook" /><category term="xml" /><category term="reading" /><category term="sport" /><category term="mysql" /><category term="java" /><category term="security" /><category term="holiday" /><category term="geek" /><category term="intellij" /><category term="sopa" /><category term="networking" /><category term="employment" /><category term="oracle" /><category term="mvc" /><category term="spreadshirt" /><category term="isp" /><category term="eworldnr" /><category term="hsqldb" /><category term="injustice" /><category term="annotation" /><category term="javazone" /><category term="groovy" /><category term="jpa" /><category term="baby" /><category term="x10" /><category term="flickr" /><category term="flurdy" /><category term="windows db2 database code" /><category term="project" /><category term="ubuntu" /><category term="scam" /><category term="architecture" /><category term="error" /><category term="open-source" /><category term="ide" /><category term="google" /><category term="stavern" /><category term="mail" /><category term="bodypart" /><category term="itunes iphone apple mp3 audacity" /><category term="proxy" /><category term="client" /><category term="ec2" /><category term="algeria" /><category term="legacy" /><category term="im" /><category term="snake" /><category term="postfix" /><category term="jira" /><category term="social" /><category term="youtube" /><category term="3g" /><category term="sleep" /><category term="protest" /><category term="england" /><category term="agile" /><category term="systems" /><category term="amazon" /><category term="jetty" /><category term="enterprise" /><category term="world cup" /><category term="script" /><category term="kanban" /><category term="productiviy" /><category term="irc" /><category term="code" /><category term="firewall" /><category term="ubunu" /><category term="football" /><category term="thunderbird" /><category term="wave" /><category term="database" /><category term="car" /><category term="linux" /><category term="apache" /><category term="screen" /><category term="del.icio.us" /><category term="hibernate" /><category term="manchester" /><category term="champions league" /><category term="office" /><category term="docs" /><category term="personal" /><category term="vietnam" /><category term="howto" /><category term="upto" /><category term="tutorial" /><category term="norway" /><category term="chain" /><category term="scm" /><category term="jsp" /><category term="music" /><category term="games" /><category term="communication" /><category term="simpson" /><category term="web services" /><category term="android mobile apps recommendation" /><category term="book" /><category term="blog" /><category term="netbeans" /><category term="intellig" /><category term="wishlist" /><category term="helpdesk" /><category term="infoq" /><category term="scrum" /><category term="tietoenator" /><category term="sql" /><category term="web2.0" /><category term="netcom" /><category term="twitter" /><category term="play" /><category term="open-plan" /><category term="mozilla" /><category term="slashdot" /><category term="snow" /><category term="mercurial" /><category term="management" /><title>Ivar's rambling</title><subtitle type="html">The ramblings of Ivar Abrahamsen at flurdy.com.
Contain ideas, ranting at innocents, blinkered sporting opinions, tech bable, and probably not enough to be interesting.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.flurdy.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.flurdy.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>118</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/IvarsRambling" /><feedburner:info uri="ivarsrambling" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Dk4BQ3Y5eSp7ImA9WhRaGUw.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-8601425684312589007</id><published>2012-02-22T13:34:00.009+01:00</published><updated>2012-02-22T13:49:12.821+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-22T13:49:12.821+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>Clone local git repository to remote server?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O6_OFvR08XwRuGAxJ8nqaa2FN1U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O6_OFvR08XwRuGAxJ8nqaa2FN1U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O6_OFvR08XwRuGAxJ8nqaa2FN1U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O6_OFvR08XwRuGAxJ8nqaa2FN1U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;If you have a local repository that you want to clone/copy to a remote server here is how I do it. &lt;br /&gt;&lt;br /&gt;Perhaps you have been scaffolding, testing and initial silver bullet development and have realised the project is mature enough to share with others. Or you just want it backed up remotely. &lt;br /&gt;&lt;br /&gt;Simple &lt;code&gt;git clone &lt;i&gt;local&lt;/i&gt; &lt;i&gt;remote&lt;/i&gt;&lt;/code&gt; do not work. Destination path for git clone is always local.&lt;br /&gt;&lt;br /&gt;What you need to do is on the remote server create a bare git repository:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;remoteserver$ mkdir -p &lt;i&gt;/var/local/repos/myproject&lt;/i&gt;;&lt;br /&gt;remoteserver$ cd &lt;i&gt;/var/local/repos/myproject&lt;/i&gt;;&lt;br /&gt;remoteserver$ git init --bare;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then add this remote to your local git repository:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;localmachine$ git remote add &lt;i&gt;origin&lt;/i&gt; \&lt;br /&gt;ssh://&lt;i&gt;remoteserver.example.com/var/local/repos/myproject&lt;/i&gt;;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now every time you want to push to your remote server, you do a normal push:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;localmachine$ git push &lt;i&gt;origin&lt;/i&gt; master;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Although I would seriously consider using something &lt;a href="http://github.com"&gt;github&lt;/a&gt; or &lt;a href="http://gitorious.com/local_install/"&gt;gitorious&lt;/a&gt; instead of your own server.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-8601425684312589007?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/9Ra0lBRHVSo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/8601425684312589007/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=8601425684312589007" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/8601425684312589007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/8601425684312589007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/9Ra0lBRHVSo/clone-local-git-repository-to-remote.html" title="Clone local git repository to remote server?" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2012/02/clone-local-git-repository-to-remote.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYNRnoyfSp7ImA9WhRaEEQ.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-4666548794367765876</id><published>2012-02-13T01:55:00.004+01:00</published><updated>2012-02-13T02:23:17.495+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-13T02:23:17.495+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="productiviy" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Continuous Deployment via Stack Overflow</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zr8CHiJSHQkfzqSTa_5lC0vkVcI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zr8CHiJSHQkfzqSTa_5lC0vkVcI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zr8CHiJSHQkfzqSTa_5lC0vkVcI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zr8CHiJSHQkfzqSTa_5lC0vkVcI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I do have an interest in &lt;a href="http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html"&gt;Continuous Deployment&lt;/a&gt;/&lt;a href="http://continuousdelivery.com"&gt;Continuous Delivery&lt;/a&gt;. Continuous Deployment goes beyond &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;Continuous Integration&lt;/a&gt; and automatically deploys builds to production all the time, not once in awhile. It goes well with agile thinking. &lt;br /&gt;&lt;br /&gt;With frequent deployments the delta that can go wrong is very small, the feedback is very quick and the knowledge is fresh and active with the developers so fix turnarounds are immediate. By relying heavily on automated integration testing and DevOps that provide automated deployment the result is quick and painless.&lt;br /&gt;&lt;br /&gt;This week &lt;a href="http://stackoverflow.com/questions/9214884/how-do-you-continuously-deploy-a-large-system-consisting-of-several-applications/9215354#9215354"&gt;I answered&lt;/a&gt; a difficult question on &lt;a href="http://stackoverflow.com"&gt;Stack Overflow&lt;/a&gt;. The question by Emwee was for advice on  &lt;a href="http://stackoverflow.com/questions/9214884/how-do-you-continuously-deploy-a-large-system-consisting-of-several-applications"&gt;how to use Continuous Deployment with  multitude of inter-dependant systems&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;It is a tricky question and I did not have an exact answer.  &lt;a href="http://stackoverflow.com/questions/9214884/how-do-you-continuously-deploy-a-large-system-consisting-of-several-applications/9215354#9215354"&gt;My answer&lt;/a&gt; was more along the line of how to facilitate an easier deployment by making the dependency and coupling looser and roll-outs smoother.&lt;br /&gt;&lt;br /&gt;I referred to &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;Duck Typing&lt;/a&gt;, &lt;a href="http://martinfowler.com/bliki/FeatureToggle.html"&gt;Feature toggles&lt;/a&gt;, evolution scripts, &lt;a href="http://blog.cherouvim.com/a-table-that-should-exist-in-all-projects-with-a-database/"&gt;version tables&lt;/a&gt;, symlink stage &amp; deploy, and referenced a &lt;a href="http://news.ycombinator.com/item?id=411282"&gt;Hacker News discussion on how Amazon deploys their systems&lt;/a&gt;, a &lt;a href="http://vimeo.com/28795465"&gt;video on how Netflix builds releases in the cloud&lt;/a&gt; and &lt;a href="http://timothyfitz.wordpress.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/"&gt;how at IMVU they deploy 50 times a day&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I also referred to &lt;a href="http://www.amazon.com/gp/product/0321601912/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321601912"&gt;Humble and Farley's book on Continuous Delivery&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;There was another reply as well by EricMinick referring to &lt;a href="http://stackoverflow.com/questions/9105459/best-practice-for-continuous-integration-and-deployment/9117914#9117914"&gt;his previous answer&lt;/a&gt; to a &lt;a href="http://stackoverflow.com/questions/9105459/best-practice-for-continuous-integration-and-deployment"&gt;similar question&lt;/a&gt;. Eric does in detail describe scenarios of using promotion builds into different isolated test environments and suggest solutions that his company &lt;a href="htttp://urbancode.com"&gt;UrbanCode&lt;/a&gt; provides in relation with Jenkins.&lt;br /&gt;&lt;br /&gt;In the end Continuous Deployment is a great evolution. But with large enterprises you need to keep your tongue straight. But it is worth the investment.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-4666548794367765876?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/Wl9DK-dE2wY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/4666548794367765876/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=4666548794367765876" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/4666548794367765876?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/4666548794367765876?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/Wl9DK-dE2wY/continuous-deployment-answer-on-stack.html" title="Continuous Deployment via Stack Overflow" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2012/02/continuous-deployment-answer-on-stack.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UGR387fip7ImA9WhRbE0w.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-7258522551965866869</id><published>2012-02-03T01:39:00.008+01:00</published><updated>2012-02-04T01:27:06.106+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-04T01:27:06.106+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><category scheme="http://www.blogger.com/atom/ns#" term="reading" /><title>Multi book reading</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Wkk_GrUFThx7_FzcSNnoLRomD2o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wkk_GrUFThx7_FzcSNnoLRomD2o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Wkk_GrUFThx7_FzcSNnoLRomD2o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wkk_GrUFThx7_FzcSNnoLRomD2o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I have a habit that I wonder if others do as well. And I wonder if it is productive or counter intuitive.&lt;br /&gt;&lt;br /&gt;What I do is multi-book-reading. By that I mean I read several books at once.&lt;br /&gt;&lt;br /&gt;How I do this is by having different books in different locations. And also several books in the same location. I have a preference for printed books. PDFs of books are handy occasionally for specific searches, but I really cannot read page upon page on a screen. Kindle may be nice, but I have not yet jumped on that bandwagon.&lt;br /&gt;&lt;br /&gt;This multi-book effect is partially due to laziness, as when I am in the lounge I do not want to have to walk back upstairs to my study if I get a sudden urge to read or fetch a book. So I always have a half read book in the lounge. (Currently in the lounge I am re-reading the &lt;a href="http://www.amazon.com/gp/product/0984521402/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0984521402"&gt;Kanban book by Anderson&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-vQ-fgpW5Bg8/TyvENF-q_5I/AAAAAAAAoU4/XcZDx6Sd2QQ/s1600/bookshelf.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/-vQ-fgpW5Bg8/TyvENF-q_5I/AAAAAAAAoU4/XcZDx6Sd2QQ/s320/bookshelf.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5704869082217250706" /&gt;&lt;/a&gt;&lt;br /&gt;In my study I naturally have bookshelves loaded with computers books, especially java, and always a couple on my desk. I tend not to read too long in this room (then why is it called a study?), but a quick few paragraph while the pc is rebooting etc a few times a day. The reference books however might be referred to when needed. (Current study books are &lt;a href="http://www.amazon.com/gp/product/193435659X/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=193435659X"&gt;Seven Languages in Seven Weeks by Tate&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/product/0321601912/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321601912"&gt;Continuous Delivery by Humble &amp;amp; Farley&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;On my bed side table there may be a fiction book. I don't really want to think too much when trying to sleep.&lt;br /&gt;&lt;br /&gt;At work I would also have a mini library as I also tend to evangelise and lend books to colleagues. So I usually have a half read book or two or three there as well. Again for quick glances while rebooting etc, but also for longer reads during lunch if I go by myself. (Just finished &lt;a href="http://www.amazon.com/gp/product/0307463745/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0307463745"&gt;ReWork by Fried &amp;amp; Heinemeier Hansson&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/product/1591843162/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=159184316"&gt;Linchpin by Godin&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;When I am out-and-about e.g. queuing for the till in a shop, waiting for the bus or at lunch when I forgot a book, I use the  &lt;a href="http://www.aldiko.com/"&gt;Aldiko&lt;/a&gt; e-book reader on my Android phone. Being a sucker for offers at &lt;a href="http://oreilly.com/"&gt;O'Reilly&lt;/a&gt; for epub formatted books I have quite a few on my phone. Aldiko is excellent, but the small phone format is in essence rubbish for reading books over time. It is good for quick 1-5 minutes reads but no longer. And useless for reference books as the overview of the page is difficult. (&lt;a href="http://www.amazon.com/gp/product/0596809484/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596809484"&gt;97 Things Every Programmer Should Know by Henney&lt;/a&gt; is good for 5 minute reads)&lt;br /&gt;&lt;br /&gt;For longer commutes by train or plane I tend to bring an actual book. If I do this regularly I should probably invest in a Kindle. (Read bits of &lt;a href="http://www.amazon.com/gp/product/1617290084/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1617290084"&gt;Specification by Example by Adzic&lt;/a&gt; on the plane recently)&lt;br /&gt;&lt;br /&gt;I tend do a lot of quick reads. As a stop gap filler between other events. Maybe work interrupts, maybe it is some element of ADHD, or probably our 6 months old daughter. This means I constantly waste time remembering the context of where I am in the book. &lt;br /&gt;&lt;br /&gt;Longer reading periods is usually a holiday pattern. This would then often involve more fiction books. I read the &lt;a href="http://www.amazon.com/gp/product/0316021806/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0316021806"&gt;Night's Dawn trilogy&lt;/a&gt;&lt;sup&gt;&lt;a href="http://www.amazon.com/gp/product/0316021814/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0316021814"&gt;[2]&lt;/a&gt;&lt;a href="http://www.amazon.com/gp/product/0316021822/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0316021822"&gt;[3]&lt;/a&gt;&lt;/sup&gt; over the last few holidays.&lt;br /&gt;&lt;br /&gt;Some books I might skim read chapters to get a gist of but I know I can revisit them if I need to know those sections in detail in the future. Some books I never finish. I would say a good third or more in library I have not finished or barely read. Some turned out just not interesting, some are just skim read while others are consequences of multi-book-reading and lower down the reading priority list.&lt;br /&gt;&lt;br /&gt;So this multi-book-reading means I do read a lot of books. But it also means I do not finish enough books. Not very "kanban" or "one-piece-flow" :)&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-7258522551965866869?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/7RgFdEO9OKc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/7258522551965866869/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=7258522551965866869" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7258522551965866869?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7258522551965866869?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/7RgFdEO9OKc/multi-book-reading.html" title="Multi book reading" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-vQ-fgpW5Bg8/TyvENF-q_5I/AAAAAAAAoU4/XcZDx6Sd2QQ/s72-c/bookshelf.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2012/02/multi-book-reading.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIBSX4-cSp7ImA9WhRVGE4.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-7334711237265722459</id><published>2012-01-17T17:14:00.009+01:00</published><updated>2012-01-17T21:02:38.059+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T21:02:38.059+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sopa" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="protest" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><title>SOPA protest page and 503 redirect</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2X3D71WSqNX4boPCCJxcquojBwE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2X3D71WSqNX4boPCCJxcquojBwE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2X3D71WSqNX4boPCCJxcquojBwE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2X3D71WSqNX4boPCCJxcquojBwE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Tomorrow, 18t January 2012, many websites &lt;a href="http://sopastrike.com/"&gt;will protest&lt;/a&gt; against the US &lt;a href="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act"&gt;SOPA&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/PROTECT_IP_Act"&gt;PIPA&lt;/a&gt; acts. For example &lt;a href="http://en.wikipedia.org/wiki"&gt;Wikipedia&lt;/a&gt; will &lt;a href="http://wikimediafoundation.org/wiki/English_Wikipedia_anti-SOPA_blackout"&gt;go blank in protest&lt;/a&gt; for 24 hours.&lt;br /&gt;&lt;br /&gt;For those intending to blackout their own websites (or in the future intend to do something similar, e.g. a more practical "web site temporarily down message" while doing an upgrade etc, here are a few tips:&lt;br /&gt;&lt;br /&gt;First of all Google recommend you do not simple just change your website front page to a blank page or similar. As this can have repercussions on your SEO, ie your search ranking. Read more about it in &lt;a href="https://plus.google.com/115984868678744352358/posts/Gas8vjZ5fmB"&gt;this post on Google+ by a Googler&lt;/a&gt;. They recommend a 503 error response instead. Which indicates the site is temporarily down.&lt;br /&gt;&lt;br /&gt;So a simple change of index.html is not recommended. Nor is a simple redirect in the html's meta header, nor a plain http 302 redirect. All this can affect your ranking.&lt;br /&gt;&lt;br /&gt;I recommend (if using &lt;a href="http://httpd.apache.org"&gt;Apache 2&lt;/a&gt;) to use &lt;a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html"&gt;mod_rewrite&lt;/a&gt; in this manner:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;RewriteEngine on&lt;br /&gt;RewriteCond %{ENV:REDIRECT_STATUS} !=503&lt;br /&gt;Alias /stop-sopa &lt;i&gt;/var/www/stop-sopa&lt;/i&gt;&lt;br /&gt;ErrorDocument 503 /stop-sopa/index.html&lt;br /&gt;RewriteRule !^s/stop-sopa$ /stop-sopa [L,R=503]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This uses &lt;b&gt;Alias&lt;/b&gt; to another folder so that the same message can be used for several virtual hosts. It uses a custom &lt;b&gt;ErrorDocument&lt;/b&gt; to display a human readable blackout page. And it uses &lt;b&gt;RewriteRule&lt;/b&gt; to redirect all requests to the &lt;b&gt;stop-sopa&lt;/b&gt; page (except for request for &lt;b&gt;/stop-sopa&lt;/b&gt; so that you don't get an infinite loop).&lt;br /&gt;&lt;br /&gt;If you are looking for a page to use as the blackout page, there is a nice &lt;a href="https://github.com/zachstronaut/stop-sopa"&gt;github project page for just that&lt;/a&gt;. An example can be &lt;a href="http://www.zachstronaut.com/lab/text-shadow-box/stop-sopa.html"&gt;viewed here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-7334711237265722459?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/VZ6vu_izTaI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/7334711237265722459/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=7334711237265722459" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7334711237265722459?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7334711237265722459?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/VZ6vu_izTaI/sopa-protest-page-and-503-redirect.html" title="SOPA protest page and 503 redirect" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.flurdy.com/2012/01/sopa-protest-page-and-503-redirect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQBRHwyeCp7ImA9WhVTE0k.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-239123769343396305</id><published>2012-01-15T00:22:00.012+01:00</published><updated>2012-02-27T13:55:55.290+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-27T13:55:55.290+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="kanban" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><title>Agile project tools for personal/open source projects</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hVKnCdUJAge9y9MuUZ7Bz8ToMvY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hVKnCdUJAge9y9MuUZ7Bz8ToMvY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hVKnCdUJAge9y9MuUZ7Bz8ToMvY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hVKnCdUJAge9y9MuUZ7Bz8ToMvY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Been briefly assessing some online free tools for agile task planning for a few personal FOSS projects.&lt;br /&gt;&lt;br /&gt;A physical task board is perhaps the suggestion from the agile purists, however not useful for me (nor my family :)).&lt;br /&gt;&lt;br /&gt;At work I often have to use the awful &lt;a href="http://en.wikipedia.org/wiki/HP_Quality_Center"&gt;Quality Center&lt;/a&gt;. It is good for planning functional testing, but not much else. The user interface is painful, and only works on windows with IE. &lt;br /&gt;&lt;br /&gt;But most project I have been on eventually drop it for the more developer friendly &lt;a href="http://www.atlassian.com/software/jira/overview"&gt;Jira&lt;/a&gt; by &lt;a href="http://www.atlassian.com"&gt;Atlassian&lt;/a&gt;. Its UI gets cleaner and cleaner. And is great for Scrum projects since the intergration of &lt;a href="http://www.atlassian.com/software/greenhopper/overview"&gt;GreenHopper&lt;/a&gt;. It is however very feature rich which is good and bad, and sometimes quite slow. I recommend Jira for distributed larger organisations. It is however an overkill for my needs.&lt;br /&gt;&lt;br /&gt;I have been using &lt;a href="http://www.pivotaltracker.com"&gt;Pivotal Tracker&lt;/a&gt; for some of my projects for a few years. It is a great tool. For scrum projects it is the tool I would recommend the most. They recently started charging but it is still free for public projects. It is however very iteration/scrum centric and as such not useful for my more Kanbanish time irrelevant requirements.&lt;br /&gt;&lt;br /&gt;So I started to look at more tools (and revisit some previous ones). &lt;br /&gt;My requirements are:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Free, as in beer or near enough. $9/month and similar is too much for personal projects unless heavily used.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Agile task board simulation&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Not time iteration based&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Simple functional UI, but not ugly&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Icebox feature for storing tasks/ideas not yet ready for the backlog&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pivotal like Feature, Chore and Bug classification&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Kanban_(development)#2._Limit_WIP"&gt;Limiting WIP&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Kanban queues&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Simple T-shirt or fibonacci estimates&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Not all requirements have to be met.&lt;br /&gt;&lt;br /&gt;Here are my initial impressions:&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;a href="http://www.pivotaltracker.com"&gt;Pivotal Tracker&lt;/a&gt;&lt;/h5&gt;&lt;br /&gt;Time iterative centric.&lt;br /&gt;Looks nice. Clean interface. &lt;br /&gt;No WIP limit.&lt;br /&gt;No kanban queue.&lt;br /&gt;Got Icebox feature&lt;br /&gt;Got Feature-chore-bug classification.&lt;br /&gt;Fibonacci estimates.&lt;br /&gt;Unlimited free public projects.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;a href="http://agilezen.com"&gt;AgileZen&lt;/a&gt;&lt;/h5&gt;&lt;br /&gt;Kanban style flow.&lt;br /&gt;Looks nice. Clean interface. &lt;br /&gt;Columns can be renamed.&lt;br /&gt;Got WIP limit.&lt;br /&gt;No icebox. Can rename backlog icebox and rename another column backlog.&lt;br /&gt;No estimates&lt;br /&gt;Only 1 project on the free price plan.&lt;br /&gt;FOSS projects can apply for free usage.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;a href="http://www.kanbanery.com"&gt;Kanbanery&lt;/a&gt;&lt;/h5&gt;&lt;br /&gt;Kanban style flow.&lt;br /&gt;Looks nice. Clean interface. &lt;br /&gt;Columns can be renamed.&lt;br /&gt;Got WIP limit.&lt;br /&gt;Got Icebox feature&lt;br /&gt;Got Feature-chore-bug classification.&lt;br /&gt;T-shirt estimates.&lt;br /&gt;Only 1 project on the free price plan.&lt;br /&gt;No FOSS free plan.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;a href="http://www.kanbanpad.com"&gt;Kanbanpad&lt;/a&gt;&lt;/h5&gt;&lt;br /&gt;Kanban style flow.&lt;br /&gt;Clean interface. &lt;br /&gt;Little confusing UI.&lt;br /&gt;Got Kanban queues.&lt;br /&gt;Got WIP limit.&lt;br /&gt;Got Icebox (the "backlog").&lt;br /&gt;No estimates.&lt;br /&gt;Unlimited projects.&lt;br /&gt;All plans are free.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;a href="http://www.leankitkanban.com"&gt;Leankit&lt;/a&gt;&lt;/h5&gt;&lt;br /&gt;Kanban style flow.&lt;br /&gt;Seems very feature rich. Perhaps too many features.&lt;br /&gt;UI a little cluttered.&lt;br /&gt;Tasks seems too much like post-it notes.&lt;br /&gt;Only 1 project on the free price plan.&lt;br /&gt;No FOSS free plan.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;a href="http://www.scrumdo.com"&gt;ScrumDO&lt;/a&gt;&lt;/h5&gt;&lt;br /&gt;Scrum focused.&lt;br /&gt;Looks nice.&lt;br /&gt;Feature rich. &lt;br /&gt;UI a little confusing.&lt;br /&gt;No Icebox.&lt;br /&gt;No WIP limit.&lt;br /&gt;No kanban queue.&lt;br /&gt;Fibonacci and t-shirt estimates.&lt;br /&gt;10 project on the free price plan.&lt;br /&gt;No FOSS free plan.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;a href="http://flow.io"&gt;Flow&lt;/a&gt;&lt;/h5&gt;&lt;br /&gt;Kanban style flow.&lt;br /&gt;Tasks seems too much like post-it notes.&lt;br /&gt;No Icebox.&lt;br /&gt;Got WIP limit.&lt;br /&gt;Only 1 project on the free price plan.&lt;br /&gt;FOSS projects can apply for free usage.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I may update this in the future when I get more impressions of the ones I use and if I find other tools.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My recommendations depends, but currently they are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;For large commercial projects &lt;a href="http://www.atlassian.com/software/jira/overview"&gt;Jira&lt;/a&gt; offer features and reports. And can be installed inside your firewall.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For Scrum projects &lt;a href="www.pivotaltracker.com"&gt;Pivotal Tracker&lt;/a&gt; offers the most complete package.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For Kanban projects, the it depends on your own requirements and taste, but my current favourites are &lt;a href="http.//kanbanery.com"&gt;Kanbanery&lt;/a&gt; and &lt;a href="http://agilezen.com"&gt;AgileZen&lt;/a&gt;. &lt;a href="http://www.kanbanpad.com"&gt;Kanbanpad&lt;/a&gt;'s no restrictions on number of projects is also tempting&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-239123769343396305?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/QUPcs_MbnN8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/239123769343396305/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=239123769343396305" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/239123769343396305?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/239123769343396305?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/QUPcs_MbnN8/agile-project-tools.html" title="Agile project tools for personal/open source projects" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.flurdy.com/2012/01/agile-project-tools.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MFRH47fip7ImA9WhRVE00.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-1962401108445920377</id><published>2012-01-11T18:35:00.010+01:00</published><updated>2012-01-11T19:10:15.006+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T19:10:15.006+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intellij" /><category scheme="http://www.blogger.com/atom/ns#" term="play" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>Play! 2.0 in IntelliJ IDEA</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lgiGrzztRY1mLuZhJzTrviP0zWo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lgiGrzztRY1mLuZhJzTrviP0zWo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lgiGrzztRY1mLuZhJzTrviP0zWo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lgiGrzztRY1mLuZhJzTrviP0zWo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Play! Framework 1.x supported creating an IntelliJ IDEA project by the command: &lt;code&gt;play idealize&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;However while Play! Framework 2.0 is in beta that command does not work**.&lt;br /&gt;&lt;br /&gt;So how do you get your Play! 2.0 project to open in IntelliJ IDEA? There are few different work arounds. Especially regarding integrating &lt;b&gt;sbt&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;However I have a quick way. For this to work you need both Play! 2.0 and Play! 1.2.x installed.&lt;br /&gt;&lt;br /&gt;Create Play! 2.0 project: &lt;br /&gt;&lt;code&gt;&lt;i&gt;/usr/local/lib/play-2.0-beta&lt;/i&gt;/play new helloworld&lt;/code&gt;&lt;br /&gt;(I am assuming it was a Java project that you chose)&lt;br /&gt;&lt;br /&gt;Rename project folder:&lt;br /&gt;&lt;code&gt;mv helloworld helloworld2&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Create Play! 1.x project: &lt;br /&gt;&lt;code&gt;&lt;i&gt;/usr/local/lib/play-1.2.4&lt;/i&gt;/play new helloworld&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Create IntelliJ project: &lt;br /&gt;&lt;code&gt;cd helloworld; &lt;br /&gt;&lt;i&gt;/usr/local/lib/play-1.2.4&lt;/i&gt;/play idealize&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Move IntelliJ files to Play! 2.0 project: &lt;br /&gt;&lt;code&gt;cd ..; &lt;br /&gt;mv helloworld/helloworld.i* helloworld2/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Remove 1.x project and rename 2.0 folder: &lt;br /&gt;&lt;code&gt;rm -rf helloworld; &lt;br /&gt;mv helloworld2 helloworld&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now you can open IntelliJ and then go to file/open project, then find and open helloworld/helloworld.ipr.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There will be some issues such as libraries etc but this a good start. For further tips try &lt;a href="http://jetbrains.dzone.com/articles/configuring-intellij-idea"&gt;these suggestions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;** As of 11th of January 2012 it is not present in Play! 2.0. I fully expect Play! to create an &lt;i&gt;idealize&lt;/i&gt;, &lt;i&gt;eclipsify&lt;/i&gt;, &lt;i&gt;netbeansify&lt;/i&gt; etc as soon as 2.0 is stable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-1962401108445920377?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/DmWQcOI0PUQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/1962401108445920377/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=1962401108445920377" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/1962401108445920377?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/1962401108445920377?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/DmWQcOI0PUQ/play-20-in-intellij-idea.html" title="Play! 2.0 in IntelliJ IDEA" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.flurdy.com/2012/01/play-20-in-intellij-idea.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQCSX45fyp7ImA9WhRREEo.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-4975075462179067859</id><published>2011-11-16T13:16:00.004+01:00</published><updated>2011-11-23T19:52:48.027+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T19:52:48.027+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="systems" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="legacy" /><title>Do not rewrite</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K9B7kukUVGPV0AOCaqsmbaNp98U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K9B7kukUVGPV0AOCaqsmbaNp98U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K9B7kukUVGPV0AOCaqsmbaNp98U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K9B7kukUVGPV0AOCaqsmbaNp98U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;b&gt;Just don’t do it&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Instead evolve&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Many (99.99%) of developers continually insist that whichever application they work on needs a rewrite. As in scratch everything, redesign the architecture and technology choices and rewrite every component because the current choice and state is not ideal. I used to feel and say this as well.&lt;br /&gt;&lt;br /&gt;Any code I have written (and even worse if written by others) which I need to update/maintain will look bad after only 6 months. After 2 years it smells of bad architecture design and logic. After 5 years the code base feels like a mess, totally unmaintainable. &lt;br /&gt;&lt;br /&gt;This is slightly because technology has moved on, and my skills or rather preferences have evolved.  But it is mostly due to that over time any application has been updated due to bug fixes and new features, and the maintainance might have been handed over to other people several times, with different skill level or understanding of the architecture. This bloats the code structure and exceeds what the original and probably quite tidy structure was intended for.&lt;br /&gt;&lt;br /&gt;Any further maintenance is more and more costly as it takes longer and/or more people to make any changes to the application. And any innovation is muffled as inspiration is dampened. &lt;br /&gt;&lt;br /&gt;Many companies makes a good living when other companies outsources the costly maintenance of these systems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I used to feel the need to rewrite in every new assignment but not anymore. My advice now is: &lt;b&gt;Please do not rewrite&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why are rewrites a bad idea?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;No value&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you undertake a rewrite of your core application it will be very costly for your business, with no initial return on investment. Take 6 -12 months of pure losses and in the end the customer (internal or external) has not received any extra value. Most likely they will have less features as scope was reduced, but rarely any new features. Future performance gains and maintainability is a plus but not of value there and then. So it is a huge hit on fragile budgets or even liquidity of smaller companies, with little to no benefit.&lt;br /&gt;&lt;br /&gt;This is the main reason not to rewrite, the business side gains nothing from it, it is a pure expense. Any reasonable business person would not approve it. And any future relationship will quite likely be very damaged.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Never finishing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Another risk is that the rewrite takes too long and either never really finishes or is cancelled. Making it an expensive task with no value now nor in the future.&lt;br /&gt;&lt;br /&gt;Also rewrites that span a long time usually suffers from that the decisions made at the beginning start to look outdated and wrong before it is even in production and before any future value is gained.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Evolve&lt;/h3&gt;&lt;br /&gt;However I do not mean you should not evolve your application. Do not keep status quo either. If it is an important core application, you should evolve it, but not perform a total rewrite.&lt;br /&gt;&lt;br /&gt;Instead do it in smaller steps while adding value and features for the customer. This way your product is cleaner and up to date, but the business side does not take a huge hit. This is also much more predictable and less volatile. Which make is less likely the project will be cancelled or worse for smaller companies which could go bankrupt.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How do you go about evolving and not rewriting? This very much depends on your type of application. &lt;br /&gt;&lt;br /&gt;(If it is a tiny application, go ahead rewrite it. Just make sure the dependant systems are aware of this).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Refactor&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;On a minor level, continual process of refactoring, with larger refactoring a frequent acceptable task. This should slow down code rot, postponing the need for larger changes a while.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Modularisation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Eventually your application will need a drastic change. If by chance your original design was quite modular or less coupled with other systems you made evolving smoother. If not, try to modularise your current design.&lt;br /&gt;&lt;br /&gt;By being modular you can still perform rewrites, but on much smaller scale, taking one module at the time. So that it is not a 12 months loss, but perhaps 1 month loss. While normal work on other modules can still continue. Much less likely to kill your project/company.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parallel systems&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Instead of a hard one day switch over from the old system to the new system, instead run two systems in parallel for awhile, the old legacy system and the new clean system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skinny interface adapter layer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If modularised or not, a cleaner way to evolve and replace sections of your application is to introduce an adapter layer for your interface, and keeping it skinny.&lt;br /&gt;&lt;br /&gt;This interface adapter only relays between your system/application and other systems. When other systems only talk via the adapter you are free to change your system without affecting external systems. &lt;br /&gt;&lt;br /&gt;More importantly you can now split your system into two systems and relay certain calls to the new system instead of the old, without external systems are aware nor affected by this.&lt;br /&gt;&lt;br /&gt;The adapter layer is not always possible, or people are resistant to introduce yet another layer/system, but it really makes your much more adaptable in changing your own architecture, you can move elements to a new system and roll back without external costs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;No logic in adapter layer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Do not ever put any logic in interface adapter. Otherwise you end up with yet another system to maintain. Unfortunately this happens quite often when bad planning and management leads to shortcuts which adds logic in the adapter layer. And then you have just multiplied your maintenance costs. And believe me that logic is then rarely temporary.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ESB&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Do not interpret this adapter layer requirement as a reason for introducing an &lt;a href="http://en.wikipedia.org/wiki/Enterprise_service_bus"&gt;ESB&lt;/a&gt;. ESB tend to just camouflage the spaghetti integration code, and often introduce above mention unwanted logic. However if you already have an ESB in place it can perform the adapter layer requirement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Legacy system becomes adapter layer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Another method implementing the adapter layer is to use the existing system to relay calls to the new system instead of handling them themselves. Internally in the existing legacy system you have to do this anyway on each element migrated to the new system, so you can also allow external system to do this. &lt;br /&gt;&lt;br /&gt;It is however cleaner to have a separate adapter layer. This will be easier to maintain as probably designed on newer technology and platforms. And allows you switch off the legacy system when you can. But also makes so less likely for people to just decide to use the legacy system instead.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Topic / feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;An even better rewrite strategy/evolution than per module is per topic / feature. This is an even smaller grained change and less risky. As part of more agile strategies you can move one feature at the time to the new clean system. &lt;br /&gt;&lt;br /&gt;With an adapter layer this switching is smooth, but not restricted to an adapter layer. Without the adapter you just have more administration of changing every dependant system for each feature moved.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://martinfowler.com/bliki/FeatureToggle.html"&gt;Feature toggles&lt;/a&gt; might be part of this strategy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;New feature -&gt; new system&lt;br /&gt;Update feature -&gt; new system&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Every new feature request is naturally going to be implemented on the new system. But a good method of choosing which existing features to move is choosing a feature which there is a requirement to modify. Then not touch it on the old system but instead rewrite and update it on the new system. This is then a good carrot/stick way to ensure the migration is performed. And ensures that the company receive some value for each rewrite.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Do not update old(legacy) system/application&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Another very important rule is not to update the old legacy system at all when each feature/module is migrated off it.  It is so tempting to make a shortcut and update both system as perhaps you have not introduced an adapter layer or instructed enough external systems to use the new system. This will kill your migration/rewrite.&lt;br /&gt;&lt;br /&gt;For this step the leadership of your team needs to be firm about and insist on. Do not end up maintaining two systems (or 3 with the adapter layer).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ensure legacy system delegates&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The legacy system will undoubtedly internally refer to the rewritten and migrate module or feature. You need to ensure the legacy system now delegates internally to the new system. This is the only update you should do on the old system. Otherwise again you will need to maintain two systems, and run the risk of the legacy system and the new system executes slightly differently for the same task, leading to people insisting on using the legacy system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kill the legacy system&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You need to plan and ensure the old system is eventually switched off. Otherwise you will still need to keep people and skills on how to maintain that system. It may be tempting and erroneously to leave some elements behind that should be on the new architecture.&lt;br /&gt;&lt;br /&gt;There may be some elements not needed on new system or unrelated that is left on the old system.  But probably better to even move these to another new system than keep the old system lying around and increasing the cost of maintaining that small element as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kill the adapter layer?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Once you killed the legacy system, do you want to keep the adapter layer? Keep in mind you might want to move on from the new system when it starts to rot as well. However it may be tidier and less complicated to kill the adapter layer as well. I would kill it and if needed in the future reintroduce it instead.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Do not stop half way&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If for some reason the migration to a new system is stopped, either due to reprioritisation, lack of progress etc, then you are stuck with maintaining not 1 but 3 systems. Many companies end up burned by this and is mostly down to not strong enough leadership/management.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So my point is to rewrite small topics/features then modules, but never the whole application. This way value is introduced along the way without a budgetary black hole.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;References&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Many, but some from former colleague &lt;a href="http://www.f12.no"&gt;Anders Sveen&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-4975075462179067859?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/9XD_9x_nPPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/4975075462179067859/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=4975075462179067859" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/4975075462179067859?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/4975075462179067859?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/9XD_9x_nPPA/do-not-rewrite.html" title="Do not rewrite" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/11/do-not-rewrite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICRnk8fip7ImA9WhdXF08.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-2449186793446020974</id><published>2011-08-30T11:59:00.003+02:00</published><updated>2011-08-30T18:42:47.776+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-30T18:42:47.776+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>Null is okay</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BUxPApaVivnWv_ZZnFJK2zDwMI0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BUxPApaVivnWv_ZZnFJK2zDwMI0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BUxPApaVivnWv_ZZnFJK2zDwMI0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BUxPApaVivnWv_ZZnFJK2zDwMI0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Most of the bugs that you find or are reported to you in java applications are &lt;a href=”http://download.oracle.com/javase/6/docs/api/java/lang/NullPointerException.html”&gt;NullPointerExceptions&lt;/a&gt; &lt;sup&gt;&lt;a href=”http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception”&gt;[1]&lt;/a&gt;&lt;/sup&gt;. NPE are rife in the beginning of a product’s life cycle, and they never go away.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;The consequences are bug fixing which checks if:&lt;ul&gt;&lt;li&gt;input is null&lt;/li&gt;
&lt;br /&gt;&lt;li&gt;if interface calls return null&lt;/li&gt;
&lt;br /&gt;&lt;li&gt;if method calls return null&lt;/li&gt;
&lt;br /&gt;&lt;li&gt;if properties and collections are null&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;So this original pizza ordering method: 
&lt;br /&gt;&lt;code&gt;public void orderPizza(PizzaOrder pizzaOrder){
&lt;br /&gt;&amp;nbsp;&amp;nbsp;for( Pizza pizza : pizzaOrder.getPizzas()){
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kitchen.makePizza(pizza);
&lt;br /&gt;&amp;nbsp;&amp;nbsp;}
&lt;br /&gt;}&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;Morphs into this:
&lt;br /&gt;&lt;code&gt;public void orderPizza(PizzaOrder pizzaOrder){
&lt;br /&gt;&amp;nbsp;&amp;nbsp;if( pizzaOrder != null) {
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( pizzaOrder.getPizzas() != null ||
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Collection.isEmpty(pizzaOrder.getPizzas())) {
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( kitchen != null) {
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( Pizza pizza : pizzaOrder.getPizzas()){
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( pizza != null) {
&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;kitchen.makePizza(pizza);
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&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;throw PizzeriaTechnicalException(“No pizza!!!”);
&lt;br /&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;}
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw PizzeriaTechnicalException(“No kitchen!!!”);
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw PizzeriaTechnicalException(“No pizzas in order!!!”);
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;br /&gt;&amp;nbsp;&amp;nbsp;} else {
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw PizzeriaTechnicalException(“No pizza order!!!”);
&lt;br /&gt;&amp;nbsp;&amp;nbsp;}
&lt;br /&gt;}&lt;/code&gt;
&lt;br /&gt;(Or alternativly many “assert pizzaOrder != null” that are useless in production)
&lt;br /&gt;
&lt;br /&gt;Madness, and very messy. 
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;Blinkered coding standard&lt;/b&gt;:
&lt;br /&gt;This happens when code ownership is not clear, when desire for clean code is not existant, when fixing bugs with blinkers on.
&lt;br /&gt;When developers are time constrained or scared of changing code.
&lt;br /&gt;When development is outsourced but authority and knowledge is not, so refactoring is avoided or not part of SLA.  
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;h3&gt;Why are we so afraid of NullPointerExceptions? 
&lt;br /&gt;What is wrong with null?&lt;/h3&gt;
&lt;br /&gt;Null is okay. Null is exactly that. Don't avoid it like the plague, but try to not pass the problem to others. Tidy up your gateway interfaces, trust internally null does not happen. If it does then don't hide the problem.
&lt;br /&gt;
&lt;br /&gt;Do not check for null inside you application. Check for null on your edges: 
&lt;br /&gt;
&lt;br /&gt;Validate user interface inputs. “Users” are always causing trouble, but we can not live without customers. Validate the essentials, but remember duck walking, don’t scare your customers with perfection validation. 
&lt;br /&gt;
&lt;br /&gt;Validate external 3rd party api interfaces. Probably validate internal api interfaces. Remember duck walking. If an internal system quite close to your application erroneously passes null values, fix that system instead. It is a gray zone however so some null pointer validation is fine. Just don’t complicate your system because of the laziness of another within your team/company.
&lt;br /&gt;
&lt;br /&gt;Do not validate calls between your applications layers. Trust the edges has validated the data. Use unit tests to ensure integrity. 
&lt;br /&gt;
&lt;br /&gt;&lt;h3&gt;Dealing with NPE/Null?&lt;/h3&gt;
&lt;br /&gt;If you encounter a Null or anything resembling empty when not possible etc: throw a NullPointerException. Don’t sugar coat and masquerade it as something else. An NPE is an NPE! It says what it is on the tin! It is easily understood by all developers, and easily traced. Obviously don’t show that to the end user, but don’t catch it too far down your stack.
&lt;br /&gt;
&lt;br /&gt;If you get bug report about an NPE. Fix the edge validation, factory generation or inside the api call. Do not add a “== null“ condition inside your application. 
&lt;br /&gt;
&lt;br /&gt;It is easier to avoid internal NPE by not passing external DTO and domain objects through your own application. If you act on it, it should be your applications objects, not an external one. This avoids complicated null pointer validation.
&lt;br /&gt;
&lt;br /&gt;“Clean Code” book suggest “specific case object” for method calls that may previously return null. I am not a big fan, but it may solve internal api NPEs. I definitely support the pattern of returning empty collections in find* calls instead of null when nothing was found.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;How would I deal with Null in the Pizza Order scenario?
&lt;br /&gt;
&lt;br /&gt;PizzaOrder object should be validated beforehand in the interface layer. It is not the responsibility of this method.
&lt;br /&gt;
&lt;br /&gt;Same layer before this method should call a factory method that sets pizzas collection to an empty collection if no pizzas.
&lt;br /&gt;
&lt;br /&gt;Kitchen is always injected or constructed externally to this method and not its responsibility. 
&lt;br /&gt;
&lt;br /&gt;Factories in mapping/creating the PizzaOrder before this method call should also ensure no Pizza objects are Null.
&lt;br /&gt;
&lt;br /&gt;The one possible valid check is if there are any pizzas in the order. The &lt;code&gt;Collection.isEmpty(pizzaOrder.getPizzas())&lt;/code&gt; But it is not a null pointer check, as previous interfaces/factories will ensure a collection object exists. However the interface or application before this method call should probably have validated the actual order, to ensure an order contains pizzas!
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;So Null is okay and NullPointerException can be your friend.
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-2449186793446020974?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/NkAow_5GtXo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/2449186793446020974/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=2449186793446020974" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2449186793446020974?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2449186793446020974?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/NkAow_5GtXo/null-is-okay.html" title="Null is okay" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/08/null-is-okay.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08CR3czeSp7ImA9WhdQFU0.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-9063723040976894177</id><published>2011-08-16T15:59:00.008+02:00</published><updated>2011-08-16T16:44:26.981+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-16T16:44:26.981+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bodypart" /><category scheme="http://www.blogger.com/atom/ns#" term="noncode" /><category scheme="http://www.blogger.com/atom/ns#" term="baby" /><title>Boobs, breast and Tits. Functional or attractive?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JvRUSOy6spirGD89zQEb8wJNRBo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JvRUSOy6spirGD89zQEb8wJNRBo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JvRUSOy6spirGD89zQEb8wJNRBo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JvRUSOy6spirGD89zQEb8wJNRBo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;A different post than my normal rambling:
&lt;br /&gt;
&lt;br /&gt;Our beautiful baby daughter was recently born, and is in the middle of breastfeeding. And this constant feeding got me thinking of how I was reacting to this exposure.
&lt;br /&gt;
&lt;br /&gt;Basically at the moment I am only thinking of my partners boobs as a utility to feed our daughter. They have purely a functional property. 
&lt;br /&gt;
&lt;br /&gt;It is quite the same when I see other mothers feed their babies on park benches etc. Mostly I think it is just sweet or indifferent to it.
&lt;br /&gt;
&lt;br /&gt;So basically this body part which often is connected with attraction and excitement, is by introducing a baby changing my perception completely. And I would guess this reaction is similar with most other males, at various degrees (and probably some exceptions).
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;But remove the baby and any pregnancy references, if I catch a glimpse of a breast or cleavage I still snigger like a teenager...
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;Well at least I got to have "boobs" in a blog title, instead of my normal geeky techy posts :)
&lt;br /&gt;
&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-9063723040976894177?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/ERL9kX2qXz8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/9063723040976894177/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=9063723040976894177" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/9063723040976894177?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/9063723040976894177?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/ERL9kX2qXz8/boobs-breast-and-tits-functional-or.html" title="Boobs, breast and Tits. Functional or attractive?" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/08/boobs-breast-and-tits-functional-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4FRHwzcCp7ImA9WhZXFEk.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-369084566739118293</id><published>2011-05-03T19:33:00.008+02:00</published><updated>2011-05-03T20:21:55.288+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-03T20:21:55.288+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Ubuntu releases</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wO09TnahYQT1KLdLJRYg1NbaNEI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wO09TnahYQT1KLdLJRYg1NbaNEI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wO09TnahYQT1KLdLJRYg1NbaNEI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wO09TnahYQT1KLdLJRYg1NbaNEI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;i&gt;Ps. This is not directly regarding the latest 11.04 Natty release with the infamous Unity UI. (As of 03.05.2011) I am on 10.04 Lucid on my desktop and 10.10 Maverick on my servers (I know, it should be the other way round...), so I have not even tried Unity yet.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Current release schedule&lt;/h4&gt; Ubuntu releases a new version every 6 months, in April and October. They are supported for 18 months. I do not really have an issue with this frequency.&lt;br /&gt;&lt;br /&gt;Every 2 years one of these releases is a LTS, &lt;a href="https://wiki.ubuntu.com/LTS"&gt;Long Term Support&lt;/a&gt;, version that they will support for 3 to 5 years. This is the release to use for more production systems.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;In practice&lt;/h4&gt;In practice this 6 month release schedule means a lot of bleeding edge software and versions go into every version. This is good. It means the distribution is up to date, and the software is pushed and cannot rest on its laurels and falter.&lt;br /&gt;&lt;br /&gt;Most software versions are stable enough, but however new divergences are often not polished enough and lack enough extensions, documentation, etc. E.g. Unity, Gnome 3, GDM2, Plymouth etc. For the initiated that will research solutions and like dabbling with new software this is not a big issue. For the vast majority of users that just wants something that works, this is risky and often backfires on their impression of Linux and Ubuntu.&lt;br /&gt;&lt;br /&gt;Also a 6 months release schedule does mean quite a frequent upgrade requirement. Especially for the uninitiated non heavy Linux fanboys (if such a name exists). But you have to set the line somewhere, and a more frequent upgrade does mean a smaller delta difference and less chance of broken upgrades. On production servers however, 6 months upgrade schedule is a non starter. The LTS schedule is thus more suitable.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;LTS&lt;/h4&gt;Unfortunately the LTS version is not always the version Ubuntu "promote". After a newer minor version has been released it takes a back burner. Too much emphasis I feel on promoting, discussing and supporting the newer versions and not backporting enough to the "stable" LTS version. &lt;br /&gt;&lt;br /&gt;Also when an LTS version is released it is "promoted" as LTS immediately. Being a "major" release a lot of people upgrade to it soon after the release date, but there are still many teething errors before it is more "solid", usually then they release a X.x.1 version.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Small modification&lt;/h4&gt; They should promote LTS to everyone, and let fanboys use the latest non LTS versions. This way the keen users will still be up to date, and will ensure fixes and velocity of the features. But they will keep a very stable version for the majority users.&lt;br /&gt;&lt;br /&gt;They should not apply the LTS "brand" to the version until the X.x.1 version a few months after the general X.x release. That way teething errors are never found in an LTS version, and more trust can be applied to the version branding.&lt;br /&gt;&lt;br /&gt;They should include more backports to the LTS versions. After about a year my LTSes are a nuisance as their packages are too out of date.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Large modification&lt;/h4&gt;LTS current biennial release schedule is a large gap. What about a LTS every year or 18 months? &lt;br /&gt;&lt;br /&gt;Have a "major", "minor", "tiny" or better "solid", "stable", "unstable" release versioning? Or an unstable release every 4 months(fanboys), stable every 8 (desktops) and solid(servers)(LTS) every 16 months? Too much admin or release confusion perhaps?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;While debian's stable/testing/unstable naming is a close match, Ubuntu has always been relible. But lately I have been reluctant to upgrade, waiting months before all initial problems are out of the way before I dabble. And now I usually skip a release or two every time.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Summary&lt;/h4&gt; Basically change the promotion of LTS. Let the LTS be the default version. And do not call it LTS until the Ubuntu x.x.1 teething problem bugfix version is released.&lt;br /&gt;&lt;br /&gt;And optionally change the schedule to more frequent LTS, or even 3 levels of stability/support releases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-369084566739118293?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/EYZSqRydP5M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/369084566739118293/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=369084566739118293" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/369084566739118293?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/369084566739118293?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/EYZSqRydP5M/ubuntu-releases.html" title="Ubuntu releases" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/05/ubuntu-releases.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EMQn8_fyp7ImA9WhZXGUg.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-1817504002766825126</id><published>2011-04-20T18:12:00.006+02:00</published><updated>2011-05-09T16:34:43.147+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-09T16:34:43.147+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Required reading</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kZ5cdz6WCla9Y2Pkyg-7VFWyTMA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kZ5cdz6WCla9Y2Pkyg-7VFWyTMA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kZ5cdz6WCla9Y2Pkyg-7VFWyTMA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kZ5cdz6WCla9Y2Pkyg-7VFWyTMA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;b&gt;Should a development team/department have a required reading list?&lt;/b&gt;&lt;br /&gt;A list containing books (articles etc) that each member should read.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;I think so.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Required&lt;/h3&gt; I am not sure if “required” is the right concept, “strongly encouraged”, incentive linked or similar is perhaps enough emphasis.&lt;br /&gt;&lt;br /&gt;Also “Should read”  does not mean all books have to have been read before joining the team, more a list of books to read while in the team. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Why&lt;/h3&gt; To gather a common basis for discussions and choices within the team.  To grow the competence of the team and ensure more correct decisions by having more relevant information. By reading and updating themselves the team is exposed to new ideas and can discuss and grow their understanding of this at work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Unanimous agreement&lt;/h3&gt; It should not be requirement to agree with the contents and aim of every book, however it should be a requirement to have read it so that it can be discussed. In favour or quite the opposite only adds to the discussion quality.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Never read them all&lt;/h3&gt; You should never be finished with the the “Reading list”.  If the list is too short and you have read all of them (or even based it on your own previously read books) then you become complacent and not open to further competences and ideas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;List evolution&lt;/h3&gt; The list should grow continuously and irrelevant/outdated items should be pruned from the list. The list should perhaps be put into sections, and also prioritised if large.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;No reading&lt;/h3&gt; Team members that does not read nor update themselves in other ways, do you want them in your team? They may be great right now, but will they stay that way? I am always wary of people that do no expose themselves to new thinking. Can I really trust their convictions on a solution for an issue is the most prudent solution?&lt;br /&gt;&lt;br /&gt;Some people are very productive and valuable without updating themselves. It is rare and uncommon however.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Pretend readers&lt;/h3&gt; Some colleagues will perhaps say they have read or reading books from the list, but have no intention of reading anything. There should probably not be any need to quiz them to ensure knowledge, in due time their evaporating competences will show their true colours anyway.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Book qualification&lt;/h3&gt; How do you select books on the list? Initially perhaps senior team members, architects etc could select a small selection of relevant books. But as the team grows the list should probably be suggested and voted on by the whole team to ensure common consensus and introduce newer not mainstream suggestions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Reading speed&lt;/h3&gt; An interesting issue would be how to ensure that people do actively read. That is not just up to the individual, but should perhaps be part of incentives, part of project cost and time allocations. That is a harder sell, but will pay itself over time. &lt;br /&gt;&lt;br /&gt;Some people though can read fast others not, some have no life and can read all weekend, others have 15 kids and no spare time. As long as they “are” reading I would be happy. 1 book per year or 10, it is all good.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Not related titles&lt;/h3&gt; Perhaps the list could contain subjects not related to the specific teams function. Fictional, philosophical books? Perhaps not.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;My reading list&lt;/h3&gt; If I were to list books I would probably include many items I have not read, just skimmed or even agree with. I also do not have a great amount of time to read books either, but I force myself. I get the odd for free for reviewing, buy a few related to projects and a few hobby subjects, totaling 4-8 per year. &lt;br /&gt;&lt;br /&gt;To list suggestions for teams similar to mine (enterprise Java, finance sector):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0201633612/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0201633612"&gt;Design patterns&lt;/a&gt; (Gamma, Helm, Johnson, Vlissides)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321127420/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0321127420"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt; (Fowler)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321200683/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0321200683"&gt;Enterprise Integration Patterns&lt;/a&gt; (Hohpe, Woolf)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0201835959/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0201835959"&gt;Mythical Man Month&lt;/a&gt; (Brooks)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0932633439/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0932633439"&gt;Peopleware&lt;/a&gt; (DeMarco, Lister)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/073561993X/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=073561993X"&gt;Agile Project Management With Scrum&lt;/a&gt; (Schwaber)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321579364/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0321579364"&gt;Succeeding with Agile&lt;/a&gt; (Cohn)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0984521402/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0984521402"&gt;Kanban&lt;/a&gt; (Anderson)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0557138329/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0557138329"&gt;Kanban and Scrum&lt;/a&gt; (Kniberg)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0132350882/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0132350882"&gt;Clean Code&lt;/a&gt; (Martin)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0131177052/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0131177052"&gt;Working Effectively with Legacy Code&lt;/a&gt; (Feathers)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321356683/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0321356683"&gt;Effective Java&lt;/a&gt; (Bloch)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321349601/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0321349601"&gt;Java Concurrency in Practice&lt;/a&gt; (Goetz)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0307463745/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0307463745"&gt;ReWork&lt;/a&gt; (Fried, Heinemeier Hansson)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0596809484/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0596809484"&gt;97 Things Every Programmer Should Know&lt;/a&gt; (Henney)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0596805829/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0596805829"&gt;REST in Practice&lt;/a&gt; (Webber, Parastatidis, Robinson)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/193435659X/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=193435659X"&gt;Seven Languages in Seven Weeks&lt;/a&gt; (Tate)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0764526146/ref=as_li_ss_tl?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=0764526146"&gt;UML 2 for Dummies&lt;/a&gt; (Chonoles)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Any comments or suggestions are welcom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-1817504002766825126?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/4R_5nywRtsM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/1817504002766825126/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=1817504002766825126" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/1817504002766825126?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/1817504002766825126?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/4R_5nywRtsM/required-reading.html" title="Required reading" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/04/required-reading.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcCQHk6fCp7ImA9Wx9aFU4.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-2162073194091089826</id><published>2011-03-07T16:02:00.005+01:00</published><updated>2011-03-07T23:31:01.714+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-07T23:31:01.714+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><category scheme="http://www.blogger.com/atom/ns#" term="deadline" /><title>Remove deadlines, increase productivity</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KtgvNJBmY2k9_l4Gsu8du47pZgc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KtgvNJBmY2k9_l4Gsu8du47pZgc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KtgvNJBmY2k9_l4Gsu8du47pZgc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KtgvNJBmY2k9_l4Gsu8du47pZgc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;In a recent project the tasks were always delegated and pointless deadlines set on everything. This seems so counter productive and ineffective compared to my past 5 years of agile based projects (inc maintenance). &lt;br /&gt;&lt;br /&gt;As for task delegation I will need to evangelise more about the benefits of self organising and ownership through bottom up delegation, WIPs, velocity projection, prioritisation benefits etc. &lt;br /&gt;&lt;br /&gt;My current beef is about noisy deadlines. Deadlines are for product owner / project managers. The team should never need to deal with deadlines. Especially when not meeting them has no consequence, so why have them at all? The team deals with prioritised tasks and if needed time boxed tasks. The tasks are divided up so that they are small enough so that a slip of 300% from estimation has no really impact as you are only talking about hours or days. However if the project velocity overt time does not seem to meet external deadlines then the scope of the backlog need to change, not to push developers/testers harder. &lt;br /&gt;&lt;br /&gt;In agile teams they should not confuse deadlines for an estimation of how much work is left. If your current task may seem like another 2 days worth of work, do not set a deadline in two days. You may have interfering meetings or get stuck on a small issue that extend that tasks into next week. (Or hit an coding-happy-zone or eureka moment and finish in a few hours). Setting a deadline do not make you finish earlier and pushing developers/testers harder does not improve code quality. A task based deadline is only noise and stress.&lt;br /&gt;&lt;br /&gt;Product owners can plan, communicate, etc with dates to customers, company boards or steering groups etc but they should be soft, movable dates and based on current project velocity, and no minor deadlines. If the velocity slows down, then reduce the scope of the backlog, or move the dates. Do not put pressure on the team with more micromanaged deadlines. It will only be noise and slow down development. The team does not really need to know specific dates apart perhaps from general roadmap (lavalamp?)for big releases.&lt;br /&gt;&lt;br /&gt;True, some dates can not be moved, such as Christmas promotions, larger entities' deadlines etc, but with enough balls you would be surprised how many customer, senior management deadlines can be moved with good communication, even completely removed. Good project transparency and communication, and thus project velocity visibility is usually a much bigger relation and delivery benefit.&lt;br /&gt;&lt;br /&gt;I agree that some pressure of delivery should exist but no cutthroat stress inducing deadlines. An agile process of pride in delivering tasks may quickly vanquish need for deadlines.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://agile-commentary.blogspot.com/2009/06/are-deadlines-important.html"&gt;agile-commentary.blogspot.com/2009/06/are-deadlines-important.html&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://developers.slashdot.org/story/06/09/28/1242257/Good-Agile-mdash-Development-Without-Deadlines"&gt;developers.slashdot.org/story/06/09/28/1242257/Good-Agile-mdash-Development-Without-Deadlines&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html"&gt;steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/jurgenappelo/agile-management-authority-delegation"&gt;www.slideshare.net/jurgenappelo/agile-management-authority-delegation&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.noop.nl/2009/10/why-we-delegate-the-darkness-principle.html"&gt;www.noop.nl/2009/10/why-we-delegate-the-darkness-principle.html&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.informit.com/articles/article.aspx?p=1675546&amp;seqNum=6"&gt;www.informit.com/articles/article.aspx?p=1675546&amp;seqNum=6&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.adsdevshop.com/2010/02/09/task-delegation-has-no-place-in-agile/"&gt;blog.adsdevshop.com/2010/02/09/task-delegation-has-no-place-in-agile/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/63100/scrum-process-management-tips-pitfalls-ideas"&gt;stackoverflow.com/questions/63100/scrum-process-management-tips-pitfalls-ideas&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-2162073194091089826?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/wnou7vyWGL8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/2162073194091089826/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=2162073194091089826" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2162073194091089826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2162073194091089826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/wnou7vyWGL8/remove-deadlines-increase-productivity.html" title="Remove deadlines, increase productivity" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/03/remove-deadlines-increase-productivity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFRH4_fip7ImA9Wx9VEEk.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-2071201673987971223</id><published>2011-01-26T10:48:00.004+01:00</published><updated>2011-01-26T13:15:15.046+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-26T13:15:15.046+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="hibernate" /><category scheme="http://www.blogger.com/atom/ns#" term="jetty" /><category scheme="http://www.blogger.com/atom/ns#" term="sqlmaven" /><category scheme="http://www.blogger.com/atom/ns#" term="hsqldb" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Create, populate and reset a dynamic database (HSQLDB,Hibernate,SQLMaven,DbUnit)</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/99dQP7aUVU5QW2YXgx486eEoChM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/99dQP7aUVU5QW2YXgx486eEoChM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/99dQP7aUVU5QW2YXgx486eEoChM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/99dQP7aUVU5QW2YXgx486eEoChM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Thought I'd jot down how I create, populate and reset databases for development and testing. I use this method in my &lt;a href="http://www.java.com/en/"&gt;Java&lt;/a&gt; based pet projects such as &lt;a href="http://code.flurdy.com/grid/snaps/"&gt;Snaps&lt;/a&gt; &lt;sup&gt;&lt;a href="http://grid.flurdy.com/snaps"&gt;[app]&lt;/a&gt;&lt;a href="https://github.com/flurdy/snaps"&gt;[code]&lt;/a&gt;&lt;/sup&gt; and &lt;a href="http://wishlist.sourceforge.net/"&gt;Wishlist&lt;/a&gt; &lt;sup&gt;&lt;a href="http://grid.flurdy.com/wishlist"&gt;[app]&lt;/a&gt;&lt;a href="http://wishlist.hg.sourceforge.net/hgweb/wishlist/"&gt;[code]&lt;/a&gt;&lt;/sup&gt;. I also include this setup as default in my &lt;a href="https://github.com/flurdy/WebAppTemplate"&gt;project template&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My projects are &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; based, using &lt;a href="http://www.eclipse.org/jetty/"&gt;Jetty&lt;/a&gt; as java container through its &lt;a href="http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin"&gt;maven plugin&lt;/a&gt;. In addition I also use &lt;a href="http://www.zeroturnaround.com/jrebel/"&gt;JRebel&lt;/a&gt;, &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt; and &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, a setup I described in &lt;a href="http://flurdy.com/docs/intellij/"&gt;this howto: Ubuntu + IntelliJ + Maven + Jetty + JRebel&lt;/a&gt;, but none of these are required.&lt;br /&gt;&lt;br /&gt;This setup is enables a fluid, &lt;a href="http://brettporter.wordpress.com/2006/01/11/developing-with-jetty-where-have-you-been-all-my-life/"&gt;very dynamic and quick development&lt;/a&gt; process. In addition I then use the in memory database &lt;a href="http://hsqldb.org/"&gt;HSQLDB&lt;/a&gt; for quick and standalone database interaction.&lt;br /&gt;&lt;br /&gt;Using &lt;a href="http://en.wikipedia.org/wiki/Java_Persistence_API"&gt;JPA&lt;/a&gt;/&lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt; with hsqldb, my tables can be created automatically when I start Jetty. However in developement and testing I prefer to have some default data pre populated. &lt;br /&gt;&lt;br /&gt;This is where &lt;a href="http://www.dbunit.org/"&gt;DbUnit&lt;/a&gt; comes in to play. With DBunit's &lt;a href="http://mojo.codehaus.org/dbunit-maven-plugin/"&gt;maven plugin&lt;/a&gt; I can export my current data and populate future databases with the same data. As it is all easy to read XML I can edit manually the basic stub data as well. &lt;br /&gt;&lt;br /&gt;However DbUnit can not create the database as it is run before jetty:run action, so I use the &lt;a href="http://mojo.codehaus.org/sql-maven-plugin/"&gt;SQL-Maven&lt;/a&gt; plugin for this purpose. Again SQL Maven needs to know what tables to create, so I use the &lt;a href="http://mojo.codehaus.org/maven-hibernate3/hibernate3-maven-plugin/"&gt;Maven Hibernate3 Plugin&lt;/a&gt; to export a schema from the JPA annotations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This combination allows me to: &lt;ol&gt;&lt;br /&gt;&lt;li&gt;Check out my project anywhere&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create and populate the database with stub data with one command.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Run the application via jetty&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Test the application straight away&lt;/li&gt;&lt;br /&gt;&lt;li&gt;or develop dynamically with instant feedback&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;How to set up Hibernate, SQLMaven and DbUnit plugins&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Prerequisites/assumptions&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Java&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Maven&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jetty (can be &lt;a href="http://tomcat.apache.org"&gt;tomcat&lt;/a&gt; &lt;a href="http://mojo.codehaus.org/tomcat-maven-plugin/"&gt;maven plugin&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JPA annotations&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HSQLDB (using file based hsqldb persistance to survive restarts)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;JPA annotations -&gt; Schema: Hibernate&lt;/h4&gt;&lt;br /&gt;To export the JPA annotations into a database schema we include the Maven Hibernate3 Plugin in your pom.xml. This is quite a long plugin section as it defines a few dependencies which otherwise may be overriden by the plugin and lead to problems &lt;a href="http://blog.flurdy.com/2010/07/orghibernatemappingexception-could-not.html"&gt;like this mapping exception&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;profile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;hbm-export&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate3-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;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;lt;execution&amp;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;lt;phase&amp;gt;process-classes&amp;lt;/phase&amp;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;lt;goals&amp;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;lt;goal&amp;gt;hbm2ddl&amp;lt;/goal&amp;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;lt;/goals&amp;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;lt;/execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;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;lt;components&amp;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;lt;component&amp;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;lt;name&amp;gt;hbm2ddl&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;implementation&amp;gt;jpaconfiguration&amp;lt;/implementation&amp;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;lt;/component&amp;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;lt;/components&amp;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;lt;componentProperties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;persistenceunit&amp;gt;${project.artifactId}&amp;lt;/persistenceunit&amp;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;lt;outputfilename&amp;gt;schema.ddl&amp;lt;/outputfilename&amp;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;lt;drop&amp;gt;false&amp;lt;/drop&amp;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;lt;create&amp;gt;true&amp;lt;/create&amp;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;lt;export&amp;gt;false&amp;lt;/export&amp;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;lt;format&amp;gt;true&amp;lt;/format&amp;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;lt;/componentProperties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;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;lt;dependency&amp;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;lt;groupId&amp;gt;hsqldb&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hsqldb&amp;lt;/artifactId&amp;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;lt;version&amp;gt;${hsqldb.version}&amp;lt;/version&amp;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;lt;/dependency&amp;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;lt;dependency&amp;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;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-entitymanager&amp;lt;/artifactId&amp;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;lt;version&amp;gt;${hibernate.version}&amp;lt;/version&amp;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;lt;exclusions&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;/exclusions&amp;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;lt;/dependency&amp;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;lt;dependency&amp;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;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;hibernate-core&amp;lt;/artifactId&amp;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;lt;version&amp;gt;${hibernate.version}&amp;lt;/version&amp;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;lt;exclusions&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;/exclusions&amp;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;lt;/dependency&amp;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;lt;dependency&amp;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;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-annotations&amp;lt;/artifactId&amp;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;lt;version&amp;gt;${hibernate.version}&amp;lt;/version&amp;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;lt;exclusions&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;/exclusions&amp;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;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;                        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&amp;lt;/profile&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To run the schema creation action on its own:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn -DskipTests&amp;nbsp;\&lt;br/&gt;&lt;br /&gt; -Dhibernate.dialect=org.hibernate.dialect.HSQLDialect&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    -P hbm-export compile hibernate3:hbm2ddl;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note: We need to compile the JPA classes so that the plugin can extract annotation information from them.&lt;br /&gt;&lt;br /&gt;Note2: that Hibernate/Red Hat have a bad track record of including &lt;a href="http://stackoverflow.com/questions/1230249/how-can-i-use-maven-to-get-the-latest-hibernate-release"&gt;their plugins and releases properly in maven central repository&lt;/a&gt;, so you might either want to adjust your dependeinces and repositories accordingly. Or you can use &lt;a href="http://code.flurdy.com/nexus/"&gt;my proxy repository&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;code-flurdy-repo&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;code@flurdy repository&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://code.flurdy.com/nexus/content/groups/noncentral&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;releases&amp;gt;&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&amp;lt;/releases&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;snapshots&amp;gt;&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&amp;lt;/snapshots&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&amp;lt;pluginRepositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;code-flurdy-repo&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;code@flurdy repository&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://code.flurdy.com/nexus/content/groups/noncentral&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;releases&amp;gt;&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&amp;lt;/releases&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;snapshots&amp;gt;&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&amp;lt;/snapshots&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;&amp;lt;/pluginRepositories&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Please if your project is popular do not use my repo as it will explode my &lt;a href="http://aws.amazon.com"&gt;ec2/S3&lt;/a&gt; data bandwidth usage!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Schema -&gt; Database: SQLMaven&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;To create your database from this schema with SQL-Maven, add this to you pom.xml&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;profile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;sqlmaven&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;sql-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.3&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;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;lt;dependency&amp;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;lt;groupId&amp;gt;hsqldb&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;hsqldb&amp;lt;/artifactId&amp;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;lt;version&amp;gt;${hsqldb.version}&amp;lt;/version&amp;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;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;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;lt;driver&amp;gt;${db.driverClassName}&amp;lt;/driver&amp;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;lt;url&amp;gt;${db.url}&amp;lt;/url&amp;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;lt;username&amp;gt;${db.username}&amp;lt;/username&amp;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;lt;password&amp;gt;${db.password}&amp;lt;/password&amp;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;lt;autocommit&amp;gt;true&amp;lt;/autocommit&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;srcFiles&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;srcFile&amp;gt;target/hibernate3/sql/schema.ddl&amp;lt;/srcFile&amp;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;lt;/srcFiles&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&amp;lt;/profile&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To run the database creation action on its own:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn -DskipTests -P sqlmaven sql:execute;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Database population: DbUnit&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;To populate your database via DbUnit, add this to you pom.xml&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;profile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;dbunit&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;build&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;dbunit-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.0-beta-3&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;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;lt;dependency&amp;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;lt;groupId&amp;gt;hsqldb&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;hsqldb&amp;lt;/artifactId&amp;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;lt;version&amp;gt;${hsqldb.version}&amp;lt;/version&amp;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;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;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;lt;dataTypeFactoryName&amp;gt;org.dbunit.ext.hsqldb.HsqldbDataTypeFactory&amp;lt;/dataTypeFactoryName&amp;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;lt;url&amp;gt;jdbc:hsqldb:file:${project.basedir}/target/db/build;shutdown=true&amp;lt;/url&amp;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;lt;driver&amp;gt;org.hsqldb.jdbcDriver&amp;lt;/driver&amp;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;lt;username&amp;gt;sa&amp;lt;/username&amp;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;lt;password&amp;gt;&amp;lt;/password&amp;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;lt;type&amp;gt;CLEAN_INSERT&amp;lt;/type&amp;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;lt;src&amp;gt;src/test/data/stub.xml&amp;lt;/src&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/build&amp;gt;&lt;br /&gt;&amp;lt;/profile&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;First you need data to export. I suggest you run jetty:run action and add/use the application to create data in the database. Eg.: Register a user, create default domain objects, or whatever your application uses.&lt;br /&gt;&lt;br /&gt;You then stop the application and export the data created:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn -DskipTests -P dbunit dbunit:export;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;These are by default exported to target/dbunit/export.xml.&lt;br /&gt;&lt;br /&gt;These are a good base data. You may try and adjust and extend this file if you like, but be aware that you might brake it, so prehaps try unadjusted initially.&lt;br /&gt;&lt;br /&gt;Copy the export file to test/data so that it can be part of your source control etc. You may have noticed I already included the test/data as a src element in the plugin.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cp target/dbunit/export.xml test/data/stub.xml;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Run the database population action (remember to have a new clean database):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn -DskipTests -P dbunit dbunit:operation;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example configuration of all these plugins can be found in this project's &lt;a href="https://github.com/flurdy/WebAppTemplate/blob/master/pom.xml"&gt;pom.xml&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Combined&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Above are the basic steps. These I then aggregate into a couple of common one liners:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create database&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn -o -DskipTests&amp;nbsp;\&lt;br/&gt;&lt;br /&gt; -Dhibernate.dialect=org.hibernate.dialect.HSQLDialect&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    -P hbm-export,sqlmaven&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    compile hibernate3:hbm2ddl sql:execute;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;b&gt;Create and populate database&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn -o -DskipTests&amp;nbsp;\&lt;br/&gt;&lt;br /&gt; -Dhibernate.dialect=org.hibernate.dialect.HSQLDialect&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    -P hbm-export,sqlmaven,dbunit&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    compile hibernate3:hbm2ddl&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    sql:execute dbunit:operation;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;b&gt;Reset database&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;rm -rf target/db;&lt;br/&gt;&lt;br /&gt;mvn -o -DskipTests&amp;nbsp;\&lt;br/&gt;&lt;br /&gt; -Dhibernate.dialect=org.hibernate.dialect.HSQLDialect&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    -P hbm-export,sqlmaven,dbunit&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    compile hibernate3:hbm2ddl&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    sql:execute dbunit:operation;&lt;/code&gt; &lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;b&gt;Clean, rebuild database and run jetty&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn -o -DskipTests&amp;nbsp;\&lt;br/&gt;&lt;br /&gt; -Dhibernate.dialect=org.hibernate.dialect.HSQLDialect&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    -P hbm-export,sqlmaven,dbunit&amp;nbsp;\&lt;br/&gt;&lt;br /&gt;    clean compile hibernate3:hbm2ddl&amp;nbsp;\&lt;br/&gt;&lt;br /&gt; sql:execute dbunit:operation jetty:run;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As you can see these one liners can be quite long so I again wrap these into bash scripts that I put in a &lt;a href="https://github.com/flurdy/WebAppTemplate/tree/master/bin"&gt;bin folder&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can extend this further to include these plugins as enabled by default and the maven goals as part of your other goals: E.g. include hbm:export and sqlmaven as part of install or test command or dbunit:operation with the jetty:run command, so that they are totally automatic. However I prefer a bit more control of when my data is reset etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Summary&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;With these plugins I can in one command create and populate my database, so that my app is up and running with data very quickly. Hope this is of use to others.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-2071201673987971223?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/oyt75O05v9w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/2071201673987971223/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=2071201673987971223" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2071201673987971223?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2071201673987971223?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/oyt75O05v9w/create-populate-and-reset-dynamic.html" title="Create, populate and reset a dynamic database (HSQLDB,Hibernate,SQLMaven,DbUnit)" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/01/create-populate-and-reset-dynamic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QHRHc9eSp7ImA9Wx9XFE8.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-7750252787558044293</id><published>2011-01-06T20:01:00.004+01:00</published><updated>2011-01-07T19:35:35.961+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-07T19:35:35.961+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="infoq" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="script" /><title>InfoQ Presentation Video Enlarger</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0PUxmQHeX3AOiagLbH5SW_I-PGg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0PUxmQHeX3AOiagLbH5SW_I-PGg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0PUxmQHeX3AOiagLbH5SW_I-PGg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0PUxmQHeX3AOiagLbH5SW_I-PGg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I like &lt;a href="http://www.infoq.com"&gt;Infoq&lt;/a&gt;, and especially their presentations.&lt;br /&gt;&lt;br /&gt;These presentation page has 3 elements: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Top left: One small video showing the person presenting&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Top right: One  small window describing the presentation and presenters&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bottom: One large window showing the actual presentation slide&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This layout works very well, and basically shows you what you need.&lt;br /&gt;&lt;br /&gt;But...&lt;br /&gt;&lt;br /&gt;The window is a bit small (320x240), especially on larger resolutions screens. Especially when the presenter also shows some code, which is usually shown in the video window.&lt;br /&gt;&lt;br /&gt;So I wrote a little &lt;a href="http://www.chromium.org/developers/design-documents/user-scripts"&gt;user script&lt;/a&gt; which enlarges this video window (480x320).&lt;br /&gt;This script is only for the &lt;a href="http://www.google.com/chrome"&gt;Google Chrome browser&lt;/a&gt;. A similar &lt;a href="http://www.mozilla.com"&gt;Firefox&lt;/a&gt; based &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748/"&gt;GreaseMonkey script&lt;/a&gt; should be easy to convert.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;To install click on my&lt;br/&gt; &lt;a href="http://www.ivar.co.uk/cargo/infoq-enlarge-presentation.chrome.user.js"&gt;InfoQ Presentation Video Enlarger user script&lt;/a&gt; available at &lt;br/&gt;&lt;a href="http://www.ivar.co.uk/cargo/infoq-enlarge-presentation.chrome.user.js"&gt;www.ivar.co.uk/cargo/infoq-enlarge-presentation.chrome.user.js&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;You can download and look at the js in a text editor first.It really is a very small and easy to understand script.&lt;br /&gt;&lt;br /&gt;Anyone can contribute changes if desired.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-7750252787558044293?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/p8v4YFmnq7w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/7750252787558044293/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=7750252787558044293" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7750252787558044293?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7750252787558044293?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/p8v4YFmnq7w/infoq-presentation-video-enlarger.html" title="InfoQ Presentation Video Enlarger" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.flurdy.com/2011/01/infoq-presentation-video-enlarger.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04FSHg7cSp7ImA9Wx5UFU0.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-5425043300411990787</id><published>2010-10-19T19:23:00.005+02:00</published><updated>2010-10-19T19:38:39.609+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-19T19:38:39.609+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="picasa" /><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="flickr" /><category scheme="http://www.blogger.com/atom/ns#" term="spring" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>Accessing Picasa's atom feed API from Spring's REST and XPath templates</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3JIf92a6_FNeVMJQ7dkwrsJUgjw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3JIf92a6_FNeVMJQ7dkwrsJUgjw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3JIf92a6_FNeVMJQ7dkwrsJUgjw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3JIf92a6_FNeVMJQ7dkwrsJUgjw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Been swearing at my screen and Google's choice of atom based API for their &lt;a href="http://picasaweb.google.com"&gt;Picasa web albums&lt;/a&gt;. &lt;a href="http://www.flickr.com/"&gt;Flickr's&lt;/a&gt; &lt;a href="http://www.flickr.com/services/api/"&gt;REST API&lt;/a&gt; took 10 seconds to work out. Picasa: days...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My problem:&lt;br /&gt; &lt;br /&gt;Trying to parse album ids from &lt;a href="http://code.google.com/apis/picasaweb/docs/2.0/developers_guide_protocol.html#ListAlbum"&gt;Picasa's API&lt;/a&gt;: &lt;a href="http://code.google.com/apis/picasaweb/docs/2.0/developers_guide_protocol.html#ListAlbum"&gt;code.google.com/apis/picasaweb/docs/2.0/developers_guide_protocol.html#ListAlbum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Source picasaResponse = restTemplate.getForObject( albumsURL, Source.class, parameters );&lt;br/&gt;&lt;br /&gt;Jaxp13XPathTemplate xpathTemplate = new Jaxp13XPathTemplate();&lt;br/&gt;&lt;br /&gt;Collection albumIds = xpathTemplate.evaluate("//entry",&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;picasaResponse, new NodeMapper(){&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Object mapNode(Node node, int i) throws DOMException {&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Element album = (Element) node;&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.debug("IN NODE ALBUM");&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;br /&gt;}&lt;br/&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This never worked. It should have I thought. Trying different combinations of "/entry", "/feed/entry", "//atom:entry", "/atom:feed/atom:entry", swapping with Jaxen, etc made no impact.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then after some googlebashing and soulsearching I solved the problem.&lt;br /&gt;&lt;br /&gt;The Xpath template needs a namespace to resolve the atom xml. So adding this solved the problem:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Source picasaResponse = restTemplate.getForObject( albumsURL, Source.class, parameters );&lt;br/&gt;&lt;br /&gt;Jaxp13XPathTemplate xpathTemplate = new Jaxp13XPathTemplate();&lt;br/&gt;&lt;br /&gt;Properties namespaces = new Properties();&lt;br/&gt;&lt;br /&gt;namespaces.setProperty("atom",&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;"http://www.w3.org/2005/Atom");&lt;br/&gt;&lt;br /&gt;xpathTemplate.setNamespaces(namespaces);&lt;br/&gt;&lt;br /&gt;Collection albumIds = xpathTemplate.evaluate("//atom:entry",&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;picasaResponse, new NodeMapper(){&lt;br/&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Object mapNode(Node node, int i) throws DOMException {&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Element album = (Element) node;&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.debug("IN NODE ALBUM");&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Ps. code simplified and not using bean injection etc for clarity.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-5425043300411990787?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/k0R2TDd9lm0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/5425043300411990787/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=5425043300411990787" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/5425043300411990787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/5425043300411990787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/k0R2TDd9lm0/accessing-picasas-atom-feed-api-from.html" title="Accessing Picasa's atom feed API from Spring's REST and XPath templates" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/10/accessing-picasas-atom-feed-api-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMHRnw4fyp7ImA9Wx5UEU4.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-6762134039677608507</id><published>2010-10-15T10:25:00.006+02:00</published><updated>2010-10-15T10:47:17.237+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-15T10:47:17.237+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="irc" /><category scheme="http://www.blogger.com/atom/ns#" term="enterprise" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="im" /><category scheme="http://www.blogger.com/atom/ns#" term="communication" /><category scheme="http://www.blogger.com/atom/ns#" term="wave" /><title>Why IRC is essential for distributed teams</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l94nV08VTiPdw0lsfYvRwL8ZOWY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l94nV08VTiPdw0lsfYvRwL8ZOWY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l94nV08VTiPdw0lsfYvRwL8ZOWY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l94nV08VTiPdw0lsfYvRwL8ZOWY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Realising more every day that IRC is essential for distributed teams.&lt;br /&gt;&lt;br /&gt;IMs (&lt;a href="http://messenger.msn.com"&gt;MSN&lt;/a&gt;,  &lt;a href="http://talk.google.com"&gt;Google Talk&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Lync_Server"&gt;Communicator&lt;/a&gt;, etc), &lt;a href="http://www.skype.com"&gt;Skype&lt;/a&gt; &amp; &lt;a href="http://office.microsoft.com/en-us/live-meeting/"&gt;Live Meeting&lt;/a&gt; works well but is too sheltered, it is invitational only and time constrained.&lt;br /&gt;&lt;br /&gt;Email is recorded, too formal, noisy and too asynchronous/slow.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.yammer.com"&gt;Yammer&lt;/a&gt; or &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; is nice for distributing comments and discussions, but is too slow for actual problem solving.&lt;br /&gt;&lt;br /&gt;To keep teams up to date or solve problems together; a group chat is essential. &lt;br /&gt;&lt;br /&gt;For culture build and low barrier of interaction of an informal and not archived discussions; a group chat is essential. &lt;br /&gt;&lt;br /&gt;For &lt;a href="http://www.c2.com/cgi/wiki?RubberDucking"&gt;rubber duck&lt;/a&gt; statements or help in minor but blocking issues that would be less likely to ask people directly; a group chat is helpful. &lt;br /&gt;&lt;br /&gt;For less direct interruptions than IMs or phone; a group chat message which people can respond to when suitable will improve productivity. &lt;br /&gt;&lt;br /&gt;Even for non distributed teams, IRC is an important productivity and culture tool. &lt;a href="http://agiletracksoftware.com/blog.html?id=7"&gt;Continuous inconsiderate interruptions&lt;/a&gt; will kill productivity, while quick but asynchronous discussions smooth over the time requirements of the person asking and the person responding.&lt;br /&gt;&lt;br /&gt;Unfortunately IRC is just too ugly, too much unix/hacker impression, too old; for an enterprise / self important company to consider.&lt;br /&gt;&lt;br /&gt;Alternatives like the now discontinued &lt;a href="http://wave.google.com"&gt;Google Wave&lt;/a&gt;, &lt;a href="http://37signals.com"&gt;37signals's&lt;/a&gt; &lt;a href="http://campfirenow.com"&gt;CampFire&lt;/a&gt; and others exist, but an internal IRC server does solve all these issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-6762134039677608507?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/YgxEN0KlEsw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/6762134039677608507/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=6762134039677608507" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/6762134039677608507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/6762134039677608507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/YgxEN0KlEsw/why-irc-is-essential-for-distributed.html" title="Why IRC is essential for distributed teams" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/10/why-irc-is-essential-for-distributed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYERHs7fSp7ImA9Wx5WEEg.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-977570179135495391</id><published>2010-09-21T09:48:00.003+02:00</published><updated>2010-09-21T10:18:25.505+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-21T10:18:25.505+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rant" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>People's kids on profile photos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k6bYgE7oyShbOv8u2HBle1Mnvb4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k6bYgE7oyShbOv8u2HBle1Mnvb4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k6bYgE7oyShbOv8u2HBle1Mnvb4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k6bYgE7oyShbOv8u2HBle1Mnvb4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mbFRkAi58dE/TJhm7p33mLI/AAAAAAAAl6w/BTiour5HdWo/s1600/my_footbal.jpg"&gt;&lt;img style="clear: right; float: right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 60px; height: 60px; border: inset 2px silver;" src="http://4.bp.blogspot.com/_mbFRkAi58dE/TJhm7p33mLI/AAAAAAAAl6w/BTiour5HdWo/s320/my_footbal.jpg" border="0" alt="my football" id="BLOGGER_PHOTO_ID_5519274518381041842" /&gt;&lt;/a&gt; Think Ill replace my photo with my football. It is very dear to me, so it must represent me.&lt;br /&gt;&lt;br /&gt;Will you first try to work out if you recognise the ball? Would you even care who the ball is, or just skip the post as you don't know who it is at a glance. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mbFRkAi58dE/TJhnGoKj01I/AAAAAAAAl64/pNLVpSSIE0k/s1600/me_football.jpg"&gt;&lt;img style="clear: right; float: right; margin:0 0 10px 10px; cursor:pointer; cursor:hand;width: 100px; height: 60px; border: inset 2px silver;" src="http://4.bp.blogspot.com/_mbFRkAi58dE/TJhnGoKj01I/AAAAAAAAl64/pNLVpSSIE0k/s320/me_football.jpg" border="0" alt="me and football" id="BLOGGER_PHOTO_ID_5519274706901128018" /&gt;&lt;/a&gt; What about a photo of me and the ball? Do you first try and work out whether I am the ball or me? Why is the ball relevant to tell you who I am, have you met my ball?&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mbFRkAi58dE/TJhpEvBjLmI/AAAAAAAAl7A/Lcfw4we55L8/s1600/football_team.jpg"&gt;&lt;img style="clear: right; float: right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 100px; height: 60px; border: inset 2px silver;" src="http://4.bp.blogspot.com/_mbFRkAi58dE/TJhpEvBjLmI/AAAAAAAAl7A/Lcfw4we55L8/s320/football_team.jpg" border="0" alt="football team" id="BLOGGER_PHOTO_ID_5519276873405902434" /&gt;&lt;/a&gt; What about a zoomed our photo of my whole football team, they are my "family". Would anyone recognise who I am? Without zooming fullscreen?&lt;br /&gt;&lt;br /&gt;Off course I know Ill change my profile photo to my eventual offsprings as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-977570179135495391?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/06VZNBFbhcc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/977570179135495391/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=977570179135495391" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/977570179135495391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/977570179135495391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/06VZNBFbhcc/peoples-kids-on-profile-photos.html" title="People's kids on profile photos" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_mbFRkAi58dE/TJhm7p33mLI/AAAAAAAAl6w/BTiour5HdWo/s72-c/my_footbal.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/09/peoples-kids-on-profile-photos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMNR3gzeyp7ImA9Wx5QGEs.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-4903119390460729875</id><published>2010-09-07T14:48:00.003+02:00</published><updated>2010-09-07T15:01:36.683+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-07T15:01:36.683+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy" /><category scheme="http://www.blogger.com/atom/ns#" term="book" /><title>Review of Groovy for Domain-Specific Languages</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UAX6ne9B9uD8IeodLKOTTiG2Q94/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UAX6ne9B9uD8IeodLKOTTiG2Q94/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UAX6ne9B9uD8IeodLKOTTiG2Q94/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UAX6ne9B9uD8IeodLKOTTiG2Q94/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I recently read the &lt;a href="https://www.packtpub.com/groovy-for-domain-specific-languages-dsl/book"&gt;Groovy for Domain-Specific-Languages&lt;/a&gt; book by Fergal Dearle. The book essentially covers what &lt;a href="http://groovy.codehaus.org"&gt;Groovy&lt;/a&gt; is, what &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;DSL&lt;/a&gt; is and how to apply Groovy to incorporate a DSL for your applications.&lt;br /&gt;&lt;br /&gt;After reading the book I have to agree that if you intend to create a DSL, which we basically do unintentionally all the time, then Groovy can fulfil these requirements with ease and simplicity.&lt;br /&gt;&lt;br /&gt;The book is a easy to read book with clear text, syntax and examples without being too thick and not seem a like a javadoc of information overload. It is rather quick to read through due to the nice flow. The layout do make it a nice reference for myself in the future as it is laid out clearly and contains a large variety of working examples. &lt;br /&gt;&lt;br /&gt;The book starts of with first explaining the concepts of what DSL is, what it means in terms of computer science history and how we already use them. &lt;br /&gt;&lt;br /&gt;It then goes on to explain in clear but complete detail what Groovy is and does. Actually these chapters are a good introduction to Groovy book in themselves. &lt;br /&gt;&lt;br /&gt;Dearle then procedes to explain the main technologies built on top or as part of Groovy such as the web framework: Grails, the Groovy Ant builder scripting tool: Gant, Groovy &amp; Grails ORM database mapper: Gorm, BDD frameworks and similar technologies. This it does in enough detail so that you have a good idea what they do and can experiment with yourself afterwards.&lt;br /&gt;&lt;br /&gt;The last half of the book Dearle then brings Groovy and the related technologies back into the DSL fold and explains why and how Groovy is excellent for DSL writing. E.g: Groovy’s dynamic nature, closures, or the multitude of “Builders” which basically are DSLs outright. &lt;br /&gt;&lt;br /&gt;These chapters of the book has a large set of basically Cook Book examples of Groovy DSL writing, builders and finishes with how to integrate Groovy with Spring, XML, Ant and existing Java applications.&lt;br /&gt;&lt;br /&gt;I was already aware of Groovy’s suitability as a DSL language, but I am now even more convinced of its power, ease and fit as a or rather the DSL. If you would like to have a peak at the book there is a &lt;a href="https://www.packtpub.com/sites/default/files/6903-chapter-7-building-a-builder.pdf"&gt;free chapter&lt;/a&gt;, or why not buy the book? ( &lt;a href="http://www.amazon.co.uk/gp/product/184719690X?ie=UTF8&amp;tag=ivarssite-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=184719690X"&gt;amazon.co.uk&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/184719690X?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=184719690X"&gt;amazon.com&lt;/a&gt;, &lt;a href="https://www.packtpub.com/groovy-for-domain-specific-languages-dsl/book"&gt;Packt&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;(Note: this book was also &lt;a href="http://books.slashdot.org/story/10/07/08/152236/Groovy-For-Domain-Specific-Languages?art_pos=3"&gt;reviewed on slashdot&lt;/a&gt; this summer)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-4903119390460729875?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/uKm7CQ31kY0" height="1" width="1"/&gt;</content><link rel="related" href="https://www.packtpub.com/groovy-for-domain-specific-languages-dsl/book" title="Review of Groovy for Domain-Specific Languages" /><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/4903119390460729875/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=4903119390460729875" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/4903119390460729875?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/4903119390460729875?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/uKm7CQ31kY0/review-of-groovy-for-domain-specific.html" title="Review of Groovy for Domain-Specific Languages" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/09/review-of-groovy-for-domain-specific.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8FSHY9eyp7ImA9WhRXE0w.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-2989659740006828648</id><published>2010-08-26T18:32:00.006+02:00</published><updated>2011-12-19T17:06:59.863+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-19T17:06:59.863+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="productiviy" /><category scheme="http://www.blogger.com/atom/ns#" term="open-plan" /><title>What more important than Productivity?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ufNXdQJRQqT95460wcOrVWJzVoA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ufNXdQJRQqT95460wcOrVWJzVoA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ufNXdQJRQqT95460wcOrVWJzVoA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ufNXdQJRQqT95460wcOrVWJzVoA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;With modern day communications and old, the proliferation of open plan offices and persistence of micro management I wonder if companies really prioritise productivity enough. (This may be the same issue across business segments and professions, however I only really know IT.)&lt;br /&gt;&lt;br /&gt;Jason Fried of &lt;a href="http://www.37signals.com"&gt;37Signals&lt;/a&gt; recently was &lt;a href="http://bigthink.com/ideas/18522"&gt;interviewed about the never ending interruptions at work&lt;/a&gt; and how it results in longer working hours, more stress and generally lower productivity. He describes (among other things) the old fashion top-down management style's instance of continuously calling meetings to get status or decisions or walking up to you or calling to get status or feedback. With co workers doing the same as well as calling you over to solve an ad hoc problem the time to actually concentrate and get any of your own work done is almost impossible until the end of the day, and results in longer days.&lt;br /&gt;&lt;br /&gt;The same issues I encounter all the time. Useless meetings where I only need to be conscious for 5% of the time. Using tools such as MS Live Meeting from my own desk means I can do other things during the meeting, however also the disconnected nature results in often me not quite following what others are saying and either miss opportunities for vital input I might have or context when I need to respond. It is frustrating that the closer you come to a deadline the more meetings are called for status and less work you can do.... Not very agile.&lt;br /&gt;&lt;br /&gt;The meetings however I can deal with, it is the noise and interruptions of open plan office and with micro management that I think affects productivity the most. I did &lt;a href="http://blog.flurdy.com/2009/08/islands-and-lagoones-office-open-plan.html"&gt;previously blog of my distaste and issues with open plan offices, and suggested solution for layout, the lagoon&lt;/a&gt;. Open plan in general is not compatible with developers due to its nature if "increased" communication. Open plan lowers the barrier to interrupt others which may solve your specific problem quicker however it delays not just the person you interrupted but also people nearby that was affected by your "noise". That delay and noise is very expensive for developers whom need to concentrate. But unfortunately the people that plan and evaluate the benefits of open plan offices are management, admin or finance for whom communication is paramount and the need to concentrate very short, so the lost productivity is ignored.&lt;br /&gt;&lt;br /&gt;Jason described how the solved some of their interruption problems by using their own products, &lt;a href="http://campfirenow.com"&gt;Campfire&lt;/a&gt;, which in general is a visual IRC and IM. This way people can ask for help or discuss subjects asynchronously and limits interruptions as people can respond when they have finished their &lt;a href="http://itmanagement.earthweb.com/features/article.php/3816216/Wheres-Your-Coding-Happy-Place.htm"&gt;concentration period&lt;/a&gt;. Sure, their individual problem is not solved immediately, but work across teams are optimised. Business critical emergencies should probably still be shouted out about though.&lt;br /&gt;&lt;br /&gt;I certainly believe in the use of IM and would love more use of IRC and similar tools at work. I don't like the copy all emails, I detest people calling me for non urgent issues, and &lt;a href="http://en.wikipedia.org/wiki/Bill_Lumbergh"&gt;find people walking up to me&lt;/a&gt; a nuisance when it is the same people over and over again.  I try to restrict phoning people for issues that are non critical to the company, as I know how inefficient it is of their time and would be annoyed if anyone did the same to me. However often management and other "communication" roles insist on this type of communication of status. ( But then again the people you need to call for status are often not good with communicating their status. E.g. not updating issue status in tools, or simple email that the issue is worked on or even email response of status when quiet for too long. )&lt;br /&gt;&lt;br /&gt;All this disturbance usually results in that I can only really do "proper" development late afternoon. So I usually work 3-4 hours later than colleagues if I have tasks I need to finish as they can not all be done during office hours due to all the interruptions. The lost productivity across the company will vary but all this interruptions due to open plan offices and communication procedures must cost companies a lot of money!&lt;br /&gt;&lt;br /&gt;In this time of agile projects, the agile teams usually get to decide their tools to more agile and productive. Projects still stuck with non agile often get told what tools to use. And both agile and non-agile get told what office space to use, irrespective of productivity.&lt;br /&gt;&lt;br /&gt;Communication is important, however should not be at the cost of productivity. Agile thinking (KanBan) of focusing on few tasks is important, but always interrupting everyone else to solve your problem is not productive. Using tools to asynchronously communicate with people relevant people, limiting noise by using rooms of fewer / team related / similar people, encourage voluntary quick coffee breaks / rubber duck sessions, applying the pomodoro technique, can mitigate and solve this productivity issue, while still keep up a high level of communication.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-2989659740006828648?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/THFLT4iEp9s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/2989659740006828648/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=2989659740006828648" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2989659740006828648?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/2989659740006828648?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/THFLT4iEp9s/what-more-important-than-productivity.html" title="What more important than Productivity?" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/08/what-more-important-than-productivity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYCQ3c-fip7ImA9WxFaGEQ.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-7559410409556540379</id><published>2010-07-23T15:06:00.006+02:00</published><updated>2010-07-23T15:52:42.956+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-23T15:52:42.956+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mvc" /><category scheme="http://www.blogger.com/atom/ns#" term="spring" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>Spring MVC ExceptionHandler needs to be in same class</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LOrmj20htJSgW0iSAgQUYou64To/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOrmj20htJSgW0iSAgQUYou64To/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LOrmj20htJSgW0iSAgQUYou64To/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOrmj20htJSgW0iSAgQUYou64To/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Had a frustrating evening (&lt;a href="http://code.flurdy.com/grid/snaps"&gt;pet project&lt;/a&gt;) trying to get &lt;a href="http://www.springsource.org"&gt;Spring&lt;/a&gt; 3.0 MVC's annotation based  &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/ExceptionHandler.html"&gt;exception handler&lt;/a&gt; to work.&lt;br /&gt;&lt;br /&gt;All the examples seemed straight forwards:&lt;br /&gt;&lt;br /&gt;Just annotate a method in a controller:&lt;br /&gt;&lt;code&gt;import org.springframe...ExceptionHandler;&lt;br /&gt;import org.springframe...ModelAndView;&lt;br /&gt;import org.springframe...Controller;&lt;br /&gt;....&lt;br /&gt;@Controller&lt;br /&gt;public class MyController {&lt;br /&gt;....&lt;br /&gt;@ExceptionHandler(SomeException.class)&lt;br /&gt;public ModelAndView myExceptionHandler(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SomeException exception){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;blah&lt;/i&gt;&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But it just would never catch my exceptions. Very frustrating.&lt;br /&gt;&lt;br /&gt;But in the end a google search to the end of the world where someone mentioned in the comments that the exceptionhandler method &lt;b&gt;have to be&lt;/b&gt; be in the &lt;b&gt;same class&lt;/b&gt; as the method throwing the exception.&lt;br /&gt;&lt;br /&gt;Very odd restriction compared to Spring's usual very agile and generic annotation.&lt;br /&gt;&lt;br /&gt;So I added my handlers to my abstract controller class that all my controllers extend and problem solved, with some hair still intact.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-7559410409556540379?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/5daHyER6VfA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/7559410409556540379/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=7559410409556540379" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7559410409556540379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7559410409556540379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/5daHyER6VfA/spring-mvc-exceptionhandler-needs-to-be.html" title="Spring MVC ExceptionHandler needs to be in same class" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/07/spring-mvc-exceptionhandler-needs-to-be.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIESX0zeSp7ImA9WxFaF00.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-6428540463726441830</id><published>2010-07-21T00:11:00.011+02:00</published><updated>2010-07-21T10:21:48.381+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-21T10:21:48.381+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hibernate" /><category scheme="http://www.blogger.com/atom/ns#" term="jpa" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>org.hibernate.MappingException: Could not determine type for Set / List</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9TLHZksemv8RnfSt_OEo187H2FE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9TLHZksemv8RnfSt_OEo187H2FE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9TLHZksemv8RnfSt_OEo187H2FE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9TLHZksemv8RnfSt_OEo187H2FE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I was simplifying the &lt;a href=" http://github.com/flurdy/snaps/blob/master/src/main/java/com/flurdy/grid/snaps/domain/SecurityDetail.java"&gt;domain model&lt;/a&gt; of a &lt;a href="http://github.com/flurdy/snaps"&gt;pet project&lt;/a&gt; by removing an unneccesarry entity by using JPA 2.0's &lt;a href="http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection"&gt;ElementCollection annotation&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public class SecurityDetail {&lt;br /&gt;&lt;br /&gt;public enum AuthorityRole{&lt;br /&gt;&amp;nbsp;&amp;nbsp;ROLE_ADMIN,&lt;br /&gt;&amp;nbsp;&amp;nbsp;ROLE_SUPER,&lt;br /&gt;&amp;nbsp;&amp;nbsp;ROLE_USER&lt;br /&gt;}&lt;br /&gt;....&lt;br /&gt;@ElementCollection&lt;br /&gt;@CollectionTable(&lt;br /&gt;&amp;nbsp;&amp;nbsp;name="Authority",&lt;br /&gt;&amp;nbsp;&amp;nbsp;joinColumns=@JoinColumn(name="username")&lt;br /&gt;)&lt;br /&gt;private Set&lt;String&gt; authorities;&lt;br /&gt;....&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;However I was getting this error message: &lt;br /&gt;&lt;code&gt;org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: SecurityDetail, for columns: [org.hibernate.mapping.Column(authorities)]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Digging around (googling) I ended up on this blog entry: &lt;a href="http://blog.m1key.me/2010/06/orghibernatemappingexception-could-not.html"&gt;blog.m1key.me/2010/06/orghibernatemappingexception-could-not.html&lt;/a&gt;, which main solution is to make sure you have a newer hibernate, version 3.5.3 or later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I use maven, with the hibernate3-maven-plugin, sql-maven-plugin and dbunit-maven-plugin to create the schema, database and to populate data. So I bumped the org.hibernate:hibernate-entitymanager dependency from 3.5.0 to 3.5.3-Final. (and fixed &lt;a href="http://code.flurdy.com/nexus"&gt;my own nexus repository&lt;/a&gt; to pull JBoss's latest jars.)&lt;br /&gt;&lt;br /&gt;However it did not fix the problem. But by reading the comments of the blog entry above I also realised that my hibernate3-maven-plugin may be using older dependencies. So I explicitly added the recent verions of org.hibernate:hibernate-core dependency to both the plugin and the app, as well as org.hibernate:hibernate-entitymanager to the plugin as well:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;properties&amp;gt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;hibernate.version&amp;gt;3.5.3-Final&amp;lt;/hibernate.version&amp;gt&lt;br /&gt;&amp;lt;/properties&amp;gt&lt;br /&gt;....&lt;br /&gt;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-entitymanager&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;${hibernate.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;${hibernate.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;....&lt;br /&gt;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate3-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;process-classes&amp;lt;/phase&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;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;lt;goal&amp;gt;hbm2ddl&amp;lt;/goal&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;components&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;component&amp;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;lt;name&amp;gt;hbm2ddl&amp;lt;/name&amp;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;lt;implementation&amp;gt;jpaconfiguration&amp;lt;/implementation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/component&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/components&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;componentProperties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;persistenceunit&amp;gt;${project.artifactId}&amp;lt;/persistenceunit&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;outputfilename&amp;gt;schema.ddl&amp;lt;/outputfilename&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;drop&amp;gt;false&amp;lt;/drop&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;create&amp;gt;true&amp;lt;/create&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;export&amp;gt;false&amp;lt;/export&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;format&amp;gt;true&amp;lt;/format&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/componentProperties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;hsqldb&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hsqldb&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;${hsqldb.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-entitymanager&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;${hibernate.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusions&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;hibernate-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;${hibernate.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;exclusions&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;cglib&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;cglib&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;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;lt;exclusion&amp;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;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;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;lt;/exclusion&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/exclusions&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/dependencies&amp;gt;                        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;lt;/plugins&amp;gt&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-6428540463726441830?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/U4XOZ9TrNiY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/6428540463726441830/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=6428540463726441830" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/6428540463726441830?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/6428540463726441830?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/U4XOZ9TrNiY/orghibernatemappingexception-could-not.html" title="org.hibernate.MappingException: Could not determine type for Set / List" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/07/orghibernatemappingexception-could-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAGQng8eyp7ImA9Wx5QGEs.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-3613710093579129592</id><published>2010-07-16T12:58:00.004+02:00</published><updated>2010-09-07T14:48:43.673+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-07T14:48:43.673+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy" /><category scheme="http://www.blogger.com/atom/ns#" term="book" /><title>Groovy for DSL</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2sIIHq6Xe6Mp9MZ2RTBleEmCgRg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2sIIHq6Xe6Mp9MZ2RTBleEmCgRg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2sIIHq6Xe6Mp9MZ2RTBleEmCgRg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2sIIHq6Xe6Mp9MZ2RTBleEmCgRg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Started reading through &lt;a href="https://www.packtpub.com/groovy-for-domain-specific-languages-dsl/book"&gt;Groovy for Domain Specific Languages&lt;/a&gt;, a new book by Fergal Dearle. As I interested in how to apply &lt;a href="http://groovy.codehaus.org"&gt;Groovy&lt;/a&gt; in more enterprise applications I would have normally liked to read this book, however I was also asked to write a review of the book, so Id better read it! How to keep DSLs easy to read while easy to create and maintain with Groovy will be something I hope this book covers.&lt;br /&gt;&lt;br /&gt;The book was also &lt;a href="http://books.slashdot.org/story/10/07/08/152236/Groovy-For-Domain-Specific-Languages?art_pos=3"&gt;reviewed on slashdot&lt;/a&gt; recently.&lt;br /&gt;&lt;br /&gt;You can read the &lt;a href="https://www.packtpub.com/sites/default/files/6903-chapter-7-building-a-builder.pdf"&gt;free chapter&lt;/a&gt; or buy the book yourself at e.g. &lt;a href="http://www.amazon.co.uk/gp/product/184719690X?ie=UTF8&amp;tag=ivarssite-21&amp;linkCode=as2&amp;camp=1634&amp;creative=19450&amp;creativeASIN=184719690X"&gt;amazon.co.uk&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/184719690X?ie=UTF8&amp;tag=flurdy-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=184719690X"&gt;amazon.com&lt;/a&gt; or &lt;a href="https://www.packtpub.com/groovy-for-domain-specific-languages-dsl/book"&gt;Packt&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Any comments of others interested in Groovy, especially in the &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;DSL&lt;/a&gt; area are very welcome?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-3613710093579129592?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/5FYMoKTxOA0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/3613710093579129592/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=3613710093579129592" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/3613710093579129592?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/3613710093579129592?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/5FYMoKTxOA0/groovy-for-dsl.html" title="Groovy for DSL" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/07/groovy-for-dsl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYDRH45cCp7ImA9WxFbEEo.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-7889270122972316781</id><published>2010-07-02T10:53:00.004+02:00</published><updated>2010-07-02T14:02:55.028+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-02T14:02:55.028+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="war" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Skinny WAR Assembly in maven</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9LJZjZDipcQq55jJgJCD8R2e9PA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9LJZjZDipcQq55jJgJCD8R2e9PA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9LJZjZDipcQq55jJgJCD8R2e9PA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9LJZjZDipcQq55jJgJCD8R2e9PA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;If you want to create a &lt;i&gt;"Skinny WAR"&lt;/i&gt; so that you can package it as part of an EAR or as in my case as part of an assembly later, then you can do this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-war-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.1-beta-1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;lt;packagingExcludes&amp;gt;WEB-INF/lib/*.jar&amp;lt;/packagingExcludes&amp;gt;      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;lt;archive&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &amp;lt;manifest&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       &amp;lt;addClasspath&amp;gt;true&amp;lt;/addClasspath&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       &amp;lt;classpathPrefix&amp;gt;lib/&amp;lt;/classpathPrefix&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &amp;lt;/manifest&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;lt;/archive&amp;gt;      &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/configuration&amp;gt;&lt;br /&gt;  &amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you then later in another pom.xml want to include this war and the excluded libraries:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;  &amp;lt;groupId&amp;gt;${project.groupId}&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;&lt;i&gt;you war module name&lt;/i&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;${project.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;  &amp;lt;type&amp;gt;war&amp;lt;/type&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt; &lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;  &amp;lt;groupId&amp;gt;${project.groupId}&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;&lt;i&gt;you war module name&lt;/i&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;${project.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;  &amp;lt;type&amp;gt;pom&amp;lt;/type&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-7889270122972316781?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/UjcFosbBz1A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/7889270122972316781/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=7889270122972316781" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7889270122972316781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/7889270122972316781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/UjcFosbBz1A/skinny-war-assembly-in-maven.html" title="Skinny WAR Assembly in maven" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/07/skinny-war-assembly-in-maven.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QHRXk5cCp7ImA9WxFbEEo.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-9169428197738027249</id><published>2010-07-02T10:52:00.007+02:00</published><updated>2010-07-02T13:48:54.728+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-02T13:48:54.728+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="jetty" /><category scheme="http://www.blogger.com/atom/ns#" term="jsp" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>Maven Jetty and Tomcat dependencies with JSP / JSTL errors</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GdL23x-KrqPDjYLmeIMmAwtyeVA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GdL23x-KrqPDjYLmeIMmAwtyeVA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GdL23x-KrqPDjYLmeIMmAwtyeVA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GdL23x-KrqPDjYLmeIMmAwtyeVA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I use &lt;a href="http://eclipse.org/jetty"&gt;Jetty&lt;/a&gt; as a &lt;a href="http://maven.apache.org"&gt;Maven&lt;/a&gt; &lt;a href="http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin"&gt;plugin&lt;/a&gt; during development, but tend to run &lt;a href="http://tomcat.apache.org"&gt;Tomcat&lt;/a&gt; as my deployment server. (Not sure "production" is appropiate as it's my personal server). &lt;a href="http://code.flurdy.com"&gt;My applications&lt;/a&gt; are often java MVC based utilising some form of JSP. &lt;br /&gt;&lt;br /&gt;This combination creates a slight issue with dependencies for JSP and JSTL. If you have ever seen this error when running &lt;code&gt;mvn jetty:run&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;java.lang.ClassNotFoundException: org.apache.el.ExpressionFactoryImpl&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Or these errors when running in tomcat when it was okay in jetty:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;javax.servlet.jsp.JspApplicationContext&lt;br /&gt;.getExpressionFactory()Ljavax/el/ExpressionFactory&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;code&gt;org.apache.jasper.JasperException: Unable to read TLD "META-INF/c.tld" from JAR file&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;code&gt;java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/el/ExpressionFactory"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Over the last few years I have perservered and solved this flat wheel in different ways. However in my recent deja-vue I now have a tidy solution. (the project where this is visable is my &lt;a href="http://code.flurdy.com"&gt;up4 project&lt;/a&gt;. &lt;i&gt;&lt;a href="http://github.com/flurdy/up4"&gt;github source&lt;/a&gt;, &lt;a href="http://up4.flurdy.com"&gt;demo&lt;/a&gt;&lt;/i&gt;)&lt;br /&gt;&lt;br /&gt;I am utilising the &lt;a href="http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin"&gt;jetty maven plugin&lt;/a&gt;, and the &lt;a href="http://mojo.codehaus.org/tomcat-maven-plugin/"&gt;tomcat maven plugin&lt;/a&gt; to show how this works.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;   &amp;lt;plugin&amp;gt;&lt;br /&gt;   &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jetty-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;7.0.2.v20100331&amp;lt;/version&amp;gt;&lt;br /&gt;   &amp;lt;/plugin&amp;gt;&lt;br /&gt;   &amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;    &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;    &amp;lt;artifactId&amp;gt;tomcat-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/code&gt;   &lt;br /&gt;&lt;br /&gt;To utilise JSP pages and JSTL EL with e.g. Spring MVC / Struts Tiles you perhaps expect these types of maven dependencies, remembering that most containers include support for Servelet API and JSPs:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;servlet-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet.jsp&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jsp-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jstl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you then try &lt;code&gt; mvn clean jetty:run &lt;/code&gt; you may end up with a:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;java.lang.ClassNotFoundException: org.apache.el.ExpressionFactoryImpl&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;A response which will solve the jetty problem is to include some jstl EL dependencies:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;servlet-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet.jsp&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jsp-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jstl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jasper-el&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.0.26&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; mvn jetty:run &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This should now work fine in Jetty (test in browser as well).&lt;br /&gt;&lt;br /&gt;Now try the application in tomcat: &lt;code&gt; mvn clean tomcat:run &lt;/code&gt;. It will moan about unable to read some the JSTL taglibs:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;org.apache.jasper.JasperException: Unable to read TLD "META-INF/c.tld" from JAR file&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This due to the &lt;i&gt;compile&lt;/i&gt; scope of the &lt;i&gt;jsp-api&lt;/i&gt; dependency, changing this to &lt;i&gt;provided&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;servlet-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet.jsp&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jsp-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jstl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jasper-el&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.0.26&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Test first in &lt;code&gt; mvn jetty:run &lt;/code&gt;, which should be okay. &lt;br /&gt;&lt;br /&gt;Then in &lt;code&gt; mvn clean tomcat:run &lt;/code&gt;. It starts ok, but on the first browser test this error appears:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;javax.servlet.jsp.JspApplicationContext&lt;br /&gt;.getExpressionFactory()Ljavax/el/ExpressionFactory&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Okay, so Tomcat does not like JSTL EL dependencies as it provides them itself, so my initial respone was to have a separate profile which changed the scope of the dependency to provided for tomcat builds only. However on further reflection it turns out the spec says JSP &amp; EL should be provided by the container. So in fact the problem lays with Jetty, and it turns out the move to eclipse.org created a licensing issue with JSP, so jetty does not include the appropiate libs. So to fix this the correct dependencies will have to be:&lt;br /&gt;&lt;br /&gt;In your plugins section:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jetty-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;7.0.2.v20100331&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &amp;lt;artifactId&amp;gt;jsp-2.1-glassfish&amp;lt;/artifactId&amp;gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &amp;lt;version&amp;gt;9.1.1.B60.25.p2&amp;lt;/version&amp;gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;el-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.0.26&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jasper-el&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.0.26&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/dependencies&amp;gt;&lt;br /&gt;  &amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And in your normal dependencies section:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;servlet-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.5&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet.jsp&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jsp-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jstl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;el-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.0.26&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jasper-el&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.0.26&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; mvn jetty:run &lt;/code&gt; &amp;amp; &lt;code&gt; mvn tomcat:run &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Voila. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ps. If you are providing a WAR for another jetty container, you may want to create a profile section which include the provided dependencies.&lt;br /&gt;&lt;br /&gt;Ps2. If you prefer Sun's EL libs then replace the org.apache.tomcat dependencies with: &lt;br /&gt;&lt;code&gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.el&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;el-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.glassfish.web&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;el-impl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-9169428197738027249?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/-ltjZ_SJaZQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/9169428197738027249/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=9169428197738027249" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/9169428197738027249?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/9169428197738027249?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/-ltjZ_SJaZQ/jetty-tomcat-jsp.html" title="Maven Jetty and Tomcat dependencies with JSP / JSTL errors" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/07/jetty-tomcat-jsp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIDQnc8eyp7ImA9WxFUFEU.&quot;"><id>tag:blogger.com,1999:blog-4019909.post-5797165902072882723</id><published>2010-06-25T17:48:00.005+02:00</published><updated>2010-06-25T18:16:13.973+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-25T18:16:13.973+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="football" /><category scheme="http://www.blogger.com/atom/ns#" term="injustice" /><category scheme="http://www.blogger.com/atom/ns#" term="algeria" /><category scheme="http://www.blogger.com/atom/ns#" term="world cup" /><title>Ignorant or prejudiced Media?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RIXBY3Y-ZulW20-jcWyX_o0SpRY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RIXBY3Y-ZulW20-jcWyX_o0SpRY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RIXBY3Y-ZulW20-jcWyX_o0SpRY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RIXBY3Y-ZulW20-jcWyX_o0SpRY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Right at the end of the USA v Algeria match, the Algerian captain Antar Yahia was sent off for a second bookable offence. But it was a classic case of mistaken identity by the Belgian referee Frank de Bleeckere. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=lwVHgQFtoio"&gt;In the replays&lt;/a&gt; you can see it is 2 or 3 others that is shouting at the referee, one which looks similar to Yahia but you can see by his name it is a different player. The referee turns around and walks away as he has decided they have overstepped the mark. &lt;br /&gt;&lt;br /&gt;Yahia then arrives and does what a captain should and pulls his players away. He is then the only player left when the referee turns back around this time with his yellow card and shows it to Yahia by mistake. This was his 2nd card and he was sent off. &lt;br /&gt;&lt;br /&gt;Yahia is baffled but walks straight off the pitch to his credit. (This is not to say Yahia perhaps deserved another yellow card earlier in the match even red)&lt;br /&gt;&lt;br /&gt;As this was in 90+ m, in injury time, it did not really affect the result nor did Algeria have any chance of progression, but it affects Algeria's reputation as again they have had a player sent off instead of a simple yellow card.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is remarkable is that this has barely been mentioned in the media afterwards. Any Google searches only reveals match reports and comments again about Algeria failing to control their tempers. Yahia is stated as deserving his 2nd card due to abuse of the referee. &lt;a href="http://www.livesoccertv.com/news/1092/2010-world-cup-usa-1-0-algeria-report/"&gt;[1]&lt;/a&gt; &lt;a href="http://my.telegraph.co.uk/football/worldcupalgeria/739/blunt-algeria-exit-under-cloud-of-controversy/"&gt;[2]&lt;/a&gt; &lt;a href="http://www.guardian.co.uk/football/2010/jun/23/usa-algeria-world-cup-match-report"&gt;[3]&lt;/a&gt; Had this been England, US, Italy etc the referee would be ridiculed in the papers, but Algeria.. no mention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4019909-5797165902072882723?l=blog.flurdy.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IvarsRambling/~4/C9jgKxzwRe8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.flurdy.com/feeds/5797165902072882723/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4019909&amp;postID=5797165902072882723" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/5797165902072882723?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4019909/posts/default/5797165902072882723?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IvarsRambling/~3/C9jgKxzwRe8/ignorant-or-prejudiced-media.html" title="Ignorant or prejudiced Media?" /><author><name>flurdy</name><uri>http://www.blogger.com/profile/16135415323137308735</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://1.bp.blogspot.com/_mbFRkAi58dE/S-rE8vGeWSI/AAAAAAAAg3M/o3-K7hJeRWo/S220/ivarSlipsSmall.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.flurdy.com/2010/06/ignorant-or-prejudiced-media.html</feedburner:origLink></entry></feed>

