The Lift Committers are pleased to announce the release of Lift 3.3.0 on July 11th, 2018. This release continues our release cadence. This release has no code changes from the 3.3.0-RC1 release.
This year has been a busy one in the personal lives of the Lift Committers so far, and sometimes it's hard to find the time to contribute to open source or... you know... do the final release on time. (cough sorry folks cough.) We hope you'll enjoy this release all the same, though!
The Lift Framework is a mature, advanced framework for the modern software engineer. There are Seven Things that set Lift apart from the other frameworks out there today: it's secure-by-default, developer-centric, scalable, capable of rich interactive behavior, modular, and designer-friendly. If you're new to Lift or interested in checking out what these things mean, we recommend checking out Simply Lift and The Lift Cookbook.
This release of Lift is composed of the following component releases:
Below is a list of changes since Lift 3.2 organized by the type of change and sorted by the PR number.
It is rare for Lift to decide to ship what amounts to a breaking change in a minor point release. However, during this release cycle we discovered a bug in the implementation of
LAFuture that resulted in the
aborted_? check method not working as users expect. Unbeknownst to us, the
aborted_? check method was looking at the
satisfied internal state setting instead of the
aborted internal state setting. This meant that
aborted_? always returned the same result even though they were not the same internal state.
With a lot of consideration, we decided to correct the behavior in Lift 3.3.0 in Pull Request #1940, because it never worked as advertised and the expected impact to user code is that it starts working as the user intended. We are not going to backport this change to avoid user code behavior changing on a patch release.
(#1933) Configurable asset path for Lift-specific assets
By default, Lift will attempt to load an AJAX Spinner gif when doing certain server-to-client operations. Some folks turn this off, but it remains one of the niceties that folks can lean on when waiting on the server and the client to finish talking to each other. Historically, Lift has insisted that for this feature to work the ajax gif must be located at
/images/ajax-loader.gif, however not everyone wants to lay out their application in that fashion.
There is a new lift rule located at
LiftRules.assetRootPath that makes the location of your assets configurable. Its default value is
/, which preserves the existing behavior. You can, however, make it whatever you like.
You could put your AJAX loader at
/assets/images/ajax-loader.gif. You could put it between two slices of bread. You could put it on Amazon S3, instead. You'll be amazed at the places you can put this gif, if you only use your head.
Many thanks to @heharkon!
(#1939) Customizable Service Timers
Many folks using Lift are familiar with the classic timer log messages that appear by default to tell you how long each request in Lift is taking. By default they tend to look like this:
INFO net.liftweb.util.TimeHelpers - Service request (GET) / returned 200, took 455 Milliseconds
Lift now provides the ability to implement custom timing methods through the implementation of the
ServiceRequestTimer trait. Using a
ServiceRequestTimer you can:
- Control how messages are timed.
- Control where that timing information gets reported.
You could, for example, report all request timings to a metrics aggregator and graph the various percentiles of response times as a part of your monitoring. You could only time a subset of requests (those testing newer functionality, for example).
These changes provide a new
LiftRules.installServiceRequestTimer function to install the timer of your choice.
net.liftweb.http.StandardServiceTimer implements the current behavior. Further, the
LiftRules.logServiceRequestTiming is now deprecated and will be removed in Lift 4 in favor of
Many thanks to @andreak!
- (#1846) @Shadowfiend's much anticipated in-repo getting started tutorial is now in
master! Check it out
- (#1931) Some readme improvements courtesy of @kohrVid
- (#1935, #1936) Various performance improvements to lift-json courtesy of @chriswebster
- (#1938) Fixed issues with building the project in IntelliJ courtesy of @andreak
- (#1940) Correction to
LAFuture.isAborted_?and a variable allocation cleanup. Thank you to @zhongsigang
- (#1942, #1945) Deprecated our internal BCrypt implementation in lift-util in favor of using the publicly-available jBCrypt library.
net.liftweb.util.BCryptwas just a copy/paste of version 0.3 of jBCrypt. It is now officially deprecated and is now simply a proxy class to
net.liftweb.util.BCryptwill be removed in Lift 4.0. (h/t @eltimn)
- (#1943) Upgraded the Mongo driver to 3.6.3 (h/t @eltimn)
- (#1944) Some code gardening courtesy of @eltimn!
- (#1950) Dependency and build version bumps. Including:
- Scala 2.12.4 -> 2.12.6
- commons-codec 1.10 -> 1.11
- commons-fileupload 1.3.1 -> 1.3.3
- joda-time 2.9.2 -> 2.10
- joda-convert 1.8.1 -> 2.1
- mongodb-driver 3.6.3 -> 3.7.1
- mongodb-driver-async 3.6.3 -> 3.7.1
- scalaz_core 7.2.7 -> 7.2.24
- scala-xml 1.0.5 -> 1.0.6
- rhino 22.214.171.124 -> 1.7.10
- (#1949) Fixed a bug where in certain cases attempting to evaluate a
Loccould result in surprise NPEs. In particular this could happen if you tried to evaluate the
Locthat was not the
Locfor the current URL your end-user was on.
This release represents six months of hard work on behalf of the contributors. Most of the contributions made to Lift are made on the contributor's own time without any kind of payment. If you use Lift, please take the time to thank a contributor the next time you see them. They'll appreciate knowing their work is valued.
Now, we look forward to Lift 3.4.0 around the beginning of next year. Lift 3.4.0-M1 is currently scheduled to be released August 1, 2018. How the time flies. If you're interested in our progress, you can follow along from the Milestones page.
As always, please reach out to us with any questions or concerns on the mailing list. We hope you enjoy Lift 3.3.0!