Announcing Lucee 5.1.4 and 5.2

Results/retrospective for the April 2017 sprint.

Sprint Retrospective

The April 2017 sprint ended on Wednesday, April 26, producing the Lucee 5.1.4 release (5.1.4.19). And this month we’re including a bit of a surprise–as I hinted at in a tweet earlier this week, we’re also shipping a new minor version this month, Lucee 5.2 (5.2.1.9). You’ll have a choice to upgrade to 5.1.4 if you just want the latest fixes, or to 5.2 if you want the new functionality included in the new minor version.

Here are the summary details for the April sprint (these bullet points only apply to the 5.1.4 release; see below for more info about 5.2):

  • Original sprint plan: 13 tickets
  • Tickets added after start of sprint: 5
  • Tickets not completed: 3 (259 needs more development time, and 783 and 1197 are in need of more ticket detail in order to resolve; all 3 have been moved to the May sprint)
  • Tickets completed: 15
  • Sprint start: April 7
  • Sprint end: April 26

Next, while we haven’t decided upon a final format/process for formal release notes, we’re nonetheless including some basic release notes this month. Here they are for 5.1.4:

Lucee 5.1.4 Release Notes

Request Timeout
Request timeout handling was rewritten pretty significantly in order to address Java 8 changes. Before this fix (LDEV-1270) it was possible that a thread killed by a request timeout could lead to what we call “zombie threads"–a thread no longer functioning but still seen by the servlet engine as valid.

Startup Performance
We improved the startup performance of Lucee, specially performance on a first start. This is an ongoing tuning process that will continue with future versions. We also added the ability for Lucee to log, in detail, precisely where Lucee spends time during startup, because this will often vary in different environments.

Full Completed Ticket List (w/ comments)

LDEV-1270
Request timeout lead to zombie threads in servlet engine.

LDEV-1268
Admin errors when bad update URL saved.

LDEV-1257
Startup of the server is not consistent.

LDEV-1253
Lucee start up to slow.

LDEV-1243
REST exceptions not logged.

LDEV-1231
Calling static function will suppress output after called.

LDEV-1227
Static methods in super components can’t be called within a component.

LDEV-1225
Removing a log entry needs Lucee restart.

LDEV-1219
Orientation attribute using landscape not working in cfdocument pdf.

LDEV-1201
Elvis not working on key returned by function call.

LDEV-1182
DateDiff months returns one month less than it should.

LDEV-1038
tag throwing an error when action is set to “protect.”

LDEV-1010
Having EHCache Defined Slows the Process of stopping the service in Windows.

LDEV-802
Inconsistent responses from CFHTTP.

LDEV-1210
Memcached extension regression in Lucee 5 (throws error).

For reference, here’s the full ticket list from the April sprint.

Lucee 5.2 Release Notes

Whereas releases (noted by a 3-part version number) are intended to deliver only bug fixes or security patches, new minor versions of Lucee (2-part version number) are intended to deliver new (or enhanced) features. These improvements are drawn from the Lucee product roadmap (which we’ll share more about in a later post), based on both internal discussion amongst Lucee developers, the board, and LAS members, and of course ultimately are driven by the worldwide community of Lucee users/developers. Here’s more information about what’s included in Lucee 5.2.

Documentation
These improvements are the first steps in ongoing enhancements to Lucee documentation. Under /lucee/doc.cfm you will now see the reference for all tags, functions and components in Lucee CFML. This also includes tags, functions and components provided by extensions, or added manually to Lucee. You can also show your own components there (we will soon provide detailed information on how you can do that):

Administrator Mail Servers
When you define a mail server in the Lucee Administrator you can now choose from predefined providers instead of always having to provide all the details:

At the moment, we support the following providers:

  • GMail (Google)
  • GMX
  • iCloud Mail (me.com)
  • Outlook Mail (Hotmail)
  • Yahoo! Mail

In addition, this list can easily be extended by adding a template for your provider (via a component).

CFDump Tag
The <cfdump> tag now produces far less output than before. Instead of generating a lot of HTML for all the data in a dump, the tag now outputs the data itself as JSON (string), and generates the output with Javascript. Note: Output type “simple” still generates full HTML, as before.

Query Tags
The <cfquery> tag, the function “QueryExecute,” and the component org.lucee.cfml.Query all now support a new argument/attribute “tags” that allows you to define an array of tags, and this array can be used to tag query objects cached with help of the attribute/argument “cachedWithin." Queries can then easily can be flushed using the new argument “tags” in the function “CacheClear.”

(More general support for tags with caches will follow in the future.)

Example:

<cfquery tags=”#[‘person’]#” cachedwithin=”request”>
select * from person
</cfquery>
<cfdump eval=”person”>
...
<cfquery tags=”#[‘person’]#” cachedwithin=”request”>
insert into person(last,first)
values(‘Sorglos’,’Susi’)
</cfquery>
<cfset cacheClear([‘person’],’myQueryCache’)>

