We're happy, happy, happy to announce Immutant 1.0.2 - "HamBiscuit".

This release is primarily a bug fix release, with a couple of other enhancements thrown in. As always, view our road map here.

What is Immutant?

Immutant is an application server for Clojure. It's an integrated platform built on JBoss AS7 that aims to reduce the inherent incidental complexity in real world applications.

What's in this release?

In addition to fixes, we added a few backwards-compatible features:

  • It's now possible to use Immutant's integrated Infinispan data grid as a Datomic data store. We'll provide more details on this in a future blog post.
  • We now expose the max number of HTTP connections as a system property.
  • We've attempted to make the immutant.cache API more functional by introducing a swap! function.
  • We've extended the fanout capabilities of pipelines.
  • We now default :nrepl-port to 0 when the :dev profile is active.

The last item deserves some emphasis. What it means is that unless you explicitly set :nrepl-port to nil in either project.clj or profiles.clj, you'll get a dedicated nREPL service for any app you deploy to your Immutant with the :dev profile active. When developing, this is convenient and desired, but it means you should probably take care to deploy your app to production without activating the :dev profile, i.e. use the with-profile Leiningen subtask. The risk of not doing so is still small as the OS-assigned port is bound to localhost by default and unlikely to be exposed.

The rest was mostly doc enhancements and bug fixes, listed below. We wanted to give a special shout-out to Ian Eslick for not only contributing the fix for IMMUTANT-365 but also helping us make the lein-immutant plugin's test task more robust. Thanks!

Get It

The simplest way to install or upgrade to 1.0.2 is via our Leiningen plugin:

$ lein immutant install 1.0.2

See our install page for more details. Once you have it installed, take a look at our tutorials.

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 1.0.2

  • [IMMUTANT-292] - Configure an Immutant cluster as a Datomic data store
  • [IMMUTANT-349] - daemons/create should accept a keyword for a daemon name
  • [IMMUTANT-350] - Can't seem to queue custom edn tagged elements
  • [IMMUTANT-351] - 'unlisten'ing a listener doesn't remove its MBean
  • [IMMUTANT-352] - Provide configuration option for binding REPL endpoints to different interfaces
  • [IMMUTANT-353] - Invalid cache replication modes should toss an exception
  • [IMMUTANT-355] - Expose number of HTTP service threads as a parameter
  • [IMMUTANT-358] - Expose a 'keys' fn to list jboss service names in the registry
  • [IMMUTANT-363] - provide a wrapping function that applies fanout to a pipeline step externally
  • [IMMUTANT-364] - Unscheduling a job hangs in a cluster
  • [IMMUTANT-365] - Applications using the servlet interface cannot use servlet-sessions as documented
  • [IMMUTANT-367] - Update to leiningen-core 2.3.3
  • [IMMUTANT-368] - Doc the test task's unique context path (app-uri) better
  • [IMMUTANT-369] - Restore mbeans for jobs
  • [IMMUTANT-370] - Implement cache/swap! in terms of cache/put-if-replace
  • [IMMUTANT-371] - message-seq only uses options for the first receive, not subsequent ones
  • [IMMUTANT-372] - Default :nrepl-port to 0 when dev profile is active