我有一个非常简单的场景,包括
数据库
和一个
在应用服务器(Glassfish)中。情况非常简单:
1. an EJB inserts a row in the database and sends a message.
2. when the message is delivered with an MDB, the row is read and updated.
在提交插入之前传递消息
在数据库里。如果我们考虑2阶段提交协议,这是可以理解的:
1. prepare JMS
2. prepare database
3. commit JMS
4. ( tiny little gap where message can be delivered before insert has been committed)
5. commit database
with others
,但答案总是:
奇怪,它应该是开箱即用的
-
它怎么能开箱即用呢?
-
我的情况听起来很简单,为什么没有更多的人有类似的问题?
-
我做错什么了吗?有没有办法正确地解决这个问题?
关于我对这个问题的理解,这里有更多的细节:
只有按此顺序对待参与者时,才会存在此时间问题。如果2PC以相反的顺序对待参与者(首先是数据库,然后是消息代理),那应该没问题。这个问题是随机发生的,但完全可以重现。