<?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 Maarten on IT</title><link>https://maarten.mulders.it/categories/java/</link><description>Recent content in Java on Maarten on IT</description><generator>Hugo</generator><language>en-us</language><copyright>&amp;copy; 2013 - 2026 Maarten Mulders</copyright><lastBuildDate>Tue, 10 Feb 2026 08:46:38 +0100</lastBuildDate><atom:link href="https://maarten.mulders.it/categories/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Coding, Thinking and Adapting: My Take-Aways from Devoxx Poland 2025</title><link>https://maarten.mulders.it/2025/06/coding-thinking-and-adapting-my-take-aways-from-devoxx-poland-2025/</link><pubDate>Mon, 16 Jun 2025 21:53:00 +0200</pubDate><guid>https://maarten.mulders.it/2025/06/coding-thinking-and-adapting-my-take-aways-from-devoxx-poland-2025/</guid><description>&lt;p&gt;Six years after my first Devoxx Poland visit, I was invited there again to present.
This time, I had the opportunity to give two talks instead of just one.
Apart from speaking, visiting a conference is a great way to also join other speaker&amp;rsquo;s sessions.
In this blog, I will share some of the most inspiring talks I attended.
Topics include mutation testing, monads, tips for smooth-running applications in production, effectively working with AI and hexagonal architecture.
Continue reading for my recommendations from this year&amp;rsquo;s edition!&lt;/p&gt;</description></item><item><title>Authenticate Jakarta EE apps with Google using OpenID Connect</title><link>https://maarten.mulders.it/2024/08/authenticate-jakarta-ee-apps-with-google-using-openid-connect/</link><pubDate>Tue, 20 Aug 2024 10:02:00 +0200</pubDate><guid>https://maarten.mulders.it/2024/08/authenticate-jakarta-ee-apps-with-google-using-openid-connect/</guid><description>&lt;p&gt;In one of my pet projects, I&amp;rsquo;m writing a Jakarta EE web application where I want users to authenticate using Google.
Easy, you would say, as Jakarta EE 10 includes Jakarta Security 3.0, which has support for OpenID Connect authentication.
Took me a bit more time to figure out how to get it working, and to save you from having to do that, here&amp;rsquo;s what I found.&lt;/p&gt;</description></item><item><title>Reduce Maven Plugin logging</title><link>https://maarten.mulders.it/2024/07/reduce-maven-plugin-logging/</link><pubDate>Tue, 16 Jul 2024 08:16:00 +0200</pubDate><guid>https://maarten.mulders.it/2024/07/reduce-maven-plugin-logging/</guid><description>&lt;p&gt;Sometimes, a Maven plugin logs more then you want it to.
I recently had this situation with a plugin that generated source code from specifications.
This plugin alone wrote over 22000 lines of output just to inform the user that it did what it had to do.
No errors or such, only confirming that it did its job.
Such superfluous output makes it hard for developers to focus on actual problems in their build.
It&amp;rsquo;s too easy to think &amp;ldquo;too long, didn&amp;rsquo;t read&amp;rdquo; (TL;DR) and hence miss the important bits.
So, it&amp;rsquo;s time to tame the plugin logging!&lt;/p&gt;</description></item><item><title>Devnexus 2024</title><link>https://maarten.mulders.it/2024/04/devnexus-2024/</link><pubDate>Wed, 10 Apr 2024 18:50:00 -0400</pubDate><guid>https://maarten.mulders.it/2024/04/devnexus-2024/</guid><description>&lt;p&gt;This year, I again have the pleasure to join Devnexus and speak there.
In this blog, I&amp;rsquo;ll highlight some of the sessions that I&amp;rsquo;ve joined.&lt;/p&gt;</description></item><item><title>Measure Your Maven Build</title><link>https://maarten.mulders.it/2024/03/measure-your-maven-build/</link><pubDate>Fri, 15 Mar 2024 09:46:00 +0200</pubDate><guid>https://maarten.mulders.it/2024/03/measure-your-maven-build/</guid><description>&lt;p&gt;Slow builds are annoying!&lt;/p&gt;
&lt;p&gt;There, I&amp;rsquo;ve said it.
And you know it&amp;rsquo;s true, don&amp;rsquo;t you?
They take valuable time, they are a source of frustration, they extend the feedback cycle, and often they provide the perfect excuse for &lt;a href="https://xkcd.com/303/"&gt;slacking off&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But it doesn&amp;rsquo;t have to be this way!
Rather than getting another cup of coffee or playing that medieval game of gladiator, what if we would investigate &lt;em&gt;why&lt;/em&gt; the build is so slow?
If we know the bottlenecks, we can address them.
That would shorten the feedback loop, increasing our productivity and our job happiness in one go.&lt;/p&gt;</description></item><item><title>Why Write Boring Apps?</title><link>https://maarten.mulders.it/2024/03/why-write-boring-apps/</link><pubDate>Fri, 01 Mar 2024 15:00:00 +0200</pubDate><guid>https://maarten.mulders.it/2024/03/why-write-boring-apps/</guid><description>&lt;p&gt;If you&amp;rsquo;ve built any kind of web-based application in the last decade, chances are you were building a &lt;em&gt;single-page application&lt;/em&gt; (SPA).
This means you&amp;rsquo;ve been writing JavaScript or Typescript, had to work with the Node Package Manager or Yarn, needed to understand a framework like Angular, React or Vue &lt;em&gt;and&lt;/em&gt; had to learn a new testing framework (or two).
And that would have been only the basics.
You would probably use other libraries, frameworks and toolkits: for styling the user interface, for doing API calls using REST and/or GraphQL, and for writing reusable components.
But we usually take the pain, because the alternative is just&amp;hellip; &amp;ldquo;boring&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;But it is time to reflect on this approach.
It drags in a lot of complexity, but what does it give us?
More complexity!
At the end of the day, everyone will probably agree that simplicity is important.
And what we want to achieve is a simple thing: displaying some information to a user.
So why all that complexity?&lt;/p&gt;</description></item><item><title>Devoxx 2023: First Impressions</title><link>https://maarten.mulders.it/2023/10/devoxx-2023-first-impressions/</link><pubDate>Mon, 09 Oct 2023 12:04:15 +0200</pubDate><guid>https://maarten.mulders.it/2023/10/devoxx-2023-first-impressions/</guid><description>&lt;p&gt;This week, I&amp;rsquo;ve been attending Devoxx Belgium.
It wasn&amp;rsquo;t my first time around, so I more or less knew what to expect in terms of atmosphere, content and people.
In this post, I will share my first impressions.
It includes some interesting talks that I joined.
Of course, there were more - but those require a larger post, so those may end up in a seperate post later.&lt;/p&gt;</description></item><item><title>Devnexus 2023 live blog</title><link>https://maarten.mulders.it/2023/04/devnexus-2023-live-blog/</link><pubDate>Wed, 05 Apr 2023 17:49:15 +0200</pubDate><guid>https://maarten.mulders.it/2023/04/devnexus-2023-live-blog/</guid><description>&lt;p&gt;This week, I&amp;rsquo;m attending the 19th edition of the Devnexus conference in Atlanta!
In those 19 years, Devnexus has truly grown to being one of the biggest Java and JVM-related conference in Nothern America, and it&amp;rsquo;s always been a pleasure to be there.
This year marks my fourth attendance as a speaker, and I&amp;rsquo;ll be doing two talks myself.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;ll be live blogging about some of the sessions that I&amp;rsquo;ve joined. Enjoy!&lt;/p&gt;</description></item><item><title>Notes from JavaZone</title><link>https://maarten.mulders.it/2022/09/notes-from-javazone/</link><pubDate>Mon, 12 Sep 2022 21:56:13 +0200</pubDate><guid>https://maarten.mulders.it/2022/09/notes-from-javazone/</guid><description>&lt;p&gt;Last week, I attended JavaZone, the annual conference ran by javaBin, the Norwegian Java User Group.
I have attended JavaZone in the past (2018) so I knew what to expect - and the bar was high!
Because of that, I was looking forward a lot to join JavaZone again.
Also, this would be my first conference as a Java Champion, which made it even more special.&lt;/p&gt;</description></item><item><title>Using HSQL in OpenLiberty</title><link>https://maarten.mulders.it/2022/08/using-hsql-in-openliberty/</link><pubDate>Tue, 23 Aug 2022 08:46:13 +0200</pubDate><guid>https://maarten.mulders.it/2022/08/using-hsql-in-openliberty/</guid><description>&lt;p&gt;A quick note, this time.
Recently, I wanted to do some hacking around on Jakarta EE and MicroProfile.
I chose to work with the OpenLiberty runtime, as I previously had good experiences with it.
My pet project also needs a database, so for starters, I chose HyperSQL Database (HSQL DB).
Here&amp;rsquo;s how I set it up.&lt;/p&gt;</description></item><item><title>Mutation Testing badge with PIT and Stryker Dashboard</title><link>https://maarten.mulders.it/2022/07/mutation-testing-badge-with-pit-and-stryker-dashboard/</link><pubDate>Sat, 30 Jul 2022 10:41:13 +0200</pubDate><guid>https://maarten.mulders.it/2022/07/mutation-testing-badge-with-pit-and-stryker-dashboard/</guid><description>&lt;p&gt;Earlier, I wrote about integrating PIT with the Stryker Mutator Dashboard.
The setup for that was pretty complicated, with some shell scripting that extracted the JSON payload for the report from a JavaScript file.
Today, I&amp;rsquo;m introducing a much simpler approach to that: the &lt;strong&gt;Stryker Mutator Dashboard reporter for PIT&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Playing with Loom</title><link>https://maarten.mulders.it/2022/03/playing-with-loom/</link><pubDate>Fri, 04 Mar 2022 08:39:13 +0200</pubDate><guid>https://maarten.mulders.it/2022/03/playing-with-loom/</guid><description>&lt;p&gt;If there&amp;rsquo;s one topic that has kept the Java community excited over the last years, it&amp;rsquo;s Project Loom.
We all know it&amp;rsquo;s coming someday, but when?
What will it look like?
And how will it change the way we write concurrent code?
In this blog, I&amp;rsquo;ll try to play a bit with what Loom &lt;em&gt;currently&lt;/em&gt; looks like.&lt;/p&gt;</description></item><item><title>The Dapr SDK for Java: Pub/Sub &amp; Distributed Tracing</title><link>https://maarten.mulders.it/2022/01/the-dapr-sdk-for-java-pubsub-distributed-tracing/</link><pubDate>Tue, 11 Jan 2022 09:36:13 +0200</pubDate><guid>https://maarten.mulders.it/2022/01/the-dapr-sdk-for-java-pubsub-distributed-tracing/</guid><description>&lt;p&gt;It&amp;rsquo;s been a while since the first two posts about Dapr!
In those first installments, we looked at the basics of Dapr, from a very conceptual point of view.
We also looked at the bare minimum HTTP API that Dapr exposes to the applications that use it.
But writing enterprise applications that way would be slow, and it would inevitably lead to mistakes.
In this article, I will introduce you to a higher abstraction level of working with Dapr.&lt;/p&gt;</description></item><item><title>Jakarta EE meets Dapr</title><link>https://maarten.mulders.it/2021/09/jakarta-ee-meets-dapr/</link><pubDate>Tue, 28 Sep 2021 09:46:13 +0200</pubDate><guid>https://maarten.mulders.it/2021/09/jakarta-ee-meets-dapr/</guid><description>&lt;p&gt;Earlier this month, I introduced you to Dapr, the Distributed Application Runtime.
That was a mostly conceptual introduction, showing you how Dapr works and what it can do for you.
But how do you integrate it into an existing application?
That&amp;rsquo;s the topic for today.&lt;/p&gt;</description></item><item><title>Getting to know Dapr</title><link>https://maarten.mulders.it/2021/09/getting-to-know-dapr/</link><pubDate>Fri, 10 Sep 2021 10:46:13 +0200</pubDate><guid>https://maarten.mulders.it/2021/09/getting-to-know-dapr/</guid><description>&lt;p&gt;Building distributed applications or microservice applications brings a whole new range of problems.
All those application components, or microservices, need to communicate with each other.
How will we do that: using messaging, or would direct HTTP calls be a better choice?
Often, we must make such decisions early in a project.
Since it&amp;rsquo;s hard to change it later, we call it an &amp;ldquo;architectural decision&amp;rdquo;.
But this is often an excuse so we can blame the architect if the choice turned out to be wrong.&lt;/p&gt;</description></item><item><title>Build your own OpenJDK on macOS</title><link>https://maarten.mulders.it/2021/05/build-your-own-openjdk-on-macos/</link><pubDate>Mon, 31 May 2021 08:31:13 +0200</pubDate><guid>https://maarten.mulders.it/2021/05/build-your-own-openjdk-on-macos/</guid><description>&lt;p&gt;Following the recent kerfuffle around the security manager deprecation, I was curious to see if a codebase I&amp;rsquo;m working on would also suffer.
But how could I find out? There are no early access builds of Java 17 yet with the latest changes for this JEP.
Maybe&amp;hellip; I should set out and try to build it myself?
But that&amp;rsquo;s sure going to be a lot of work&amp;hellip; Or is it?&lt;/p&gt;</description></item><item><title>Introduction to Maven Toolchains</title><link>https://maarten.mulders.it/2021/03/introduction-to-maven-toolchains/</link><pubDate>Tue, 16 Mar 2021 08:31:12 +0100</pubDate><guid>https://maarten.mulders.it/2021/03/introduction-to-maven-toolchains/</guid><description>&lt;p&gt;Java evolves at a much faster pace than it used to do.
But not all of the projects we work on keep up with that pace.
I have projects on Java 8, 11 and 15 - and sometimes I want to play with early access builds of newer versions as well.
How to make sure I can build them without having to constantly switch Java runtimes?&lt;/p&gt;</description></item><item><title>What's New in Maven 4</title><link>https://maarten.mulders.it/2020/11/whats-new-in-maven-4/</link><pubDate>Mon, 30 Nov 2020 08:02:09 +0100</pubDate><guid>https://maarten.mulders.it/2020/11/whats-new-in-maven-4/</guid><description>&lt;p&gt;Recently, the Maven community decided to push forward and &lt;a href="https://github.com/apache/maven/commit/3736be9c15122d65e6ef675557eb0f882f82b012"&gt;start working&lt;/a&gt; &lt;a href="https://twitter.com/ASFMavenProject/status/1332288204351934466"&gt;towards a 4.0.0 release&lt;/a&gt;.
The first question after this announcement is of course: what can we expect Maven 4 to bring us?
A lot - and in this post, we want to highlight some of the features that we are particularly excited about.&lt;/p&gt;</description></item><item><title>Mutation Testing badge with Pitest and Stryker Dashboard</title><link>https://maarten.mulders.it/2020/06/mutation-testing-badge-with-pitest-and-stryker-dashboard/</link><pubDate>Tue, 30 Jun 2020 13:18:13 +0200</pubDate><guid>https://maarten.mulders.it/2020/06/mutation-testing-badge-with-pitest-and-stryker-dashboard/</guid><description>&lt;p&gt;Over the years, badges have become a way for open source maintainers to show the state of their product.
Badges can give a quick overview of the code quality, test coverage or build health of an open-source product.
The problem with code coverage is, however, that a high coverage doesn&amp;rsquo;t mean the tests are any &lt;em&gt;good&lt;/em&gt;.
If only there was a way to show the quality of the test suite&amp;hellip;&lt;/p&gt;</description></item><item><title>DevNexus Day 1: WebAssembly, Productivity</title><link>https://maarten.mulders.it/2020/02/devnexus-day-1-webassembly-productivity/</link><pubDate>Fri, 21 Feb 2020 15:20:13 +0200</pubDate><guid>https://maarten.mulders.it/2020/02/devnexus-day-1-webassembly-productivity/</guid><description>&lt;p&gt;Together with four &amp;ldquo;AwesomeSauce&amp;rdquo; colleagues from &lt;a href="https://www.infosupport.com/"&gt;Info Support&lt;/a&gt;, I&amp;rsquo;m attending &lt;a href="https://devnexus.com/"&gt;DevNexus&lt;/a&gt; this year.
For me, it&amp;rsquo;s the second time I&amp;rsquo;m here, as I spoke here in 2018, too.
Next to delivering my own &amp;ldquo;React in 50 minutes&amp;rdquo; session I&amp;rsquo;m attending some sessions to update with new technology advancements.&lt;/p&gt;</description></item><item><title>Customise the Maven Release process</title><link>https://maarten.mulders.it/2020/01/customise-the-maven-release-process/</link><pubDate>Fri, 10 Jan 2020 09:30:13 +0200</pubDate><guid>https://maarten.mulders.it/2020/01/customise-the-maven-release-process/</guid><description>&lt;p&gt;Shipping a new release of software usually involves quite a few steps.
Depending on the type of software, this may be something you rarely do.
Thus, it often involves manual steps.
This is not necessary!
Maven has had its &amp;ldquo;Release Plugin&amp;rdquo; since approximately April 2007; yes, that&amp;rsquo;s over 12 years!
It has served both the Maven project and many other software projects.&lt;/p&gt;</description></item><item><title>Code One - Day Three</title><link>https://maarten.mulders.it/2019/09/code-one-day-three/</link><pubDate>Wed, 18 Sep 2019 20:08:00 -0700</pubDate><guid>https://maarten.mulders.it/2019/09/code-one-day-three/</guid><description>&lt;p&gt;Third day on Code One already!
Highlights for today: the Community Keynote, a trip to GitHub and a session called &amp;ldquo;Sarcasm as a Service&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Code One - Day Two</title><link>https://maarten.mulders.it/2019/09/code-one-day-two/</link><pubDate>Tue, 17 Sep 2019 16:11:00 -0700</pubDate><guid>https://maarten.mulders.it/2019/09/code-one-day-two/</guid><description>&lt;p&gt;On this second day at Code One I have again visited interesting sessions.
One on security by &lt;a href="https://twitter.com/manicode"&gt;Jim Manicode&lt;/a&gt; and one on cash (or the lack thereof) in Sweden.&lt;/p&gt;</description></item><item><title>Code One - Day One</title><link>https://maarten.mulders.it/2019/09/code-one-day-one/</link><pubDate>Mon, 16 Sep 2019 18:42:32 -0700</pubDate><guid>https://maarten.mulders.it/2019/09/code-one-day-one/</guid><description>&lt;p&gt;This year I&amp;rsquo;m returning to Oracle Code One (formerly JavaOne) for the third time.
I&amp;rsquo;m planning to write some notes on interesting sessions or other content.&lt;/p&gt;</description></item><item><title>How did I get that library?!</title><link>https://maarten.mulders.it/2019/09/how-did-i-get-that-library/</link><pubDate>Wed, 11 Sep 2019 18:42:32 +0200</pubDate><guid>https://maarten.mulders.it/2019/09/how-did-i-get-that-library/</guid><description>&lt;p&gt;When you&amp;rsquo;re writing Java applications, chances are you&amp;rsquo;re using Maven for dependency management.
It lets you declare the &lt;em&gt;artifacts&lt;/em&gt; you need to build your application.
Those artifacts also depend on other artifacts.
This means you have &lt;em&gt;transitive dependencies&lt;/em&gt; - dependencies you didn&amp;rsquo;t declare yourself but you need them anyway.&lt;/p&gt;</description></item><item><title>Reports from Devoxx PL</title><link>https://maarten.mulders.it/2019/06/reports-from-devoxx-pl/</link><pubDate>Tue, 25 Jun 2019 14:00:13 +0200</pubDate><guid>https://maarten.mulders.it/2019/06/reports-from-devoxx-pl/</guid><description>&lt;p&gt;From yesterday until tomorrow I&amp;rsquo;m attending &lt;a href="https://www.devoxx.pl/"&gt;Devoxx Poland&lt;/a&gt; (or Devoxx PL for short).
It&amp;rsquo;s the second largest conference in the Devoxx family with around 2700 people attending.
The conference is held in the &lt;a href="https://www.icekrakow.pl/"&gt;ICE Kraków Congress Centre&lt;/a&gt;, a large venue with an amazing primary room.&lt;/p&gt;






 
 
 
 

 
 
 &lt;div class="flex justify-center items-center"&gt;
 &lt;figure class="rounded-lg "&gt;
 
 &lt;picture class="rounded-lg "&gt;
 &lt;source srcset="https://maarten.mulders.it/2019/06/reports-from-devoxx-pl/IMG_20190624_121320_hu_db4e3c5766a00d69.webp" alt="Entrance of the ICE" type="image/webp" width="4608" height="2112" class="justify-center shadow-lg"&gt;
 &lt;img src="https://maarten.mulders.it/2019/06/reports-from-devoxx-pl/IMG_20190624_121320_hu_a410d4a39c14c204.jpg" alt="Entrance of the ICE" type="image/jpeg" width="4608" height="2112" class="justify-center shadow-lg"&gt;
 &lt;/picture&gt;
 
 &lt;figcaption class="text-center"&gt;Entrance of the ICE&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;/div&gt;
 
 



