我需要在Route中创建多个事务范围。像下面的东西。
<route>
<from uri="activemq:queue:foo"/>
<transacted ref="required"/>
<to uri="activemq:queue:bar"/>
<to uri="bean:database1?method=insert(*,*)"/>
<transacted ref="requiresNew"/>
<to uri="bean:database2?method=insert(*,*)"/>
</route>
如果我创建上述路线,我会收到以下错误。
ERROR 2016-09-13 14:32:32 servlet.FrameworkServlet - 上下文初始化失败 org.apache.camel.RuntimeCamelException:java.lang.IllegalArgumentException:必须将输出添加为路由的顶级。尝试将Transacted [ref:requiresNew]移动到路径顶部。 在org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1642)
查看文档和论坛,看起来路径中只允许一个事务范围。我正在寻找可以从Route控制事务的解决方案,并且可以创建多个事务范围。
目前是否允许?
答案 0 :(得分:3)
确实,每条路线只能有一个交易政策,但您也可以将需要不同政策的路线部分分成另一条路线(有关详细信息,请查看the official documentation),例如
<route>
<from uri="activemq:queue:foo"/>
<transacted ref="required"/>
<to uri="activemq:queue:bar"/>
<to uri="bean:database1?method=insert(*,*)"/>
<to uri="direct:requiresNew"/>
</route>
<route>
<from uri="direct:requiresNew"/>
<transacted ref="requiresNew"/>
<to uri="bean:database2?method=insert(*,*)"/>
</route>