As a reminder, the original Lucee ORM extension is no longer actively maintained. Ortus have forked it and are actively maintaining it as the recommended ORM extension for Lucee. See the Lucee ORM docs for more details.
What changed
Removed the old org.lucee.xml.apis bundle from Require-Bundle in the extension manifest
Fixed duplicate entries in the manifest
These changes resolve an OSGi Uses constraint violation that prevents the ORM extension from loading on Lucee 7.1, where the Felix framework’s system package handling is being refactored (LDEV-6044).
Compatibility
Tested across the Lucee ORM test suite:
Lucee 6.2
Lucee 7.0
Lucee 7.1
Lucee ORM ext (5.4.29.27-BETA)
Pass
Pass
Fail - OSGi constraint violation
Ortus ORM ext (6.5.4)
Pass
Pass
Pass
The old Lucee ORM extension cannot load on Lucee 7.1 due to the org.lucee.xml.apis bundle conflicting with the Felix framework’s javax.xml.datatype package exposure. The Ortus extension, with that stale dependency removed, works across all current Lucee versions.
Update to 6.5.4 to ensure compatibility with Lucee 7.1 when it ships. The extension ID for the Ortus ORM extension is D062D72F-F8A2-46F0-8CBC91325B2F067B.
Now that’s been merged, I have a filed a number of new ORM PRs
PR #20 - LDEV-3768 fix NPE on wrong-case HQL named parameters
When an HQL query uses a wrong-case column name to declare a parameter (e.g. ant instead of Ant), getNamedParameterExpectedType() returns null, causing an NPE in HibernateCaster.toSQL(). Fix adds a null check to throw a helpful “entity names are case sensitive” error instead.
When autogenmap=false and the .hbm.xml mapping file doesn’t exist, the extension throws a raw FileNotFoundException instead of a helpful error. Fix adds a !resource.exists() check to throw “Hibernate mapping not found for entity” with the missing file path.
PR #22 - LDEV-4561 fire CFC entity events before global events
ORM events fire in the wrong order — global event handler fires before entity-level CFC handler. Per Adobe docs, CFC events should fire first. Fix swaps the order in all event methods (preInsert, postInsert, preDelete, postDelete, preUpdate, postUpdate, postLoad).
PR #23 – Connection Leak: Dead Reconnect Code (LDEV-6156)
Tech debt from the Hibernate 3 era — SessionAndConn borrows an extra JDBC connection in its constructor that sits idle for the entire session lifetime. The Session.reconnect() recovery path it was intended for has thrown IllegalStateException unconditionally since Hibernate 5.6.
Under edge conditions (MySQL Connector/J 9.5 under pool pressure, stale connections), isConnected() can return false, triggering the dead reconnect block — which leaks the connection.
Additionally, SessionAndConn.close() had no try-finally (so if s.close() throws, the connection is never released), and closeAll() aborted on first exception, leaving remaining sessions unclosed.
Fix:
Remove dead dc field, connect(), getConnection(), and reconnect block
Replace with session recovery (close broken session, open fresh one)
Make close() and closeAll() robust against exceptions
For LDEV-6159, when you say “Set the Lucee orm log level to DEBUG…” what do you mean? If I have the console log level set to WARN, and I set this setting to WARN, is it expected I see those logSQL commands (among others?)