cancel
Showing results for 
Search instead for 
Did you mean: 

Exception (Timeout trying to lock table ACT_RU_EXECUTION)

lojian
Champ in-the-making
Champ in-the-making
I am signal two process instance in 2 threads. But got following exceptions, any idea?

### The error may involve org.activiti.persistence.selectExecutionById-Inline
### The error occurred while setting parameters
### Cause: org.h2.jdbc.JdbcSQLException: Timeout trying to lock table "ACT_RU_EXECUTION" [50200-132]
   at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
   at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:61)
   at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:53)
   at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:38)
   at org.activiti.engine.impl.db.DbSqlSession.selectOne(DbSqlSession.java:175)
   at org.activiti.engine.impl.db.DbRuntimeSession.findExecutionById(DbRuntimeSession.java:89)
   at org.activiti.engine.impl.cmd.SignalCmd.execute(SignalCmd.java:42)
   at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:22)
   at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:37)
   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.RuntimeServiceImpl.signal(RuntimeServiceImpl.java:131)
6 REPLIES 6

jbarrez
Star Contributor
Star Contributor
I assume you are using H2, since it used by default table locking.

You could try to add MVCC=true to your url of H2.

lojian
Champ in-the-making
Champ in-the-making
Thanks….And yes, H2 is used…

After appended MVCC=true, the exception changes to:

[INFO] Exception in thread "taskExecutor-3" org.activiti.engine.ActivitiException: execution 29 doesn't exist
[INFO]  at org.activiti.engine.impl.cmd.SignalCmd.execute(SignalCmd.java:47)
[INFO]  at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:22)
[INFO]  at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:37)
[INFO]  at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42)
[INFO]  at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
[INFO]  at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40)
[INFO]  at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
[INFO]  at org.activiti.engine.impl.RuntimeServiceImpl.signal(RuntimeServiceImpl.java:131)

Any idea?

I am using Activiti 5.1

jbarrez
Star Contributor
Star Contributor
Do you get this exception on both machines?$

It looks like one thread is faster and signals the process for continuation.
The second thread can't signal it anymore, hence the exception, which is completely to be expected in the multi-threaded environment you have.

lojian
Champ in-the-making
Champ in-the-making
Do you mean I am signal 2 "identical" process instance?
:?:

jbarrez
Star Contributor
Star Contributor
Yes, looking at your exception it looks like you are signalling the same execution id.

lojian
Champ in-the-making
Champ in-the-making
Thank you for finding this for me 🙂

I see. There was a bug in my prototype program.