【问题标题】:Siebel 8 race conditionSiebel 8 竞争条件
【发布时间】:2012-02-28 07:32:08
【问题描述】:

想象一下下面的设置

  1. 任务列表中的一组 n 个独立任务必须在 Siebel 中完成
  2. 任务 ab 等可以由单独的线程处理
  3. 当一个线程启动时,工作流会记录所有 n 个任务的状态
  4. 线程继续完成并最终将 JMS 消息发送到队列

我们有以下问题:

  • 处理任务 a 的线程 1 完成其工作并将任务 a 标记为 已关闭
  • 同时在任务b上工作的线程2也完成了它的工作并将任务b标记为关闭强>
  • 两条 JMS 消息被放入队列并发送到另一个后端系统
  • 问题出在:第一条 JMS 消息说任务列表的状态是a=closed b=open,第二条 JMS 消息说a=open b=closed
  • Siebel 用户可以合法地重新打开任务(假设用于欺诈检查)
  • 由于中间件不保证顺序,后端系统以任意顺序接收两条 JMS 消息
  • 后端系统收到一条 JMS 消息,显示 closed,open,不久之后又收到一条显示 open,closed 的消息。这可能以任何顺序发生,但结果是相同的。 向后端系统显示整个任务列表尚未关闭,而在 Siebel 中的所有任务(本例中为 ab)已关闭

有人告诉我,在 Siebel 中,无法向数据库提交修改工作流线程中正在执行的任务的状态在工作流程的最后。这意味着在带有误导性状态的 JMS 消息发出之后至关重要。这显然是因为需要在出错时回滚工作流。

问题:上述陈述是否真的意味着这个问题在 Siebel 中永远无法解决?如果没有,那么有人可以告诉我是否可以在 Siebel 中解决此问题,以便发送带有正确任务状态的 JMS 消息。我天真地认为这是使用信号量解决的,但说实话,我已经被宠坏了,因为我从来没有处理过信号量,我肯定不知道这个概念是否存在于 Siebel 中。有什么帮助吗?

【问题讨论】:

    标签: asynchronous race-condition siebel


    【解决方案1】:

    在提交到数据库之前不能读取数据,只能控制时间。

    使用业务服务同步调用工作流,或使用业务服务代替工作流,并在数据库提交后发送 JMS 消息。给call a workflow process from business service的说明。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多