0
我需要执行的更新)两件事情(外码:执行更新事务
- 提交实体到数据库
- 通过JMS
发送实体,因为对象是相当通过JMS发送的数据量必须超出数据库事务。问题在于Seam基于JSF阶段添加事务,因此,只要调用自己的重写update(),数据库事务就已经处于活动状态。
添加回调像更新afterUpdate()会很好,但这似乎不可能。
问题: 我该如何提交实体,然后在事务之外执行代码?
感谢您的帮助!
我需要执行的更新)两件事情(外码:执行更新事务
发送实体,因为对象是相当通过JMS发送的数据量必须超出数据库事务。问题在于Seam基于JSF阶段添加事务,因此,只要调用自己的重写update(),数据库事务就已经处于活动状态。
添加回调像更新afterUpdate()会很好,但这似乎不可能。
问题: 我该如何提交实体,然后在事务之外执行代码?
感谢您的帮助!
我发现使用的交易是一个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的事务。
您可以使用@PostPersist触发JMS操作? – DaveB
我认为这仍然在交易中。 –