Представьте себе следующую установку
- Набор n независимых задач в списке задач должен быть выполнен в Siebel
- Задачи a , b и т. Д. Могут обрабатываться отдельными потоками
- Когда поток запускается, рабочий поток записывает состояния всех n задач
- Потоки продолжают завершаться и в конечном итоге отправляют сообщение JMS в очередь
У нас есть следующая проблема:
- Поток 1 , который работает с задачей a завершает свою работу и помечает задачу a как закрыто
- В то же время поток 2 , который работает с задачей b , также завершает свою работу и помечает задачу 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. Любая помощь?