我在BillingCenter Guidewire中创建了一个工作队列来处理大数据,但是对于某些记录,数据库返回了一个异常“数据库bean版本冲突:”
有人可以帮助我吗?
控制人员如何处理没有冲突的记录?
关于, 道格拉斯·里曾德(Douglas Rezende)
答案 0 :(得分:0)
当实体是可版本控制的,并且两个进程正在更改同一“记录”时,将发生该异常。我认为您需要在WorkQueue的findTargets方法中添加一个控件,也许您的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>
}
}
通过这种方式验证不存在具有有效项目的执行。
答案 1 :(得分:0)
如果您在整个群集中分配工作队列的负载,并且有消息更改同一实体,则会发生这种情况。 Guidewire 9实施了租用以获得资源的概念,您可以实施类似的概念来避免在共享工作队列负载时并发-保持一个集中的表以及正在处理的记录(ID,实体类型和状态应该足够)以及您何时正在查找记录,对照该表验证它们没有被处理。