【问题标题】:How to perform transaction management in Mule for a single flow having multiple sub flows如何在 Mule 中为具有多个子流的单个流执行事务管理
【发布时间】:2016-03-04 06:37:57
【问题描述】:

我有以下场景,其中 fdcasterflows1Flow1 和 fdcasterflows1Flow2 将在 spring hibernate 中进行数据库操作,并且应该基于几个参数进行提交或回滚,我必须在 DBCommitRollBack 类中执行,并且 fdcasterflows1Flow1 和 fdcasterflows1Flow2 应该获得相同的数据库连接, 这在mule中如何实现

<flow name="DetailsFlow2" doc:name="DetailsFlow2">
<flow-ref name="fdcasterflows1Flow1" doc:name="Flow Reference1"/>   
<flow-ref name="fdcasterflows2Flow2" doc:name="Flow Reference2"/>              
<component class="com.DBCommitRollBack" doc:name="Java"/>
 </flow>
 <sub-flow name="fdcasterflows1Flow1" doc:name="fdcasterflows1Flow1">
 <component class="com.GetDetails" doc:name="Java"/>
 </sub-flow>
 <sub-flow name="fdcasterflows1Flow2" doc:name="fdcasterflows1Flow1">
 <component class="com.FetchDetails" doc:name="Java"/>
 </sub-flow>

顺便说一下,我使用的是 Spring DAO 层提供的 HibernateDAOSupport

【问题讨论】:

  • 您提出这个问题的事实意味着您已经在使用 mule 完成错误的任务。如果您使用的是 DAO,这意味着您有一个数据库结构,为什么不直接使用 spring 到一个 REST 业务 API 呢?
  • 不,我们必须使用Mule框架,因为我们有各种连接器,例如HTTP,File等,有没有办法执行事务管理?

标签: spring hibernate mule


【解决方案1】:

如果您使用的是企业版,我建议您使用“事务范围”。

来自 Mulesoft 的文档:

当您想要将事务应用于流中的元素时,将事务作为包装器(在 Studio 中称为范围)应用,这些元素不是以配置为事务的入站连接器开始的。

您可以将您的几个参数返回给 Mule,然后选择继续或抛出异常(从而停止事务)。

【讨论】:

  • 您可以在此答案中引用文档的相关部分吗?堆栈溢出更喜欢“自包含”的答案。
  • 完成 - 我在上面编辑了我的答案。谢谢你的指点。
  • 太好了,谢谢。顺便说一句,您可以保留完整文档的链接 - 答案可以有外部链接,只要它在没有外部链接的情况下独立存在。
  • 例如,我需要控制我的事务,如下所示,使用 PlatformTransactionManager 在流程顶层某处的 beginTransaction 并在流程结束时提交/回滚?可以举个例子吗?
  • 只是想问一下,为什么需要使用PlatformTransactionManager?如果您使用 Mule,则应尽可能使用其内置工具集。事务范围将允许您在事务中包装您想要的任何内容。至于提供一个使用Spring的例子,我对Spring不太熟悉(我来自C#世界),而且我的工作场所不允许我提供示例代码,所以很遗憾我不能提供。
【解决方案2】:

查看数据库连接器文档,尤其是有关事务的文档。

https://docs.mulesoft.com/mule-user-guide/v/3.6/database-connector

【讨论】:

  • 这可能会有所帮助,但不是答案。见How to Answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多