2

好的,我正在做的就是尝试进入我的第一页。我收到以下异常:

org.springframework.webflow.execution.repository.snapshot.SnapshotNotFoundException: 
No flow execution snapshot could be found with id '1'; perhaps the snapshot has been removed? 

我正在使用以下内容:

  • Spring Webflow 2.3(带有持久性上下文标志)
  • 春季安全
  • 春季MVC
  • 弹簧数据
  • JPA 2.0,带有/通过自定义 JpaFlowExecutionListener

我的 JpaFlowExecutionListener 的唯一自定义部分是我将 EntityManager 从范围中分离出来的部分,以便它可以序列化流 - 我将其作为数据库支持的流持久性设置。流被保存/读取/读取到 db ok。但我无法让它呈现第一个视图。

据我所知,这是它在以下崩溃之前所经历的步骤:

  1. FlowExecutorImpl 代码调用launchExecution()。
  2. 创建持久对话。
  3. PersistentConversation 线程被锁定
  4. PersistentConversation 放入 executionRepository 和 PersistentConversationHolder 的 ThreadLocal 会话映射中。(保留活动线程的对话列表)
  5. 解锁 - 导致删除 ThreadLocal 映射中的 PersistentConversation
  6. 然后调用 FlowExecutorImpl createPausedResult(flowExecution)
  7. 最终调用 FlowExecutorImpl resumeExecution()。
  8. 使用 FlowID 在 PersistenceConversationHolder 映射中查找 PersistentConversation,但在此处不再找到 PersistentConversation。
  9. 从数据库中检索并将 db 对象填充到新的 PersistentConversation 中。
  10. 尝试从它的快照列表中恢复对话,但它在步骤 5 中被删除。

对于 PersistenceConversationHolder,请在此处参考本书中的示例。

任何帮助将不胜感激!

4

1 回答 1

2

万一有人也像我一样错过了这个……

在上面的第 5 步,当线程解锁时,您需要更新保存/更新 PersistentConversation 到数据库,该副本将包含所有快照信息。

一旦我写了这个,很容易看出有一个缺失的步骤。

于 2013-11-06T16:19:37.907 回答