Siebel 8比赛状况

时间:2012-02-06 20:17:12

标签: asynchronous race-condition siebel

想象一下以下设置

  1. 任务列表中的一组 n 独立任务必须在Siebel中完成
  2. 任务 a b 等可由不同的线程处理
  3. 当线程启动时,工作流程会记录所有 n 任务的状态
  4. 线程继续完成,最终最终向队列发送JMS消息
  5. 我们遇到以下问题:

    • 适用于任务 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所有任务中都没有关闭整个任务列表(本例中 a b )已关闭

    我被告知在Siebel中没有办法提交修改工作流线程中正在执行的任务状态的数据库只能 在工作流程的最后。这意味着在JMS消息被发送出具有误导性状态之后。这显然是因为需要在出错时回滚工作流程。

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

1 个答案:

答案 0 :(得分:0)

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

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