请看一下这个例子:
@Component
public class TransactionTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private JmsTemplate jmsTemplate;
@Transactional
public void doTest() {
jdbcTemplate.execute("INSERT INTO some_table VALUES ('some_value')");
jmsTemplate.convertAndSend("some_queue", "some_value");
...
throw new SomeException();
}
...
}
为了保持一致性,我想原子地执行这两个操作(插入数据库行和发送JMS消息),这样当引发SomeException
时,两个操作都将被回滚(数据库中不会有新行)并且没有新的JMS消息将在队列中。)
有没有机制来处理这个问题?我现在正在使用Spring Framework,PostgreSQL和Apache ActiveMQ。