We would appreciate all interested parties to try out this release and submit whatever issues you find ASAP. And, as always, big thanks to all our early adopters who provided invaluable feedback on the alpha, beta, and incremental releases.
What is Immutant?
Immutant is an integrated suite of Clojure libraries backed by Undertow for web, HornetQ for messaging, Infinispan for caching, Quartz for scheduling, and Narayana for transactions. Applications built with Immutant can optionally be deployed to a WildFly cluster for enhanced features. Its fundamental goal is to reduce the inherent incidental complexity in real world applications.
What's changed in this release?
We have quite a few fixes in this release, as well as changes to a few things in the API that we wanted to get right before 2.0.0. The notable API changes are:
- The concurrency for queue listeners now defaults to the number of cores to provide better messaging throughput out of the box (it was 1). The default for topic listeners remains at 1.
:subscription-nameoption to immutant.messaging/context has been renamed to
:client-idto remove confusion with the
:subscription-nameoption to immutant.messaging/subscribe. Both are only used for durable topic subscribers.
- immutant.messaging.pipeline/pipeline error handlers now get passed
the decoded message instead of the
Messageobject, and there is now a immutant.messaging.pipeline/retry function to ease retrying messages from the error handler.
- You can now set the headers and status of an async HTTP channel
response when calling immutant.web.async/send!. You can also now
provide any valid Ring body type in addition to
immutant.web.async/send!has been replaced with two separate callback options:
- immutant.transactions/manager is now a function instead of a value. If you were using the manager directly, you'll now need to invoke it.
For a full list of changes, see the issue list below.
We've moved lein-immutant out of beta. The only changes in 2.0.0 over 2.0.0-beta1 are:
lein immutant warnow properly honors a
:mainthat points to a fully-qualified function in addition to a namespace
testprofile is now active when running
lein immutant test
How to try it
If you're already familiar with Immutant 1.x, you should take a look at our migration guide. It's our attempt at keeping track of what we changed in the Clojure namespaces.
The guides are another good source of information, along with the rest of the apidoc.
For a working example, check out our Feature Demo application!
Get In Touch
Issues resolved in 2.0.0-beta3
- [IMMUTANT-261] - add cluster tests
- [IMMUTANT-360] - Consider defaulting listener :concurrency based on the number of cores
- [IMMUTANT-514] - Notes for improving the migration guide
- [IMMUTANT-525] - wrap-resource from ring 1.3.2 breaks requests to / in WildFly
- [IMMUTANT-527] - Session cookie attributes ignored in-container
- [IMMUTANT-528] - Update docs to cover the whys and hows of destination creation in WF
- [IMMUTANT-529] - Websocket On-Close is Not Called in All Cases
- [IMMUTANT-531] - Expose Undertow's AJP listener
- [IMMUTANT-532] - HTTP streams close after 30 seconds inside WildFly
- [IMMUTANT-533] - ring request maps fail when used with clojure.core/find
- [IMMUTANT-534] - Fix web/run options when they are passed as strings (ala lein run)
- [IMMUTANT-535] - Completed scheduled jobs never go away
- [IMMUTANT-536] - WildFly module should transitively depend on tools.nrepl
- [IMMUTANT-537] - request/response times out when used against multiple remote servers with the same queue name
- [IMMUTANT-538] - Review guides before release
- [IMMUTANT-539] - Multiple schedulers with different options cannot be created
- [IMMUTANT-540] - Expose internal quartz scheduler
- [IMMUTANT-543] - :on-close callback for web.async channel not firing when client disappears
- [IMMUTANT-544] - Throw when immutant.messaging.hornetq/set-address-settings is called in-container
- [IMMUTANT-545] - Rename msg/context's :subscription-name back to :client-id
- [IMMUTANT-546] - Calling immutant.scheduling/stop with no args throws NPE
- [IMMUTANT-547] - Allow setting status and headers from async/send!
- [IMMUTANT-548] - Transactions don't work from an uberjar
- [IMMUTANT-549] - Allow sending ring bodies to channels
- [IMMUTANT-550] - Replace :on-complete with :on-success & :on-error for async/send!
- [IMMUTANT-553] - Don't create a transaction manager at compile time
- [IMMUTANT-554] - Concurrent ws requests can cause a channel to be used for multiple clients in-container
- [IMMUTANT-555] - pipeline error-handlers should be passed the decoded mesage
- [IMMUTANT-556] - pipeline error-handlers should be able to retry a message and still deliver to the caller's future