We're as happy as two punk accordion clapping nuns to announce The Deuce's transition from "alpha" to "beta": Immutant 2.0.0-beta1. At this point, we feel pretty good about the stability of the API, the performance, and the compatibility with both WildFly 8 and the forthcoming WildFly 9.

We expect a final release shortly after WF 9 is official. We would appreciate all interested parties to try out this release and submit whatever issues you find. And again, big thanks to all our early adopters who provided invaluable feedback on the alpha 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?

Bug fixes and docs, of course, plus:

  • Infinispan provides a robust notifications API, invoking callback functions in response to various types of events occurring within a cache's lifecycle. Unfortunately, this API is exposed exclusively through Java annotations, which can be awkward in more dynamic JVM languages like Clojure. So we introduced immutant.caching/add-listener! as a means to engage the notifications API using keywords instead of annotations.
  • By default, Immutant's embedded Undertow web server dispatches requests across a pool of worker threads, but this can adversely impact performance for compute-bound handlers. So we introduced a :dispatch? option for immutant.web/run that, when false, avoids the context switch by invoking the handler on the IO thread accepting the request.
  • Configuration of the cookie identifying session data is now supported by the immutant.web.middleware/wrap-session function.
  • Boolean options to all functions should be consistently suffixed with ? now.

For a full list of changes, see the issue list below.

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 It

There is no longer any "installation" step as there was in 1.x. Simply add the relevant dependency to your project as shown on Clojars.

What's next?

We expect to have a fairly short beta cycle, with a final release once we ensure that everything works well with the upcoming WildFly 9 release.

Get In Touch

If you have any questions, issues, or other feedback about Immutant, you can always find us on #immutant on freenode or our mailing lists.

Issues resolved in 2.0.0-beta1

  • [IMMUTANT-399] - Add listeners interface for InfiniSpan caches
  • [IMMUTANT-468] - Records can't be sent over pipeline when embedded, but work in-container
  • [IMMUTANT-503] - Figure out what we're missing from our poms that clojars promotion expects
  • [IMMUTANT-504] - :context passed to msg/topic is ignored
  • [IMMUTANT-505] - immutant.wildfly causes wildlfly deploy to fail
  • [IMMUTANT-506] - Set the character encoding correctly for response content
  • [IMMUTANT-507] - Add option to run compute-bound handlers on IO thread
  • [IMMUTANT-508] - immutant.web.middleware/wrap-session misbehaves outside of server context
  • [IMMUTANT-510] - Consider adding more options to immutant.web.middleware/wrap-session
  • [IMMUTANT-511] - Catch errors from browse-url in run-dmc
  • [IMMUTANT-512] - Make the usage of ?-suffixed keywords for boolean options consistent
  • [IMMUTANT-513] - add section about context modes to messaging guide