我們使用jpa和jms的spring框架。JMS和JPA--交易服務最佳實踐
我們的大部分服務都涉及數據庫持久性和JMS消息投擲。
下面是一個例子:
@Override
@Transactional
public void createAccount(PlayerDTO playerDTO) {
Player newPlayer = new Player(playerDTO);
playerRepository.save(newPlayer);
produceJmsMessage(new PlayerCreatedEvent());
}
問題是,JMS是不是我們交易過程的一部分。 (只有jpaTransactionManager) ,因此每當最後一行執行消息時觸發數據庫而不提交數據庫。
現在想象一下消息消費者正試圖獲取玩家以便處理一些東西,但!當他從數據庫中提取玩家時,它還沒有被提交!
這種情況在各種場景中都發生在我們身上。現在
的,當然,我們可以使用JTA,但對性能的影響是無法忍受的,而且它似乎是關於文檔和東西實在不得人心,
所以,問題是:
怎麼辦開發人員緩解我們在這裏描述的這個問題? (沒有JPA)。
最佳,
在我們的應用程序(Java EE 5,而不是Spring)中,我們使用XA事務並且工作正常。 – Puce