[英]Camel transaction not rolling back on exception
我正在玩 Camel 3.13.0,但当我使用transacted
时,交易似乎没有回滚。 知道为什么吗?
代码片段如下:
DataSource dataSource = InOutTest.setupDataSource();
//Initiate registry, transaction manager, policy
SimpleRegistry registry = new SimpleRegistry();
DataSourceTransactionManager transactionManager =
new DataSourceTransactionManager(dataSource);
registry.bind("transactionManager", transactionManager);
SpringTransactionPolicy propagationRequired =
new SpringTransactionPolicy();
propagationRequired.setTransactionManager(
transactionManager);
propagationRequired.setPropagationBehaviorName(
"PROPAGATION_REQUIRED");
registry.bind("PROPAGATION_REQUIRED", propagationRequired);
//Create context, add sql component
SqlComponent sqlComponent = new SqlComponent();
sqlComponent.setDataSource(dataSource);
CamelContext context = new DefaultCamelContext(registry);
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
context.addComponent("jmsComponent", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
context.getComponent("sql", SqlComponent.class).setDataSource(InOutTest.setupDataSource());
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:sqlParam")
.transacted("PROPAGATION_REQUIRED")
.to("sql:insert into articles(name, category) values ('ActiveMQ', 'activemq')")
.process((exchange -> {throw new RuntimeException("Mock Ex");}));
}
});
Apache Camel 长期以来一直支持交易 EIP 模式。 配置此模式的一种方法是,就像您已经使用transacted
通过 Endpoint DSL 配置所做的那样。
同时,您将PlatformTransationManager
附加到DataSource
:
DataSourceTransactionManager transactionManager =
new DataSourceTransactionManager(dataSource);
然后您正在配置SqlComponent
以使用不同的DataSource
:
context.getComponent("sql", SqlComponent.class).setDataSource(InOutTest.setupDataSource());
您应该通过删除上述行来使用用于配置PlatformTransationManager
的相同托管DataSource
,您应该对 go 满意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.