part of processdefine.xml <state name="first"> <event type="timer-create"> <action name="time_action" class="com.sample.action.TimerActionHandler"></action> </event> <timer duedate="2 seconds" name="test"> <action name="time action" class="com.sample.action.MessageActionHandler"> <message>timer working!</message> </action> </timer> <transition name="to_end" to="end"> </transition> </state> package com.sample.action; import java.util.Date; import org.jbpm.calendar.BusinessCalendar; import org.jbpm.calendar.Duration; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.job.Timer; import org.jbpm.scheduler.SchedulerService; import org.jbpm.svc.Services; public class TimerActionHandler implements ActionHandler { private static final long serialVersionUID = 1L; static BusinessCalendar businessCalendar = new BusinessCalendar(); public void execute(ExecutionContext cxt) throws Exception { Timer timer = cxt.getTimer(); Duration duration = new Duration("30 minutes"); Date dueDateDate = businessCalendar.add(new Date(), duration); if (timer != null) { timer.setDueDate(dueDateDate); } timer = null; SchedulerService schedulerService = (SchedulerService) Services .getCurrentService(Services.SERVICENAME_SCHEDULER); schedulerService.createTimer(timer); // schedulerService.deleteTimersByName(timer.getName(), cxt.getToken()); } }