In early August I upgraded the build and deployment environments of most of my WO apps from JDK 24 to JDK 25 (release candidate). Happily, I didn't experience anything problematic or unexpected so when JDK 25 was actually released last week, I finished the job and updated the customer deployments I control as well. So; everything up and running on JDK 25, including JavaMonitor and wotaskd from wonder-slim-deployment.
This comes with the traditional warning that my setup differs from that of most WO users. Of the 12 apps upgraded, only one uses EOF and the original Project Wonder, the rest use wonder-slim and Cayenne, so YMMV depending on which WO/Wonder frameworks/features you use.
WO (NSTimeZone) references the class sun.security.action.GetPropertyAction which was removed in JDK 24, meaning a plain WO/Wonder app will fail to start on JDK 24 and later.
I added a fix for this in wonder-slim by putting in a "replacement" class. Works fine and shouldn't interfere with functionality since GetPropertyAction doesn't really do anything anymore, with Java's Security Manager now more or less removed/disabled. If you have an application you'd like to upgrade and aren't using wonder-slim, you can drop that replacement class into your project and it should run fine. That's what I did with my one remaining Project Wonder/EOF project.
There are a number of great reasons to keep your Java installation up to date — that I won't go into. Plenty of folks out there talking about Java in general. But the main reason for my own early adoption was I'd already started using Compact Object Headers as a preview feature in JDK 24. Since that was finalized and released in JDK 25, I felt it was worth the experiment.
Although I haven't done any formal benchmarking suitable for publishing, Compact Object Headers resulted in reduced memory use and well perceivable performance improvements in my apps, so I can recommend trying it out if performance is something you care about. Just add -XX:+UseCompactObjectHeaders to your application's arguments and you're good to go.
Although my apps are now built and run on JDK 25 I still target and do development on JDK 21, mostly because I can't live without DCEVM, now released as a part of the Jetbrains Runtime. Now eagerly waiting for JetBrains to release a JDK 25 runtime so I can upgrade my development environment as well.
| 🚀 ng-objects | NGPopUpButton: fail deliberately on out-of-range selection index | Aug 11 |
| 🚀 ng-objects | NGPopUpButton: selection binding is the sole authority for rendered s… | Aug 11 |
| 🤸♀️ wonder-slim | Log pid | Aug 11 |
| 🚀 ng-objects | Log pid | Aug 11 |
| 🚀 ng-objects | /ng/dev/eval: reject a form-encoded body with a clear error, don't guess | Aug 10 |
| 🚀 ng-objects | NGRequest: FIXME on the remoteAddress accessors | Aug 10 |
| 🤸♀️ wonder-slim | Move dev-loop machinery to er.extensions.dev | Aug 10 |
| 💋 parslips | Dev server: element-API lookup endpoint + a plain-tag binding lint | Aug 10 |
| 🤸♀️ wonder-slim | Add eval and problems dev request handlers (aligned with ng-objects) | Aug 10 |
| 🚀 ng-objects | Add /ng/dev/eval and /ng/dev/problems development endpoints | Aug 10 |
| 🤸♀️ wonder-slim | 8.0.3 | Jun 26 |
| 🌿 parsley | 1.6.0 | Jun 26 |
| 🌿 parsley | 1.5.0 | Jun 18 |
| 🤸♀️ wonder-slim | 8.0.2 | Jun 18 |
| 🦡 vermilingua | 1.1.5 | Jun 15 |
| 🤸♀️ wonder-slim | 8.0.1 | Jun 1 |
| 🌿 parsley | 1.4.2 | Jun 1 |
| 🦡 vermilingua | 1.1.4 | Apr 24 |
| 🚀 ng-objects | 0.1.1 | Apr 22 |
| 🦡 vermilingua | 1.1.3 | Apr 15 |
| 💋 parslips | Dev server surface: planned endpoints + conventions (catch-all roadmap) | Aug 10 |
| 🚀 ng-objects | NGRequest: parse the body lazily (raw body + on-demand form values), not eagerly at the adaptor | Aug 10 |
| 🚀 ng-objects | Headless action driving: render a page, list its actions, invoke one (dev endpoint) | Aug 10 |
| 🤸♀️ wonder-slim | Make ERXWOImage the full <wo:img> replacement (incl. dynamic/data images) | Jul 8 |
| 🌿 parsley | Heat map: make render-tree sibling ordering user-selectable (hottest-first vs source order) | Jul 6 |
| 🚀 ng-objects | Parser: record a SourceRange per binding (not just per element) | Jul 6 |
| 🧩 apiext-format | Generated-from-source authoring mode (annotations + javadoc → .apiext); the file stays canonical | Jul 5 |
| 🤸♀️ wonder-slim | AjaxSlim: remove replaceID (the ajax-replacement mode) | Jul 5 |
| 🧩 apiext-format | Prefix-family bindings (declare a family of bindings by prefix, e.g. ?key query params) | Jul 4 |
| 🧩 apiext-format | Enclosing-context requirement (element must sit inside a form) | Jul 4 |