我有一个使用postPersist和postUpdate注册了CallBackListener的实体。侦听器获取实体并将ID提交给执行进一步处理的JMS队列。消息提交和消费速度非常快,以至于它们是在原始会话完成交易之前发生的。
因此,MDB要么找不到实体,要么实体是陈旧的。我真正想要的是在使用消息之前让MDB检查以验证原始事务是否完整的方法。
有什么建议吗?
答案 0 :(得分:2)
您可以使用org.hibernate.Interceptor
或SessionFactory
注册Session
的实例,并在咨询{{afterTransactionCompletion(Transaction tx)
方法后将消息发布到队列中1}}。在Transaction.wasCommitted
方法中,您可能必须在某个全局threadlocal中访问实体的ID。