Hung Process using Intermediate Start Timer

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-29-2012 06:56 PM
Hi,
I'm having issues using Intermediate Start Timer. The issue is somewhat intermittent. Sometimes the timer fires ok and invokes the delegate. Sometimes I get an ActivitiOptimisticLockingException but the timer still works. This goes on for a bit (timer works no exception intermixed with exceptions but timer still works). At some point the exceptions are followed by what appears to be a redeployment of the process (but I did nothing but what catalina during this time). That is followed by ActivitiException indicating it can't find my delegate class. Of course, the class was working previously. At this point the process instance is hung at the Start Timer event. I can go list the Jobs via Activiti Explorer. The Job will show the class not found traceback. I can execute the job and things start up again but eventually fail the same way.
Below is the process, the java delegate, and the 2 sets of tracebacks. I've seen other similar threads about start timer but nothing where this redeployment and class not found occurs. I'm running the demo as is with the addition of my process jar file (created using Export) along with the process.
I'm trying to prototype a real process that contains such a loop. I've paired it down to just the timing loop for the purposes of demonstrating this problem.
Running Activiti 5.10 demo on Linux 64 bit.
Thanks,
Dan
Here is the java code (jar file is created using Export):
For a while it works then I start getting some ActivitiOptimisticLockingExceptions here and there but it continues to work.
After the traces below, the process is hung until I go manually execute the Job for the timer.
I'm having issues using Intermediate Start Timer. The issue is somewhat intermittent. Sometimes the timer fires ok and invokes the delegate. Sometimes I get an ActivitiOptimisticLockingException but the timer still works. This goes on for a bit (timer works no exception intermixed with exceptions but timer still works). At some point the exceptions are followed by what appears to be a redeployment of the process (but I did nothing but what catalina during this time). That is followed by ActivitiException indicating it can't find my delegate class. Of course, the class was working previously. At this point the process instance is hung at the Start Timer event. I can go list the Jobs via Activiti Explorer. The Job will show the class not found traceback. I can execute the job and things start up again but eventually fail the same way.
Below is the process, the java delegate, and the 2 sets of tracebacks. I've seen other similar threads about start timer but nothing where this redeployment and class not found occurs. I'm running the demo as is with the addition of my process jar file (created using Export) along with the process.
I'm trying to prototype a real process that contains such a loop. I've paired it down to just the timing loop for the purposes of demonstrating this problem.
Running Activiti 5.10 demo on Linux 64 bit.
Thanks,
Dan
<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test"> <process id="InvokeTimerProcess" name="Invoke Timer Process"> <startEvent id="startevent1" name="Start" activiti:initiator="initiator"></startEvent> <serviceTask id="CheckDisposition" name="Check Disposition" activiti:class="com.example.timer.CheckDisposition"></serviceTask> <endEvent id="endevent1" name="End"></endEvent> <intermediateCatchEvent id="timerintermediatecatchevent1" name="TimerCatchEvent"> <timerEventDefinition> <timeDuration>PT10S</timeDuration> </timerEventDefinition> </intermediateCatchEvent> <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway> <sequenceFlow id="flow4" name="" sourceRef="CheckDisposition" targetRef="exclusivegateway1"></sequenceFlow> <sequenceFlow id="flow5" name="" sourceRef="timerintermediatecatchevent1" targetRef="CheckDisposition"></sequenceFlow> <sequenceFlow id="flow6" name="" sourceRef="exclusivegateway1" targetRef="timerintermediatecatchevent1"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${disposition == 'TIME'}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow7" name="" sourceRef="exclusivegateway1" targetRef="endevent1"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${disposition == 'EXIT'}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow8" name="" sourceRef="startevent1" targetRef="timerintermediatecatchevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_InvokeTimerProcess"> <bpmndi:BPMNPlane bpmnElement="InvokeTimerProcess" id="BPMNPlane_InvokeTimerProcess"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35" width="35" x="50" y="110"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="CheckDisposition" id="BPMNShape_CheckDisposition"> <omgdc:Bounds height="55" width="105" x="240" y="100"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35" width="35" x="380" y="223"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="timerintermediatecatchevent1" id="BPMNShape_timerintermediatecatchevent1"> <omgdc:Bounds height="35" width="35" x="130" y="110"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1"> <omgdc:Bounds height="40" width="40" x="272" y="220"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4"> <omgdi:waypoint x="292" y="155"></omgdi:waypoint> <omgdi:waypoint x="292" y="220"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5"> <omgdi:waypoint x="165" y="127"></omgdi:waypoint> <omgdi:waypoint x="240" y="127"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6"> <omgdi:waypoint x="272" y="240"></omgdi:waypoint> <omgdi:waypoint x="147" y="239"></omgdi:waypoint> <omgdi:waypoint x="147" y="145"></omgdi:waypoint> <bpmndi:BPMNLabel> <omgdc:Bounds height="14" width="100" x="10" y="0"></omgdc:Bounds> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7"> <omgdi:waypoint x="312" y="240"></omgdi:waypoint> <omgdi:waypoint x="380" y="240"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8"> <omgdi:waypoint x="85" y="127"></omgdi:waypoint> <omgdi:waypoint x="130" y="127"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></definitions>
Here is the java code (jar file is created using Export):
package com.example.timer;import org.activiti.engine.delegate.JavaDelegate;import org.activiti.engine.delegate.DelegateExecution;public class CheckDisposition implements JavaDelegate { public void execute(DelegateExecution execution) { System.out.println("CheckDisposition enter…"); execution.setVariable("disposition", "TIME"); System.out.println("CheckDisposition exit! Timing…"); }}
For a while it works then I start getting some ActivitiOptimisticLockingExceptions here and there but it continues to work.
Oct 29, 2012 3:30:51 PM org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deployINFO: Processing resource InvokeTimerProcess.InvokeTimerProcess.pngOct 29, 2012 3:30:51 PM org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deployINFO: Processing resource InvokeTimerProcess.bpmn20.xmlOct 29, 2012 3:30:51 PM org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributesINFO: XMLSchema currently not supported as typeLanguageOct 29, 2012 3:30:51 PM org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributesINFO: XPath currently not supported as expressionLanguageOct 29, 2012 3:30:51 PM org.activiti.engine.impl.bpmn.parser.BpmnParse parseProcessDefinitionsINFO: Process with id='InvokeTimerProcess' hasn't the attribute isExecutable set. Please maintain it, so you are compatible to future activiti versions.CheckDisposition enter…CheckDisposition exit! Timing…CheckDisposition enter…CheckDisposition exit! Timing…Oct 29, 2012 3:31:21 PM org.activiti.engine.impl.interceptor.CommandContext closeSEVERE: Error while closing command contextorg.activiti.engine.ActivitiOptimisticLockingException: TimerEntity[2328] was updated by another transaction concurrently at org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:474) at org.activiti.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:370) at org.activiti.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:157) at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:109) at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49) at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40) at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33) at org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable.run(AcquireJobsRunnable.java:57) at java.lang.Thread.run(Thread.java:662)Oct 29, 2012 3:31:21 PM org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable runSEVERE: exception during job acquisition: TimerEntity[2328] was updated by another transaction concurrentlyorg.activiti.engine.ActivitiOptimisticLockingException: TimerEntity[2328] was updated by another transaction concurrently at org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:474) at org.activiti.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:370) at org.activiti.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:157) at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:109) at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49) at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40) at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33) at org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable.run(AcquireJobsRunnable.java:57) at java.lang.Thread.run(Thread.java:662)CheckDisposition enter…CheckDisposition exit! Timing…
After the traces below, the process is hung until I go manually execute the Job for the timer.
CheckDisposition enter…CheckDisposition exit! Timing…Oct 29, 2012 3:33:11 PM org.activiti.engine.impl.interceptor.CommandContext closeSEVERE: Error while closing command contextorg.activiti.engine.ActivitiOptimisticLockingException: TimerEntity[2383] was updated by another transaction concurrently at org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:474) at org.activiti.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:370) at org.activiti.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:157) at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:109) at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49) at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40) at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33) at org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable.run(AcquireJobsRunnable.java:57) at java.lang.Thread.run(Thread.java:662)Oct 29, 2012 3:33:11 PM org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable runSEVERE: exception during job acquisition: TimerEntity[2383] was updated by another transaction concurrentlyorg.activiti.engine.ActivitiOptimisticLockingException: TimerEntity[2383] was updated by another transaction concurrently at org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:474) at org.activiti.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:370) at org.activiti.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:157) at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:109) at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49) at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40) at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33) at org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable.run(AcquireJobsRunnable.java:57) at java.lang.Thread.run(Thread.java:662)Oct 29, 2012 3:33:11 PM org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deployINFO: Processing resource InvokeTimerProcess.InvokeTimerProcess.pngOct 29, 2012 3:33:11 PM org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deployINFO: Processing resource InvokeTimerProcess.bpmn20.xmlOct 29, 2012 3:33:12 PM org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributesINFO: XMLSchema currently not supported as typeLanguageOct 29, 2012 3:33:12 PM org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributesINFO: XPath currently not supported as expressionLanguageOct 29, 2012 3:33:12 PM org.activiti.engine.impl.bpmn.parser.BpmnParse parseProcessDefinitionsINFO: Process with id='InvokeTimerProcess' hasn't the attribute isExecutable set. Please maintain it, so you are compatible to future activiti versions.Oct 29, 2012 3:33:13 PM org.activiti.engine.impl.jobexecutor.TimerCatchIntermediateEventJobHandler executeSEVERE: exception during timer executionorg.activiti.engine.ActivitiException: couldn't instantiate class com.example.timer.CheckDisposition at org.activiti.engine.impl.util.ReflectUtil.instantiate(ReflectUtil.java:131) at org.activiti.engine.impl.bpmn.helper.ClassDelegate.instantiateDelegate(ClassDelegate.java:162) at org.activiti.engine.impl.bpmn.helper.ClassDelegate.getActivityBehaviorInstance(ClassDelegate.java:135) at org.activiti.engine.impl.bpmn.helper.ClassDelegate.execute(ClassDelegate.java:112) at org.activiti.engine.impl.pvm.runtime.AtomicOperationActivityExecute.execute(AtomicOperationActivityExecute.java:44) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerStart.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerStart.java:52) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionCreateScope.execute(AtomicOperationTransitionCreateScope.java:49) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerTake.execute(AtomicOperationTransitionNotifyListenerTake.java:65) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionDestroyScope.execute(AtomicOperationTransitionDestroyScope.java:115) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerEnd.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerEnd.java:36) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.take(ExecutionEntity.java:381) at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performOutgoingBehavior(BpmnActivityBehavior.java:102) at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performDefaultOutgoingBehavior(BpmnActivityBehavior.java:51) at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.leave(FlowNodeActivityBehavior.java:44) at org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior.leave(AbstractBpmnActivityBehavior.java:47) at org.activiti.engine.impl.bpmn.behavior.IntermediateCatchEventActivitiBehaviour.signal(IntermediateCatchEventActivitiBehaviour.java:27) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.signal(ExecutionEntity.java:364) at org.activiti.engine.impl.jobexecutor.TimerCatchIntermediateEventJobHandler.execute(TimerCatchIntermediateEventJobHandler.java:45) at org.activiti.engine.impl.persistence.entity.JobEntity.execute(JobEntity.java:78) at org.activiti.engine.impl.persistence.entity.TimerEntity.execute(TimerEntity.java:62) at org.activiti.engine.impl.cmd.ExecuteJobsCmd.execute(ExecuteJobsCmd.java:67) at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24) at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:42) at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40) at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33) at org.activiti.engine.impl.jobexecutor.ExecuteJobsRunnable.run(ExecuteJobsRunnable.java:46) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)Caused by: org.activiti.engine.ActivitiClassLoadingException: Class not found: com.example.timer.CheckDisposition at org.activiti.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:81) at org.activiti.engine.impl.util.ReflectUtil.instantiate(ReflectUtil.java:128) … 58 moreCaused by: java.lang.ClassNotFoundException: com.example.timer.CheckDisposition at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at org.activiti.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:62) … 59 moreOct 29, 2012 3:33:13 PM org.activiti.engine.impl.interceptor.CommandContext closeSEVERE: Error while closing command contextorg.activiti.engine.ActivitiException: couldn't instantiate class com.example.timer.CheckDisposition at org.activiti.engine.impl.util.ReflectUtil.instantiate(ReflectUtil.java:131) at org.activiti.engine.impl.bpmn.helper.ClassDelegate.instantiateDelegate(ClassDelegate.java:162) at org.activiti.engine.impl.bpmn.helper.ClassDelegate.getActivityBehaviorInstance(ClassDelegate.java:135) at org.activiti.engine.impl.bpmn.helper.ClassDelegate.execute(ClassDelegate.java:112) at org.activiti.engine.impl.pvm.runtime.AtomicOperationActivityExecute.execute(AtomicOperationActivityExecute.java:44) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerStart.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerStart.java:52) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionCreateScope.execute(AtomicOperationTransitionCreateScope.java:49) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerTake.execute(AtomicOperationTransitionNotifyListenerTake.java:65) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionDestroyScope.execute(AtomicOperationTransitionDestroyScope.java:115) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerEnd.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerEnd.java:36) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49) at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:546) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:541) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.take(ExecutionEntity.java:381) at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performOutgoingBehavior(BpmnActivityBehavior.java:102) at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performDefaultOutgoingBehavior(BpmnActivityBehavior.java:51) at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.leave(FlowNodeActivityBehavior.java:44) at org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior.leave(AbstractBpmnActivityBehavior.java:47) at org.activiti.engine.impl.bpmn.behavior.IntermediateCatchEventActivitiBehaviour.signal(IntermediateCatchEventActivitiBehaviour.java:27) at org.activiti.engine.impl.persistence.entity.ExecutionEntity.signal(ExecutionEntity.java:364) at org.activiti.engine.impl.jobexecutor.TimerCatchIntermediateEventJobHandler.execute(TimerCatchIntermediateEventJobHandler.java:45) at org.activiti.engine.impl.persistence.entity.JobEntity.execute(JobEntity.java:78) at org.activiti.engine.impl.persistence.entity.TimerEntity.execute(TimerEntity.java:62) at org.activiti.engine.impl.cmd.ExecuteJobsCmd.execute(ExecuteJobsCmd.java:67) at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24) at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:42) at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40) at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33) at org.activiti.engine.impl.jobexecutor.ExecuteJobsRunnable.run(ExecuteJobsRunnable.java:46) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)Caused by: org.activiti.engine.ActivitiClassLoadingException: Class not found: com.example.timer.CheckDisposition at org.activiti.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:81) at org.activiti.engine.impl.util.ReflectUtil.instantiate(ReflectUtil.java:128) … 58 moreCaused by: java.lang.ClassNotFoundException: com.example.timer.CheckDisposition at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at org.activiti.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:62) … 59 more
Labels:
- Labels:
-
Archive
5 REPLIES 5
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-30-2012 02:32 AM
Wow … this is really, really weird.
First of all: do you have multiple job executors running? If you get optimistic locking exceptions, it is normally the case some other thread is trying to fire the timer.
But for the redeployment … wow I've got no clue why that happens… it might be that the process is evicted from the internal cache, but then it should find the class to instantiate. Is is possible to put that in a unit test, even if it only fails sometimes?
First of all: do you have multiple job executors running? If you get optimistic locking exceptions, it is normally the case some other thread is trying to fire the timer.
But for the redeployment … wow I've got no clue why that happens… it might be that the process is evicted from the internal cache, but then it should find the class to instantiate. Is is possible to put that in a unit test, even if it only fails sometimes?
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-30-2012 02:34 AM
Do you have 2 activiti-engines running at the same time? How do you deploy the process in the first place?

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-30-2012 05:55 AM
I'm effectively running the demo as is with the addition of 2 processes I created. I manually copy the jar files into activiti-explorer/WEB-INF/lib and restart tomcat. Then use activiti-explorer to upload the bar file and run the process.
My assumption is that the demo runs a single engine? Both activiti-explorer and activiti-rest are deployed in tomcat. The activiti-explorer project runs a Job Executor but I don't see anything similar for activiti-rest.
In activiti-explorer config files:
Note that I have the demo installed in 2 different environments. One uses demo.start as is after downloading 5.10. In the other case, I modified some things to run this in a mocked up version of my deployment environment. That one runs on tomcat 7.0.2. I originally saw this in my mocked up deployment environment and thought it was something I screwed up while merging the config files. But then I easily reproduce this in the original demo environment.
I can create a unit test but it might not be today. I have to focus on some other things.
Thanks,
Dan
My assumption is that the demo runs a single engine? Both activiti-explorer and activiti-rest are deployed in tomcat. The activiti-explorer project runs a Job Executor but I don't see anything similar for activiti-rest.
In activiti-explorer config files:
applicationContext.xml: <property name="jobExecutorActivate" value="true" />
Note that I have the demo installed in 2 different environments. One uses demo.start as is after downloading 5.10. In the other case, I modified some things to run this in a mocked up version of my deployment environment. That one runs on tomcat 7.0.2. I originally saw this in my mocked up deployment environment and thought it was something I screwed up while merging the config files. But then I easily reproduce this in the original demo environment.
I can create a unit test but it might not be today. I have to focus on some other things.
Thanks,
Dan

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-30-2012 08:24 AM
I have an update on this issue.
I wanted to check out the Activiti Modeler. So in my demo environment, I replaced the activiti-explorer with the new one on the download page. And now this problem seems to have gone away. My timer has fired hundreds of times without issue. I don't get any of the tracebacks.
The jar files look the same (with the exception of the additional jars used by the modeler)?
Dan
I wanted to check out the Activiti Modeler. So in my demo environment, I replaced the activiti-explorer with the new one on the download page. And now this problem seems to have gone away. My timer has fired hundreds of times without issue. I don't get any of the tracebacks.

The jar files look the same (with the exception of the additional jars used by the modeler)?
Dan
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-31-2012 03:03 AM
Yeah, the jars should be the same …
But you said you have two environments … if they both run the job executor and go to the same database, than the messages you see are normal.
Do note that the beta modeler runs on an in-memory H2 database, while Explorer goes to one through tcp (which is mapped to the filesystem). Maybe thaty is the reason you don't see any collisions now?
But you said you have two environments … if they both run the job executor and go to the same database, than the messages you see are normal.
Do note that the beta modeler runs on an in-memory H2 database, while Explorer goes to one through tcp (which is mapped to the filesystem). Maybe thaty is the reason you don't see any collisions now?
