[jboss-user] [JBoss jBPM] - How to persist the process state to DB before leaving each n

parchana do-not-reply at jboss.com
Wed May 14 01:26:03 EDT 2008


Hi,

We have a JBPM process with multiple subprocesses, out of the subprocesses  one process can run for number of days. Requirement is that we should persist the process state before leaving each and every node so that if JBoss server goes down in between the process can be re-triggered from the last executed state on server startup.

I have read that JBPM persist the process state on wait nodes and when jbpmContext.close() is called.

Now the problem is we have processes where there is no wait state and the requirement is state should get persisted even before jbpmContext.close(), so as to address recovery from fail-over on server shutdown.

I have tried with following configuration file and managing transactions manually -

<jbpm-configuration>
  |   <jbpm-context>
  |     <service name="persistence">
  |        <factory>
  |           <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory">
  |              <field name="isTransactionEnabled"><false/></field>
  |           </bean>
  |        </factory>
  |     </service>
  |     <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />
  |     <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />
  |     <service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" />
  |     <service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />
  |     <service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
  |   </jbpm-context>
  | </jbpm-configuration>
  | 
Code for managing transaction is written in each ActionHandler as -
public class MyActionHandler implements ActionHandler{
  | 
  | 	public void execute(ExecutionContext context) {
  | 		Transaction tx = null;
  | 		try {
  | 			tx = context.getJbpmContext().getSession().beginTransaction();
  | //business logic in the action 
  | 			if(tx!=null)
  | 				tx.commit();
  | 			context.leaveNode();
  | 		}
  | 		catch(Exception e) {
  | 			logger.error("Error: ",e);
  | 	}
  | }

I can see an entry in jbpm_processInstance table after tx.commit() but when process fails in next node and I try to re-trigger the workflow from this last executed state - it says -

  | org.jbpm.JbpmException: this token is locked by token[1063]
  |         at org.jbpm.graph.exe.Token.signal(Token.java:185)
  |         at org.jbpm.graph.exe.Token.signal(Token.java:140)


Can anyone please help me in this?

-Archana

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4150584#4150584

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4150584



More information about the jboss-user mailing list