Гоночные условия Siebel 8 - PullRequest
       316

Гоночные условия Siebel 8

0 голосов
/ 07 февраля 2012

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

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

1 Ответ

0 голосов
/ 18 апреля 2012

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

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

...