Lift Framework 3.1.0-RC1
Pre-releaseThe Lift Committers are pleased to announce the release of Lift 3.1.0-RC1 on June 16, 2017. This release continues our new release cadence. This will be the final pre-release 3.1.0 build unless we find regressions or need to make critical fixes to the 3.1.0 line before declaring it final.
Provided we do not need to make an additional release candidate, this release will become the final 3.1.0 build at the end of June. For the latter half of the year, we'll start the release cycle over for 3.2.0. You can follow the milestone progress in the Github milestone view.
Below is a summary of the changes that have been made since 3.1.0-M3.
The following new features or improvements have been made in this release:
- (#1857) Addition of the
BoxLogging
helpers. The newBoxLogging
helper provides functions for logging boxes and then continuing to operate on the box, allowing logging to become a fluent part of theBox
interaction. It provides methods that can allow for logging empties and failures, or just failures. It also allows logging these to different log levels, and allows for different adapters to be applied. - (#1862) Improve error messages when we can't find a correct implicit conversion for CSS transforms. When things went wrong while trying to resolve implicit conversions to make a working CSS transform, the compiler error generated was pretty opaque. With this change, we've improved that error message to be more friendly to people without a ton of Lift experience.
Additionally, the following bug fixes have been made in this release:
- (#1852) Always suspend Comet Requests before resuming them. When a container supports request suspension, we were first scheduling a function to resume the request on a different thread and then suspending the request. While the function was scheduled in the future, the fact that it was scheduled before the suspend had definitively occurred meant there were thread schedulings where the resume could occur before the suspend had executed, leading to exceptions. We now suspend the request before scheduling the resume.
- (#1844) Properly handle missing servlet http requests in
buildDeferredFunction
. SometimesS.req
returns aReq
without a servletHTTPRequest
inside. Ergo, when code would callHttpRequest.snapshot
inReq.snapshot
, we would get aNullPointerException
. To fix this, we modifycurrentReq
in both definitions ofbuildDeferredFunction
so that they filter out null requests. Shout out to first-time contributor @arigoldx! - (#1861) Add special handling for
UnavailableException
in boot. This code adds special handling forjavax.servlet.UnavailableException
. Previously, if this exception was thrown during boot, we'd swallow it because we swallowed all exceptions during boot. However, this exception is an idiomatic way to signal a full abort to the Java Application Server running the application. From now on, we will log and re-throw this exception if we see it. - (#1863) Resolve some issues with swallowing exceptions in lift-json. In some cases extraction in lift-json would go horribly wrong and swallow exceptions that occur during class instantiation. This was due to us failing to pass on an underlying exception when we run into these errors. That has now been fixed.
- (#1859) Fix LAFuture.collect/collectAll when sub-futures fail. Before, a single failed LAFuture rolled up in a
collect
orcollectAll
would cause the overall future to hang forever. We now properly fail the overall future if any contained future fails. - (aeeac27) Some minor liftsh changes to deal with some build problems.
This release is immediately available on Maven Central. Please let us know what you think on the mailing list!