Hi,

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 
'[EMAIL PROTECTED]'
  | 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': [EMAIL PROTECTED]
  | 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': 
[EMAIL PROTECTED]
  | 20:30:20,390 [JbpmScheduler] DEBUG Services : closing service 'logging': 
[EMAIL PROTECTED]
  | 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
  | 

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3978424
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to