2014-02-13 36 views
0

我需要执行的更新)两件事情(外码:执行更新事务

  • 提交实体到数据库
  • 通过JMS

发送实体,因为对象是相当通过JMS发送的数据量必须超出数据库事务。问题在于Seam基于JSF阶段添加事务,因此,只要调用自己的重写update(),数据库事务就已经处于活动状态。

添加回调像更新afterUpdate()会很好,但这似乎不可能。

问题: 我该如何提交实体,然后在事务之外执行代码?

感谢您的帮助!

+0

您可以使用@PostPersist触发JMS操作? – DaveB

+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的事务。