I have the similar problem with hibernate323, jbpm321, jboss420.
anonymous wrote : 2007-07-30 23:14:20,714 5742606 ERROR [com.rrd.pmt.workflow.service.Task] (pool-6-thread-1:) | org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.jbpm.graph.exe.Token#11804] | at org.hibernate.persister.entity.AbstractEntityPersister.forceVersionIncrement(AbstractEntityPersister.java:1235) | at org.hibernate.event.def.AbstractLockUpgradeEventListener.upgradeLock(AbstractLockUpgradeEventListener.java:82) | at org.hibernate.event.def.DefaultLockEventListener.onLock(DefaultLockEventListener.java:64) | at org.hibernate.impl.SessionImpl.fireLock(SessionImpl.java:584) | at org.hibernate.impl.SessionImpl.lock(SessionImpl.java:576) | at org.jbpm.graph.node.Join.execute(Join.java:109) | at org.jbpm.graph.def.Node.enter(Node.java:318) | 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:585) | at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173) | at org.jbpm.graph.def.Node_$$_javassist_544.enter(Node_$$_javassist_544.java) | at org.jbpm.graph.def.Transition.take(Transition.java:151) | at org.jbpm.graph.def.Node.leave(Node.java:393) | 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:585) | at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173) | at org.jbpm.graph.def.Node_$$_javassist_544.leave(Node_$$_javassist_544.java) | at org.jbpm.graph.exe.Token.signal(Token.java:194) | at org.jbpm.graph.exe.Token.signal(Token.java:139) | at com.rrd.pmt.workflow.service.AbstractTaskExecutorService.doTranstion(AbstractTaskExecutorService.java:123) | at com.rrd.pmt.workflow.service.Task.run(Task.java:40) | at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417) | at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269) | at java.util.concurrent.FutureTask.run(FutureTask.java:123) | at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) | at java.lang.Thread.run(Thread.java:613) | The strange thing is if I use ejb timers to execute all the fork steps, everything is fine. However, if driving one of the fork steps with external jbpmconfigure, although still using the same hibernate session factory as other timers steps, it will have this error, my external jbpmconfig code looks like: caller: | | public void doTranstion(long id, String tokenPath, String path) throws Exception { | JbpmContext jbpmContext = JbpmUtil.getJbpmConfig().createJbpmContext(); | try { | ProcessInstance processInstance = jbpmContext.loadProcessInstanceForUpdate(id); | if (processInstance == null) { | logger.debug("ProcessInstance " + id + " does not exist anymore. Ignore it"); | return; | } | | Token token = processInstance.findToken(tokenPath); | logger.info("ProcessIntance " + processInstance.getId() + " changing from node[" + token.getNode().getDefaultLeavingTransition().getFrom().getName() + "] to node[" | + token.getNode().getDefaultLeavingTransition().getTo().getName() + "]" + ". File=" + path); | token.signal(); | } catch (Exception e) { | logger.error("", e); | throw e; | } finally { | jbpmContext.close(); | } | } | | | | public class JbpmUtil { | static Logger logger = Logger.getLogger(JbpmUtil.class); | static private JbpmConfiguration jbpmConfiguration = null; | | synchronized static public JbpmConfiguration getJbpmConfig() { | if (jbpmConfiguration == null) { | jbpmConfiguration = JbpmConfiguration.getInstance("jbpm.cfg.xml"); | } | | return jbpmConfiguration; | } | ...} Using treecache with serializable isolation. Token used in the code is retrieved from ExecutionContext.getToken().getFullName(); Still wondering what is difference here? Should treecache take care this? View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4068989#4068989 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4068989 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user