Failure when ending process
jrojas_pb Oct 15, 2006 9:01 PMHi,
I have a process that loops to a wait state. The wait state uses a timer to perform a number of actions -- see process definition below. Everything runs fine until the Decision node determines that it is time for the process to end. The return("end-transition") eventually throws the exception shown below.
The ProcessManager shown is where the process is started from, and once the process is started, it waits for the Decision node to raise a flag that the process is ending. The exception is thrown before the process.end() statement is called.
I think I am not ending the process appropriately, and that it has to do with the timer. I tried cancelling the timer and suspending the timer, but either approach did not work. Should I be stopping the SchedulerThread? If so, how do I do that?
Thanks in advance for your help!
John
HERE IS THE PROCESS DEFINITION:
<?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="" name="Load Confirm Data Process"> <start-state name="start"> <transition name="" to="Wait For Start Time"></transition> </start-state> <state name="Wait For Start Time"> <event type="node-enter"> <action name="confirm-create-custom-timer-action" class="com.pb.mms.automation.ActionHandlers$CreateCustomTimerAction"> <timerName>start-confirm-automated-tasks</timerName> <startTime></startTime> <dueDate>0 seconds</dueDate> <repeat>30 seconds</repeat> <transitionName>time-out-transition</transitionName> <!-- <actionName>FireTimerAction</actionName> --> </action> </event> <event type="node-leave"> <action name="FireTimerAction" class='com.pb.mms.automation.ActionHandlers$FireTimerAction' /> </event> <transition name="time-out-transition" to="fork1"></transition> </state> <fork name="fork1"> <transition name="do-pkg-transition" to="Load PKG Files"></transition> <transition name="do-pts-transition" to="Load PTS Files"></transition> </fork> <node name="Load PKG Files"> <event type="node-enter"> <action name="load-pkg-files-action" class='com.pb.mms.automation.ActionHandlers$RunMmsServiceAction'> <serviceClass>test.com.pb.mms.bso.TestMmsService</serviceClass> <serviceArguments> <entry><key>dataSetName</key><value>Loadedpkg</value></entry> </serviceArguments> </action> </event> <transition name="" to="join1"></transition> </node> <node name="Load PTS Files"> <event type="node-enter"> <action name="load-pts-files-action" class='com.pb.mms.automation.ActionHandlers$RunMmsServiceAction'> <serviceClass>test.com.pb.mms.bso.TestMmsService</serviceClass> <serviceArguments> <entry><key>dataSetName</key><value>Loadedpts</value></entry> </serviceArguments> </action> </event> <transition name="" to="join1"></transition> </node> <join name="join1"> <transition name="" to="Refresh Campaign Curves"></transition> </join> <node name="Refresh Campaign Curves"> <event type="node-enter"> <action name="refresh-campaign-curves-action" class='com.pb.mms.automation.ActionHandlers$RunMmsServiceAction'> <serviceClass>test.com.pb.mms.bso.TestMmsService</serviceClass> <serviceArguments> <entry><key>test variable</key><value>CurveCreationService</value></entry> </serviceArguments> </action> </event> <transition name="" to="Close Completed Campaigns"></transition> </node> <node name="Close Completed Campaigns"> <event type="node-enter"> <action name="close-completed-campaigns-action" class='com.pb.mms.automation.ActionHandlers$RunMmsServiceAction'> <serviceClass>test.com.pb.mms.bso.TestMmsService</serviceClass> <serviceArguments> <entry><key>test variable</key><value>CampaignCompletionService</value></entry> </serviceArguments> </action> </event> <transition name="" to="Refresh Completed Campaign Curves"></transition> </node> <decision name="Continue Or Shutdown"> <handler class='com.pb.mms.automation.ActionHandlers$EndOrRepeatDecision' /> <transition name="repeat-transition" to="Wait For Start Time"></transition> <transition name="end-transition" to="end1"></transition> </decision> <end-state name="end1"></end-state> <node name="Refresh Completed Campaign Curves"> <event type="node-enter"> <action name="refresh-completed-campaign-curves-action" class='com.pb.mms.automation.ActionHandlers$RunMmsServiceAction'> <serviceClass>test.com.pb.mms.bso.TestMmsService</serviceClass> <serviceArguments> <entry><key>test variable</key><value>CurveCreationService for completed campaigns</value></entry> </serviceArguments> </action> </event> <transition name="" to="Continue Or Shutdown"></transition> </node> </process-definition>
HERE IS THE PROCESS MANAGER:
package com.pb.mms.automation; import java.io.FileInputStream; import junit.framework.TestCase; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.jbpm.JbpmConfiguration; import org.jbpm.JbpmContext; import org.jbpm.context.exe.ContextInstance; import org.jbpm.db.GraphSession; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.graph.exe.Token; import org.jbpm.scheduler.impl.SchedulerThread; /** * @author rojasjw * */ public class ProcessManager extends TestCase { static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); Logger logger = Logger.getLogger( ProcessManager.class ); // static final String processName = "TimerTestProcess"; static final String processName = "Load Confirm Data Process"; static { // configure the logger PropertyConfigurator.configure("src/config.files/log4j.properties"); } public void testProcess() throws Exception { deployProcessDefinition(); long id = signalProcessToStart(); runScheduler(); waitForProcessToEnd( id ); } /** * */ private void deployProcessDefinition() throws Exception { JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { // Deploy the process definition if not already deployed GraphSession graphSession = jbpmContext.getGraphSession(); ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition( processName ); // if( processDefinition == null ) // { FileInputStream fis = new FileInputStream("processes/" + processName + "/processdefinition.xml"); processDefinition = ProcessDefinition.parseXmlInputStream(fis); // Deploy the process definition in the database jbpmContext.deployProcessDefinition(processDefinition); // } assertNotNull( "Definition should not be null", processDefinition ); } finally { jbpmContext.close(); } } /** * */ private long signalProcessToStart() throws Exception { // Lookup the pojo persistence context-builder that is configured above JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { GraphSession graphSession = jbpmContext.getGraphSession(); ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition( processName ); assertNotNull( "Definition should not be null", processDefinition ); // With the processDefinition that we retrieved from the database, we // can create an execution of the process definition just like in the // hello world example (which was without persistence). ProcessInstance processInstance = new ProcessInstance( processDefinition ); assertNotNull( "Instance should not be null", processInstance ); Token token = processInstance.getRootToken(); assertEquals( "start", token.getNode().getName() ); // Let's start the process execution token.signal(); // Now the processInstance is saved in the database. So the // current state of the execution of the process is stored in the // database. jbpmContext.save( processInstance ); return processInstance.getId(); } finally { // Tear down the pojo persistence context. jbpmContext.close(); } } /** * */ private void waitForProcessToEnd( long id ) throws Exception { while( !processNeedsToEnd( id ) ) { logger.info( "@@@@@@@@@@@@@@@@@@@@@@@ waiting for process to end......" ); Thread.sleep( 20000 ); } endProcess( id ); } /** * */ private boolean processNeedsToEnd( long id ) throws Exception { // Lookup the pojo persistence context-builder that is configured above JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { GraphSession graphSession = jbpmContext.getGraphSession(); // Use the process instance id to retrieve the process instance ProcessInstance processInstance = graphSession.loadProcessInstance( id ); // See what state the process is in logger.info( "@@@@@@@@@@@@@@@@@@@@@@@ The processInstance=" + processInstance.getId() + " is in the following node: " + processInstance.getRootToken().getNode().getFullyQualifiedName() ); ContextInstance contextInstance = (ContextInstance) processInstance.getInstance(ContextInstance.class); Object requestEndProcess = contextInstance.getVariable( "request-end-process" ); if( requestEndProcess != null ) return true; else return false; } finally { // Tear down the pojo persistence context. jbpmContext.close(); } } /** * THIS METHOD IS NEVER CALLED */ private void endProcess( long id ) throws Exception { // Lookup the pojo persistence context-builder that is configured above JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { GraphSession graphSession = jbpmContext.getGraphSession(); // Use the process instance id to retrieve the process instance ProcessInstance processInstance = graphSession.loadProcessInstance( id ); // See what state the process is in logger.info( "@@@@@@@@@@@@@@@@@@@@@@@ The processInstance=" + processInstance.getId() + " is in the following node: " + processInstance.getRootToken().getNode().getFullyQualifiedName() ); // THE EXCEPTION OCCURS BEFORE THIS POINT // end the process -- while( !processInstance.hasEnded() ) processInstance.end(); logger.info( "@@@@@@@@@@@@@@@@@@@@@@@ The processInstance=" + processInstance.getId() + " : " + processInstance.getProcessDefinition().getName() + " HAS ENDED" ); // Now the processInstance is saved in the database. So the // current state of the execution of the process is stored in the // database. logger.info( "@@@@@@@@@@@@@@@@@@@@@@@ Saving the ended processInstance=" + processInstance.getId() + " : " + processInstance.getProcessDefinition().getName() ); jbpmContext.save( processInstance ); // The method below will get the process instance back out // of the database and resume execution by providing another // external signal. } finally { // Tear down the pojo persistence context. jbpmContext.close(); } } public void runScheduler() throws Exception { // // Lookup the pojo persistence context-builder that is configured above // JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); // try // { SchedulerThread schedulerThread = new SchedulerThread(); schedulerThread.start(); // } // finally // { // // Tear down the pojo persistence context. // jbpmContext.close(); // } } }
HERE ARE THE ACTION HANDLERS:
package com.pb.mms.automation; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Map; import org.apache.log4j.Logger; import org.jbpm.calendar.BusinessCalendar; import org.jbpm.calendar.Duration; import org.jbpm.context.exe.ContextInstance; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.graph.exe.Token; import org.jbpm.graph.node.DecisionHandler; import org.jbpm.scheduler.SchedulerService; import org.jbpm.scheduler.exe.Timer; import org.jbpm.svc.Services; public class ActionHandlers { static Timer timer = null; static Logger logger = Logger.getLogger( ActionHandlers.class ); private static int counter = 3; /** * Used to calculate a date in the future, that takes place at the hours, minutes, seconds specified in * the indicated startTime. The startTime is formatted in 24 hour format, such as 15:23:21. * * @param startTime - String holding the hours, minutes, seconds, formatted as 'HH:MM:SS' in 24 hour format. * If null, then the current date is returned. */ protected static Date getStartDate( String startTime ) { // calculate the time when the timer should fire -- based on the specified startTime // if no startTime was specified, just use the current date if( startTime != null && startTime.length() > 0 ) try { // load the HH:MM:SS AM/PM value from the process definition into a GregorianCalendar SimpleDateFormat sdf = new SimpleDateFormat( "H:m:s"); GregorianCalendar startTimeCal = new GregorianCalendar(); startTimeCal.setTime( sdf.parse( startTime )); // now copy the HH MM SS AN/PM fields into a today's date GregorianCalendar StartDateCal = new GregorianCalendar(); StartDateCal.set( Calendar.HOUR_OF_DAY, startTimeCal.get( Calendar.HOUR_OF_DAY )); StartDateCal.set( Calendar.MINUTE, startTimeCal.get( Calendar.MINUTE )); StartDateCal.set( Calendar.SECOND, startTimeCal.get( Calendar.SECOND )); // and adjust into the future (24 hours later -- if the calculated start date has already passed while( StartDateCal.getTimeInMillis() < System.currentTimeMillis() ) StartDateCal.add( Calendar.HOUR_OF_DAY, 24 ); return StartDateCal.getTime(); } catch( Exception e ) { logger.error( "Could not calculate date for 1st firing of timer. startTime= " + startTime ); logger.error( "Caught exception " + e, e ); } return new Date(); } public static class CreateCustomTimerAction implements ActionHandler { private static final long serialVersionUID = 1L; // These arguments get their values from the configuration in the processdefinition. // The values are injected directly by the engine. /** the name of the timer */ String timerName; /** OPTIONAL - HH:MM:SS in 24 hour format when the timer should start every day */ String startTime; /** OPTIONAL - when the timer should fire after the optional start time, or right now */ String dueDate; /** OPTIONAL - the repeat interval for the timer */ String repeat; /** The name of the transition to follow after the timer is fired */ String transitionName; /** OPTIONAL -- name of the action to associate with the timer */ String actionName; public void execute( ExecutionContext context ) throws Exception { logger.info( "@@@@@@@@@@@@@@@ processInstance=" + context.getProcessInstance().getId() + " entered wait state" ); // if timer is already created, don't do anything if( timer != null ) return; // context.getContextInstance().setVariable("message", message); logger.info( "@@@@@@@@@@@@@@@ Got the Create Custom Timer event... " + " configured as: " + " timer name=" + timerName + " start time=" + startTime + " duedate=" + dueDate + " repeat=" + repeat + " transitionName=" + transitionName + " action name=" + actionName ); Token token = context.getToken(); timer = new Timer( context.getToken() ); timer.setName( timerName ); Duration duration = new Duration( dueDate ); BusinessCalendar businessCalendar = new BusinessCalendar(); Date dueDate = businessCalendar.add( getStartDate( startTime ), duration ); timer.setDueDate( dueDate ); timer.setRepeat( repeat ); timer.setTransitionName( transitionName ); timer.setAction( context.getProcessDefinition().getAction( actionName )); timer.setGraphElement( context.getEventSource() ); timer.setTaskInstance( context.getTaskInstance() ); // Since this timer is not defined by the process, we need to use the SchedulerService to schedule the timer SchedulerService schedulerService = (SchedulerService) Services.getCurrentService( Services.SERVICENAME_SCHEDULER ); schedulerService.createTimer( timer ); logger.info( "@@@@@@@@@@@@@@@ timer=" + timer ); } } public static class FireTimerAction implements ActionHandler { private static final long serialVersionUID = 1L; public void execute(ExecutionContext context) throws Exception { logger.info( "@@@@@@@@@@@@@@@ processInstance=" + context.getProcessInstance().getId() + " counter=" + counter + " currently at node=" + context.getToken().getNode().getFullyQualifiedName() ); } } public static class RunMmsServiceAction implements ActionHandler { private static final long serialVersionUID = 1L; String serviceClass; Map serviceArguments; public void execute(ExecutionContext context) throws Exception { logger.info( "@@@@@@@@@@@@@@@ processInstance=" + context.getProcessInstance().getId() + " counter=" + counter + " currently at node=" + context.getToken().getNode().getFullyQualifiedName() ); logger.info( "@@@@@@@@@@@@@@@ serviceClass=" + serviceClass + " and serviceArguments=" + serviceArguments ); // MmsService mmsService = BSOFactory.getMmsService( serviceClass ); // // if( serviceArguments == null ) // mmsService.execute(); // else // mmsService.execute( serviceArguments ); // // mmsService.close(); } } public static class EndOrRepeatDecision implements DecisionHandler { private static final long serialVersionUID = 1L; public String decide(ExecutionContext context) { logger.info( "@@@@@@@@@@@@@@@ processInstance=" + context.getProcessInstance().getId() + " counter="+ counter + " currently at node=" + context.getToken().getNode().getFullyQualifiedName() ); if( --counter > 0 ) { logger.info( "@@@@@@@@@@@@@@@ decision advancing to repeat-transition" ); return "repeat-transition"; } else { ProcessInstance processInstance = context.getToken().getProcessInstance(); ContextInstance contextInstance = (ContextInstance) processInstance.getInstance(ContextInstance.class); contextInstance.setVariable( "request-end-process", new Integer(1)); // Make sure the timer's don't get triggered again between now and when the process ends // logger.info( "@@@@@@@@@@@@@@@ cancelling timers for processInstance=" + processInstance.getId() ); // SchedulerService schedulerService = (SchedulerService)Services.getCurrentService( Services.SERVICENAME_SCHEDULER ); // schedulerService.cancelTimersByProcessInstance( context.getToken().getProcessInstance() ); logger.info( "@@@@@@@@@@@@@@@ suspending timers for processInstance=" + processInstance.getId() ); SchedulerService schedulerService = (SchedulerService)Services.getCurrentService( Services.SERVICENAME_SCHEDULER ); schedulerService.suspendTimers( context.getToken() ); // THE EXCEPTION IS THROWN AFTER RETURNING BELOW // WITH OR WITHOUT THE SCHEDULER CODE ABOVE logger.info( "@@@@@@@@@@@@@@@ decision advancing to end-transition" ); return "end-transition"; } } } }
HERE IS THE STACK TRACE:
20:30:10,546 [main] INFO ProcessManager : @@@@@@@@@@@@@@@@@@@@@@@ waiting for process to end...... Hibernate: select tokenvaria0_.CONTEXTINSTANCE_ as CONTEXTI3_1_, tokenvaria0_.ID_ as ID1_1_, tokenvaria0_.TOKEN_ as TOKEN2_1_, tokenvaria0_.ID_ as ID1_24_0_, tokenvaria0_.TOKEN_ as TOKEN2_24_0_, tokenvaria0_.CONTEXTINSTANCE_ as CONTEXTI3_24_0_ from JBPM_TOKENVARIABLEMAP tokenvaria0_ where tokenvaria0_.CONTEXTINSTANCE_=? 20:30:17,196 [JbpmScheduler] DEBUG VariableContainer : create variable 'request-end-process' in 'TokenVariableMap1c232a' with value '1' 20:30:17,216 [JbpmScheduler] DEBUG Converters : adding converter 'D', 'org.jbpm.context.exe.converter.DoubleToStringConverter' 20:30:17,226 [JbpmScheduler] DEBUG Converters : adding converter 'C', 'org.jbpm.context.exe.converter.CharacterToStringConverter' 20:30:17,236 [JbpmScheduler] DEBUG Converters : adding converter 'B', 'org.jbpm.context.exe.converter.BooleanToStringConverter' 20:30:17,276 [JbpmScheduler] DEBUG Converters : adding converter 'Y', 'org.jbpm.context.exe.converter.BytesToByteArrayConverter' 20:30:17,276 [JbpmScheduler] DEBUG Converters : adding converter 'A', 'org.jbpm.context.exe.converter.DateToLongConverter' 20:30:17,286 [JbpmScheduler] DEBUG Converters : adding converter 'R', 'org.jbpm.context.exe.converter.SerializableToByteArrayConverter' 20:30:17,296 [JbpmScheduler] DEBUG Converters : adding converter 'I', 'org.jbpm.context.exe.converter.IntegerToLongConverter' 20:30:17,296 [JbpmScheduler] DEBUG Converters : adding converter 'H', 'org.jbpm.context.exe.converter.ShortToLongConverter' 20:30:17,306 [JbpmScheduler] DEBUG Converters : adding converter 'G', 'org.jbpm.context.exe.converter.FloatToDoubleConverter' 20:30:17,306 [JbpmScheduler] DEBUG Converters : adding converter 'F', 'org.jbpm.context.exe.converter.FloatToStringConverter' 20:30:17,316 [JbpmScheduler] DEBUG Converters : adding converter 'E', 'org.jbpm.context.exe.converter.ByteToLongConverter' 20:30:17,336 [JbpmScheduler] INFO ActionHandlers$EndOrRepeatDecision : @@@@@@@@@@@@@@@ suspending timers for processInstance=2 Hibernate: insert into JBPM_TOKENVARIABLEMAP (TOKEN_, CONTEXTINSTANCE_, ID_) values (?, ?, null) Hibernate: call identity() Hibernate: insert into JBPM_VARIABLEINSTANCE (NAME_, CONVERTER_, TOKEN_, TOKENVARIABLEMAP_, PROCESSINSTANCE_, LONGVALUE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, 'L', null) Hibernate: call identity() Hibernate: update JBPM_TIMER set ISSUSPENDED_=1 where TOKEN_=? 20:30:17,356 [JbpmScheduler] INFO ActionHandlers$EndOrRepeatDecision : @@@@@@@@@@@@@@@ decision advancing to end-transition 20:30:20,200 [JbpmScheduler] DEBUG Decision : selected transition name 'end-transition' 20:30:20,200 [JbpmScheduler] DEBUG GraphElement : event 'node-leave' on 'Decision(Continue Or Shutdown)' for 'Token(/)' 20:30:20,200 [JbpmScheduler] DEBUG GraphElement : event 'transition' on 'Transition(end-transition)' for 'Token(/)' Hibernate: select events0_.TRANSITION_ as TRANSITION7_1_, events0_.ID_ as ID1_1_, events0_.EVENTTYPE_ as EVENTTYPE2_1_, events0_.ID_ as ID1_7_0_, events0_.EVENTTYPE_ as EVENTTYPE2_7_0_, events0_.TYPE_ as TYPE3_7_0_, events0_.GRAPHELEMENT_ as GRAPHELE4_7_0_ from JBPM_EVENT events0_ where events0_.TRANSITION_=? Hibernate: select node0_.ID_ as ID1_5_0_, node0_.NAME_ as NAME3_5_0_, node0_.PROCESSDEFINITION_ as PROCESSD4_5_0_, node0_.ISASYNC_ as ISASYNC5_5_0_, node0_.ACTION_ as ACTION6_5_0_, node0_.SUPERSTATE_ as SUPERSTATE7_5_0_, node0_.SUBPROCESSDEFINITION_ as SUBPROCE8_5_0_, node0_.DECISIONEXPRESSION_ as DECISION9_5_0_, node0_.DECISIONDELEGATION as DECISIO10_5_0_, node0_.SIGNAL_ as SIGNAL11_5_0_, node0_.CREATETASKS_ as CREATET12_5_0_, node0_.ENDTASKS_ as ENDTASKS13_5_0_, node0_.CLASS_ as CLASS2_5_0_ from JBPM_NODE node0_ where node0_.ID_=? 20:30:20,210 [JbpmScheduler] DEBUG GraphElement : event 'node-enter' on 'EndState(end1)' for 'Token(/)' Hibernate: select events0_.NODE_ as NODE6_1_, events0_.ID_ as ID1_1_, events0_.EVENTTYPE_ as EVENTTYPE2_1_, events0_.ID_ as ID1_7_0_, events0_.EVENTTYPE_ as EVENTTYPE2_7_0_, events0_.TYPE_ as TYPE3_7_0_, events0_.GRAPHELEMENT_ as GRAPHELE4_7_0_ from JBPM_EVENT events0_ where events0_.NODE_=? Hibernate: select children0_.PARENT_ as PARENT13_1_, children0_.ID_ as ID1_1_, children0_.NAME_ as NAME3_1_, children0_.ID_ as ID1_21_0_, children0_.VERSION_ as VERSION2_21_0_, children0_.NAME_ as NAME3_21_0_, children0_.START_ as START4_21_0_, children0_.END_ as END5_21_0_, children0_.NODEENTER_ as NODEENTER6_21_0_, children0_.NEXTLOGINDEX_ as NEXTLOGI7_21_0_, children0_.ISABLETOREACTIVATEPARENT_ as ISABLETO8_21_0_, children0_.ISTERMINATIONIMPLICIT_ as ISTERMIN9_21_0_, children0_.ISSUSPENDED_ as ISSUSPE10_21_0_, children0_.NODE_ as NODE11_21_0_, children0_.PROCESSINSTANCE_ as PROCESS12_21_0_, children0_.PARENT_ as PARENT13_21_0_, children0_.SUBPROCESSINSTANCE_ as SUBPROC14_21_0_ from JBPM_TOKEN children0_ where children0_.PARENT_=? Hibernate: select children0_.PARENT_ as PARENT13_1_, children0_.ID_ as ID1_1_, children0_.NAME_ as NAME3_1_, children0_.ID_ as ID1_21_0_, children0_.VERSION_ as VERSION2_21_0_, children0_.NAME_ as NAME3_21_0_, children0_.START_ as START4_21_0_, children0_.END_ as END5_21_0_, children0_.NODEENTER_ as NODEENTER6_21_0_, children0_.NEXTLOGINDEX_ as NEXTLOGI7_21_0_, children0_.ISABLETOREACTIVATEPARENT_ as ISABLETO8_21_0_, children0_.ISTERMINATIONIMPLICIT_ as ISTERMIN9_21_0_, children0_.ISSUSPENDED_ as ISSUSPE10_21_0_, children0_.NODE_ as NODE11_21_0_, children0_.PROCESSINSTANCE_ as PROCESS12_21_0_, children0_.PARENT_ as PARENT13_21_0_, children0_.SUBPROCESSINSTANCE_ as SUBPROC14_21_0_ from JBPM_TOKEN children0_ where children0_.PARENT_=? Hibernate: select children0_.PARENT_ as PARENT13_1_, children0_.ID_ as ID1_1_, children0_.NAME_ as NAME3_1_, children0_.ID_ as ID1_21_0_, children0_.VERSION_ as VERSION2_21_0_, children0_.NAME_ as NAME3_21_0_, children0_.START_ as START4_21_0_, children0_.END_ as END5_21_0_, children0_.NODEENTER_ as NODEENTER6_21_0_, children0_.NEXTLOGINDEX_ as NEXTLOGI7_21_0_, children0_.ISABLETOREACTIVATEPARENT_ as ISABLETO8_21_0_, children0_.ISTERMINATIONIMPLICIT_ as ISTERMIN9_21_0_, children0_.ISSUSPENDED_ as ISSUSPE10_21_0_, children0_.NODE_ as NODE11_21_0_, children0_.PROCESSINSTANCE_ as PROCESS12_21_0_, children0_.PARENT_ as PARENT13_21_0_, children0_.SUBPROCESSINSTANCE_ as SUBPROC14_21_0_ from JBPM_TOKEN children0_ where children0_.PARENT_=? Hibernate: select children0_.PARENT_ as PARENT13_1_, children0_.ID_ as ID1_1_, children0_.NAME_ as NAME3_1_, children0_.ID_ as ID1_21_0_, children0_.VERSION_ as VERSION2_21_0_, children0_.NAME_ as NAME3_21_0_, children0_.START_ as START4_21_0_, children0_.END_ as END5_21_0_, children0_.NODEENTER_ as NODEENTER6_21_0_, children0_.NEXTLOGINDEX_ as NEXTLOGI7_21_0_, children0_.ISABLETOREACTIVATEPARENT_ as ISABLETO8_21_0_, children0_.ISTERMINATIONIMPLICIT_ as ISTERMIN9_21_0_, children0_.ISSUSPENDED_ as ISSUSPE10_21_0_, children0_.NODE_ as NODE11_21_0_, children0_.PROCESSINSTANCE_ as PROCESS12_21_0_, children0_.PARENT_ as PARENT13_21_0_, children0_.SUBPROCESSINSTANCE_ as SUBPROC14_21_0_ from JBPM_TOKEN children0_ where children0_.PARENT_=? 20:30:20,220 [JbpmScheduler] DEBUG GraphElement : event 'process-end' on 'ProcessDefinition(Load Confirm Data Process)' for 'Token(/)' Hibernate: delete from JBPM_TIMER where PROCESSINSTANCE_=? 20:30:20,240 [JbpmScheduler] DEBUG GraphElement : event 'after-signal' on 'State(Wait For Start Time)' for 'Token(/)' 20:30:20,240 [JbpmScheduler] DEBUG Services : executing default save operations 20:30:20,250 [JbpmScheduler] DEBUG HibernateSaveOperation : saving process instance 20:30:20,250 [JbpmScheduler] DEBUG SaveLogsOperation : flushing logs to logging service. Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'S', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, EXCEPTION_, ACTION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, 'A', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, ENTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'O', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'O', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, EXCEPTION_, ACTION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, 'A', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, ENTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, EXCEPTION_, ACTION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, 'A', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, ENTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, ENTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, EXCEPTION_, ACTION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, 'A', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, Eorg.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:171) at org.jbpm.svc.Services.close(Services.java:211) at org.jbpm.JbpmContext.close(JbpmContext.java:141) at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:161) at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:70) Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93)NTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, EXCEPTION_, ACTION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, 'A', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, ENTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, EXCEPTION_, ACTION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, 'A', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, ENTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, VARIABLEINSTANCE_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'R', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, VARIABLEINSTANCE_, OLDLONGVALUE_, NEWLONGVALUE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'G', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, NODE_, ENTER_, LEAVE_, DURATION_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, ?, 'N', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, TRANSITION_, SOURCENODE_, DESTINATIONNODE_, CLASS_, ID_) values (?, ?, ?, ?, ?, ?, ?, 'T', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'Y', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'Y', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'Y', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'Y', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'Y', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CHILD_, CLASS_, ID_) values (?, ?, ?, ?, ?, 'Y', null) Hibernate: call identity() Hibernate: insert into JBPM_LOG (INDEX_, DATE_, TOKEN_, PARENT_, CLASS_, ID_) values (?, ?, ?, ?, 'X', null) Hibernate: call identity() 20:30:20,290 [JbpmScheduler] DEBUG CascadeSaveOperation : cascading save of 'org.jbpm.graph.exe.ProcessInstance@1ffdf86' 20:30:20,290 [JbpmScheduler] DEBUG SchedulerThread : saving updated timer for repetition 'timer(start-confirm-automated-tasks,20:30:48,979)' in '28689' millis 20:30:20,290 [JbpmScheduler] DEBUG JbpmContext : closing JbpmContext 20:30:20,290 [JbpmScheduler] DEBUG Services : closing service 'persistence': org.jbpm.persistence.db.DbPersistenceService@13552ed 20:30:20,300 [JbpmScheduler] DEBUG DbPersistenceService : committing hibernate transaction Hibernate: update JBPM_TIMER set NAME_=?, DUEDATE_=?, REPEAT_=?, TRANSITIONNAME_=?, EXCEPTION_=?, ISSUSPENDED_=?, ACTION_=?, TOKEN_=?, PROCESSINSTANCE_=?, TASKINSTANCE_=?, GRAPHELEMENTTYPE_=?, GRAPHELEMENT_=? where ID_=? 20:30:20,310 [JbpmScheduler] ERROR BatchingBatcher : Exception executing batch: org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:91) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2166) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) at org.jbpm.svc.Services.close(Services.java:211) at org.jbpm.JbpmContext.close(JbpmContext.java:141) at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:161) at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:70) 20:30:20,330 [JbpmScheduler] ERROR AbstractFlushingEventListener : Could not synchronize database state with session org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:91) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2166) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) at org.jbpm.svc.Services.close(Services.java:211) at org.jbpm.JbpmContext.close(JbpmContext.java:141) at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:161) at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:70) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:91) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2166) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) ... 4 more 20:30:20,380 [JbpmScheduler] ERROR Services : problem closing service 'persistence' org.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:171) at org.jbpm.svc.Services.close(Services.java:211) at org.jbpm.JbpmContext.close(JbpmContext.java:141) at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:161) at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:70) Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:91) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2166) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) ... 4 more 20:30:20,390 [JbpmScheduler] DEBUG Services : closing service 'scheduler': org.jbpm.scheduler.db.DbSchedulerService@18aea9e 20:30:20,390 [JbpmScheduler] DEBUG Services : closing service 'logging': org.jbpm.logging.db.DbLoggingService@182f3da 20:30:20,390 [JbpmScheduler] INFO SchedulerThread : runtime exception while executing timers org.jbpm.JbpmException: problem closing services {persistence=org.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session} at org.jbpm.svc.Services.close(Services.java:223) at org.jbpm.JbpmContext.close(JbpmContext.java:141) at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:161) at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:70) Caused by: org.jbpm.persistence.JbpmPersistenceException: couldn't commit hibernate session at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:171) at org.jbpm.svc.Services.close(Services.java:211) ... 3 more Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:91) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2166) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:980) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:353) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161) ... 4 more