Coming Up for Air

OpenTelemetry and Jakarta REST Services

Knowing what’s going on in your microservices deployment is extremely important when something goes wrong. In a distributed system, though, it can be difficult to know where things have gone wrong. That’s where a tracing system such as OpenTelemetry can be immensely valuable. In this post, we’ll build two simple services, one of which calls the other, and trace the execution from end to end.

A Simple Jakarta EE 9.1 REST Project

Jakarta EE 9.1 was released today, which now lets developers use — officially — Java 11 with the shiny new Jakarta EE namespace introduce in EE 9. So what does a simple Jakarta EE 9.1 REST project look like? I’m so glad you asked. :)

Securing and Testing Quarkus Applications using Keycloak and Wiremock

Obviously, web apps need to be secured. If you’re brave (and some might say foolish), you can roll your own security. Unless you have compelling reasons to do so, however, you probably shouldn’t. Almost as if by design (nyuk nyuk), Quarkus makes it easy to use any OpenID Connect server. One such server is Keycloak, an open source offering also from Red Hat. If your experience is like mine, though, securing endpoints makes testing a touch more complicated. In this post, I’d like to present and walk through a complete example of a secured Quarkus app, using Keycloak, JUnit and Wiremock.

Merry Christmas, 2020

Merry Christmas! After what has been a tough year, my prayer is that this Christmas season will be relaxing and refreshing for us all. To help celebrate the season — I hope — I’ve embedded my church’s Christmas program, Christmas Under the Arches. My prayer is that it encourages you all and helps you focus on the Reason we celebrate. :)

Java 15: New and Notable

JDK 15 hit General Availability today. While I spend most of my time in Kotlin these days, I do keep a close on Java, as it still has a special place in my heart, so I thought I’d make a quick post highlighting some of its new features. :) There are quite a few changes in the release, so I’ll list all of them, but focus on the ones I think most developers will find more interesting.

Writing CLIs with Spring Boot and JCommander

I was recently asked to convert a Spring Boot-based "CLI" to a real CLI utility. It was actually just a normal Spring Boot application with REST endpoints that we’d hit with curl. Pretty ugly. After a few frustrating hours, I finally settled on a solution that seems to work pretty well for us. It uses Spring Boot, of course, as that’s our library of choice, plus JCommander for the argument handling. This is a pared-down example of how the application is structured. And because I care about of each you deeply, I’ll present it in Java AND Kotlin. :)

For those of you in a hurry, you can get the complete code in my GitHub repo. Everyone else, feel free to read along.

Hands-free Flyway and Jooq

Recently, I started working on a new project and I wanted to give Jooq a go. I also wanted to integrate Flyway: I wanted Jooq to generate its various classes based off the database schema, and I want to Flyway to create that schema. That’s all easy enough, but I’m resisting, right now, committing the generated classes to source control (to avoid the churn and additional maintenance), so how do I make that happen with as little work as possible? How do I make it work in a CI environment? Thanks to Maven, the answer is lots and lots of XML. :) Let’s take a look…​

Building Maps in Kotlin

Over the years, I’ve found myself processing a set of data and storing it in a Map, say, something like Map<Long, List<String>> (think something like a list of Room objects, keyed by a building id). I have found myself writing it something like this (in non-idiomatic Kotlin):

val foo = map.get(key)
if (foo == null) {
    foo = MutableList<String>()
    map.put(key, foo)
}
foo.add(bar)

Fortunately, the Kotlin standard library has a better way:

map.getOrPut(key) { mutableListOf() }
    .add(bar)

If key is not found, the lambda is run, adding the result to Map and return to use the value, new or otherwise, to which we add bar. Much more concise. :) Generally speaking, any time you can let the language/compiler do the work for you, you’re going to be better off.

Custom Methods in Spring Repositories

One of the great things about Spring Data Repositories is that they provide a number of query methods out of the box, with the ability to add additional queries simply by adding carefully named methods to the interface, and Spring generates the actual implementation for you. Sometimes, though, you do need to color outside the lines a bit. Thankfully, Spring allows us to do this. You just have to ask it nicely. Here’s now.

Quotes

Sample quote

Quote source