Hi Hina,
I think that the problem is the fireUntilHalt and the persistence configuration. There is no problem with your custom workItemHandler, but I've notice that you create a new method called completeWorkItem(), I'm not sure where are you calling that and that can also be another problem, because if you call it without having a fresh reference from the persisted session it will probably breaks. The big problem with fireUntilHalt and persistence sessions is that you will end up with multiple threads fighting with each other in order to execute different actions against the sessions (like startProcess and fire all rules), this will cause problems with transactions at one point or another.
Cheers