我需要在update()上执行两件事:
因为对象非常大,所以通过JMS发送必须在数据库事务之外。问题是Seam基于JSF阶段添加了事务,因此一旦我调用了自己的重写update(),数据库事务就已经处于活动状态。
像afterUpdate()这样的回调添加回调会很好但是这似乎不可能。
问题: 如何提交实体,然后在事务外执行代码?
感谢您的帮助!
答案 0 :(得分:0)
我发现使用的事务是Spring事务。这允许类似的东西:
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCompletion(int status) {
switch (status) {
case STATUS_COMMITTED:
LOGGER.debug("update::afterCompletion");
afterCompletionCallback();
break;
case STATUS_ROLLED_BACK:
break;
case STATUS_UNKNOWN:
default:
break;
}
}
});
该事务仍然可用,但数据库不再被锁定,任何超时都不会影响Seam事务。