帮我找出僵局
|
这是我第一次自己看到此代码时遇到僵局。
Caused by: java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
下面是代码:(Java /伪代码)
// This function inside a Job implementation of Quartz Job
execute(...)
{
UserTransaction trans = getTransaction();
trans.begin();
Session session = getSession();
List<PersistedObject> list = getListOfPersistedObjects(...)
int counter = 0;
loop(l : list)
{
counter++;
// this is just sending a message using information based on the object
sendMessage(l);
// Create a 2nd \"archive\" object based on the data inside the l object
PersistedObjectArchive archive = new PersistedObjectArchive(l)
session.save(archive);
session.flush();
session.delete(l);
session.flush();
if(counter % JDBC_BATCH_SIZE_CONSTANT_FROM_SOMEWHERE == 0)
{
session.flush(); // Deadlock Exception happens here
session.clear();
}
}
trans.commit();
}
我认为上面的代码可以清除一些-我看不到使用这么多的刷新,但是我现在只是使用现有的代码。
有人注意到造成死锁的原因是什么?
没有找到相关结果
已邀请:
2 个回复
哩翔购
摊揉售