[javaone 2025] Engineering a Modern Java Platform: Making Kubernetes Work for Java Teams

Speaker: Stephen Millidge

See the table of contents for more posts


In last 30 years

  • More devices – ex: smartphones
  • Containers
  • K8S
  • Cloud
  • Elastic Infrastructure

Modernization

  • Because Java so successful, a lot of of mission critical applications
  • 47% of apps need modernization.
  • Wouldn’t call legacy because they are running the business
  • Expensive to write from scratch and not a lot of benefit in general
  • Goal: Adopt new infrastructure
  • How; Lift and Shift
  • Why: Scalability and high availability, elasticity, rapid provisioning, software defined infrastructure, cloud migration
  • Most monoliths aren’t that big and can put on cloud intact. Don’t have to switch to microservices

Kubernetes

  • Helps with complexity of running at scale
  • Container Orchestration/Management Platform
  • “poor application server”
  • Goal: maximize uptime

Challenges for Java Developers

  • Context switching from Java code to managing K8S
  • Complex setup
  • High learning curve
  • Steps: upload jar/war, scan for config, compare config values, define config map/secrets, define container/service/pod, launch pod, setup DNS names, configure routing, request SSL cert, integrate/monitoring.

DevOps

  • Move Dev and Ops closer together
  • “The developers do ops”. Rare for ops person to do development

Platform Engineering

  • Offer developer platforms to help teams developer/deploy/manage apps
  • Focus on automation, self service and streamlined workflows to improve developer productivity and system reliability
  • EU is regulating software – supply chain rules

To create platform

  • Can build own
  • Buy from technology partner [he’s from Payara and made a comment about it being a vendor talk; I didn’t realize it was]

My take

Fun fact: he took the SCJP 1.0.2. That is a very specific version number.

The room was packed. He needed a bigger room. I wish he had gotten to K8S earlier in the session but was good once he got there. ( I think it was 12 minutes in or so). Then there was another 15 minutes that felt general at which point I stopped paying attention

Overall the session was fine, but it wasn’t what I was expecting.

[javaone 2025] Fallacies of Software Development

Speaker: Nathaniel Schutta

See the table of contents for more posts


Note: This is not a live blog. I took notes during the session and posted this after as I was expecting a phone call. Also, I missed the last 10 minutes for said phone call.

  • Architect as a service 
  • We like to reinvent the wheel
  • We take for granted people know what we know. Ex. New people haven’t heard of Gang of Four book
  • Answer to many things is it depends 
  • Often seems insignificant in the moment. Find out later matters. Patterns help with this 
  • Software has similarities. Got tired of putting a front end on a database   Will always be doing app modernization 
  • Learn from parents mistakes   Save time. 
  • Higher bandwidth conversation when use words like facade
  • Humans have patterns too
  • NIH. Not invented here. Not my idea 
  • Think can build better than off the shelf. Usually not true but sometimes is   Focus on differentiator.  Politics. Turf war. Jealous/budget
  • Meta work is more interesting than the work 
  • Some people need spotlight. Arsonist firefighter  not a zero sum gene. Goal is to make better software. 
  • Some people missed sharing and golden rule in kindergarten 
  • Value if created something. People valued resale at 63% if built ikea item 
  • Dangerous “that’s how we’ve always done it”. Counter with asking if has to be that way 
  • Status quo is free. What does it cost. Opportunity cost?
  • Are customers proud of hand rolled project 
  • Wouldn’t get on a plane if no maintenance in last year. 
  • Great presenter. Visuals. Quotes. Few words per slide 
  • Sunk. Cost fallacy. I had pizza for lunch. Might as well have an entire cake for dinner 
  • Ok to ask why something is. New hires will notice. Others used to seeing it 

My take

I’ve seen him speak before and he is excellent. Good visuals/few words on a slide/excellent pace and storytelling

[javaone 2025] A New Model for Java Object Initialization

Speaker: Dan Smith

See the table of contents for more posts


General

  • Dictionary says initializing is to set something to a starting position/value/configuration
  • Dangerous things happen if don’t satisfy invariants
  • Initialize – local variables, fields, arrays, classes, class instances, specific objects, components, modules, frameworks, systems

Variables

  • Well behaved variable always initialized before used
  • If final, only one initialization
  • Local variables checked at compile time
  • Whether the default value is an initial value depends on programmer intent
  • Final fields are good because must be initialized/can’t be mutated. However don’t prevent reading before initialization. (via constructor calling a method)

Class initialization state

  • Uninitialized – init hasn’t started yet, class can’t be used
  • Larval – init code running in specific thread; other threads block. Can see default values or final values changing. Can see accidental state
  • Initialized – init completed, class can be used
  • Erroneous – init threw exception. Class may never be used

Instance initialization

  • Some code runs early in construction like passing things to another constructor
  • Other code runs later like instance initializers or constructor bodies

JEP 492 – Flexible constructor bodies

  • Allows more code to run in early phase.
  • Can have lines of code before this/super call
  • Larval state now split into early and late larval
  • Early larval – constructor code is running up the hierarchy
  • Late larval – nrolling down the hierarchy. starting from when Object superclass initialized
  • In early larval, can’t use this or invoke instance methods
  • In late larval, be careful. this can be shared; field may change value, final fields may change
  • Instance initializers considered early larval
  • Array creation expressions produced an initialized array. Programmers don’t see a larval state.

Why change?

  • Initialization bugs are subtle and hard to see
  • Value classes must initialize fields before sharing larval object so JVM can freely make copies
  • Allows null checked variables to ensure cannot be null so can’t have a default value

Future

  • Want to change the timing so field initializers and implicit super() run in early phase.

My take

It was like getting a pick behind the scenes. I also learned that larval is a state. (said in Q&A that concept exists now for classes but doesn’t use term. And for instances the concept is there but don’t use the term state) The beginning was slow and I was worried I would be bored. But it got better