Immutant 2.1.5 Release

We just released Immutant 2.1.5. This release includes the following changes:

  • Support for deployment to the newly-released JBoss EAP 7
  • A fix to allow you to use XA, immutant.messaging/listen, and a remote context together
  • We no longer transitively depend on two different versions of jboss-logging
  • Our Undertow dependency has been updated to 1.3.23.Final (from 1.3.0.Beta9) to fix issues with HTTP/2 in Chrome (IMMUTANT-621)
  • Other updates to our transitive depenencies, including:
    • java.classpath 0.2.2 -> 0.2.3
    • potemkin 0.4.1 -> 0.4.3
    • tools.nrepl 0.2.7 -> 0.2.11

We're especially proud to announce full support for EAP7 on the day of its official release, expanding our supported deployment options to the following:

  • Standalone
  • JBoss EAP 6.4 and 7.0
  • WildFly 8, 9, and 10
  • Clojure 1.7, 1.8, and 1.9

Our comprehensive, automated integration test suite verifies all of these whenever a change to Immutant is committed.

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 or JBoss EAP cluster for enhanced features. Its fundamental goal is to reduce the inherent incidental complexity in real world applications.

Get In Touch

As always, 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.1.5

Immutant 2.1.4 Release

We just released Immutant 2.1.4. There are just a couple of small changes in this release, only one of which is notable: you can now provide a handler deal with any errors that occur when writing the ring response. For details, see the immutant.web/run docstring and the example in IMMUTANT-615.

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.

Get In Touch

As always, 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.1.4

  • [IMMUTANT-613] - Add boot-immutant to WildFly guide
  • [IMMUTANT-614] - Using a dev war prints out a deprecation warning for app-relative
  • [IMMUTANT-615] - User can't catch errors that occur when writing the ring response
  • [IMMUTANT-616] - Allow adding extensions to undertow's WebSocket handshake handler

An Immutant Plugin For Boot Redux

Last year, we released a Boot plugin for building Immutant WAR archives for deploying to the WildFly application server. This initial version was basically a port of the lein-immutant plugin and didn't really behave as a proper Boot plugin should (mainly by writing outside of and ignoring files in the fileset).

This made it difficult to use the plugin for anything other than a vanilla project, so we rewrote the plugin to be a better Boot citizen.

The new plugin provides two tasks: boot.immutant/gird and boot.immutant/test-in-container. The gird task adds the files needed to activate an Immutant application in WildFly to the fileset, allowing you to use standard Boot tasks to assemble the other contents and actually create the war:

(require '[boot.immutant :refer :all])

(deftask build-war []
  (comp
    (uber :as-jars true)
    (aot :all true)
    (gird :init-fn 'my-app.core/init)
    (war)
    (target)))

For more details on the gird task, see the deployment guide.

The test-in-container task will take an Immutant WAR, spin up a WildFly container, deploy the WAR, run your tests, and shut it down. To build on the above example:

(deftask run-tests []
  (comp
    (build-dev-war)
    (test-in-container)))

For more details on the test-in-container task, see the testing guide.

If you're a Boot + Immutant + WildFly user, please see the README for installation instructions, give it a try and let us know if you run in to any issues, either through the usual channels or by filing an issue.

Immutant 2.1.3 Release

We just released Immutant 2.1.3. Most issues addressed in this release are minor bug fixes and documentation enhancements.

One not-so-minor bug was discovering that our :dispatch? false option has been broken since 2.1.0. That's fixed now, and should help to improve compute-bound benchmark results.

One other minor change worth noting is the addition of two functions to the immutant.web.undertow namespace: http-handler, which turns a Ring handler into an Undertow HttpHandler, and graceful-shutdown, which invokes Undertow's ability to gracefully shutdown a web server by prohibiting new requests while pending ones complete. See IMMUTANT-605 for a simple example.

We also had a couple of community contributions in this release: Dave Della Costa fixed our issue with decoded :path-info, and Matthias Nehlsen fixed some documentation issues with our web namespace. Thanks guys!

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.

Get In Touch

As always, 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.1.3

  • [IMMUTANT-599] - An async call in WildFly can result in a TimeoutException that permanently breaks an app
  • [IMMUTANT-600] - Deploying a servlet to EAP fails if websockets isn't activated
  • [IMMUTANT-601] - Document that a queue shouldn't be shared between 'listen and 'respond
  • [IMMUTANT-604] - Using web/run :filter-map option causes ClassCastException
  • [IMMUTANT-605] - Graceful Shutdown of Web Server
  • [IMMUTANT-606] - deprecate util/app-root and util/app-relative
  • [IMMUTANT-607] - Caching tests fail under WildFly 10.0.0.Final
  • [IMMUTANT-609] - document org.immutant/wildfly dependency in installation & wildfly guides
  • [IMMUTANT-610] - provide a non-decoded :path-info to ring
  • [IMMUTANT-611] - Impossible to run handlers on IO thread (:dispatch? false)
  • [IMMUTANT-612] - Passing undertow options to web/run can result in wrong :port in result

Immutant 2.1.2 Release

We just released Immutant 2.1.2. The only significant change is an option to more easily enable HTTP/2.0 in immutant/web. We've had a few people ask about it and got tired of telling them to use an incremental release while we waited to fix enough bugs to justify an "official" release.

But there simply aren't any bugs to fix. ;)

We updated our Feature Demo with an HTTP/2.0 example using a self-signed certificate since, as you may know, HTTP/2.0 requires SSL.

(Configuring SSL in Java is still terrible, by the way. This release doesn't address that.)

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.

Get In Touch

As always, 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.1.2

  • [IMMUTANT-597] - Destination names segmented with / can shadow each other Inside the container
  • [IMMUTANT-596] - Messaging docs are incorrect wrt specifying destinations in standalone.xml
  • [IMMUTANT-595] - HTTP2 setup problems