<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Cup of Java]]></title>
  <link href="http://cupofjava.de/atom.xml" rel="self"/>
  <link href="http://cupofjava.de/"/>
  <updated>2013-10-24T17:00:12+02:00</updated>
  <id>http://cupofjava.de/</id>
  <author>
    <name><![CDATA[Felix Müller]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[EuroClojure 2013]]></title>
    <link href="http://cupofjava.de/blog/2013/10/24/euroclojure-2013/"/>
    <updated>2013-10-24T13:20:00+02:00</updated>
    <id>http://cupofjava.de/blog/2013/10/24/euroclojure-2013</id>
    <content type="html"><![CDATA[<p>Last week I attended the EuroClojure conference, which is the yearly meeting of the Clojure community. As a Clojure beginner I was interested in getting a glimps of what is all the buzz about this language currently receives. So, just let me share my impressions and thoughts with you.<!-- more --></p>

<h3>First day</h3>

<p>This conference started with a meta-talk (well, obviously a keynote) about systems and complexity by Zach Tellman. He shared quite interesting ideas with us. The keynote was finished with some recommendations for further readings:</p>

<div class='embed tweet'><blockquote class="twitter-tweet"><p><a href="https://twitter.com/search?q=%23euroclojure&amp;src=hash">#euroclojure</a> <a href="https://twitter.com/ztellman">@ztellman</a>&#39;s reading list for those who missed it. <a href="http://t.co/WHNDYgd69L">pic.twitter.com/WHNDYgd69L</a></p>&mdash; Bodil Stokke (@bodil) <a href="https://twitter.com/bodil/statuses/389655080041213953">October 14, 2013</a></blockquote>
<script async src="http://cupofjava.de//platform.twitter.com/widgets.js" charset="utf-8"></script></div>


<p>Two talks about side projects followed. One of them was quite funny: <a href="https://twitter.com/bodil">Bodil Stokke</a> talked about building your own Lisp. Her Lisp is called Bodol. You can find the pon… eh, slides <a href="http://bodil.org/building-lisp">here</a>. After this <a href="https://twitter.com/ordnungswprog">Philip Meier</a> talked about <a href="http://clojure-liberator.github.io/liberator/">liberator</a>, a promising library for building RESTful APIs in Clojure. Then <a href="https://twitter.com/josephwilk">Joseph Wilk</a> took us on the journey to creative machines. He raised the question, if machines can be creative. And he delivered his answer: <a href="https://github.com/josephwilk/musical-creativity">musical creativity</a>. In this project he gives the machine a set of tones and an association network. With this setup new music is created based on a probabilistic approach. Underneath the awesome Clojure library <a href="https://github.com/overtone/overtone/">Overtone</a> is used. It&#8217;s on my list to play around with it. It should be on yours, too.</p>

<p>Then the highlight of this day was presented: an ARDrone that is controlled by a LeapMotion pad. It is like a self made Kinect for ARDrones. The code and workspace setup was also quite nice. Here is a live-recording of the demo:</p>

<div class="embed-video-container"><iframe src="http://player.vimeo.com/video/76887566 "></iframe></div>


<p>The day was finished by a talk about code smells in Clojure. An interesting topic because the typical smells of object-orientated languages are not applicable to a Lisp derivate. You can find a detailed summary of this talk <a href="http://teropa.info/blog/2013/10/14/euroclojure-2013-common-clojure-smells.html">here</a>.</p>

<h3>Second day</h3>

<p>The last day I had a blast. I could attend the best keynote in my life so far, given by <a href="https://twitter.com/stuarthalloway">Stuart Halloway</a>. It was a sarcastic keynote about narcissistic design: what you can do to keep your job forever. How you can make yourself irreplaceable. It&#8217;s pity that this talk wasn&#8217;t recorded. But I found a recording of this talk from another conference (it&#8217;s not as good as on the EuroClojure but better than nothing):</p>

<div class="embed-video-container"><iframe src="http://player.vimeo.com/video/77199361 "></iframe></div>


<p>Again, I recommend to read the detailed notes <a href="http://teropa.info/blog/2013/10/15/euroclojure-2013-narcissistic-design.html">here</a> by <a href="https://twitter.com/teropa">Tero Parviainen</a>. And here are two quotes from the keynote:</p>

<div class='embed tweet'><blockquote class="twitter-tweet"><p>OH: it’s obviously bad practice because it’s written in PHP <a href="https://twitter.com/search?q=%23euroclojure&amp;src=hash">#euroclojure</a></p>&mdash; Moritz Grauel (@mo_gr) <a href="https://twitter.com/mo_gr/statuses/390010067275497472">October 15, 2013</a></blockquote>
<script async src="http://cupofjava.de//platform.twitter.com/widgets.js" charset="utf-8"></script></div>


<div class='embed tweet'><blockquote class="twitter-tweet"><p><a href="https://twitter.com/search?q=%23euroclojure&amp;src=hash">#euroclojure</a> clean code pro tip <a href="http://t.co/v0acHYjQV1">pic.twitter.com/v0acHYjQV1</a></p>&mdash; Thomas Moerman (@thomasjmoerman) <a href="https://twitter.com/thomasjmoerman/statuses/390020671667183616">October 15, 2013</a></blockquote>
<script async src="http://cupofjava.de//platform.twitter.com/widgets.js" charset="utf-8"></script></div>


<p>Two migration talks followed. One was about the Daily Mail. They are probably serving the longest website on this planet (8,5 meters long when printed on paper). Their old system is described on this slide:</p>

<div class='embed tweet'><blockquote class="twitter-tweet"><p>The mail online legacy code <a href="https://twitter.com/search?q=%23euroclojure&amp;src=hash">#euroclojure</a> <a href="http://t.co/fS21CpNj6x">pic.twitter.com/fS21CpNj6x</a></p>&mdash; Jan Ehrhardt (@derjan) <a href="https://twitter.com/derjan/statuses/390042689573752832">October 15, 2013</a></blockquote>
<script async src="http://cupofjava.de//platform.twitter.com/widgets.js" charset="utf-8"></script></div>


<p>So, they rewrote the whole system in Clojure. Now the codebase is only 13k lines big. Quite impressive!</p>

<p><a href="https://twitter.com/samaaron">Sam Aaron</a> followed with his talk about <a href="https://twitter.com/meta_ex">Meta-eX</a>: the first live coding band on earth. He showed us how he makes music with Clojure. Here is a recording of his live demo:</p>

<div class='embed tweet'><blockquote class="twitter-tweet"><p>Live performance by <a href="https://twitter.com/samaaron">@samaaron</a> &amp; <a href="https://twitter.com/meta_ex">@meta_ex</a> at <a href="https://twitter.com/search?q=%23EuroClojure&amp;src=hash">#EuroClojure</a>  <a href="https://t.co/83aXEmtIFf">https://t.co/83aXEmtIFf</a> Beautiful &amp; inspiring, create your own <a href="https://twitter.com/overtone">@Overtone</a> band</p>&mdash; Joseph Wilk (@josephwilk) <a href="https://twitter.com/josephwilk/statuses/390134405752434689">October 15, 2013</a></blockquote>
<script async src="http://cupofjava.de//platform.twitter.com/widgets.js" charset="utf-8"></script></div>


<p>Afterwards two talks about enterprise integration were given. The libraries <a href="https://github.com/ztellman/lamina">Lamina</a>, <a href="https://github.com/clojurewerkz/eep">EEP</a> and <a href="http://storm-project.net">Storm</a> were shown.</p>

<h3>Impressions</h3>

<p>The crowd at the EuroClojure conference consisted of hard Lisp&#8217;ers, Clojurians who came from languages like Ruby and Java to Clojure and me: a Clojure beginner with Scala background.</p>

<p>An interesting observation (for an apple fanboy): less macbooks as on other conferences. More interesting for you: emacs seems to be the editor of choice for most Clojure developers - instead of IDEs like Eclipse or IntelliJ.</p>

<p>When you would ask me, what could characterize the Clojure community I would answer: diversity and pragmatism. The combination is quite interesting. They don&#8217;t want to live in an academic world. They want to solve real-world problems. And it seems they have an  expressive and concise language to accomplish this.</p>

<h3>Summary</h3>

<p>Was it worth it? Definitely yes! It were two great days with lots of different subjects, from nerdvana to enterprise. Beside interesting libraries such as liberator, I saw lots of cool projects.</p>

<p>The first day felt like being on <a href="http://en.wikipedia.org/wiki/Chaos_Communication_Congress">Chaos Communication Congress</a> but without being afraid someone hacks your smartphone or macbook. After this the second day broadened my view on the Clojure community and also showed more real-world usages.</p>

<p>I will continue my travel into the deep rabbit hole called Clojure and its ecosystem, for sure.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MongoDB Berlin 2013]]></title>
    <link href="http://cupofjava.de/blog/2013/02/27/mongodb-berlin-2013/"/>
    <updated>2013-02-27T09:09:00+01:00</updated>
    <id>http://cupofjava.de/blog/2013/02/27/mongodb-berlin-2013</id>
    <content type="html"><![CDATA[<p>Yesterday I attended the <a href="http://www.10gen.com/events/mongodb-berlin-2013">MongoDB Berlin</a> conference which is a one day conference by 10gen to offer a space for collaboration and exchange around MongoDB. I want to sum up some (hopefully) interesting points for you. <!-- more --></p>

<ul>
<li>be aware of pre-allocation done by MongoDB</li>
<li>memory fragmentation is important to keep an eye on when dealing with updates on collections</li>
<li>predict how your schema (although you have none in Mongo but your data still have some kind of structure) may change in future and how this will affect your sizing requirements</li>
<li>collection.drop() can be significantly faster than removing a document from one collection (drop also reduces memory fragmentation because then you typically create a new collection from scratch)</li>
<li>put different collections on different drives to scale write operations</li>
<li>put the journal on an extra drive</li>
<li>one index per query: you need to use compound indices if you need indices for several fields in a query</li>
<li>try covered indices for performance improvements on queries you are doing quite often</li>
<li>monitor with mongostat and mongotop</li>
<li>when using mongostat interesting columns for inspect correct sizing, index setup and configuration are faults, locked, idx miss, qr, qw, ar, aw</li>
<li>also nice web frontends for monitoring: <a href="http://www.serverdensity.com">Server Density</a>, the <a href="http://www.10gen.com/products/mongodb-monitoring-service">MongoDB Monitoring Service</a> (free) and of course you can use tools like Nagios, Graphite or Ganglia</li>
<li>have a look at the aggregation framework of MongoDB, looks quite promising</li>
<li><a href="http://www.springsource.org/spring-data/mongodb">Spring Data</a> is the way to go for using MongoDB with Java due <a href="https://code.google.com/p/morphia">Morphia</a> seems to be dead (or not much interaction in community) and <a href="http://www.hibernate.org/subprojects/ogm.html">Hibernate OGM</a> is not worth to be mentioned at all</li>
</ul>


<p>I can only recommend anyone of you who is interested in NoSql stores to try MongoDB. On <a href="http://education.10gen.com">education.10gen.com</a> you can also sign up for several free online trainings.</p>

<p>Stay tuned.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Integration Tests with Maven and Tomcat]]></title>
    <link href="http://cupofjava.de/blog/2013/02/05/integration-tests-with-maven-and-tomcat/"/>
    <updated>2013-02-05T17:44:00+01:00</updated>
    <id>http://cupofjava.de/blog/2013/02/05/integration-tests-with-maven-and-tomcat</id>
    <content type="html"><![CDATA[<p>Last weeks I had to deal with implementing several rest apis. Some with Play 2, some with Spring MVC. Due only Play supports build-in mechanism for integration tests I had to integrate support for them in every project where I used Spring MVC. Those are typically Maven builds. Maven does not support separate integration tests with a running Tomcat (or any other webcontainer) by default. Hence you have to get your hands dirty.<!-- more --></p>

<p>The goal is to execute all JUnit tests that are suffixed with <code>IntegrationTest</code>, start a Tomcat before (I want to test a deployed rest api) and afterwards shutdown the running Tomcat.</p>

<p>For that you have to exclude all integration tests in the normal test phase of Maven.</p>

<figure class='code'><figcaption><span>First, disable all integration tests during normale test phase</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'><span class="nt">&lt;plugin&gt;</span>
</span><span class='line'>  <span class="nt">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="nt">&lt;/groupId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;artifactId&gt;</span>maven-surefire-plugin<span class="nt">&lt;/artifactId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;version&gt;</span>2.12.1<span class="nt">&lt;/version&gt;</span>
</span><span class='line'>  <span class="nt">&lt;configuration&gt;</span>
</span><span class='line'>    <span class="nt">&lt;excludes&gt;</span>
</span><span class='line'>      <span class="nt">&lt;exclude&gt;</span>**/*IntegrationTest*<span class="nt">&lt;/exclude&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/excludes&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/configuration&gt;</span>
</span><span class='line'><span class="nt">&lt;/plugin&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Now you should add all integration tests to the Maven Failsafe Plugin and activate the execution of the plugin in your build.</p>

<figure class='code'><figcaption><span>Configure the Failsafe Plugin appropriately</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'><span class="nt">&lt;plugin&gt;</span>
</span><span class='line'>  <span class="nt">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="nt">&lt;/groupId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;artifactId&gt;</span>maven-failsafe-plugin<span class="nt">&lt;/artifactId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;version&gt;</span>2.12.4<span class="nt">&lt;/version&gt;</span>
</span><span class='line'>  <span class="nt">&lt;configuration&gt;</span>
</span><span class='line'>    <span class="nt">&lt;includes&gt;</span>
</span><span class='line'>      <span class="nt">&lt;include&gt;</span>**/*IntegrationTest*<span class="nt">&lt;/include&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/includes&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/configuration&gt;</span>
</span><span class='line'>  <span class="nt">&lt;executions&gt;</span>
</span><span class='line'>    <span class="nt">&lt;execution&gt;</span>
</span><span class='line'>      <span class="nt">&lt;goals&gt;</span>
</span><span class='line'>        <span class="nt">&lt;goal&gt;</span>integration-test<span class="nt">&lt;/goal&gt;</span>
</span><span class='line'>        <span class="nt">&lt;goal&gt;</span>verify<span class="nt">&lt;/goal&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/goals&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/execution&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/executions&gt;</span>
</span><span class='line'><span class="nt">&lt;/plugin&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>After this the only missing step is a working Tomcat integration in your build. In this example I&#8217;m using the Tomcat 7 Maven Plugin for this (the Tomcat 6 plugin should also work). With the <code>start</code> and <code>stop</code> goals you can control a Tomcat instance. Important is that you fork the process, otherwise your build would be blocked by the running Tomcat. You can do similiar things with the Jetty Maven Plugin.</p>

<figure class='code'><figcaption><span>Start Tomcat before all integration tests and stop it afterwards</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'><span class="nt">&lt;plugin&gt;</span>
</span><span class='line'>  <span class="nt">&lt;groupId&gt;</span>org.apache.tomcat.maven<span class="nt">&lt;/groupId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;artifactId&gt;</span>tomcat7-maven-plugin<span class="nt">&lt;/artifactId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;version&gt;</span>2.0<span class="nt">&lt;/version&gt;</span>
</span><span class='line'>  <span class="nt">&lt;configuration&gt;</span>
</span><span class='line'>    <span class="nt">&lt;path&gt;</span>/<span class="nt">&lt;/path&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/configuration&gt;</span>
</span><span class='line'>  <span class="nt">&lt;executions&gt;</span>
</span><span class='line'>    <span class="nt">&lt;execution&gt;</span>
</span><span class='line'>      <span class="nt">&lt;id&gt;</span>start-tomcat<span class="nt">&lt;/id&gt;</span>
</span><span class='line'>      <span class="nt">&lt;phase&gt;</span>pre-integration-test<span class="nt">&lt;/phase&gt;</span>
</span><span class='line'>      <span class="nt">&lt;goals&gt;</span>
</span><span class='line'>        <span class="nt">&lt;goal&gt;</span>run<span class="nt">&lt;/goal&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/goals&gt;</span>
</span><span class='line'>      <span class="nt">&lt;configuration&gt;</span>
</span><span class='line'>        <span class="nt">&lt;fork&gt;</span>true<span class="nt">&lt;/fork&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/configuration&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/execution&gt;</span>
</span><span class='line'>    <span class="nt">&lt;execution&gt;</span>
</span><span class='line'>      <span class="nt">&lt;id&gt;</span>stop-tomcat<span class="nt">&lt;/id&gt;</span>
</span><span class='line'>      <span class="nt">&lt;phase&gt;</span>post-integration-test<span class="nt">&lt;/phase&gt;</span>
</span><span class='line'>      <span class="nt">&lt;goals&gt;</span>
</span><span class='line'>        <span class="nt">&lt;goal&gt;</span>shutdown<span class="nt">&lt;/goal&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/goals&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/execution&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/executions&gt;</span>
</span><span class='line'><span class="nt">&lt;/plugin&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>With this little setup you get full support for integration tests with Maven and Tomcat in your web applications, especially if you building rest apis. I hope that this Maven snippet helps you to improve your builds.</p>

<p><strong>Update [11.02.2013]</strong> Changed suffix of include and exclude configurations. Thanks to a hint by Erich Eichinger in the comment section.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Talented and highly skilled developers needed]]></title>
    <link href="http://cupofjava.de/blog/2013/02/03/talented-and-highly-skilled-developers-needed/"/>
    <updated>2013-02-03T13:22:00+01:00</updated>
    <id>http://cupofjava.de/blog/2013/02/03/talented-and-highly-skilled-developers-needed</id>
    <content type="html"><![CDATA[<p>Highly skilled developers want to work with other highly skilled and smart developers. That&#8217;s what I can tell so far. You are really running into serious problems if you are loosing all the highly skilled ones which rock your projects and initiate changes to improve the way work is done in your organization. Maybe I am too harsh and unfair but I think you need highly skilled developers and talents to be able to adapt to new technologies and markets.<!-- more --></p>

<p>If you cannot hold your best ones you are facing many other problems:</p>

<ul>
<li>hiring other great developers becomes more difficult because the more smart one developer is the more he wants to work with other even smarter developers to learn, to improve himself and last but not least to have fun at work</li>
<li>to improve your technical staff by techniques like pair programming and code reviews becomes more difficult due the smart developers are away</li>
<li>your internal code quality may decrease or you may become slower at delivering valuable software</li>
<li>if your code quality decreases, it makes it even less attractive for smart developers to join your company (none of them want to deal with a shitty codebase although everyone of them may read &#8220;Working Effectively with Legacy Code&#8221; by Michael Feathers)</li>
</ul>


<p>On the other hand we are actually facing a shift from &#8220;one developer hero rescues the world/project&#8221; to &#8220;we develop a strong team, where super-programmers are not needed anymore&#8221;. Yeah, that&#8217;s the theory and it sounds great. But medicore developers do not learn new technologies, methods, frameworks and programming languages in there spare time. It&#8217;s not their passion. And that is OK. I think that great developers make the difference between &#8220;just another IT company&#8221; and &#8220;company that leads the change in IT&#8221;.</p>

<p>So, I think you need those great and smart developers if you want to adapt to new technologies and markets.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fight dependency hell in Maven]]></title>
    <link href="http://cupofjava.de/blog/2013/02/01/fight-dependency-hell-in-maven/"/>
    <updated>2013-02-01T18:29:00+01:00</updated>
    <id>http://cupofjava.de/blog/2013/02/01/fight-dependency-hell-in-maven</id>
    <content type="html"><![CDATA[<p>Did you ever use Maven in one of your projects? First you probably were amazed by the way you can declare dependencies and use all the nice plugins. Then you may realized that the handling of transitive dependencies is solved… well, let me say it could be better. But there is another Maven plugin that helps you to clean your dependencies and also to ensure that transitive dependencies will never cause to rot your dependency definitions again. <!-- more --></p>

<p>As mentioned in this <a href="http://www.jasonwhaley.com/blog/2012/03/21/dependency-convergence-in-maven/">blog posting</a>, the <a href="http://maven.apache.org/enforcer/maven-enforcer-plugin/index.html">Enforcer Maven Plugin</a> helps. It offers a dependency convergence rule that checks the following:</p>

<blockquote><p>If a project has two dependencies, A and B, both depending on the same artifact, C, this rule will fail the build if A depends on a different version of C then the version of C depended on by B.</p></blockquote>


<p>That is exactly what I want in all of my projects managed by Maven! Therefore, I add the enforcer plugin to the pom file and enable the <code>DependencyConvergence</code> rule. I find it useful when the enforcer plugin is executed during the validate phase. This causes the build to break before compiling if the dependencies do not converge. Then you have to exclude the unwanted transitive dependencies or change the versions. Very handy!</p>

<figure class='code'><figcaption><span>Enable dependency convergence check in your Maven build</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class='xml'><span class='line'><span class="nt">&lt;plugin&gt;</span>
</span><span class='line'>  <span class="nt">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="nt">&lt;/groupId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;artifactId&gt;</span>maven-enforcer-plugin<span class="nt">&lt;/artifactId&gt;</span>
</span><span class='line'>  <span class="nt">&lt;version&gt;</span>1.0.1<span class="nt">&lt;/version&gt;</span>
</span><span class='line'>  <span class="nt">&lt;configuration&gt;</span>
</span><span class='line'>    <span class="nt">&lt;rules&gt;</span>
</span><span class='line'>      <span class="nt">&lt;DependencyConvergence/&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/rules&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/configuration&gt;</span>
</span><span class='line'>  <span class="nt">&lt;executions&gt;</span>
</span><span class='line'>    <span class="nt">&lt;execution&gt;</span>
</span><span class='line'>      <span class="nt">&lt;id&gt;</span>enforce<span class="nt">&lt;/id&gt;</span>
</span><span class='line'>      <span class="nt">&lt;goals&gt;</span>
</span><span class='line'>        <span class="nt">&lt;goal&gt;</span>enforce<span class="nt">&lt;/goal&gt;</span>
</span><span class='line'>      <span class="nt">&lt;/goals&gt;</span>
</span><span class='line'>      <span class="nt">&lt;phase&gt;</span>validate<span class="nt">&lt;/phase&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/execution&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/executions&gt;</span>
</span><span class='line'><span class="nt">&lt;/plugin&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Just try this in one of your projects. You will be quite surprised what for a mess your actual dependency definitions are.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[My (little late) Personal Tech Retroperspective of 2012]]></title>
    <link href="http://cupofjava.de/blog/2013/01/27/my-little-late-personal-tech-retroperspective-of-2012/"/>
    <updated>2013-01-27T19:25:00+01:00</updated>
    <id>http://cupofjava.de/blog/2013/01/27/my-little-late-personal-tech-retroperspective-of-2012</id>
    <content type="html"><![CDATA[<p>With this post I start a new series in this blog: At every beginning of a new year I wanna do a retroperspective (motivated by Agile…) of the technical stuff in my life that happens during the last year. Mostly about the stuff I learned. So, here it goes and I hope it does not annoy you too much.<!--more--></p>

<h3>Achievements</h3>

<ul>
<li>gained a lot experience in working in teams and how to manage critical situations</li>
<li>improved knowledge about continuous delivery</li>
<li>improved skills in TDD, BDD, ATDD</li>
<li>gained more experience in managing code quality</li>
<li>improved skills in scripting builds</li>
<li>improved usage of <a href="http://www.sonarsource.org">Sonar</a></li>
<li>held many talks on conferences and events about testing, Sonar and Scala</li>
<li>finally started this blog :-)</li>
</ul>


<h3>Technologies</h3>

<ul>
<li>Play Framework 1 &amp; 2 (Java, Scala)</li>
<li>RabbitMQ, only for a spike but I enjoyed it a lot</li>
<li>Elasticsearch, bad documentation but nevertheless a great technology</li>
<li>MongoDB, the classic NoSql store</li>
<li>Redis</li>
<li>Spring MVC mostly for building REST apis</li>
<li>JavaScript, oh geez a lot of JavaScript</li>
<li>AngularJS, only a bit</li>
<li>PhoneGap, the I/O related part for iOS</li>
<li>Vagrant for setting up dev VMs</li>
<li>Chef, only changing some configuration in existing scripts</li>
<li>Ruby for web development</li>
<li>Sinatra for a tiny web project, great framework</li>
</ul>


<h3>Events</h3>

<ul>
<li>visited many Java Usergroup Berlin events</li>
<li>attended some conferences: BedCon, gearconf, Java Forum Stuttgart</li>
<li>organized tech talks at my current employer, <a href="http://adesso.de">adesso AG</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fast and reliable integration tests with Play 2]]></title>
    <link href="http://cupofjava.de/blog/2012/12/21/fast-and-reliable-integration-tests-with-play-2/"/>
    <updated>2012-12-21T11:49:00+01:00</updated>
    <id>http://cupofjava.de/blog/2012/12/21/fast-and-reliable-integration-tests-with-play-2</id>
    <content type="html"><![CDATA[<p>When you start using the Play Framework 2 you will notice that there are a bunch of test helpers and entry points to set up your tests. That&#8217;s great! One might thinks that&#8217;s too good to be true. And in fact, when using the <code>FakeApplication</code> test helper you can run into subtle problems which cause unreliable tests. <!-- more --></p>

<p>In the <a href="http://www.playframework.org/documentation/2.0/JavaTest">Play Framework documentation</a> they show you that it is quite easy to set up a test with a <code>FakeApplication</code> by the following code snippet:</p>

<figure class='code'><figcaption><span>Example of FakeApplication usage in Play Framework documentation</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="nd">@Test</span>
</span><span class='line'><span class="kd">public</span> <span class="kt">void</span> <span class="nf">findById</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>  <span class="n">running</span><span class="o">(</span><span class="n">fakeApplication</span><span class="o">(),</span> <span class="k">new</span> <span class="n">Runnable</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">run</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>      <span class="n">Computer</span> <span class="n">macintosh</span> <span class="o">=</span> <span class="n">Computer</span><span class="o">.</span><span class="na">find</span><span class="o">.</span><span class="na">byId</span><span class="o">(</span><span class="mi">21</span><span class="n">l</span><span class="o">);</span>
</span><span class='line'>      <span class="n">assertThat</span><span class="o">(</span><span class="n">macintosh</span><span class="o">.</span><span class="na">name</span><span class="o">).</span><span class="na">isEqualTo</span><span class="o">(</span><span class="s">&quot;Macintosh&quot;</span><span class="o">);</span>
</span><span class='line'>      <span class="n">assertThat</span><span class="o">(</span><span class="n">formatted</span><span class="o">(</span><span class="n">macintosh</span><span class="o">.</span><span class="na">introduced</span><span class="o">)).</span><span class="na">isEqualTo</span><span class="o">(</span><span class="s">&quot;1984-01-24&quot;</span><span class="o">);</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>  <span class="o">});</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>So, you might think when you have many test methods you just copy this pattern and everything is fine. But that is not the case!</p>

<figure class='code'><figcaption><span>Pattern of FakeApplication per test method</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="nd">@Test</span>
</span><span class='line'><span class="kd">public</span> <span class="kt">void</span> <span class="nf">testOne</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>  <span class="n">running</span><span class="o">(</span><span class="n">fakeApplication</span><span class="o">(),</span> <span class="k">new</span> <span class="n">Runnable</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">run</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>      <span class="c1">// test logic</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>  <span class="o">});</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="nd">@Test</span>
</span><span class='line'><span class="kd">public</span> <span class="kt">void</span> <span class="nf">testTwo</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>  <span class="n">running</span><span class="o">(</span><span class="n">fakeApplication</span><span class="o">(),</span> <span class="k">new</span> <span class="n">Runnable</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">run</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>      <span class="c1">// test logic</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>  <span class="o">});</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Here are two examples that <code>FakeApplication</code> can be difficult to use:</p>

<ul>
<li><a href="https://groups.google.com/forum/#!searchin/play-framework/fakeApplication/play-framework/zcpdOL61xXQ/5cUH-HKf1okJ">(Play-Scala 2.0.4) FakeApplication onStop not being called after Test</a></li>
<li><a href="https://groups.google.com/forum/#!msg/play-framework/0Ld889ARC8o/mYcrMeX2dsYJ">[play 2.0.3] Two fakeApplication tests only one will succeed but the other throws error 500</a></li>
</ul>


<p>I ran into the same problems that are mentioned in the first mailinglist posting. In the <a href="http://cupofjava.de/blog/2012/11/09/integration-tests-with-mongodb-and-play-framework-2/">project where I&#8217;m using MongoDB together with Play 2</a> the tests with a <code>FakeApplication</code> started to become unreliable. There were issues with cleaning up test data after and before each test method. Also the shutdown and restart of a <code>FakeApplication</code> was sometimes error prone.</p>

<p>The best solution for this problems is to start one <code>FakeApplication</code> per test class, not per test method. Here is the test helper class that I use for this:</p>

<figure class='code'><figcaption><span>One FakeApplication per test class</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kn">import</span> <span class="nn">org.junit.AfterClass</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">org.junit.Before</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">org.junit.BeforeClass</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">play.test.FakeApplication</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'><span class="kn">import</span> <span class="nn">static</span> <span class="n">play</span><span class="o">.</span><span class="na">test</span><span class="o">.</span><span class="na">Helpers</span><span class="o">.*;</span>
</span><span class='line'>
</span><span class='line'><span class="kd">public</span> <span class="kd">abstract</span> <span class="kd">class</span> <span class="nc">AbstractOneFakeApplicationIntegrationTest</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="kd">static</span> <span class="n">FakeApplication</span> <span class="n">fakeApplication</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@BeforeClass</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">startFakeApplication</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="n">fakeApplication</span> <span class="o">=</span> <span class="n">fakeApplication</span><span class="o">();</span>
</span><span class='line'>        <span class="n">start</span><span class="o">(</span><span class="n">fakeApplication</span><span class="o">);</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@AfterClass</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">shutdownFakeApplication</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="n">stop</span><span class="o">(</span><span class="n">fakeApplication</span><span class="o">);</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>You only need to inherit from it and every test has access to a running <code>FakeApplication</code>. One disadvantage is that you have more work to clean up any data that is written for your tests into databases, filesystem or any other persistent system. But you get <strong>reliable integration tests</strong> and the tests are <strong>much faster</strong> because you only start one <code>FakeApplication</code> per class and not dozens of them as in the per method approach</p>

<p>Beside this little issues that <code>FakeApplication</code> can cause Play 2 offers great testing support.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Embedded Elasticsearch Server for Tests]]></title>
    <link href="http://cupofjava.de/blog/2012/11/27/embedded-elasticsearch-server-for-tests/"/>
    <updated>2012-11-27T12:31:00+01:00</updated>
    <id>http://cupofjava.de/blog/2012/11/27/embedded-elasticsearch-server-for-tests</id>
    <content type="html"><![CDATA[<p>When developing with elasticsearch one of the first problems is how to get tests in place that use a fast server instance. It should be easily embeddable in your tests and reliable. <!-- more --></p>

<p>Therefore, you have to take care of two things: disable the http module because you do not want to have network communication in your tests and configure a writable data directory. You could also use elasticsearch with full in-memory mode but this is not as stable as you may think. Just let Lucene write on disk in a temporary directory.</p>

<figure class='code'><figcaption><span>Example of an embedded elasticsearch server</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">EmbeddedElasticsearchServer</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">DEFAULT_DATA_DIRECTORY</span> <span class="o">=</span> <span class="s">&quot;target/elasticsearch-data&quot;</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="kd">final</span> <span class="n">Node</span> <span class="n">node</span><span class="o">;</span>
</span><span class='line'>    <span class="kd">private</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">dataDirectory</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="nf">EmbeddedElasticsearchServer</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">this</span><span class="o">(</span><span class="n">DEFAULT_DATA_DIRECTORY</span><span class="o">);</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="nf">EmbeddedElasticsearchServer</span><span class="o">(</span><span class="n">String</span> <span class="n">dataDirectory</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">this</span><span class="o">.</span><span class="na">dataDirectory</span> <span class="o">=</span> <span class="n">dataDirectory</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">ImmutableSettings</span><span class="o">.</span><span class="na">Builder</span> <span class="n">elasticsearchSettings</span> <span class="o">=</span> <span class="n">ImmutableSettings</span><span class="o">.</span><span class="na">settingsBuilder</span><span class="o">()</span>
</span><span class='line'>                <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;http.enabled&quot;</span><span class="o">,</span> <span class="s">&quot;false&quot;</span><span class="o">)</span>
</span><span class='line'>                <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;path.data&quot;</span><span class="o">,</span> <span class="n">dataDirectory</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">node</span> <span class="o">=</span> <span class="n">nodeBuilder</span><span class="o">()</span>
</span><span class='line'>                <span class="o">.</span><span class="na">local</span><span class="o">(</span><span class="kc">true</span><span class="o">)</span>
</span><span class='line'>                <span class="o">.</span><span class="na">settings</span><span class="o">(</span><span class="n">elasticsearchSettings</span><span class="o">.</span><span class="na">build</span><span class="o">())</span>
</span><span class='line'>                <span class="o">.</span><span class="na">node</span><span class="o">();</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="n">Client</span> <span class="nf">getClient</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="n">node</span><span class="o">.</span><span class="na">client</span><span class="o">();</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">shutdown</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="n">node</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
</span><span class='line'>        <span class="n">deleteDataDirectory</span><span class="o">();</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="kt">void</span> <span class="nf">deleteDataDirectory</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">try</span> <span class="o">{</span>
</span><span class='line'>            <span class="n">FileUtils</span><span class="o">.</span><span class="na">deleteDirectory</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">dataDirectory</span><span class="o">));</span>
</span><span class='line'>        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>            <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">(</span><span class="s">&quot;Could not delete data directory of embedded elasticsearch server&quot;</span><span class="o">,</span> <span class="n">e</span><span class="o">);</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>By using <code>getClient</code> you can get access to the embedded server. And as you can see the data directory is deleted when the embedded elasticsearch server will be stopped. With this class available you can write an abstract test helper class for your test infrastructure.</p>

<figure class='code'><figcaption><span>Test helper class for an embedded elasticsearch server per test</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">abstract</span> <span class="kd">class</span> <span class="nc">AbstractElasticsearchIntegrationTest</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="n">EmbeddedElasticsearchServer</span> <span class="n">embeddedElasticsearchServer</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@Before</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">startEmbeddedElasticsearchServer</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="n">embeddedElasticsearchServer</span> <span class="o">=</span> <span class="k">new</span> <span class="n">EmbeddedElasticsearchServer</span><span class="o">();</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@After</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">shutdownEmbeddedElasticsearchServer</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="n">embeddedElasticsearchServer</span><span class="o">.</span><span class="na">shutdown</span><span class="o">();</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">protected</span> <span class="n">Client</span> <span class="nf">getClient</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="n">embeddedElasticsearchServer</span><span class="o">.</span><span class="na">getClient</span><span class="o">();</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>You can find a full example there: <a href="https://github.com/fmueller/elasticsearch-integration-test">elasticsearch-integration-test</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fully fledged Spring support in Play 2.0]]></title>
    <link href="http://cupofjava.de/blog/2012/11/23/fully-fledged-spring-support-in-play-2-dot-0/"/>
    <updated>2012-11-23T15:05:00+01:00</updated>
    <id>http://cupofjava.de/blog/2012/11/23/fully-fledged-spring-support-in-play-2-dot-0</id>
    <content type="html"><![CDATA[<p>I think one of the main disadvantages of Play&#8217;s design is the overuse of static methods in controllers. This causes hard to test controllers, long-running tests and decreases modularisation. So, how can we use Spring to rescue us? <!-- more --></p>

<p>First of all, don&#8217;t get me wrong: I like the Play Framework a lot. I just think there are chances for optimisation if it comes to testing and modularisation.</p>

<p>After searching for Spring integration in Play Framework 2 I discovered this <a href="https://github.com/guillaumebort/play20-spring-demo">demo</a> by Guillaume Bort on how to combine Spring and Play 2. The name of this repository suggests that is does work with Play 2.0 but it only works with Play 2.1 because the so called <em>managed controller classes instantiation</em> is only available on Play 2.1 branch. And in fact with Play 2.1 you can easily integrate every dependency injection framework you want by implementing a <code>getControllerInstance</code> method on a Global object.</p>

<p>I want to show you how to integrate Spring into your Play 2.0.x application.</p>

<p>There is already a Spring module for Play 2. But I don&#8217;t like the fact that you have to use at least two lines of XML to get annotation-based configuration and component-scanning in place. As Chris Beams states in his slides about modern enterpise app config: <a href="http://cbeams.github.com/modern-config/#89">&#8220;this is kind of ironic&#8221;</a>. If you like XML files you can also try this module: <a href="https://github.com/wsargent/play-2.0-spring-module">play-2.0-spring-module</a>. I prefer annotation-based configuration. But this module inspired my solution a lot.</p>

<p>Ok, the goal is to autowire our controllers. Therefore, you have to intercept the controller creation by Play in some decent way. The trick is to add a stupid <code>ControllerFactory</code> that delegates static controller calls to non-static controller classes and let all routes go through this factory.</p>

<figure class='code'><figcaption><span>ControllerFactory to wrap non-static controllers in static method calls</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ControllerFactory</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="kd">static</span> <span class="n">Application</span> <span class="nf">application</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="k">new</span> <span class="nf">Application</span><span class="o">();</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>Corresponding routes file for this example</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="nc">GET</span>     <span class="o">/</span>                           <span class="n">controllers</span><span class="o">.</span><span class="nc">ControllerFactory</span><span class="o">.</span><span class="n">application</span><span class="o">.</span><span class="n">index</span><span class="o">()</span>
</span><span class='line'><span class="nc">GET</span>     <span class="o">/</span><span class="n">personalized</span><span class="o">/:</span><span class="n">name</span>         <span class="n">controllers</span><span class="o">.</span><span class="nc">ControllerFactory</span><span class="o">.</span><span class="n">application</span><span class="o">.</span><span class="n">helloTo</span><span class="o">(</span><span class="n">name</span><span class="k">:</span> <span class="kt">String</span><span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>The controllers can be non-static and therefore also instantiated by an application context. In the next step you simply bootstrap an application context in your Global object.</p>

<figure class='code'><figcaption><span>Application context bootstrap during start of Play application</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Global</span> <span class="kd">extends</span> <span class="n">GlobalSettings</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="kd">static</span> <span class="n">ApplicationContext</span> <span class="n">applicationContext</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@Override</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onStart</span><span class="o">(</span><span class="n">Application</span> <span class="n">application</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>        <span class="n">applicationContext</span> <span class="o">=</span> <span class="k">new</span> <span class="n">AnnotationConfigApplicationContext</span><span class="o">(</span><span class="n">SpringConfiguration</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="kd">static</span> <span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="n">T</span> <span class="n">getBean</span><span class="o">(</span><span class="n">Class</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="n">beanClass</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span><span class="n">applicationContext</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>            <span class="k">throw</span> <span class="k">new</span> <span class="nf">IllegalStateException</span><span class="o">(</span><span class="s">&quot;application context is not initialized&quot;</span><span class="o">);</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>        <span class="k">return</span> <span class="n">applicationContext</span><span class="o">.</span><span class="na">getBean</span><span class="o">(</span><span class="n">beanClass</span><span class="o">);</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>With this you get an application context everytime Play starts. In the last step you autowire every controller in the static delegating methods of <code>ControllerFactory</code>.</p>

<figure class='code'><figcaption><span>ControllerFactory with autowiring controllers</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ControllerFactory</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="kd">static</span> <span class="n">Application</span> <span class="nf">application</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="c1">// magic happens: Spring autowires your controller :-)</span>
</span><span class='line'>        <span class="k">return</span> <span class="n">Global</span><span class="o">.</span><span class="na">getBean</span><span class="o">(</span><span class="n">Application</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Now you have fully fledged Spring integration in your Play application and the <code>Application</code> controller can be autowired.</p>

<figure class='code'><figcaption><span>Example of autowired Application controller</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="nd">@Component</span>
</span><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Application</span> <span class="kd">extends</span> <span class="n">Controller</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@Autowired</span>
</span><span class='line'>    <span class="kd">private</span> <span class="n">HelloWorldService</span> <span class="n">helloWorldService</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@Autowired</span>
</span><span class='line'>    <span class="kd">private</span> <span class="n">PersonalizedHelloWorldService</span> <span class="n">personalizedHelloWorldService</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="n">Result</span> <span class="nf">index</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="nf">ok</span><span class="o">(</span><span class="n">helloWorldService</span><span class="o">.</span><span class="na">sayHello</span><span class="o">());</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="n">Result</span> <span class="nf">helloTo</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="nf">ok</span><span class="o">(</span><span class="n">personalizedHelloWorldService</span><span class="o">.</span><span class="na">sayHelloTo</span><span class="o">(</span><span class="n">name</span><span class="o">));</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>You can find the full example project with more explanations there: <a href="https://github.com/fmueller/play20-spring-integration">play20-spring-integration</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Integration Tests with MongoDB and Play Framework 2]]></title>
    <link href="http://cupofjava.de/blog/2012/11/09/integration-tests-with-mongodb-and-play-framework-2/"/>
    <updated>2012-11-09T09:45:00+01:00</updated>
    <id>http://cupofjava.de/blog/2012/11/09/integration-tests-with-mongodb-and-play-framework-2</id>
    <content type="html"><![CDATA[<p>In of my projects I am building a rest api with the playframework 2 (using the java api) and MongoDB as the persistence storage. One of the first question that arises was: how can I implement integration tests properly with a test instance of MongoDB? I wanted to have a known state in MongoDB for each test and it should be easy to set up the test instance. <!-- more --></p>

<p>I looked for projects on github that supports my requirements and came up with these three possibilities:</p>

<ul>
<li><a href="https://github.com/thiloplanz/jmockmongo"><strong>jmockmongo</strong></a> This is a mock implementation of the MongoDB protocol and works purely in-memory.</li>
<li><a href="https://github.com/lordofthejars/nosql-unit"><strong>nosqlunit</strong></a> This library offers more features than jmockmongo. You can use it to test several nosql stores and configure data sets for your tests. For testing MongoDB it uses jmockmongo under the hood. You can also use a local or remote running MongoDB instance for your tests if the in-memory approach does not suit your needs.</li>
<li><a href="https://github.com/flapdoodle-oss/embedmongo.flapdoodle.de"><strong>embedmongo</strong></a> With embedmongo you get a platform independent way of running local MongoDB instances. It provides helper classes to bootstrap MongoDB during tests. The most important feature imho: You do not need to install MongoDB. embedmongo downloads MongoDB automatically for windows, linux and mac when bootstraping your tests.</li>
</ul>


<p>Because I wanted a running MongoDB instance and no in-memory solution I finally chose embedmongo. There is a nice helper class which lets you easily setup a MongoDB on a free port of your system. You can also choose the version.</p>

<figure class='code'><figcaption><span>Bootstrap local MongoDB instance with embedmongo</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="k">new</span> <span class="nf">MongodForTestsFactory</span><span class="o">().</span><span class="na">with</span><span class="o">(</span><span class="n">Version</span><span class="o">.</span><span class="na">V2_2_0</span><span class="o">).</span><span class="na">newMongo</span><span class="o">();</span>
</span></code></pre></td></tr></table></div></figure>


<p>Furthermore I had the needs to integrate the MongoDB test instance into the lifecycle of Play. In Play one typically uses a fake instance for proper integration tests.</p>

<figure class='code'><figcaption><span>Functional test in Play 2 with a fake application</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">running</span><span class="o">(</span><span class="n">fakeApplication</span><span class="o">(),</span> <span class="k">new</span> <span class="n">Runnable</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>    <span class="nd">@Override</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">run</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="c1">// here you insert your test code</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">});</span>
</span></code></pre></td></tr></table></div></figure>


<p>One can intercept the bootstrap of a Play 2 application with a so called Global object that is placed in the default package (or another package that you have configured in the application.conf). There you can override methods that are called from Play during start and shutdown of your application. The perfect place to bootstrap your own MongoDB instance.</p>

<figure class='code'><figcaption><span>Automatically bootstrap of local MongoDB instance in Play 2</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kn">import</span> <span class="nn">com.mongodb.Mongo</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">de.flapdoodle.embed.mongo.distribution.Version</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">de.flapdoodle.embed.mongo.tests.MongodForTestsFactory</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">play.Application</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">play.GlobalSettings</span><span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">play.Logger</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'><span class="kn">import</span> <span class="nn">java.io.IOException</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Global</span> <span class="kd">extends</span> <span class="n">GlobalSettings</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="n">MongodForTestsFactory</span> <span class="n">mongodForTestsFactory</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@Override</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onStart</span><span class="o">(</span><span class="n">Application</span> <span class="n">application</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span><span class="n">application</span><span class="o">.</span><span class="na">isProd</span><span class="o">())</span> <span class="o">{</span>
</span><span class='line'>            <span class="cm">/*</span>
</span><span class='line'><span class="cm">             * here you can setup mongodb for production,</span>
</span><span class='line'><span class="cm">             * e.g. connect to remote mongodb instance</span>
</span><span class='line'><span class="cm">             */</span>
</span><span class='line'>        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
</span><span class='line'>            <span class="n">startLocalMongoInstance</span><span class="o">();</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="nd">@Override</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onStop</span><span class="o">(</span><span class="n">Application</span> <span class="n">application</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span><span class="n">mongodForTestsFactory</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>            <span class="n">Logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">&quot;Shutdown local mongo instance...&quot;</span><span class="o">);</span>
</span><span class='line'>            <span class="n">mongodForTestsFactory</span><span class="o">.</span><span class="na">shutdown</span><span class="o">();</span>
</span><span class='line'>            <span class="n">Logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">&quot;Local mongo instance was stopped&quot;</span><span class="o">);</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="kt">void</span> <span class="nf">startLocalMongoInstance</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="n">Logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">&quot;Start local mongo instance...&quot;</span><span class="o">);</span>
</span><span class='line'>        <span class="k">try</span> <span class="o">{</span>
</span><span class='line'>            <span class="n">mongodForTestsFactory</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MongodForTestsFactory</span><span class="o">();</span>
</span><span class='line'>            <span class="n">Mongo</span> <span class="n">mongo</span> <span class="o">=</span> <span class="n">mongodForTestsFactory</span><span class="o">.</span><span class="na">with</span><span class="o">(</span><span class="n">Version</span><span class="o">.</span><span class="na">V2_2_0</span><span class="o">).</span><span class="na">newMongo</span><span class="o">();</span>
</span><span class='line'>            <span class="c1">// that&#39;s it: now you&#39;ve got the local mongo instance</span>
</span><span class='line'>            <span class="n">Logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">&quot;Local mongo instance was successfully started&quot;</span><span class="o">);</span>
</span><span class='line'>        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>            <span class="n">Logger</span><span class="o">.</span><span class="na">error</span><span class="o">(</span><span class="s">&quot;Unable to start local mongo instance&quot;</span><span class="o">,</span> <span class="n">e</span><span class="o">);</span>
</span><span class='line'>            <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">(</span><span class="n">e</span><span class="o">);</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>This solution starts a MongoDB instance each time you start Play in development mode and for each test where you start a fake application. In production you typically connect to a remote MongoDB instance or cluster.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Hello Internet!]]></title>
    <link href="http://cupofjava.de/blog/2012/11/02/hello-internet/"/>
    <updated>2012-11-02T18:08:00+01:00</updated>
    <id>http://cupofjava.de/blog/2012/11/02/hello-internet</id>
    <content type="html"><![CDATA[<p>Today I decided spontaneously to start my own blog. Most times I will blog about technology and programming: the things that tackles me. What that could be you may find on the <a href="http://cupofjava.de/about">about</a> site.</p>

<p>And sorry for the oh so funny title of this first blog post. I did not find a better one. ;-)</p>

<p>So far so good. I hope you will enjoy the content.</p>
]]></content>
  </entry>
  
</feed>
