Released on 2014-11-01.
Another month, another release.
This release saw the continued Java 8-ization that we started with the 0.9.9 release. This is about embracing the new JDK functional types where appropriate, redesigning APIs around interface default and static methods, optimising APIs for type inference and generally just leveraging the general Java 8 goodness. We are also incrementally updating all of the the code samples in the documentation to Java 8 syntax.
Some significant optimizations were made that reduce allocations for all apps, but particularly for apps with lots of handlers. The net result is less garbage created per request, increasing throughput under load.
Promises were beefed up in this release, with the addition of more promise operations to make async composition easier. We've documented all the transforms in this release and provided example usage snippets for most.
There were also great contributions from Rob Zienert (improved development time error page, handlebars integration fixes), Lari Hotari (SpringLoaded updates), Massimo Lusetti (HikariCP updates), John Engelman (RxJava to Promise conversions, unit test API improvements, response decoration API, Gradle plugin improvements) and Stephane Maldini (documentation improvements).
During this month we also finished our move to SnapCI for our test builds. SnapCI had the right mix of features for us, and was faster and more stable than any of other providers we've tried over the last year.
There's some very interesting stuff in the works. The HTTP client is continuing to be improved and we expect the API to be fully documented and explained in the next release. There is also some exciting work going on to improve our configuration story to make it easier to deal with externalised configuration. Some of this should land in the next release.
In recent days there’s been some movement on the Reactive Streams front. While the Promise is used for representing single value “streams”, Ratpack uses the Reactive Streams API for multi value streams. You can see this in action in our support for chunk streaming. The use of the Reactive Streams API allows integration with other implementors of the API. Ronald Kuhn, lead of the Akka project, recently posted an example showing a data stream collaboration between RxJava, Akka, Reactor Project and Ratpack. This is an exciting innovation in the reactive space on the JVM.
Thanks to everyone who contributed code, issues and forum posts for Ratpack 0.9.9. We hope you enjoy 0.9.10.
Pull Requests (14)
-  - Fixing handlebars template cache bug (robzienert)
-  - update Spring Loaded repository url and version to most recent (lhotari)
-  - Hikari connectionTimeout support (mlusetti)
-  - :) - Java 7 is dead ! (smaldini)
-  - upgrade to latest hikaricp version, which turns out to be java8 dependant (mlusetti)
-  - Issue #419: Add ratpack-base gradle plugin that simply adds extension. (johnrengelman)
-  - New development error page styles (robzienert)
-  - Add API for decorating Response before sending. (johnrengelman)
-  - Added missing @Override (AndrewReitz)
-  - Change redirects to properly handle 3xx codes (robzienert)
-  - Issue 388: Improved error handling in HandlingResult. (johnrengelman)
-  - Convert Rx Observables to Ratpack Promises. (Issue 468) (johnrengelman)
-  - Build Pac4JCallbackHandler with a builder (tomdcc)
-  - Version 0.9.10 (ldaley)
Resolved Issues (13)
-  - Add support for unit testing services that return Rx observables
-  - HandlingResult should handle exceptions better
-  - Add ratpack-base gradle plugin
-  - xhr.onprogress is not triggered in Chrome for Ratpack chunked endpoint
-  - Improve the default development error page
-  - Provide a generic throttle for async operations
-  - ClientErrorHandler bound with Guice is not used to render 404 in 0.9.9
-  - When Compression=true -> serverSideEvents() reply is rejected by the browsers (Chrome, FF)
-  - IllegalReferenceCountException
-  - Metrics Module throws exception when ratpack throws a 404.
-  - Add conversion from Rx observable to promise
-  - Support nested promises
-  - HttpClient Redirect Improvements