Thursday, September 16, 2010

jBPM 3.x does not work in JBoss cluster using transactions?

I often hear this from different sources in my JBoss travels, that jBPM 3.x does not play well in a cluster. With this post I hope to document the solution a bit better for those of you out there searching for the answers to your clustering jBPM problems.

First off, have no fear! Your problems are self induced. This is most often caused by deploying jBPM within a cluster using the provided JMS implementation (messaging queues configuration).  In the on-line documentation you will find the following is stated in section 10.2:

"jBPM can be configured to use a JMS provider or its built-in asynchronous messaging system. The built-in messaging system is quite limited in functionality, but allows this feature to be supported on
environments where JMS is unavailable."

If you are trying to use async messages with the JobExecutor and then it replicates this queue without a proper JMS implementation. You then get jobs starting all over your cluster. I suggest trying a real JMS messaging implementation like JBoss Messaging as provided in the JBoss Enterprise Application Platform.

Just read a bit further in the documentation and you will find how and where to configure this properly:

"The graph execution mechanism uses the interfaces MessageServiceFactory and MessageService to send messages. This is to make the asynchronous messaging service configurable (also in jbpm.cfg.xml)."

I hope this helps out in your jBPM projects