我有一个奇怪的现象,即在数据库提交实际发生之前似乎发送了jms消息。是否有要求在提交结束时发送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
我不明白你的问题的某些部分。你能提供更多关于如何调用foo()的上下文吗?如果这种情况发生在MDB中,那么这很重要,而不是任何其他没有设置事务性需求的代码。顺便说一下,数据库提交与JMS消息的发送是相切的;发送取决于事务管理器的存在。 – 2011-06-10 13:04:14
该链接现在更清晰。你能否检查你是否遵循[本文档中指定的编程范例](http://www.odi.ch/prog/jms-tx.php)?虽然它适用于JBoss 4,但大多数要点都是相关的,特别是具有'READ_COMMITTED'的数据库事务隔离级别,以及使用'java:/ JmsXA'来定位连接工厂。 – 2011-06-10 13:26:39
@ vineet-reynolds,是的,所有的交易行为都应该像它应该的那样。我实际上设法将我的问题缩小为一个很小的例子,我会看到我可以用它更新我的问题(它仍然有点难以实现) – Mauli 2011-06-27 16:18:37