Конфликт версии bean-компонента базы данных - (обработка записей в рабочей очереди Guidewire

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

Кто-нибудь может мне помочь?

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

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


person Douglas Rezende    schedule 13.05.2019    source источник


Ответы (2)


Это исключение возникает, когда сущность имеет возможность управления версиями, и два процесса изменяют одну и ту же «запись». Я думаю, что вам нужно добавить элемент управления в метод 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>
  }
}

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

person Carlos Duque    schedule 13.05.2019
comment
Отлично, я попробую это! - person Douglas Rezende; 14.05.2019

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

person jramos    schedule 14.07.2019