我有一个奇怪的现象,似乎在数据库提交实际发生之前就发送了 jms 消息。
假设我有一个服务器操作 foo() ,它在完成时向客户端发送一条消息。客户端然后从服务器加载更改的数据。现在看来 jms 消息是在提交实际完成之前发送的,因此客户端仍然获取旧数据,因为它的请求仍然在原始提交结束之前。
整个服务器操作肯定是事务性的,因为如果抛出异常,则不会发送 jms 事件。
jms 规范中是否有任何要求首先必须发生所有数据库提交,然后发送 jms 消息,或者这取决于实现的顺序?
我们正在讨论 jboss 6.0.0.Final 中默认的 hornetq 实现。
更新:
看来我和这些人有同样的问题:http: //techstack.com/forum/websphere/34434-order-commits-xa-transaction.html
更新 2:
另一个有同样问题的用户http://community.jboss.org/message/114459