We're as happy as this penguin to announce Immutant 1.1.0 - "CelloPudding".

This is a feature and bug fix release. 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?

  • We've upgraded Infinispan to its latest version: 6.0.0.Final. This is primarily to support using Immutant as a data store for Datomic and offers more stability improvements over the previous release.
  • We've shaved a few seconds off the boot process during application deployment. Part of gaining this speedup was no longer loading clojure.tools.logging, so if your app relies on it, it needs to be listed among your dependencies.
  • We've tried to reduce the "noise" in our log output. This is part of an ongoing process to log appropriate information at the right severity level. Feedback always appreciated in this regard.
  • You can now alter the logging level for the console output (and server.log) by setting the jboss.logging.level system property or by passing --log-level to the immutant run task of our plugin (assuming you are running version 1.2.0 of the plugin or newer).
  • Keyword arguments to our functions are now validated, reducing the risk of unexpected behavior due to typos.
  • We've expanded our messaging api to include per-queue address settings, inspired by Chas' work.
  • Fressian is now a supported codec for messaging and caching, inspired by Ian's work.
  • Immutant now implements the URLClasspath protocol introduced in version 0.2.2 of java.classpath enabling an accurate view of your app's isolated classpath within Immutant via a Clojure core library.
  • In the interest of speeding up our incremental builds, we've dropped support for apps using Clojure 1.3. They may still work, but that version is no longer a part of our integration tests.
  • We've also dropped support for our full distribution. We only ship a slim distro now, providing only the minimal JBoss services required to support our Clojure libraries. Over time, Immutant has diverged significantly from the main trunk of JBoss AS development now known as WildFly. For those seeking a full, modern JEE stack, WildFly is the best option. We're expecting future versions of Immutant to more seamlessly integrate with it.

Get It

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

$ lein immutant install 1.1.0

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

What's next?

Our plans are to begin development on version 2.x of Immutant, with a specific emphasis on the ability to optionally embed Immutant libraries within your app, as opposed to deploying them to a container. The latter will continue to be supported, of course, as there are applications for which it makes sense, but we want to explore the idea of embedding not only web features but messaging, caching and scheduling as well. We plan to devote time in the next few weeks figuring out what this will look like. Expect a blog post with more details soon.

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.1.0

  • [IMMUTANT-261] - add cluster tests
  • [IMMUTANT-320] - Consider supporting per-queue address-settings
  • [IMMUTANT-338] - Loading runtime/bootstrap is slower than a turtle drinking molasses on christmas
  • [IMMUTANT-359] - Remove deprecated functions
  • [IMMUTANT-373] - Upgrade Infinispan to 6.0.0
  • [IMMUTANT-376] - Bump up immutant.web's ring dep to 1.2.1
  • [IMMUTANT-379] - loading immutant.xa before runtime initialization causes immutant.xa.transactions/manager to be nil
  • [IMMUTANT-380] - Support data.fressian as a codec
  • [IMMUTANT-381] - Update to leiningen-core 2.3.4
  • [IMMUTANT-382] - Update HornetQ to 2.3.1.Final
  • [IMMUTANT-383] - at-exit fn seems to execute at point where clojure runtime not available
  • [IMMUTANT-387] - Drop support for clojure 1.3.0
  • [IMMUTANT-389] - AbstractMethodError when using transactions (database)
  • [IMMUTANT-391] - messaging.core/delayed shouldn't call the given fn on a realized? call
  • [IMMUTANT-392] - Disable the full build, and adjust for having just a slim build
  • [IMMUTANT-393] - Spruce up docs around running Immutant
  • [IMMUTANT-394] - Enable org.clojure/java.classpath to work inside Immutant
  • [IMMUTANT-395] - Support fn definitions in :nrepl-middleware
  • [IMMUTANT-396] - msg/start docs should mention that :durable and :selector are only for queues
  • [IMMUTANT-397] - Consider validating options passed to various fns
  • [IMMUTANT-398] - Reduce logging noise