想象一下以下设置
- 必须在 Siebel 中完成任务列表中的一组n 个独立任务
- 任务a,b等可以由单独的线程处理
- 当一个线程启动工作流时,记录所有n个任务的状态
- 线程继续完成并最终将 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 中所有任务(本例中的 a和b)都已关闭
有人告诉我,在 Siebel 中没有办法让修改工作流线程中正在执行的任务的状态的提交只能在工作流的最后发生。这意味着在带有误导性状态的 JMS 消息发出之后至关重要。这显然是因为需要在出错时回滚工作流。
问题:上述陈述是否真的意味着这个问题在 Siebel 中永远无法解决?如果没有,那么有人可以告诉我是否可以在 Siebel 中解决此问题,以便发送带有正确任务状态的 JMS 消息。我天真地认为这是使用信号量解决的,但说实话,我已经被宠坏了,因为我从来没有处理过信号量,我肯定不知道这个概念是否存在于 Siebel 中。有什么帮助吗?