Problem with Timer execution. process classloader can't find
rayun Mar 14, 2008 8:05 AMHi,
I have a problem with the execution of an action for my timers.
I am using JBPM 3.2.2 with Tomcat and try to execute a process with a timer on 2 tasks in a fork.
The part of the process which give me troubles is the following :
<fork name="fork1"> <transition name="To client" to="Client validation"></transition> <transition name="To broker" to="Broker validation"></transition> </fork> <task-node name="Client validation"> <task name="client complete and validate informations" swimlane="client"> <timer name="reminder1" duedate="30 seconds"> <action name="Send a time-out notice for client" class="common.processhandlers.DueDateHandler"></action> </timer> </task> <transition name="Client informations completed" to="join1"></transition> </task-node> <task-node name="Broker validation"> <task name="broker complete and validate informations" swimlane="broker"> <timer name="reminder2" duedate="30 seconds"> <action name="Send a time-out notice for broker" class="common.processhandlers.DueDateHandler"></action> </timer> </task> <transition name="Broker informations completed" to="join1"></transition> </task-node> <join name="join1"> <transition name="All informations available" to="end"></transition> </join>
The class DueDateHandler i try to execute in both timer is in the sources of the web application executing the process and do nothing but displaying a message.
When i try to execute this process and the duedate for the timers expire, i get the following Error :
ERROR - def.AbstractFlushingEventListener - 301 - Could not synchronize database state with session org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.jbpm.job.Timer#21383] at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1765) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2407) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.jbpm.persistence.db.DbPersistenceService.commit(DbPersistenceService.java:256) at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:214) at org.jbpm.svc.Services.close(Services.java:225) at org.jbpm.JbpmContext.close(JbpmContext.java:139) at org.jbpm.job.executor.JobExecutorThread.acquireJobs(JobExecutorThread.java:144) at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:58) INFO - db.DbPersistenceService - 258 - optimistic locking failed INFO - svc.Services - 229 - problem closing service 'persistence': optimistic locking failed WARN - StatefulPersistenceContext.ProxyWarnLog - 615 - Narrowing proxy to class org.jbpm.graph.node.TaskNode - this operation breaks == WARN - StatefulPersistenceContext.ProxyWarnLog - 615 - Narrowing proxy to class org.jbpm.graph.node.TaskNode - this operation breaks == ERROR - instantiation.Delegation - 142 - couldn't load delegation class 'common.processhandlers.DueDateHandler' java.lang.ClassNotFoundException: class 'common.processhandlers.DueDateHandler' could not be found by the process classloader at org.jbpm.instantiation.ProcessClassLoader.findClass(ProcessClassLoader.java:118) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.jbpm.instantiation.Delegation.instantiate(Delegation.java:140) at org.jbpm.instantiation.Delegation.getInstance(Delegation.java:125) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.instantiation.Delegation$$EnhancerByCGLIB$$87bad03b.getInstance(<generated>) at org.jbpm.graph.def.Action.execute(Action.java:121) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.graph.def.Action$$EnhancerByCGLIB$$322143d.execute(<generated>) at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:264) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.taskmgmt.def.Task$$EnhancerByCGLIB$$b38133b8.executeAction(<generated>) at org.jbpm.job.Timer.execute(Timer.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.job.Job$$EnhancerByCGLIB$$7970239a.execute(<generated>) at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:164) at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:64) ERROR - instantiation.Delegation - 165 - couldn't instantiate delegation class 'common.processhandlers.DueDateHandler' java.lang.NullPointerException at org.jbpm.instantiation.FieldInstantiator.newInstance(FieldInstantiator.java:105) at org.jbpm.instantiation.FieldInstantiator.instantiate(FieldInstantiator.java:48) at org.jbpm.instantiation.Delegation.instantiate(Delegation.java:163) at org.jbpm.instantiation.Delegation.getInstance(Delegation.java:125) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.instantiation.Delegation$$EnhancerByCGLIB$$87bad03b.getInstance(<generated>) at org.jbpm.graph.def.Action.execute(Action.java:121) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.graph.def.Action$$EnhancerByCGLIB$$322143d.execute(<generated>) at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:264) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.taskmgmt.def.Task$$EnhancerByCGLIB$$b38133b8.executeAction(<generated>) at org.jbpm.job.Timer.execute(Timer.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.job.Job$$EnhancerByCGLIB$$7970239a.execute(<generated>) at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:164) at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:64) ERROR - def.GraphElement - 275 - action threw exception: null java.lang.NullPointerException at org.jbpm.graph.def.Action.execute(Action.java:122) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.graph.def.Action$$EnhancerByCGLIB$$322143d.execute(<generated>) at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:264) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.taskmgmt.def.Task$$EnhancerByCGLIB$$b38133b8.executeAction(<generated>) at org.jbpm.job.Timer.execute(Timer.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.job.Job$$EnhancerByCGLIB$$7970239a.execute(<generated>) at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:164) at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:64) WARN - job.Timer - 62 - timer action threw exception org.jbpm.graph.def.DelegationException at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:387) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.graph.def.ProcessDefinition$$EnhancerByCGLIB$$c4ed9d31.raiseException(<generated>) at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:378) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.graph.node.TaskNode$$EnhancerByCGLIB$$45bbca9f.raiseException(<generated>) at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:378) at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:281) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.taskmgmt.def.Task$$EnhancerByCGLIB$$b38133b8.executeAction(<generated>) at org.jbpm.job.Timer.execute(Timer.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.job.Job$$EnhancerByCGLIB$$7970239a.execute(<generated>) at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:164) at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:64) Caused by: java.lang.NullPointerException at org.jbpm.graph.def.Action.execute(Action.java:122) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157) at org.jbpm.graph.def.Action$$EnhancerByCGLIB$$322143d.execute(<generated>) at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:264) ... 15 more
The class loader won't find the action to execute for the timers while the class is present in the application.
I tried many things but couldn't find a solution to this problem.