We want to share our experience with jBpm combined with Seam in this forum. You can find almost the same text in the Seam 2 forum:
We are using Seam 2.2 with jBPM 3.3 in our traffic management project and we have included different workflows and decisions handled by the jBPM/Drools modules.
Hopefully the following observations are useful to others:
- The quality of the jBPM documentation isn't at the same level as the Seam documentation, so you need a lot of additional Googling to get your stuff working. The additional (free) Seam in Action chapter helps a lot, but see warning 4
- if you're doing something which is not really PersonTask related, it's better to work directly with the jBpm API, because it saves you a lot of headache; The integration of Seam with the jBpm non-Task stuff isn't that good and - to be honest - the jBPM API's are very easy to use.
- Never (I mean never) use the jBPM core to store domain objects/values, Searching for them in the database is very slow (tables are NOT indexed). You can do different things to solve the problem of retrieving processes based on domain object; (a) change some core classes of jBPM (b) add indexes to the tables yourself, (c) add simple
searchtableswhich contains the relation between the domain object and the process/task.
- Replace or remove the default logging of jBPM, all examples of jbpm.cfg.xml include this (even Seam in Action), but it is the worst thing you can have in your production environement. We found that out the hard way.
- Try to use the workflow as asynchronous as practically possible, jBpm is not really fast, and slows down your rerender process if it's in the normal requiest/response chain. Combine it with Seam events and rich.push and you see miracles happen.