<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java on Erwähnenswert</title><link>https://blog.lgohlke.de/tags/java/</link><description>Recent content in Java on Erwähnenswert</description><generator>Hugo</generator><language>de-de</language><lastBuildDate>Sun, 25 Oct 2015 13:36:07 +0000</lastBuildDate><atom:link href="https://blog.lgohlke.de/tags/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Hot swap classes in spring-boot with springloaded</title><link>https://blog.lgohlke.de/posts/2015-02-07-hotswap-classes-in-spring-boot-with-springloaded/</link><pubDate>Tue, 17 Feb 2015 10:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-02-07-hotswap-classes-in-spring-boot-with-springloaded/</guid><description>&lt;p&gt;Spring-Boot is fast, but changing some controller for prototyping still requires some slow restart cycle of some 5s. With &lt;a href="https://github.com/spring-projects/spring-loaded" class="external-link" target="_blank" rel="noopener"&gt;spring-loaded&lt;/a&gt; you can shortcut this to 1s, depending of your project. Just hit CTRL-F9 to compile.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.lgohlke.de/img/2015-02-07-spring-loaded-in-intellij.jpeg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-02-07-spring-loaded-in-intellij.jpeg" alt="screenshot from intellij"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html" class="external-link" target="_blank" rel="noopener"&gt;Hot swapping in the spring boot manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/spring-projects/spring-loaded" class="external-link" target="_blank" rel="noopener"&gt;spring-loaded on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Easy distinct unit and integration test code coverage with sonarqube</title><link>https://blog.lgohlke.de/posts/2015-02-05-sonarqube-code-coverage-unittests-integrationtests/</link><pubDate>Thu, 05 Feb 2015 23:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-02-05-sonarqube-code-coverage-unittests-integrationtests/</guid><description>&lt;p&gt;Simple compute distinct code coverage for unit tests and integration tests. I used jacoco 0.7.2, sonarqube 5.0 and maven 3.2.5 to cook the numbers ;).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.lgohlke.de/img/2015-02-05-combined-code-coverage.jpg" &gt;&lt;img src="https://blog.lgohlke.de/img/2015-02-05-combined-code-coverage.jpg" alt="screenshot from sonarqube"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;project&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;...&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;profile&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;sonar-coverage&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;build&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.jacoco&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jacoco-maven-plugin&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;0.7.2.201409121644&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;append&amp;gt;&lt;/span&gt;true&lt;span style="color:#f92672"&gt;&amp;lt;/append&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;executions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;agent-for-ut&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;prepare-agent&lt;span style="color:#f92672"&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;agent-for-it&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;prepare-agent-integration&lt;span style="color:#f92672"&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;jacoco-site&lt;span style="color:#f92672"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;phase&amp;gt;&lt;/span&gt;post-integration-test&lt;span style="color:#f92672"&gt;&amp;lt;/phase&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;report&lt;span style="color:#f92672"&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/executions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/profile&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A simple call with maven to run the test suite and activate jacoco class instrumentation would be:&lt;/p&gt;</description></item><item><title>Websockets mit Spring-Boot und Jetty - Publish/Subscribe</title><link>https://blog.lgohlke.de/posts/2015-01-21-websockets-mit-springboot-und-jetty/</link><pubDate>Wed, 21 Jan 2015 14:23:07 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2015-01-21-websockets-mit-springboot-und-jetty/</guid><description>&lt;p&gt;Hier mein kleines Tutorial wie man mit spring-boot und jetty&amp;rsquo;s websocket Client ein Publish/Subscribe Szenario implementieren kann.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inhalt&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#hw" &gt;Simples Hello-World mit &amp;ldquo;welcome&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ps" &gt;Simples publish/subscribe um Zeitinformation zu erhalten&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="hw"&gt;
 Simples Hello-World mit &amp;ldquo;welcome&amp;rdquo;
 &lt;a class="heading-link" href="#hw"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Die Idee ist, sich in Java sowohl auf Server- als auch auf Client-Seite mittels Websockets zu verbinden. Nach dem erfolgreichen Verbindungsaufbau sendet der Server eine Nachricht mit dem Text &lt;code&gt;welcome&lt;/code&gt; als Inhalt.&lt;/p&gt;</description></item><item><title>easily exploring Java AbstractSyntaxTree</title><link>https://blog.lgohlke.de/posts/2013-05-01-easily-exploring-java-abstractsyntaxtree/</link><pubDate>Wed, 01 May 2013 13:36:53 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-05-01-easily-exploring-java-abstractsyntaxtree/</guid><description>&lt;p&gt;If you ever need to deal with the AST in java here I&amp;rsquo;d like to this small tool I&amp;rsquo;ve found some time ago.&lt;/p&gt;
&lt;p&gt;Start it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java -cp checkstyle-5.6-all.jar com.puppycrawl.tools.checkstyle.gui.Main PomSourceImporter.java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It shows this file [de/lgohlke/sonar/PomSourceImporter]&lt;code&gt;https://github.com/SonarCommunity/sonar-maven-checks/blob/master/src/main/java/de/lgohlke/sonar/PomSourceImporter.java&lt;/code&gt; (💀link)&lt;/p&gt;
&lt;p&gt;A nice feature is typing ENTER on an ast node and the corresponding source code will be highlighted as well.&lt;/p&gt;
&lt;p&gt;You can get it with checkstyle from &lt;a href="http://checkstyle.sourceforge.net" class="external-link" target="_blank" rel="noopener"&gt;checkstyle.sourceforge.net&lt;/a&gt;, it is also described here &lt;a href="http://checkstyle.sourceforge.net/writingchecks.html" class="external-link" target="_blank" rel="noopener"&gt;The Checkstyle SDK Gui&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clean Code Regel für Sonar</title><link>https://blog.lgohlke.de/posts/2013-02-16-clean-code-regel-fuer-sonar/</link><pubDate>Sat, 16 Feb 2013 20:32:51 +0000</pubDate><guid>https://blog.lgohlke.de/posts/2013-02-16-clean-code-regel-fuer-sonar/</guid><description>&lt;p&gt;Diese Woche habe ich das &lt;strong&gt;&amp;lsquo;Clean Code: A Handbook of Agile Software Craftsmanship&amp;rsquo;&lt;/strong&gt; noch einmal gelesen. Nach einem weiteren Jahr Praxis, sieht man viele Sachen schon wieder erstaunlich anders.&lt;/p&gt;
&lt;p&gt;Ich mußte dann doch gleich auf der Sonar-Mailingliste nachfragen, ob es schon eine Regel für &amp;lsquo;G15 Selector Arguments&amp;rsquo; gibt. Gibt es wohl nicht.&lt;/p&gt;
&lt;p&gt;Hier nun mein Beitrag dazu: &lt;code&gt;https://github.com/lkwg82/sonar-java/commit/9dcb5e1864d9deb6ce77c4f5e9c32e856b5a5505&lt;/code&gt; (💀link). Bin mal gespannt, ob und wenn in welcher Form die Regel aufgenommen wird.&lt;/p&gt;</description></item></channel></rss>