Asynchronous Siebel 8竞赛条件

Asynchronous Siebel 8竞赛条件,asynchronous,race-condition,siebel,Asynchronous,Race Condition,Siebel,想象一下下面的设置 任务列表中的一组独立任务必须在Siebel中完成 任务a、b等可以由单独的线程处理 线程启动时,工作流记录所有n任务的状态 线程继续完成并最终向队列发送JMS消息 我们有以下问题: 处理任务a的线程1完成其工作并将任务a标记为已关闭 同时,处理任务b的线程2也完成了它的工作,并将任务b标记为关闭 两条JMS消息放置在队列上,并发送到另一个后端系统 问题是:第一条JMS消息说任务列表的状态是a=closed b=open,第二条JMS消息说a=open b=closed 任务

想象一下下面的设置

  • 任务列表中的一组独立任务必须在Siebel中完成
  • 任务a、b等可以由单独的线程处理
  • 线程启动时,工作流记录所有n任务的状态
  • 线程继续完成并最终向队列发送JMS消息
  • 我们有以下问题:

    • 处理任务a的线程1完成其工作并将任务a标记为已关闭
    • 同时,处理任务b的线程2也完成了它的工作,并将任务b标记为关闭
    • 两条JMS消息放置在队列上,并发送到另一个后端系统
    • 问题是:第一条JMS消息说任务列表的状态是
      a=closed b=open
      ,第二条JMS消息说
      a=open b=closed
    • 任务可以由Siebel的用户合法地重新打开(比方说,出于欺诈检查目的)
    • 后端系统以任意顺序接收两条JMS消息,因为中间件不保证顺序
    • 后端系统接收到一条JMS消息,说是
      关闭,打开
      ,然后不久又接收到另一条消息,说是
      打开,关闭
      。这可能以任何顺序发生,但结果是相同的。在后端系统看来,整个任务列表尚未关闭,而在Siebel中,所有任务(本例中的a和b)都已关闭
    我被告知,在Siebel中,修改工作流线程中正在执行的任务状态的对数据库的提交不能只发生在工作流程的最后。这意味着在JMS消息以误导性状态发出之后,至关重要。这显然是因为需要在出现错误时回滚工作流


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

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

    使用业务服务同步调用工作流,或者使用业务服务代替工作流,并在数据库提交后发送JMS消息。对……的指示