Richard Evans [https://community.jboss.org/people/r3vans] created the discussion

"Re: Commit transaction after each service task?"

To view the discussion, visit: https://community.jboss.org/message/756144#756144

--------------------------------------------------------------
Hello Rahul. Yes, I did implement this strategy (or something very similar 
using a thread pool). I have often run into problems with the persistence 
context but have found everything works if I ensure there is no running 
transaction when I enter jbpm code.


In a common superclass of all handlers...

@Override
public final void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
    WorkHandlerRunner task = new WorkHandlerRunner(kSession, workItem, this);
    synchronized (threadPoolTaskExecutor) {
        threadPoolTaskExecutor.execute(task);
    }
}


In WorkHandlerRunner...
@Override
public void run() {
    WorkItemManager manager = kSession.getWorkItemManager();
    Map<String, Object> result = null;


    try {
        result = doRun(manager);
    } catch (Exception e) {
        ...
    }
    manager.completeWorkItem(workItem.getId(), result);
}


// Do my stuff and commit.
@Transactional
private Map<String, Object> doRun(WorkItemManager manager) throws Exception {
    return handler.doExecuteWorkItem(workItem, manager);
}
--------------------------------------------------------------

Reply to this message by going to Community
[https://community.jboss.org/message/756144#756144]

Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]

_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to