如何在 Spring Webflow 2 中使用 Flow Managed Persistence Context 以编程方式触发提交
Posted
技术标签:
【中文标题】如何在 Spring Webflow 2 中使用 Flow Managed Persistence Context 以编程方式触发提交【英文标题】:How to trigger commit programmaticaly on Spring Webflow 2 with Flow Managed Persistence Context 【发布时间】:2016-02-13 15:04:50 【问题描述】:我已将我们的应用程序升级到 SWF 2 并实现了 FMPC 模式。我们现有的大多数流定义没有结束状态,现在使用 FMPC,如here 所述,您可以通过将 commit=true 设置为最终状态来触发提交。我们的流程示例:
-
获取表单对象
将详细信息保存到数据库(我们要在此处提交)
使用刷新的数据获取相同的对象
显示以查看
它目前与以前的 SWF 一起使用,并且仅使用 Open Session in View 模式。但是我们实现了 FMPC 以避免任何 LazyInitializationException。现在发生的是第 1-4 步,只是没有提交更改,所以在视图中,我们看不到任何更改。似乎很难在中间添加最终状态只是为了提交给 DB,这也意味着我们需要添加这么多的最终状态,所以我的问题是 如何告诉(SWF/FMPC)“以编程方式”提交无需添加结束状态标签。如果您知道更好的方法,也请告诉。谢谢!
【问题讨论】:
【参考方案1】:Spring Web Flows 可以具有继承性,因此您可以在父流中实现最终状态,然后将其作为所有流的父级。
【讨论】:
感谢 Zilvinas,但是提交操作(读/写)可以在任何地方触发,并且现有的流程定义非常大,更新它可能很危险或费力。另外,我注意到只有当我从应用程序注销时才会触发提交,因此被认为是流程的结束。我发现这个网站非常有趣:ibm.com/developerworks/library/j-springwebflow【参考方案2】:我解决了我的问题。我终于发现 Hibernate 确实在自动提交我所有的读写操作。问题是在刷新相关对象时,这给我的印象是实际上没有读写。执行 sessioFactory.refresh(object) 而不是普通的 find() 可以有效地从数据库中获取更新的数据。我猜是因为休眠会话仍然存在(由于 FMPC),这就是为什么执行“查找”将从休眠缓存中检索而“刷新”意味着直接从底层数据库重新读取数据。请根据需要更正我的分析。
【讨论】:
以上是关于如何在 Spring Webflow 2 中使用 Flow Managed Persistence Context 以编程方式触发提交的主要内容,如果未能解决你的问题,请参考以下文章
使用spring webflow,在前台页面中如何显示后端返回的错误信息
spring-roo 2.0 Spring Webflow 持久性最佳实践
Spring webflow + Jpa + Hibernate运行时无响应问题处理