Two new snapshot releases for the WebSocket extensions, fixing stability issues on both Lucee 6.2 and 7.0.
WebSocket Server Extension 3.0.0.20-SNAPSHOT
LDEV-6179 — Fix race condition during startup that caused websocketInfo() to fail with this.mapping is null.
What was happening
On startup, two threads (the background registrar and the first HTTP request) would race to create the websocket.json config file. The loser would get a FileAlreadyExistsException, the mapping would be left permanently null, and every subsequent call to websocketInfo() would NPE. A server restart was the only fix.
This was intermittent — sometimes the timing worked out, sometimes it didn’t. Particularly flaky in CI and Docker environments.
What changed
- Config file creation now handles concurrent writes gracefully
- Restructured the init lifecycle — data creation, component initialisation, and endpoint registration are now separate concerns
- If mapping init fails (e.g. Lucee hasn’t finished deploying), the next call retries instead of being permanently broken
- Fixed
inject()self-delegation that caused infinite recursion inonErroron Lucee 7.x
WebSocket Client Extension 2.3.0.9-SNAPSHOT
LDEV-6189 — Fix OSGi bundle resolution failure on Lucee 7.0.
What was happening
The MANIFEST.MF had a malformed Require-Bundle header using Maven-style group:artifact syntax instead of the OSGi Bundle-SymbolicName. This header never actually matched anything — the dependency was only wired via Import-Package, which relied on Lucee’s lazy bundle recovery path. On Lucee 7.0, this recovery path is timing-sensitive and would sometimes fail on cold start.
What changed
- Fixed
Require-Bundleto use the correct symbolic name - Changed
start-bundlestotrueso bundles are eagerly loaded into Felix on deploy
Testing
Both extensions have been tested against:
- Lucee 6.2 (javax / Tomcat 9 / Java 11)
- Lucee 7.0 (jakarta / Tomcat 11 / Java 21)
CI runs without a warmup step to confirm cold-start stability.
Breaking changes
None. The extension APIs are unchanged.
Feedback welcome — please report any issues on GitHub or reply here.