Nit*_*aur 4 spring transactions jms
我想在JMS应用程序中使用spring programmatic事务来接收来自队列的消息.同时,我想将队列包含在事务范围中.
使用Spring DefaultMessageListnereContainer并在其中注入事务管理器.但是,不确定如何以编程方式提交或回滚此事务的引用?
我在这里阅读并理解"处理交易中的消息" http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jms.html#jms-tx-participation
我的2个要求是 - 1)XA事务因此注入JtaTransactionManager,2)使用程序化事务 - 这里我需要帮助如何在代码中引用spring启动的事务,以便我可以以编程方式处理事务
Tom*_*icz 11
你首先必须注入org.springframework.transaction.PlatformTransactionManager- 它是一个像所有其他人一样普通的bean:
@Resource
private PlatformTransactionManager transactionManager;
Run Code Online (Sandbox Code Playgroud)
现在您可以将它与TransactionTemplate:
final TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallback<String>() {
@Override
public Object doInTransaction(TransactionStatus status) {
transactionManager.rollback(status);
return ":-(";
}
});
Run Code Online (Sandbox Code Playgroud)
相当多的代码,所以这是你应该如何做到这一点:
@Transactional
public void onMessage(Message message) {
//rollback:
throw new HoustonException("We've got a problem!");
}
Run Code Online (Sandbox Code Playgroud)
如果抛出一个RuntimeExceptionfrom @Transactional方法,它将自动回滚该事务.否则它将被提交.
请注意,这并不意味着JMS和数据库正在处理同一个事务!当您抛出异常时,JMS代理将尝试重新传递消息,但是在提交数据库事务后代理可能会失败.如果您需要100%确定JMS和DB更新都是原子的,则需要分布式事务管理器.
| 归档时间: |
|
| 查看次数: |
14943 次 |
| 最近记录: |