Siebel 8 условия гонки

Представьте себе следующую установку

  1. Набор из n независимых задач в списке задач должен быть выполнен в Siebel
  2. Задачи a, b и т. Д. Могут выполняться отдельными потоками.
  3. Когда поток запускается, рабочий поток записывает состояния всех n задач
  4. Потоки продолжают завершаться и в конечном итоге отправляют сообщение JMS в очередь.

У нас есть следующая проблема:

  • Поток 1, который работает над задачей а, завершает свою работу и помечает задачу как закрытую.
  • В то же время поток 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. Любая помощь?

1 ответ

Невозможно прочитать данные, пока они не будут переданы в базу данных, можно только контролировать время.

Используйте бизнес-сервис для синхронного вызова рабочих процессов или используйте бизнес-сервис вместо рабочего процесса и отправляйте сообщение JMS после фиксации базы данных. Инструкции для вызова рабочего процесса из бизнес-службы.

Другие вопросы по тегам