A Java Geek weekly 111

Cherry-pick automation with Bash. What’s new in Kotlin 2.2.21 (and 2.2.20!). Jackson 3.0.0 (GA) released. FFmpeg to Google: Fund Us or Stop Sending Bugs. The Root Cause Fallacy: Hidden Causes. MockK: Under the cover. 7 Common Kubernetes Pitfalls. Agentic Pelican on a Bicycle. Software Development in the Time of Strange New Angels. Mergiraf: syntax-aware merging for Git. Running Java on iOS: Gluon Introduces OpenJDK Mobile Resources and Automated Build Pipelines. Spring Framework 7.

Cherry-pick automation with Bash

I manage my Jekyll blog in a Git repo. My publication process uses 2 branches:

  • master contains all production content
  • feature/newposts has the new blog posts, ready to get published, one commit per post

To publish an existing post:

  1. I check the to-be-published post in the feature/newposts branch
  2. Then, get the associated commit
  3. And cherry pick it in the master branch
  4. Finally, I push

While not that slow, this is very boring. This post explains how I "automated" the above process using bash magic.

What’s new in Kotlin 2.2.21 (and 2.2.20!)
Jackson 3.0.0 (GA) released
  • Java Baseline is now 17
  • Maven groupId, Java package changed to tools.jackson
  • Removal of all Deprecated 2.x functionality
  • Changes to Default Configuration Settings
  • Immutable ObjectMappers, Configure using Builder
  • Unchecked exceptions
  • Embedding of "Java 8 Modules"
  • Improved Tree Model
  • Deprecated Modules: Hibernate data type, JSON Schema
FFmpeg to Google: Fund Us or Stop Sending Bugs

And here we go again: a megacorp with gazillions of money leans on OpenSource committers. Not only do they make profit out of free workforce, but they expect bugs to be fixed in a limited timeframe. Can you be more cynical?

The Root Cause Fallacy: Hidden Causes

TL;DR: There probably isn’t one single root cause, but multiple ones with varying levels of severity. Gotta catch 'em all!

MockK: Under the cover

The post is less about MockK than how it uses specific Kotlin features to offer a friendly API checked at compile-time.

  • Default Value
  • vararg
  • T.() → Unit
7 Common Kubernetes Pitfalls
  • Skipping resource requests and limits
  • Underestimating liveness and readiness probes
  • "We’ll just look at container logs"
  • Treating dev and prod exactly the same
  • Leaving old stuff floating around
  • Diving too deep into networking too soon
  • Going too light on security and RBAC
Agentic Pelican on a Bicycle

The post describes quite an interesting experiment: asking generative AI agents to "improve" upon their first attempt, and see what happens.

Software Development in the Time of Strange New Angels

Perhaps a good prediction of times to come. Worth thinking about.

Mergiraf: syntax-aware merging for Git

As soon as you use any Source Code Management system with a big enough team, you are bound to run into merging conflicts. In Subversion, the granularity was the file: conflicts arised as soon as a file was modified by multiple parties. Git is better in that the granularity is the line. Yet, it can still be a huge PITA to solve 3-way merges. Semantic merging goes beyond the characters to understand the code. This is a great help!

Running Java on iOS: Gluon Introduces OpenJDK Mobile Resources and Automated Build Pipelines

Last month, I mentioned that Swift is going to Android. At the same time, the opposite is happening: Java enters iOS.

Spring Framework 7.0 Release Notes

Spring is in the air!

  • HttpHeaders changes
  • Servlet 6.1 and WebSocket 2.2
  • JPA 3.2 and Hibernate ORM 7.1/7.2
  • Persistence unit management for JPA 3.2/4.0
  • JMS destination handling
  • Jackson 3.x support
  • kotlinx.serialization support
  • Google Gson support in WebFlux
  • GraalVM Native applications
  • CORS Pre-Flight requests behavior change
  • Null safety
  • Class-File API usage for Java 24+ apps
  • Programmatic bean registration
  • Consistent proxy type defaulting and consistent opting out for specific beans
  • Resilience features: RetryTemplate, @Retryable, @ConcurrencyLimit
  • Embracing JPA 3.2 and Hibernate StatelessSession
  • Introducing JmsClient and revisiting JdbcClient
  • API versioning
  • HTTP Interface Client configuration
  • HTTP Interface Client support for InputStream and OutputStream
  • Easier message converters configuration with HttpMessageConverters
  • Pausing of Test Application Contexts
  • Improved Dependency Injection in @Nested Test Class Hierarchies
  • RestTestClient
  • Bean Overrides for non-singleton Beans
  • Context Propagation for Kotlin Coroutines