我有一个在事务中执行多个操作的方法。操作正在向MDB发送消息。我正在使用带有spring框架的hibernate。
伪代码是:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public someMethod{
dao.update(someObject);
sendToMDB(someObjectID); << sending ID of above updated object
dao.doSomeThingMore();
}
在MDB中,我只是获取上面的updatedObject:
onMessage(){
....
dao.find(someObjectID);
}
我面临的问题是当我在MDB中检索someObject时,它检索someObject的旧值而不是更新的值!!!
我试图删除MDB中的所有方法并将所有方法放在方法someMethod()中,并且它可以正常工作。 我甚至尝试过使用flush()和amp;在dao.update()之后清除()但仍然是同样的问题。
请帮忙。
提前致谢。
答案 0 :(得分:0)
很可能您需要创建事务性队列会话。
QueueSession createQueueSession(
QueueConnection qu
) throws JMSException {
return qu.createQueueSession(true, -1);
}
请注意, true 参数会使会话成为事务。这里-1只是虚拟参数,当你想忽略确认参数时,你可以使用预定义的ack模式。
如果需要进行事务性调用,也可以在应用程序服务器控制台中设置一些事务性配置。