Конфликт версии компонента базы данных - (Обработка записей в очереди задач Guidewire - PullRequest
0 голосов
/ 13 мая 2019

Я создаю рабочую очередь в BillingCenter Guidewire для обработки больших данных, но для некоторых записей база данных возвращает исключение «Конфликт версии компонента базы данных:»

Кто-то может мне помочь?

Какконтролировать работника для обработки записей без процесса с конфликтом?

С уважением, Дуглас Резенде

Ответы [ 2 ]

0 голосов
/ 14 июля 2019

Если вы распределяете нагрузку своей рабочей очереди по кластеру, и у вас есть сообщения, изменяющие одну и ту же сущность, это произойдет. В Guidewire 9 реализована концепция аренды для получения ресурсов, вы можете реализовать аналогичную концепцию, чтобы избежать параллелизма при распределении нагрузки на рабочую очередь - сохраняйте централизованную таблицу с обрабатываемыми записями (ID, типа объекта и статуса должно быть достаточно) и при необходимости находят записи, проверяют по этой таблице, что они не обрабатываются.

0 голосов
/ 13 мая 2019

Это исключение возникает, когда объект является версионным и два процесса изменяют одну и ту же «запись». Я думаю, что вам нужно добавить элемент управления для метода findTargets WorkQueue, возможно, новый экземпляр вашего WorkQueue запущен до последнего завершения выполнения.

private var _lock : ReentrantLock = new ReentrantLock()
private final static var _batchProcessType = BatchProcessType.TC_JOBEXPIRE

override function findTargets(): Iterator<PolicyPeriod> {
  using( _lock ) {
    var maintenanceToolsAPI = new gw.webservice.pc.pc800.MaintenanceToolsAPI()
    if (!maintenanceToolsAPI?.getWQueueStatus(_batchProcessType.Code)?.NumActiveWorkItems != 0) {
      // ...
    }
    return {}.iterator() as Iterator<PolicyPeriod>
  }
}

Таким образом проверяется, что не существует одного выполнения с активными элементами.

...