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

Immutant 2.1.1 Release

We just released Immutant 2.1.1! This is mostly a bugfix/documentation release. Specific issues are listed below.

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.

lein-immutant/boot-immutant Releases

We've also released new versions of lein-immutant and boot-immutant (2.1.0 and 0.5.0, respectively). You'll need to update the appropriate plugin if you use Immutant with WildFly - we rearranged some of our upstream dependencies in 2.1.1 that are used in-container, and the new plugins recognize that structure.

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

  • [IMMUTANT-576] - WebSockets can't be used from a user-provided servlet
  • [IMMUTANT-578] - Singleton daemons don't get started on another node if the thread dies
  • [IMMUTANT-579] - Luminus now has :main
  • [IMMUTANT-580] - Support for setting HTTP response headers in the WebSocket handshake
  • [IMMUTANT-581] - Pedestal servlet handler overrides handlers specified using :path
  • [IMMUTANT-583] - Registered closeables aren't closed when a destination is stopped (regression from 2.0.0)
  • [IMMUTANT-585] - Fix infinispan section in EAP guide
  • [IMMUTANT-586] - Expose :filter-map option to web/run for deploying Servlet Filters
  • [IMMUTANT-587] - Immutant seems to be sending "" for query string when it should be sending nil
  • [IMMUTANT-588] - Improve docs for listen to explain the explicit transaction
  • [IMMUTANT-589] - Only reuse the context given to request for the response listener if it is remote
  • [IMMUTANT-590] - Implement all methods on reified JDBC interfaces we return from our factory
  • [IMMUTANT-591] - Immutant doesn't work with clojure 1.8.0-beta2
  • [IMMUTANT-592] - Don't fail a WildFly deployment if the repl fails to start
  • [IMMUTANT-593] - See if we need to use the default listener concurrency for response listeners
  • [IMMUTANT-594] - scheduling docs point to caching/stop instead of scheduling/stop