Administrator.cfc
The component org.lucee.cfml.Administrator now provides all actions (167) formerly only supported by the <cfadmin> tag. This includes documentation for all possible actions, which can now be referenced in the new documentation area (see above). Here’s a detailed post from Pothy on the dev team about this new capability.

FileTouch Function
The new function FileTouch adds the same functionality you already have with <cffile action=”touch”>, but implemented as a function. This means that if a file path provided to the function does not exist, it is created (empty); if it already exists, then the “lastModified” property is updated.

XML Member Functions
Lucee 5.2 adds support for XML member functions.

Example:

xml=xmlNew(strXML);
// Before you could only do this
dump(XmlGetNodeType(xml));
// Now you can do
dump(xml.getNodeType());

Session/Client Storage
The session/client storage definition In the Lucee Administrator is no longer a text field, where you have to know the possible valid values. Now you can choose the possible values from a drop down:

Catch
The catch scope provided inside a catch block (<cfcatch> or catch{} ) now provides information about the cause of an exception, if there is any. Exceptions thrown by Java often have a root cause, and typically only the cause stated in the exception delivers the info necessary to address the problem that caused the exception.

Query Cache
Lucee 5.2 features performance improvements when using query caching.


Both 5.1.4 and 5.2 are available on the main Lucee downloads page and on Docker Hub. The May sprint plan will be out later this week. Thanks for listening. Holler with questions/comments!

7 Likes

Great Work @micstriit @IamSigmund and team :tada::rocket:

I especially like these little additions :slight_smile: :raised_hand:

Looks like a lot of folks are bumping their gums about:

I wonder if it might be a quick win for May Sprint.

1 Like

Thanks, Geoff. I’ve tagged that ticket, and hopefully we can get it into a sprint soon.

1 Like

I think I was a victim of this “walking dead” threads :cold_sweat:. A server had several short downtimes in a week’s time. Since the update the server runs stable. Keep up the good work.

1 Like

I think your match is a little off: 13 tix to start, added 5, removed 3, that mean there were 15 tickets completed, not 18, which your detail below supports. Keep up the good work!

1 Like

Good catch, @wrrenmelnick. Fixed! Many thanks.

Is it just me or does it seem crazy to so fundamentally change the behavior of the CFDUMP tag?

I think there’s a bug in the implementation because the following code:

<cfdump var="#CGI#">

generates a Javascript error in Chrome:

Uncaught TypeError: Cannot read property ‘TITLE’ of undefined
at parseDumpJSON (20170522.cfm:21)
at 20170522.cfm:124

which is:

if(typeof(currDumpObj.META.TITLE)!="undefined"){

I believe it’s because accessing currDumpObj is case-sensitive and the wrong case is used throughout the new CFDUMP rendering functionality.

1 Like

I was also shocked about this change and the missing QA

1 Like

Agreed Harry, we are working to do better.

CFDUMP change I think was wrong for a number of reasons not least that it assumes it will be in a standard browser window. But IF a feature like this is to be put in again we need significantly more testing.

Thanks for the feedback

2 Likes

Yes, it’s been a breakneck pace of development for the first half of 2017. That was the goal, and while bugs are inevitable, we’ve now crossed a threshold, and we need to slow down and take stock. Accordingly, we’re not doing a June 1 release, but rather we’re going to take our time cleaning up the bug list (in particular regressions from recent releases), getting more feedback from users, tweaking the release cycle (e.g., possibly re-introducing a preview/beta period, at least for minor versions (like the recent 5.2), even if not for all releases), etc. Stay tuned.

Thanks as always for the feedback.

1 Like

The documentation is also now quite out of sync, new functions have been added just with just mentions on the release notes, does the sprint release process include a documentation step?

Hi @Zackster. Documentation is not formally tied to the development/release process, and that’s a problem, in particular as the release cycle has picked up pace. That’s one of the problems we’ll be addressing in this take-a-breath period.

Can there at least be a sooner than normal update to 5.2 that undoes the CFDUMP breakage ?

Hi @thefalken. Yep, that’s a top priority for the next release. That will be July 1 at the latest, but, to your point, we may ship that one sooner to help the folks affected by the <cfdump> changes.

FYI as a temporary bandaid to the cfdump issue you can add this.tag.cfdump.format="classic"; to your Application.cfc to default the format attribute of cfdump to "classic".


Pete Freitag
https://foundeo.com/

6 Likes

Thanks for the update!

One additional question I didn’t see posted earlier. When will the maven repository be updated with the latest jars?

Cheers,
Mike

Hi @mike.kelp. Do you mean when is the next release due to be posted? If so, that should be July 1 (ish). But let me know if you were referring to something else.

Best,
Patrick