&lt;p&gt;The main reason I&amp;rsquo;m here is to give a talk about GraalVM on Wednesday morning.
Apart from that, it&amp;rsquo;s a nice opportunity to network, meet old friends and make new ones.
And of course to attend other talks to learn something new.&lt;/p&gt;</description></item><item><title>A first look at MVC 1.0</title><link>https://maarten.mulders.it/2018/09/a-first-look-at-mvc-1.0/</link><pubDate>Fri, 14 Sep 2018 21:20:19 +0200</pubDate><guid>https://maarten.mulders.it/2018/09/a-first-look-at-mvc-1.0/</guid><description>&lt;p&gt;Recently, Twitter brought the &lt;a href="https://www.agilejava.eu/2018/08/31/ozark-becomes-eclipse-krazo/"&gt;renaming of Ozark to Krazo&lt;/a&gt; to my attention.
It pulled my attention: I had never heard of either projects, and I wondered what they would be about.
Ozark (or Krazo) will be the Reference Implementation of the new Model-View-Controller Specification.
This &lt;a href="https://www.mvc-spec.org/"&gt;MVC specification&lt;/a&gt;, also known as &lt;a href="https://jcp.org/en/jsr/detail?id=371"&gt;JSR 371&lt;/a&gt;, was planned for inclusion in Java EE 8, but eventually dropped.
Apparently, this didn&amp;rsquo;t kill the effort.
I was curious to see where the specification (and it&amp;rsquo;s implementation) would be now.&lt;/p&gt;</description></item><item><title>Custom SOAP Faults using Spring WS</title><link>https://maarten.mulders.it/2018/07/custom-soap-faults-using-spring-ws/</link><pubDate>Tue, 24 Jul 2018 16:05:35 +0200</pubDate><guid>https://maarten.mulders.it/2018/07/custom-soap-faults-using-spring-ws/</guid><description>&lt;p&gt;There are many situations when you need to write a SOAP-based webservice.
Maybe you are writing a test dummy, or maybe you got the interface from some kind of architect.
&lt;a href="https://docs.spring.io/spring-ws/sites/1.5/reference/html/why-contract-first.html"&gt;(Yes, there are other reasons, too.)&lt;/a&gt;
And chances are you&amp;rsquo;ll be using &lt;a href="https://docs.spring.io/spring-ws/docs/3.0.1.RELEASE/reference/#tutorial"&gt;Spring-WS&lt;/a&gt; to do this.&lt;/p&gt;
&lt;p&gt;Recently I was doing that, and I found the following inside the interface definition (WSDL):&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;element&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;common:FaultMessage&amp;#34;&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;message&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&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 style="color:#f92672"&gt;&amp;lt;part&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;element=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:faultMessage&amp;#34;&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 style="color:#f92672"&gt;&amp;lt;/message&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;portType&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;someName&amp;#34;&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 style="color:#f92672"&gt;&amp;lt;operation&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;searchOrder&amp;#34;&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 style="color:#f92672"&gt;&amp;lt;input&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;message=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:searchOrderRequest&amp;#34;&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 style="color:#f92672"&gt;&amp;lt;output&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;message=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:searchOrderResponse&amp;#34;&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 style="color:#f92672"&gt;&amp;lt;fault&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;faultMessage&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;message=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;tns:faultMessage&amp;#34;&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 style="color:#f92672"&gt;&amp;lt;/operation&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;/portType&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That was a rather challenging thing!
In case the operation would fail, it should give a SOAP Fault with a custom element in it:&lt;/p&gt;</description></item><item><title>Impressions of the first JVMCON</title><link>https://maarten.mulders.it/2018/02/impressions-of-the-first-jvmcon/</link><pubDate>Thu, 01 Feb 2018 20:17:00 +0200</pubDate><guid>https://maarten.mulders.it/2018/02/impressions-of-the-first-jvmcon/</guid><description>&lt;p&gt;Last Tuesday was the first edition of &lt;a href="https://www.jvmcon.com/"&gt;JVMCON&lt;/a&gt;.
This conference has a special programme committee: its audience.
When the Call for Papers closed, everyone who had a ticket could see the submitted papers.
Only, they could not see &lt;em&gt;who&lt;/em&gt; submitted the paper - which let them focus on the papers themselves.
Out of almost 180 papers, they had to select 13&amp;hellip;&lt;/p&gt;
&lt;p&gt;And guess what: one of them was &lt;a href="https://maarten.mulders.it/talks.html#how-to-stay-responsive-with-400-backends"&gt;mine&lt;/a&gt;!
I presented my talk for the &lt;em&gt;early birds&lt;/em&gt;, and there were quite a lot of them!
The room was pretty much packed, and there was a lot of questions and remarks afterwards.
That surprised me a bit, since I usually do not experience a lot of interaction with the audience.&lt;/p&gt;</description></item><item><title>I upgraded to Java 9 - Part II</title><link>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-part-ii/</link><pubDate>Tue, 23 Jan 2018 16:14:35 +0200</pubDate><guid>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-part-ii/</guid><description>&lt;p&gt;A few weeks ago, &lt;a href="https://maarten.mulders.it/blog/2018/01/migrating-to-java9.html"&gt;I wrote&lt;/a&gt; about migrating an existing Spring-application to Java 9.
When I finished, two things remained to be investigated:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Code coverage for unit tests.&lt;/li&gt;
&lt;li&gt;A bunch of warnings when running the application in Tomcat.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="code-coverage-for-unit-tests"&gt;Code coverage for unit tests&lt;/h3&gt;
&lt;p&gt;As &lt;a href="https://maarten.mulders.it/blog/2018/01/migrating-to-java9.html#comment-3706293583"&gt;Alan Bateman pointed out&lt;/a&gt;, upgrading JaCoCo to its latest version &lt;em&gt;should&lt;/em&gt; resolve the issue about the &lt;code&gt;$jacocoData&lt;/code&gt; field.
In fact, I thought I had done that, but somehow I kept on getting the same error every single time.
But when I tried (again) last week, it somehow disappeared.
No error to be seen, all tests green, and a nice coverage report from JaCoCo.
I&amp;rsquo;m a happy developer, again!&lt;/p&gt;</description></item><item><title>I upgraded to Java 9 - here's what happened</title><link>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-heres-what-happened/</link><pubDate>Fri, 12 Jan 2018 20:28:35 +0200</pubDate><guid>https://maarten.mulders.it/2018/01/i-upgraded-to-java-9-heres-what-happened/</guid><description>&lt;p&gt;I recently participated in a &lt;a href="https://twitter.com/royvanrijn/status/951087591272714241"&gt;Twitter conversation&lt;/a&gt; about upgrading to Java 9.
Like &lt;a href="https://twitter.com/royvanrijn/status/950718660641017856"&gt;most of the people&lt;/a&gt;, my current projects are all on Java 8.
Of course the question came up, why don&amp;rsquo;t you upgrade?
Good question!
Since I hadn&amp;rsquo;t even tried, I decided to see how far I could come&amp;hellip;&lt;/p&gt;
&lt;p&gt;The component I took for my experiment is a pretty simple Spring application.
It doesn&amp;rsquo;t use Spring Boot.
It exposes a few REST endpoints, and calls couple of webservices over SOAP.
For these webservices, it uses bindings generated by the &lt;a href="https://github.com/highsource/maven-jaxb2-plugin"&gt;JAXB plugin for Maven&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Devoxx 2017</title><link>https://maarten.mulders.it/2018/01/devoxx-2017/</link><pubDate>Sun, 07 Jan 2018 14:15:35 +0200</pubDate><guid>https://maarten.mulders.it/2018/01/devoxx-2017/</guid><description>&lt;p&gt;Almost two months ago I visited Devoxx 2017.
It&amp;rsquo;s about time to write some notes on the stuff I learnt there!&lt;/p&gt;
&lt;h4 id="event-storming--ddd-workshop"&gt;Event Storming &amp;amp; DDD workshop&lt;/h4&gt;
&lt;p&gt;The week started off with a full afternoon workshop led by &lt;a href="https://www.twitter.com/@stijnvp"&gt;Stijn Vanpoucke&lt;/a&gt;.
The workshop consisted of small pieces of theory, alternated with exercises using post-it&amp;rsquo;s and markers.&lt;/p&gt;
&lt;p&gt;A few of the theoretic pieces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;event&lt;/strong&gt; is something that has happened in the past.
It is usually phrased in past tense.
It should be understandable for business users.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;command&lt;/strong&gt; is an user-initiated action.
It explains the origin and sometimes the reason for the action.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;entity&lt;/strong&gt; is an individual thing.
It has a unique identity.
Often, entities are mutable.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;value object&lt;/strong&gt; is an non-unique value.
It is often immutable.
Its equality is based on it&amp;rsquo;s attributes.
It should be able to validate itself.
They can be combined.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;aggregate&lt;/strong&gt; is a combination of &lt;em&gt;entities&lt;/em&gt; and &lt;em&gt;value objects&lt;/em&gt;.
They are structured in a hierarchy.
Its root is always an &lt;em&gt;entity&lt;/em&gt;.
Aggregates contain business rules.
Note that a bigger aggregate is not always better!
To circumvent this, aggregates can use &lt;em&gt;soft links&lt;/em&gt; based on the unique identity of other entities.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;bounded context&lt;/strong&gt; describes the context from which you look at it.
Take a &lt;em&gt;pen&lt;/em&gt; as example; what a &lt;em&gt;pen&lt;/em&gt; is depends on the context from which you look at it.
To stress the fact that it has boundaries, it is called a &lt;em&gt;bounded&lt;/em&gt; context.
Bounded contexts support the idea of having &amp;ldquo;one team, one (business) language&amp;rdquo;.
The bigger the bounded context is, the bigger the language, whether artificial or natural.
Finally, multiple domains can have different words for the same concept.
A sales department might speak of &lt;em&gt;products&lt;/em&gt; while inventory management might name the same concept &lt;em&gt;article&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="kotlin-for-java-programmers"&gt;Kotlin for Java programmers&lt;/h4&gt;
&lt;p&gt;This year had a lot of talks about Kotlin scheduled.
To visit them all would take too much time, so I decided to follow just one by &lt;a href="https://www.twitter.com/@venkat_s"&gt;Venkat Subramaniam&lt;/a&gt;.
I figured it would give me about the same amount of content&amp;hellip;&lt;/p&gt;</description></item><item><title>Getting Started with Zuul</title><link>https://maarten.mulders.it/2017/12/getting-started-with-zuul/</link><pubDate>Sat, 30 Dec 2017 14:15:35 +0200</pubDate><guid>https://maarten.mulders.it/2017/12/getting-started-with-zuul/</guid><description>&lt;p&gt;It&amp;rsquo;s been a while since my last post!
I recently have been reading a lot about the idea of &amp;ldquo;API management&amp;rdquo; or an &amp;ldquo;API gateway&amp;rdquo;.
There&amp;rsquo;s a lot of commercial offerings in this field.
Many of them promise you (to some extend) ultimate flexibility and endless possibilities.
My preference is for &amp;ldquo;lean and mean&amp;rdquo; approaches where I can pick the building blocks that I need.
In the long run, that offers more flexibility.
After all, you could replace building blocks.
Having small building blocks makes it less tempting to put any kind of business logic in such a gateway.
Doing that must sooner or later lead to some kind of vendor lock-in.&lt;/p&gt;</description></item><item><title>JavaOne 2017</title><link>https://maarten.mulders.it/2017/10/javaone-2017/</link><pubDate>Fri, 06 Oct 2017 15:05:45 +0200</pubDate><guid>https://maarten.mulders.it/2017/10/javaone-2017/</guid><description>&lt;p&gt;This year, I had the pleasure again to visit JavaOne.
Not only did I attend the conference, I was also accepted &lt;a href="https://maarten.mulders.tk/talks.html"&gt;to speak&lt;/a&gt;, which was quite a dream come true.
The &lt;a href="https://events.rainfocus.com/catalog/oracle/oow17/catalogjavaone17"&gt;session catalog&lt;/a&gt; contains almost 500 sessions, and I obviously visited only a subset of them.
I found two topics particularly interesting and decided to attend multiple sessions on each of them.&lt;/p&gt;
&lt;h2 id="prepare-for-jdk-9-and-migrating-to-java-9-modules"&gt;&amp;ldquo;Prepare for JDK 9&amp;rdquo; and &amp;ldquo;Migrating to Java 9 Modules&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Both sessions where more or less covering the same ground, although from a different perspective.
Alan Bateman from Oracle took the more theoretical view and explained what you can expect to happen when you want to move to Java 9.
He also busted some myths, like the one that &amp;ldquo;nothing will continue to work&amp;rdquo; or &amp;ldquo;everything first needs to be modularised&amp;rdquo;.&lt;/p&gt;</description></item><item><title>JBCNConf &amp; Voxxed Days LU</title><link>https://maarten.mulders.it/2017/06/jbcnconf-voxxed-days-lu/</link><pubDate>Thu, 22 Jun 2017 15:05:32 +0200</pubDate><guid>https://maarten.mulders.it/2017/06/jbcnconf-voxxed-days-lu/</guid><description>&lt;p&gt;Wow, that was a busy and inspiring week!
In one week, I&amp;rsquo;ve visited two conferences in two different countries to give talks on two different subjects.
But the most inspiring part came from attending other sessions.
I&amp;rsquo;ll highlight one session from both conferences.&lt;/p&gt;
&lt;h3 id="jbcnconf-2017"&gt;JBCNConf 2017&lt;/h3&gt;
&lt;p&gt;On JBCNConf, I&amp;rsquo;ve attented a session by &lt;a href="https://twitter.com/burrsutter"&gt;Burr Sutter&lt;/a&gt; about &lt;a href="http://vertx.io/"&gt;Vert.x&lt;/a&gt;.
This was a session full of energy, as Burr is really capable of making your enthusiastic of whatever he is talking on.
As he walked us through the various options you have to build and deploy Vert.x-based applications, he also showed a lot of demos.
One of the demos involved &amp;ldquo;simple&amp;rdquo; temperature sensors over MQTT on miniature computers (aside: the size of these computers was largely dominated by their batteries&amp;hellip; impressive!) to his MacBook showing you can run Vert.x in multiple languages that still communicate with each other.
It also illustrated how to handle events coming in at this pace, introducing the concepts of streaming events.&lt;/p&gt;</description></item><item><title>Verify logging with Logback</title><link>https://maarten.mulders.it/2017/03/verify-logging-with-logback/</link><pubDate>Thu, 02 Mar 2017 10:15:32 +0200</pubDate><guid>https://maarten.mulders.it/2017/03/verify-logging-with-logback/</guid><description>&lt;p&gt;Sometimes you have a piece of logging that is very important, maybe even part of a business requirement.
In that case, you might want to verify that in a unit test, so you can rest assured that this requirement is actually met.
How to do that?&lt;/p&gt;
&lt;h3 id="mock-it-away"&gt;Mock it away&lt;/h3&gt;
&lt;p&gt;A first approach might be to just mock your logging framework in a unit test and verify it was called as you expected.
It might sound tempting, and easy to do, but &lt;a href="https://github.com/mockito/mockito/wiki/How-to-write-good-tests#dont-mock-type-you-dont-own"&gt;not everybody likes it&lt;/a&gt;.
And in fact, you might run into some issues when walking this path, because some libraries tend to make classes and/or methods final so they can&amp;rsquo;t always be mocked away.
Also, a lot of people tend to create a logger by doing &lt;code&gt;private static final Logger LOG = ...&lt;/code&gt;, which makes it even harder to mock it away.
Making your logger an instance variable just so you can test it? Nah&amp;hellip;&lt;/p&gt;</description></item><item><title>Blah blah Microservices blah blah</title><link>https://maarten.mulders.it/2017/02/blah-blah-microservices-blah-blah/</link><pubDate>Sat, 25 Feb 2017 20:15:40 +0200</pubDate><guid>https://maarten.mulders.it/2017/02/blah-blah-microservices-blah-blah/</guid><description>&lt;p&gt;As a closing keynote on the &lt;a href="https://maarten.mulders.it/blog/2017/02/jfokus-day-2.html"&gt;second day of Jfokus&lt;/a&gt;, &lt;a href="https://twitter.com/jboner"&gt;Jonas Bonér&lt;/a&gt; took the stage under the very clarifying title &amp;ldquo;Blah blah Microservices blah blah&amp;rdquo;, which turned out to mean &amp;ldquo;From microliths to microsystems&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;As a first observation, he stated that no-one really likes microservices.
They are kind of a necessary evil - because &amp;ldquo;doing&amp;rdquo; microservices comes at a cost.
In fact, microservices are just a specialisation of an older concept called distributed systems.
But what we often build are microliths - an application that might be called a microservice except for the fact that it lives alone.
No failover, no resilience, nothing.
But just like actors, microservices should come in systems.
And just as important, microservices should come &lt;em&gt;as&lt;/em&gt; systems, designed as a distributed system, which each microservice focussing on a single responsibility.&lt;/p&gt;</description></item><item><title>Jfokus, Day 2</title><link>https://maarten.mulders.it/2017/02/jfokus-day-2/</link><pubDate>Wed, 08 Feb 2017 16:30:40 +0200</pubDate><guid>https://maarten.mulders.it/2017/02/jfokus-day-2/</guid><description>&lt;p&gt;The second day of Jfokus is just as action-packed as &lt;a href="https://maarten.mulders.it/blog/2017/02/jfokus-day-1.html"&gt;the first one&lt;/a&gt;.
However, part of the action is me giving &lt;a href="https://www.jfokus.se/jfokus/talks.jsp#Buildingcross-platfo"&gt;two&lt;/a&gt; &lt;a href="https://www.jfokus.se/jfokus/talks.jsp#OutsmartingtheSmartM"&gt;talks&lt;/a&gt;.
Both of them scheduled today, so a little less time for attending other sessions and blogging about them.
I did attend some other sessions after lunch time, on which I&amp;rsquo;ll report below.&lt;/p&gt;
&lt;h3 id="introduction-to-machine-learning"&gt;Introduction to Machine Learning&lt;/h3&gt;
&lt;p&gt;Directly after the lunch, &lt;a href="https://twitter.com/_JamesWard"&gt;James Ward&lt;/a&gt; gave an introduction to machine learning.
He started with a very recognizable story about how humans (&lt;em&gt;in casu&lt;/em&gt; his daughter) learn new facts about the world around them.
Machine learning is in fact no different than human learning: building a model, trying something, seeing whether and how it changes reality and updating the model.&lt;/p&gt;</description></item><item><title>Quickly switch Java versions on macOS</title><link>https://maarten.mulders.it/2017/02/quickly-switch-java-versions-on-macos/</link><pubDate>Tue, 07 Feb 2017 18:06:40 +0200</pubDate><guid>https://maarten.mulders.it/2017/02/quickly-switch-java-versions-on-macos/</guid><description>&lt;p&gt;Inspired by &lt;a href="https://maarten.mulders.it/blog/2017/02/jfokus-day-1.html#java-9-make-way-for-modules"&gt;a Jfokus session I attended today&lt;/a&gt; I decided to download and install a preview of Java 9 on my MacBook.
That went pretty quick and without much trouble.
But when I issued &lt;code&gt;java -version&lt;/code&gt; on my terminal, I was greeted with&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Java(TM) SE Runtime Environment (build 9-ea+155)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+155, mixed mode)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Although that&amp;rsquo;s nice - you&amp;rsquo;d even expect it, maybe - I realised I often need Java 8 as well.
How to quickly switch between the two?&lt;/p&gt;</description></item><item><title>Jfokus, Day 1</title><link>https://maarten.mulders.it/2017/02/jfokus-day-1/</link><pubDate>Tue, 07 Feb 2017 08:10:40 +0200</pubDate><guid>https://maarten.mulders.it/2017/02/jfokus-day-1/</guid><description>&lt;p&gt;These days, I&amp;rsquo;m in Stockholm, attending and speaking at the &lt;a href="https://www.jfokus.se/"&gt;Jfokus conference&lt;/a&gt;.
Yesterday night was a great opportunity to get to know a few other speakers during dinner.
We were even surprised by an act of the &lt;a href="http://www.lemonsqueezy.se/"&gt;Lemon Squeezy&lt;/a&gt; barbershop quartet singing for us - very beautiful!&lt;/p&gt;
&lt;p&gt;But today, the serious stuff started.
In the following sections, I have written down my notes and observations of each of the sessions I attended.&lt;/p&gt;</description></item><item><title>Automatic scan for known vulnerabilities in dependencies</title><link>https://maarten.mulders.it/2016/08/automatic-scan-for-known-vulnerabilities-in-dependencies/</link><pubDate>Tue, 30 Aug 2016 15:30:40 +0200</pubDate><guid>https://maarten.mulders.it/2016/08/automatic-scan-for-known-vulnerabilities-in-dependencies/</guid><description>&lt;p&gt;When using third-party components (be it open source or not), we all know it&amp;rsquo;s a good practice to keep your frameworks and libraries up to date.
This is also one of the spearhead in the &lt;a href="https://www.owasp.org/index.php/Top_10_2013-Top_10"&gt;OWASP Top 10 (2013 edition)&lt;/a&gt;: &lt;a href="https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities"&gt;A9 - Using Components with Known Vulnerabilities&lt;/a&gt;.
To help you assess your projects status with regard to this, OWASP.org developed the tool &lt;a href="https://www.owasp.org/index.php/OWASP_Dependency_Check"&gt;Dependency Check&lt;/a&gt;.
This tool is primarily intended code bases in Java, .NET, Ruby, Node.js, and Python.
Integration with various build tools is also provided for.&lt;/p&gt;</description></item><item><title>Easily upgrade Java dependencies</title><link>https://maarten.mulders.it/2016/01/easily-upgrade-java-dependencies/</link><pubDate>Wed, 20 Jan 2016 17:11:40 +0200</pubDate><guid>https://maarten.mulders.it/2016/01/easily-upgrade-java-dependencies/</guid><description>&lt;p&gt;To start with a cliche: the Java ecosystem continues to develop at a high pace.
Various open source frameworks releasing versions, sometimes even multiple versions at the same time.
This may quickly turn into &lt;a href="https://maarten.mulders.it/blog/2016/08/automatic-scan-for-known-vulnerabilities-in-dependencies.html"&gt;a risk&lt;/a&gt;
But how to deal with it?&lt;/p&gt;
&lt;p&gt;Basically, you have two options.
We&amp;rsquo;ll take a typical Maven-project as an example, which uses &lt;a href="https://commons.apache.org/proper/commons-lang/"&gt;Commons Lang 3&lt;/a&gt;.
See &lt;a href="#gradle"&gt;the end of this post&lt;/a&gt; if you prefer Gradle over Maven.&lt;/p&gt;
&lt;h3 id="automatic-upgrades"&gt;Automatic upgrades&lt;/h3&gt;
&lt;p&gt;Maybe the simplest way is automatic upgrading.
You can achieve this by not specifying an exact version of your dependency, but instead specify a &lt;em&gt;version range&lt;/em&gt;.
If you would normally have this snippet in your POM:&lt;/p&gt;</description></item><item><title>This method is likely to yield significantly better performance</title><link>https://maarten.mulders.it/2013/04/this-method-is-likely-to-yield-significantly-better-performance/</link><pubDate>Sat, 06 Apr 2013 14:57:21 +0000</pubDate><guid>https://maarten.mulders.it/2013/04/this-method-is-likely-to-yield-significantly-better-performance/</guid><description>&lt;p&gt;This week, I came across an interesting difference between the Java API documentation and its current implementation.
A difference?
Or is it just a matter of thorough reading?&lt;/p&gt;
&lt;p&gt;If you look at the &lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#valueOf%28double%29"&gt;Javadoc for &lt;code&gt;Double.valueOf()&lt;/code&gt;&lt;/a&gt;, you&amp;rsquo;ll find that it is likely to outperform the use of &lt;code&gt;new Double()&lt;/code&gt;.
Sounds good!
And don&amp;rsquo;t we all ove it when we get a free performance boost?&lt;/p&gt;
&lt;p&gt;However, examining the source code to see what causes this &amp;ldquo;significantly better space and time performance&amp;rdquo;, we find&amp;hellip;.&lt;/p&gt;</description></item></channel></rss>