We're pleased as {{insert clever simile here}} to announce the second official release of Immutant - version 0.2.0. We consider this release to be beta quality, and it lacks some of the features and API stability that will end up in the 1.0.0 release.

What is Immutant?

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

What's in this release?

We've done quite a bit of work since the 0.1.0 release, the most notable being:

  • Improved support for interactive development of your app at runtime via embedded Swank and nREPL services.
  • XA Transaction support - Messaging and Caching resources are now automatically transactional and XA capable. And you can easily create DataSources for your XA compliant SQL databases so that you can then define transactions incorporating all three types of resources in your apps.
  • The lein-immutant plugin now supports both Leiningen 1.x and 2.x.
  • We rewrote our Clojure runtime wrapper to remove all reflection from any non-initialization call paths, greatly improving its performance. This wrapper is what allows us to provide runtime isolation.
  • Our messaging system now implements the request-response pattern for synchronous messaging.
  • Clojure 1.4.0 is now the default Clojure version. Applications can still specify and use other versions.
  • A handful of bug fixes and other improvements - see the full issue list for the details.

What's next?

Now that we have 0.2.0 out the door, we'll be focusing on:

  • Getting Immutant running smoothly on OpenShift
  • Making Immutant modules as usable as possible outside of the container, e.g. remote message publishers and receivers.
  • Performance benchmarking
  • Durable topic subscribers

Get It

The simplest way to install 0.2.0 is via our Leiningen plugin. See our install page for more details. Once you have it installed, take a look at our Getting Started tutorials.

Get In Touch

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

Issues resolved in 0.2.0

  • [IMMUTANT-30] - Implement the request-response messaging pattern
  • [IMMUTANT-48] - Add support for lein profiles
  • [IMMUTANT-56] - Support decoding BytesMessages
  • [IMMUTANT-57] - Assume messages that have no encoding are :text when decoding
  • [IMMUTANT-58] - Handle deployment when pomegranate resolution fails
  • [IMMUTANT-59] - The compile-path should be included in the deployment's resource path
  • [IMMUTANT-60] - Update the bundled clojure to 1.4.0
  • [IMMUTANT-61] - lein-immutant plugin is throwing an exception if it is used as a dev dependency
  • [IMMUTANT-62] - Fix copy and pasta error in swank/nrepl docs
  • [IMMUTANT-63] - Simple dynamic creation of XA datasources
  • [IMMUTANT-64] - Support distributed XA transactions involving db's, msg destinations, and caches
  • [IMMUTANT-65] - Port logging docs from TorqueBox
  • [IMMUTANT-66] - lein-immutant should checksum the downloaded zip
  • [IMMUTANT-67] - Warning is thrown when trying to deploy Ring 1.1.0 powered application
  • [IMMUTANT-69] - Ability to connect to a remote messaging queue in immutant
  • [IMMUTANT-70] - Jump to def (M-.) doesn't work from slime connected to the swank inside AS7
  • [IMMUTANT-71] - Expose :immutant/descriptor values to app
  • [IMMUTANT-72] - Running web/start in swank server results in 404
  • [IMMUTANT-73] - Support specifying a virtual host
  • [IMMUTANT-75] - Upgrade to latest leiningen-core preview
  • [IMMUTANT-76] - Do some reflection hunting
  • [IMMUTANT-77] - Ensure Korma works with an immutant datasource
  • [IMMUTANT-80] - Remove (web/src-dir) since (utilities/app-root) returns the app root
  • [IMMUTANT-81] - Add section to deployment doc on running immutant