【发布时间】:2014-01-23 11:49:06
【问题描述】:
我们正在使用带有 jpa 和 jms 的 spring 框架。
我们的大部分服务都涉及 DB 持久性和 JMS 消息抛出。
这是一个例子:
@Override
@Transactional
public void createAccount(PlayerDTO playerDTO) {
Player newPlayer = new Player(playerDTO);
playerRepository.save(newPlayer);
produceJmsMessage(new PlayerCreatedEvent());
}
问题是,jms 不是我们事务处理的一部分。 (仅 jpaTransactionManager) 因此,每当执行最后一行时,都会触发消息,而不会发生对 DB 的提交。
现在想象一下,其中一个消息消费者正试图获取播放器以处理某些内容,但是!当他从数据库中获取玩家时,它还没有被提交!
在各种各样的情况下,这种情况一直发生在我们身上。
现在,我们当然可以使用 JTA,但性能影响是无法承受的,而且它在文档和其他方面似乎真的不受欢迎,
所以问题是:
开发人员如何缓解我们在此处描述的这个问题? (没有 JPA)。
最好的,
【问题讨论】:
-
在我们的应用程序(Java EE 5,而不是 Spring)中,我们使用 XA Transactions,它工作正常。
标签: java spring jms jta transactional