[jboss-jira] [JBoss JIRA] Commented: (JBPM-575) delete Timer fails in Scheduler

Bruno Dumon (JIRA) jira-events at jboss.com
Wed Jan 10 04:17:28 EST 2007


    [ http://jira.jboss.com/jira/browse/JBPM-575?page=comments#action_12349897 ] 
            
Bruno Dumon commented on JBPM-575:
----------------------------------

As an alternative solution, I solved the problem by only modifying the SchedulerThread class.

When the process is ended as part of the timer execution, it does not make sense to do any timer updates, so I've simply put an if statement around the part of SchedulerThread that does this

if (processInstance.getEnd() == null) {
  if (timer.getException()!=null) {
    [snipped until last else]
    schedulerSession.deleteTimer(timer);
  }
}

> delete Timer fails in Scheduler
> -------------------------------
>
>                 Key: JBPM-575
>                 URL: http://jira.jboss.com/jira/browse/JBPM-575
>             Project: JBoss jBPM
>          Issue Type: Bug
>          Components: Core Engine
>    Affects Versions: jBPM 3.1
>         Environment: jbpm 3.1, PostgreSQL / MS SQL Server / DB/2, jboss 4.0.4 RC1
>            Reporter: maplat
>         Assigned To: Tom Baeyens
>   Original Estimate: 10 minutes
>  Remaining Estimate: 10 minutes
>
> if a timer is scheduled, which execution leeds to the process end, the timer can not be deleted,
> because at the end of the process instance all timers are canceld and after this the scheduler also tries
> to delete the timer
> I did a change on SchedulerSession.cancelTimersForProcessInstance
> (the commented code ist the original one, I also added a new named query to hibernate.queries.hbm.xml)
> The change does not directly delete the timers from database, it calls the deleteTimer methode, which causes the 
> timers beeing deleted to be added to the deletedTimers collection. If another delete is done from the scheduler
> it is ignored, because in the delete timer methode the deletedTImers collection is checked.
>   public void cancelTimersForProcessInstance(ProcessInstance processInstance) {
>     try {
>       /*Query query = session.getNamedQuery("SchedulerSession.deleteTimersForProcessInstance");
>       query.setEntity("processInstance", processInstance);
>       query.executeUpdate();*/
>         Query query = session.getNamedQuery("SchedulerSession.findTimersForProcessInstance");
>         query.setEntity("processInstance", processInstance);
>         Iterator iter = query.list().iterator();
>         while(iter.hasNext()) {
>           deleteTimer((Timer) iter.next());
>         }
>     } catch (Exception e) {
>       log.error(e);
>       jbpmSession.handleException();
>       throw new JbpmException("couldn't delete timers for process instance '"+processInstance+"'", e);
>     }
>   }
> -- new named query
>   <query name="SchedulerSession.findTimersForProcessInstance">
>     <![CDATA[
>       select t from org.jbpm.scheduler.exe.Timer t
>       where t.processInstance = :processInstance
>     ]]>
>   </query>
> I'm not sure if the deleteTimersForProcessInstance query is used somewhere else, so I left it.
> If this approch is right, someone of the developers maybe can fix it in the code, I do not have access to it

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list