<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Java on Ron's Tech Blog</title><link>https://ronveen.com/categories/java/</link><description>Recent content in Java on Ron's Tech Blog</description><generator>Hugo -- 0.147.7</generator><language>en-us</language><lastBuildDate>Tue, 28 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ronveen.com/categories/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Java 27 - JEP 537 - Vector API, Twelfth Incubator</title><link>https://ronveen.com/posts/java-27-jep-537-vector-api-twelfth-incubator/</link><pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-27-jep-537-vector-api-twelfth-incubator/</guid><description>A look at what the Vector API is actually for, and why it&amp;#39;s still incubating after twelve rounds.</description></item><item><title>Java 27 - JEP 538 - PEM Encodings of Cryptographic Objects (Third Preview)</title><link>https://ronveen.com/posts/java-27-jep-538-pem-encodings-of-cryptographic-objects-third-preview/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-27-jep-538-pem-encodings-of-cryptographic-objects-third-preview/</guid><description>The PEM API&amp;#39;s third preview lands in JDK 27 with real API polish and no more excuses to hand-roll PEM parsing yourself.</description></item><item><title>Spring AI Series: 7-Advisors</title><link>https://ronveen.com/posts/spring-ai-series-7-advisors/</link><pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/spring-ai-series-7-advisors/</guid><description>Advisors are Spring AI&amp;#39;s interceptor layer. Learn how the advisor chain works, then build up logging, sanitizing, and blocking advisors to guard BrightCart&amp;#39;s support tickets.</description></item><item><title>Spring AI Series: 6-Tool Calling</title><link>https://ronveen.com/posts/spring-ai-series-6-tool-calling/</link><pubDate>Fri, 10 Jul 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/spring-ai-series-6-tool-calling/</guid><description>Give the model hands. Let BrightCart&amp;#39;s classifier call real Java methods to look up live order data from a database, and learn how the tool-calling loop actually works.</description></item><item><title>JEP 536 - JFR In-Process Data Redaction</title><link>https://ronveen.com/posts/jep-536-jfr-in-process-data-redaction/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/jep-536-jfr-in-process-data-redaction/</guid><description>Learn how JDK Flight Recorder now redacts secrets from command-line arguments, environment variables, and system properties before they ever hit disk.</description></item><item><title>Spring AI Series: 5-Structured Outputs</title><link>https://ronveen.com/posts/spring-ai-series-5-structured-outputs/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/spring-ai-series-5-structured-outputs/</guid><description>Turn free-text LLM responses into typed Java objects — enums, records, lists, and maps — and give BrightCart a ticket classifier you can actually route on.</description></item><item><title>JEP 534: Compact Object Headers by Default</title><link>https://ronveen.com/posts/jep-534-compact-object-headers-by-default/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/jep-534-compact-object-headers-by-default/</guid><description>JEP 534 makes compact object headers the default in JDK 27, shrinking every object from 12 to 8 bytes and handing you 10–20% heap savings without touching a line of code.</description></item><item><title>Spring AI in Depth - 4 - Prompt Engineering</title><link>https://ronveen.com/posts/spring-ai-in-depth-4-prompt-engineering/</link><pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/spring-ai-in-depth-4-prompt-engineering/</guid><description>Move from hardcoded prompt strings to maintainable PromptTemplates — with variables, few-shot examples, and externalized prompt files — in BrightCart&amp;#39;s support system.</description></item><item><title>JEP 533 - Structured Concurrency Gets Sharper in JDK 27</title><link>https://ronveen.com/posts/jep-533-structured-concurrency-gets-sharper-in-jdk-27/</link><pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/jep-533-structured-concurrency-gets-sharper-in-jdk-27/</guid><description>&lt;p>If you&amp;rsquo;ve been following the evolution of Project Loom, you&amp;rsquo;ll know that Structured Concurrency has been on quite a journey. It started as an incubator module in JDK 19, became a preview API in JDK 21, and has now re-previewed five more times since — JDK 22, 23, 24, 25, and 26. JEP 533 is the seventh preview, targeting JDK 27, and this time the changes are meaningful enough that it&amp;rsquo;s worth taking a proper look.&lt;/p></description></item><item><title>Spring AI Series: 3-ChatClient</title><link>https://ronveen.com/posts/spring-ai-series-3-chatclient/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/spring-ai-series-3-chatclient/</guid><description>Learn the ChatClient fluent API inside out — prompts, defaults, model options, response metadata, and streaming — while building the first endpoint of a real support ticket system.</description></item><item><title>Java 27 - part 4: JEP 532 - Primitive Types in Patterns</title><link>https://ronveen.com/posts/java-27-part-4-jep-532-primitive-types-in-patterns/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-27-part-4-jep-532-primitive-types-in-patterns/</guid><description>&lt;h2 id="same-feature-fifth-time-around">Same Feature, Fifth Time Around&lt;/h2>
&lt;p>If you read my &lt;a href="https://ronveen.com/posts/jep530-pattern-matching-for-primitives/">JEP 530 post&lt;/a> at the tail end of the Java 26 series, this one is going to feel familiar. Very familiar.&lt;/p>
&lt;p>JEP 532 is the &lt;em>fifth&lt;/em> preview of &amp;ldquo;Primitive Types in Patterns, &lt;code>instanceof&lt;/code>, and &lt;code>switch&lt;/code>&amp;rdquo;, now targeting JDK 27. And here&amp;rsquo;s the honest headline: &lt;strong>nothing has changed.&lt;/strong> No new syntax, no removed methods, no behavioural tweaks. The JDK team looked at JEP 530, decided it was in good shape, and re-proposed it as-is to bake for another release cycle.&lt;/p></description></item><item><title>Spring AI Series: 2-Setup Spring AI</title><link>https://ronveen.com/posts/spring-ai-series-2-setup-spring-ai/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/spring-ai-series-2-setup-spring-ai/</guid><description>Learn to setup a Spring AI project and understand how it works.</description></item><item><title>Spring AI Series: 1-Introduction to Spring AI</title><link>https://ronveen.com/posts/spring-ai-series-1-introduction-to-spring-ai/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/spring-ai-series-1-introduction-to-spring-ai/</guid><description>Learn what Spring AI is, how it fits into the Spring ecosystem, and get your first chat response in a handful of lines of Java.</description></item><item><title>Java 27 - part 3: JEP 531 - Lazy Constants, Round Three</title><link>https://ronveen.com/posts/java-27-part-3-jep-531-lazy-constants-round-three/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-27-part-3-jep-531-lazy-constants-round-three/</guid><description>&lt;p>&lt;strong>Third Time&amp;rsquo;s the Charm: Lazy Constants Get a Trim and a New Trick&lt;/strong>&lt;/p>
&lt;p>Back in the Java 26 series, I walked you through JEP 526 and the (then) second preview of the Lazy Constants API. If you missed it, the short version is this: Java finally got a clean way to do deferred immutability — fields that initialize on demand but, once set, are treated by the JVM as if they&amp;rsquo;d been hard-coded constants. No more double-checked locking. No more holder idioms. Just &lt;code>LazyConstant.of(...)&lt;/code> and a &lt;code>.get()&lt;/code>.&lt;/p></description></item><item><title>Java 27 - part 1: JEP 523 - G1 Becomes the Default Everywhere</title><link>https://ronveen.com/posts/java-27-part-1-jep-523-g1-becomes-the-default-everywhere/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-27-part-1-jep-523-g1-becomes-the-default-everywhere/</guid><description>&lt;p>&lt;strong>G1 Garbge Collector, Always.&lt;/strong>&lt;br>
If you&amp;rsquo;ve ever wondered which garbage collector the JVM actually picked for you when you &lt;em>didn&amp;rsquo;t&lt;/em> tell it which one to use, the answer was always a little annoying: &amp;ldquo;well, it depends.&amp;rdquo;&lt;/p>
&lt;p>That &amp;ldquo;it depends&amp;rdquo; is exactly what JEP 523, targeting JDK 27, gets rid of. From now on, when you don&amp;rsquo;t specify a collector on the command line, the JVM always picks &lt;strong>G1&lt;/strong>. No exceptions, no hardware-dependent surprises. Let me walk you through what&amp;rsquo;s changing and — more importantly — whether you should care.&lt;/p></description></item><item><title>Java 27 - part 2: JEP 527-Post-Quantum Hybrid Key Exchange for TLS 1.3</title><link>https://ronveen.com/posts/java-27-part-2-jep-527-post-quantum-hybrid-key-exchange-for-tls-1.3/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-27-part-2-jep-527-post-quantum-hybrid-key-exchange-for-tls-1.3/</guid><description>&lt;p>Java 26 has just been released! (depending on your timezone), but work on Java 27 is already on the way.
The first JEP of the new release is &lt;a href="https://openjdk.java.net/jeps/527">JEP 527&lt;/a>: Post-Quantum Hybrid Key Exchange for TLS 1.3.&lt;/p>
&lt;p>&lt;strong>JEP 527 (Post-Quantum Hybrid Key Exchange for TLS 1.3)&lt;/strong> is a Java enhancement designed to protect your internet communications from future quantum computers.&lt;/p>
&lt;p>Here is the breakdown in easy terms:&lt;/p>
&lt;h3 id="1-the-problem-harvest-now-decrypt-later">1. The Problem: &amp;ldquo;Harvest Now, Decrypt Later&amp;rdquo;&lt;/h3>
&lt;p>Today, when you connect to a website (using HTTPS/TLS), the &amp;ldquo;key exchange&amp;rdquo; that secures your connection uses math (RSA or Elliptic Curve) that is very strong for current computers but could be cracked by a powerful &lt;strong>quantum computer&lt;/strong> in the future.&lt;/p></description></item><item><title>Java 26 - part 10: JEP 530 - Pattern matching for primitives</title><link>https://ronveen.com/posts/java-26-part-10-jep-530-pattern-matching-for-primitives/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-10-jep-530-pattern-matching-for-primitives/</guid><description>&lt;h1 id="java-pattern-matching-the-missing-piece-jep-530">Java Pattern Matching: The Missing Piece (JEP 530)&lt;/h1>
&lt;p>We have reached the 10th and final JEP of the Java 26 series.&lt;/p>
&lt;p>If you’ve been following Java for the last few years, you know the language has been on a massive &amp;ldquo;glow-up&amp;rdquo; journey.
It was Project Amber that brought us records, sealed classes, and pattern matching. And this last one has been the stars of the show.
It started as a way to stop writing those annoying casts after an instanceof, and it’s grown into a powerful tool for data-driven code.&lt;/p></description></item><item><title>Java 26 - part 9: JEP 529 - Vector API</title><link>https://ronveen.com/posts/java-26-part-9-jep-529-vector-api/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-9-jep-529-vector-api/</guid><description>&lt;p>&lt;strong>Java’s Vector API: The Marathon Continues (JEP 529)&lt;/strong>&lt;br>
&lt;br>
The Vector API is a new addition to the Java standard library that allows you to perform vector operations on arrays in a single CPU cycle.
If there were a Guinness World Record for the &amp;ldquo;Longest Incubating Feature in Java History,&amp;rdquo; the Vector API would be holding the trophy.
With the arrival of JEP 529, the Vector API is entering its 11th round of incubation in JDK 26.&lt;/p></description></item><item><title>Java 26 - part 8: JEP 526 - Lazy Constants</title><link>https://ronveen.com/posts/java-26-part-8-jep-526-lazy-constants/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-8-jep-526-lazy-constants/</guid><description>&lt;p>&lt;strong>Bye-Bye Boilerplate: Say Hello to Java’s New &amp;ldquo;Lazy Constants&amp;rdquo;&lt;/strong>
If you’ve ever had to initialize a heavy object only when it’s actually needed, you know the drill.
You probably reached for the &amp;ldquo;Double-Checked Locking&amp;rdquo; pattern (which is easy to mess up) or the &amp;ldquo;Initialization-on-demand Holder&amp;rdquo; idiom (which is verbose).&lt;/p>
&lt;p>JEP 526 (Lazy Constants), coming as a second preview in JDK 26, is here to retire those old hacks.
It introduces a first-class way to handle deferred initialization that is thread-safe, easy to read, and—best of all—lightning fast.&lt;/p></description></item><item><title>Java 26 - part 7: JEP 525 - Structured Concurrency</title><link>https://ronveen.com/posts/java-26-part-7-jep-525-structured-concurrency/</link><pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-7-jep-525-structured-concurrency/</guid><description>&lt;p>&lt;strong>The &amp;ldquo;No More Thread Leaks&amp;rdquo; Update: Java’s Structured Concurrency (JEP 525)&lt;/strong>
If you’ve ever written concurrent Java code using ExecutorService, you know it can feel like herding cats.
If one task fails, the others just keep running in the background like zombies, eating up resources and making debugging a nightmare.&lt;/p>
&lt;p>Structured Concurrency is here to fix that. It treats a group of related tasks as a single unit of work.
If the main task is cancelled or fails, all its sub-tasks are automatically shut down. No leaks, no orphans, no headaches.&lt;/p></description></item><item><title>Java 26 - part 6: JEP 524 - PEM Encodings of Cryptographic Objects</title><link>https://ronveen.com/posts/java-26-part-6-jep-524-pem-encodings-of-cryptographic-objects/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-6-jep-524-pem-encodings-of-cryptographic-objects/</guid><description>&lt;p>If you have ever had to read a private key or a certificate from a file in Java, you know the pain.
You probably wrote a utility method that manually stripped out the &amp;mdash;&amp;ndash;BEGIN&amp;hellip; header, removed newlines, and performed a Base64 decode, only to feed it into a KeyFactory.
It felt like hacky string manipulation for something that should be standard.&lt;/p>
&lt;p>The Gist: This JEP, and its predecessor JEP 470 in Java 25, introduces a standardized, easy-to-use API for encoding and decoding PEM (Privacy-Enhanced Mail) files.
Instead of using third-party libraries (like Bouncy Castle) or writing brittle string replacement code, you can now parse keys and certificates natively.&lt;/p></description></item><item><title>Java 26 - part 5: JEP-522 Turbocharging G1 with 'Double Buffering'</title><link>https://ronveen.com/posts/java-26-part-5-jep-522-turbocharging-g1-with-double-buffering/</link><pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-5-jep-522-turbocharging-g1-with-double-buffering/</guid><description>&lt;p>If you run Java in production, you are likely using the G1 (&amp;ldquo;Garbage First&amp;rdquo;) Garbage Collector (it&amp;rsquo;s the default, after all).
In Java 26, G1 is getting a significant &amp;ldquo;free&amp;rdquo; performance boost—estimated at &lt;strong>5–15% better throughput&lt;/strong>—without you changing a single line of code.&lt;/p>
&lt;p>This is one of those JEPs that does its work silently in the background (literally), but it&amp;rsquo;s implications are so significant that it deserves a blog post.&lt;/p></description></item><item><title>Java 26 - part 4: JEP 517 HTTP/3 is Finally Here (Natively)!</title><link>https://ronveen.com/posts/java-26-part-4-jep-517-http/3-is-finally-here-natively/</link><pubDate>Thu, 29 Jan 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-4-jep-517-http/3-is-finally-here-natively/</guid><description>&lt;p>If you’ve been waiting for Java to catch up with the modern web, the wait is over. Java 26 updates the &lt;code>java.net.http.HttpClient&lt;/code> (the one we’ve loved since JDK 11) to officially support &lt;strong>HTTP/3&lt;/strong>.&lt;/p>
&lt;p>Here is an example of how to use the API&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">client&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">HttpClient&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">newHttpClient&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">var&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">request&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">HttpRequest&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">newBuilder&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">URI&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">create&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;https://openjdk.org/&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">GET&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">build&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">var&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">client&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">request&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">HttpResponse&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">BodyHandlers&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">ofString&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">assert&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">statusCode&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">==&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">200&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">htmlText&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">body&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Why should you care?&lt;/strong>
HTTP/3 isn&amp;rsquo;t just a version bump; it swaps out TCP for &lt;strong>QUIC&lt;/strong> (built on UDP). This is a big deal for performance because it solves &amp;ldquo;head-of-line blocking&amp;rdquo;—where one lost packet holds up the entire line of data. It basically means faster handshakes and much more reliable connections, especially if your users are on flaky networks with high packet loss.&lt;/p></description></item><item><title>Java 26 - part 3: JEP 516 Ahead-Of-Time Object caching with any GC</title><link>https://ronveen.com/posts/java-26-part-3-jep-516-ahead-of-time-object-caching-with-any-gc/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-3-jep-516-ahead-of-time-object-caching-with-any-gc/</guid><description>&lt;p>&lt;strong>JEP 516: Having Your Cake (Fast Startup) and Eating It Too (Low Latency)&lt;/strong>&lt;/p>
&lt;p>I have become a greater fan of Project Leyden with every deliverable it produced. I admit, I was sceptical when Chief Language Architect Brian Goetz announced Project Leyden. It felt as if some answer was needed after the arrival of GraalVM and its native images, that had a blistering startup speed. But how could we ever increase the startup of the JVM? Turns out, there are quite of few possibilities.&lt;/p></description></item><item><title>Java 26 - part 2: JEP 504 Remove the Applet API</title><link>https://ronveen.com/posts/java-26-part-2-jep-504-remove-the-applet-api/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-2-jep-504-remove-the-applet-api/</guid><description>&lt;hr>
&lt;p>&lt;strong>Goodbye, Applets! (For Real This Time)&lt;/strong>&lt;/p>
&lt;p>If you&amp;rsquo;ve been doing Java for a while, you probably remember the &amp;ldquo;good old days&amp;rdquo; of running Java in the browser. One day, I was visiting London, from Amsterdam, and I bought my first Java book. This was in de the days before you buy anything at Amazon. The book introduced me to applets for the first time. Must have been around the time of Java 1.2, so we&amp;rsquo;re talking about 1998. Fast forward to a few years later and I had a girlfriend who was studying in IT. One of her assigments was to create a functioning chess application, running in a browser via an applet. Did we have fun writing that applet. Or least, I had fun.
Well, those days of Applet-Chess are over, JEP 504 in Java 26 is finally cleaning house by permanently removing the Applet API.&lt;/p></description></item><item><title>Java 26 - part 1: JEP 500 Prepare Final Mean Final</title><link>https://ronveen.com/posts/java-26-part-1-jep-500-prepare-final-mean-final/</link><pubDate>Mon, 29 Dec 2025 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26-part-1-jep-500-prepare-final-mean-final/</guid><description>&lt;p>When you have been writing Java for a while, you may have noticed that you are writing &lt;code>final&lt;/code> a lot.
You typically use it when defining class or instance variables. In those situations the compiler will ensure that you assigned a value to it before the class constructor completes.
Or you could use it with parameters to indicate that the values of these parameters should not be tinkered with.&lt;/p>
&lt;p>It is Java&amp;rsquo;s version of defining a constant. Or at least, that is what we have been thinking.
But in real life, a final variable can be changed.
Take a look at the following example:&lt;/p></description></item><item><title>Java 26</title><link>https://ronveen.com/posts/java-26/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate><guid>https://ronveen.com/posts/java-26/</guid><description>&lt;p>We&amp;rsquo;ve only just seen the release of Java 25, the latest LTS version of the popular language.
But on March, 17st, the next iteration of the Java language, Java 26, will be launched.&lt;/p>
&lt;h2 id="what-is-in-there">What is in there?&lt;/h2>
&lt;p>Java 26 will be made up of 10 Java Enhancement Proposals.
Here is a short summary. In the coming weeks, I will talk about each of these in more detail on this site.&lt;/p></description></item></channel></rss>