尝试保存第二个任务时服务的“并发”错误

时间:2013-01-07 17:10:39

标签: concurrency rally

我正在尝试将两个任务保存到同一个用户故事中。第一个请求总是成功,但第二个服务请求总是在响应中返回此消息:

  

并发冲突:[自从被读取以来,对象已被修改   在此上下文中更新] - ConcurrencyConflictException:已修改   自从读取更新:对象类:com.f4tech.slm.domain.UserStory   :ObjectID:

我正在使用JavaScript SDK来创建任务。我做了两次:

Rally.data.ModelFactory.getModel({          
    type : 'Task',
    success : function(task) {

        var record = Ext.create(task, {
            Name : taskName,
            State : 'Defined',
            TaskIndex : 1,
            WorkProduct : workProductId,
            Owner : userIdsTeam[owner],
            SyncDevelopmentTasktoAccuRev : accuSync,
            Estimate: hours,
            TargetDeployment: targetDeployment,
            context: {
                  project:'/project/' + currentProjectId,
                  projectScopeDown: true
            },
        });

        record.save({
            callback : afterSaveNewTaskCallback
        });

    }
});

我能做些什么来摆脱这个错误并成功保存两个任务吗?

2 个答案:

答案 0 :(得分:2)

除了Kyle的回答,您还可以使用Rally.data.BulkRecordUpdater为您排队创建/更新。 http://developer.rallydev.com/apps/2.0p5/doc/#!/api/Rally.data.BulkRecordUpdater

答案 1 :(得分:1)

由于您的任务都附加到同一个底层用户故事,因此创建者都试图锁定它以设置关联,这就是第二个失败的原因。您需要将回调链接在一起:

Rally.data.ModelFactory.getModel({
    type : 'Task', 
    success : function(taskModel) {
        //Create first task
        var task1 = Ext.create(taskModel, {
            //...fields...
        });
        task1.save({
            callback: function() {
                //Create second task
                var task2 = Ext.create(taskModel, {
                    //...fields...
                });
                task2.save({
                    callback: afterSaveNewTaskCallback
                });
            }
        });
    }
});