【发布时间】:2019-12-31 21:18:29
【问题描述】:
我为教育 apache camel 交易编写了这段代码
from("jms:SAMPLE_1")
.transacted()
.log("message")
.to("jms:SAMPLE_2")
.to("jms:SAMPLE_3")
.log("message")
.process(exchange -> {
throw new Exception();
})
.end();
我在发生错误后使用事务处理,我必须触发事务回滚,但由于某种原因,消息仍保留在 SAMPLE_2 和 SAMPLE_3 队列中。为什么?
更新:
我加了豆子
@Bean(name = "PROPAGATION_REQUIRED")
public SpringTransactionPolicy propogationRequired(PlatformTransactionManager jtaTransactionManager){
SpringTransactionPolicy propagationRequired = new SpringTransactionPolicy();
propagationRequired.setTransactionManager(jtaTransactionManager);
propagationRequired.setPropagationBehaviorName("PROPAGATION_REQUIRED");
return propagationRequired;
}
@Bean
PlatformTransactionManager platformTransactionManager(ConnectionFactory cf) {
return new JmsTransactionManager(cf);
}
并修复路线,但这对我没有帮助:
from("jms:SAMPLE_1")
.transacted("PROPAGATION_REQUIRED")
.log("message")
.to("jms:SAMPLE_2")
.to("jms:SAMPLE_3")
.log("message")
.process(exchange -> {
throw new Exception();
})
.end();
我在文档中找到了这个配置
<blueprint ...>
<bean id="jmstx" class="org.apache.camel.component.jms.JmsComponent">
<property name="configuration" ref="jmsConfig" />
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="transactionManager" ref="jmsTransactionManager" />
<property name="transacted" value="true" />
</bean>
...
如何从这个 xml 创建 bean?
【问题讨论】:
标签: java transactions apache-camel spring-transactions