Coming Up for Air

2020

April

  • 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):

    1
    2
    3
    4
    5
    6
    
    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:

    1
    2
    
    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.

February

  • 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.

January

  • Dear MockK, Repeat After Me

    The project I’m working on is using Mockk in the unit tests. It’s a great library that has made true unit testing so much easier. I ran into a problem, though, where I needed a method I was mocking to return the value it was receiving. To be more specific, we were passing an object to a Spring repository method that had been built inside the method to test, and, to test thoroughly, I needed to get to that object. Turns out, that’s pretty easy to do with Mockk. Let’s take a look…​

2019

December

  • Executable Kotlin Scripts

    A user in #kotlin on Freenode asked how to run a Kotlin script. While the Kotlin docs are pretty clear on how to do that, I thought I’d make a quick post to show how to make an easily executable Kotlin script.

July

  • Java to Kotlin Conversion Question. And Answer.

    Recently, in the #kotlin channel on Freenode, a user asked a question about what was happening to his Java code when using IDEA’s convert-to-Kotlin functionality. He left before anyone had the time to answer, and while he likely doesn’t read my blog, I’m going to answer his question here anyway. :)

February

  • Getting started with Micronaut: Kotlin, JPA, and JWT

    The Micronaut guides are really pretty good. So far, I’ve found just about everything I need. The biggest obstacle so far has been that, at times, the content was scattered across several guides and usually in the wrong language: I’m interested in Kotlin, but the guides seem to be mostly in Java or Groovy. This isn’t surprising, as budgets are limited, of course. What I would like to do here, then, is provide a small sample app, written in Kotlin, that demonstrates how to set up the project, configure and use JPA, and secure the app with JWT.

January

  • Kotlin+Micronaut and IDEA Don't Get Along Together

    Recently, I’ve been experimenting with Micronaut, a new-ish "modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications" from the makers of Grail. So far, I’ve been really impressed. The documentation has been excellent, and the framework is very easy to get started with. I have, though, run in to some trouble writing tests, or, more accurately running tests. I spent far too much time trying to figure it out until I finally broke down and asked, and it turns out that it’s IDEA’s fault. While that’s a bit annoying, there is a workaround, which I’d like to document briefly here.

2018

June

  • Easy File Copy in Kotlin

    Copying files in Java is, I think, header than it seems it should be. Typically, I see that done with, say, a ByteArrayInputStream and a ByteArrayOutputStream . Thanks to Kotlin’s extension function capabilities, this operation is a one-liner:

    1
    
    File("/path/to/destination").writeBytes(File("/path/to/source").readBytes())
    

    That could even be an extension function itself:

    1
    
    fun File.copyFile(dest: File): Unit = dest.writeBytes(this.readBytes())
    

April

  • Jerkey: A Kotlin DSL for Jersey

    I’m currently working on a DSLs-in-Kotlin presentation for my local JUG, so I need a good domain in which to work. HTML is a great sample domain, but it’s been done to death. After a bit of head scratching, I’ve come up with what is, I think, a somewhat novel domain: REST application building. Sure, there are libraries like Ktor, but suffers from some very serious NIH. I’m totally kidding, but the dearth of discussions regarding REST applications and DSL construction was good enough for me, so let’s see what we have so far.

2015

November

  • Kotlin and CDI

    If you’ve been following my blog, you’ve probably noticed that I’ve been spending a lot of time with Kotlin of late. (For the curious, I really like it so far, but I haven’t done just a whole lot with it.) I’ve experimented with writing simple JSF and JAX-RS apps in it, largely to see if I can make it work. With those hurdles cleared, I’m trying something a bit more ambitious: a complete (if basic) Java EE application, written completely in Kotlin. Because I’m a sucker for a bad joke, I’ve dubbed the project KotlinEE. I’m not quite ready to walk through that application yet, but I what I would like to discuss now is an issue I ran into trying to get CDI working with Kotlin.

  • Kotlin-RS

    In keeping with theme of "use existing frameworks with Kotlin" and misleading titles, here’s a quick and dirty demonstration of writing JAX-RS applications using Kotlin.

October

  • Kotlin Faces

    There’s a chance that at least some of you saw the blog title and thought: "Ah ha! A Kotlin wrapper/helper for JSF!" and rushed over to check it out. If so, mission accomplished. :) This really isn’t anything that ambitious. Sorry. :)

    At JavaOne this week, I spent a good deal of time talk to Hadi Hariri, Developer Advocacy Team Lead at JetBrains, about their Kotlin language. With my long background in Java webapps, I often reach for my webapp hammer when trying to learn a new language, so I asked Hadi what Kotlin library he would suggest. His answer, in a nutshell, was that the Java interop in Kotlin is so good, just use whatever you want, so I thought I’d put that to the test with a really simple JSF app. Here it is.

Search

    Quotes

    Sample quote

    Quote source

    About

    My name is Jason Lee. I am a software developer living in the middle of Oklahoma. I’ve been a professional developer since 1997, using a variety of languages, including Java, Javascript, PHP, Python, Delphi, and even a bit of C#. I currently work for Red Hat on the WildFly/EAP team, where, among other things, I maintain integrations for some MicroProfile specs, OpenTelemetry, Micrometer, Jakarta Faces, and Bean Validation. (Full resume here. LinkedIn profile)

    I am the president of the Oklahoma City JUG, and an occasional speaker at the JUG and a variety of technical conferences.

    On the personal side, I’m active in my church, and enjoy bass guitar, running, fishing, and a variety of martial arts. I’m also married to a beautiful woman, and have two boys, who, thankfully, look like their mother.

    My Links

    Publications