2016-06-21 1 views
0

Я использую Java API с Case Manager 5.2.1, в Windows.IBM Case Manager: временное получение «несоответствия номера последовательности обновлений», пытающегося сохранить случай

Мой веб-сервис делает следующее:

// Create a brand new case 
CaseType myCaseType = CaseType.fetchInstance(osRef, myCaseTypeName); 
Case newPendingCase = Case.createPendingInstance(myCaseType); 

// Save it now to get access to the Case ID 
newPendingCase.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY); 
newCaseIdentifier = newPendingCase.getIdentifier(); 

// Fetch a fresh copy of the case instance 
Case cs = Case.fetchInstanceFromIdentifier(osRef, newCaseIdentifier); 

// Now set a whole bunch of properties, add documents, etc. etc. 
... 

// Finally, save all our updates: to "cs", not "newCaseIdentifier" 
cs.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY); 

ПРОБЛЕМА: Я периодически получаю эту ошибку:

The object {52EECAC2-38B2-4CB5-8F22-BAF33D6C35EC} of class "MyCaseTypeName" was not changed or deleted because it was modified one or more times in the repository since the application retrieved it. Update sequence number mismatch; requested USN = 0, database USN = 1

Я знаю есть только два case.save() вызывает: один для «newPendingDocument», другой (намного позже) для «cs».

Я выполняю SAME код несколько раз: иногда он работает, иногда если с ошибкой Ошибка «Неверный номер последовательности номеров».

Q: Любые идеи/любые предложения относительно того, как я могу устранить эту проблему?

+0

Если у вас есть возможность опубликовать полный код? И вы уверены, что клиент только вызывает службу один раз? –

ответ

1

Глядя на код, который вы предоставляете Я в замешательстве, почему вы создали бы второй экземпляр Case. я предположил бы, что вы бы лучше делать это вместо:

// Create a brand new case 
CaseType myCaseType = CaseType.fetchInstance(osRef, myCaseTypeName); 
Case newPendingCase = Case.createPendingInstance(myCaseType); 

// Save it now to get access to the Case ID 
newPendingCase.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY); 
newCaseIdentifier = newPendingCase.getIdentifier(); 

// Fetch a fresh copy of the case instance (not sure if this is necessary) 
newPendingCase = Case.fetchInstanceFromIdentifier(osRef, newCaseIdentifier); 

// Now set a whole bunch of properties, add documents, etc. etc. 
... 

// Finally, save all our updates: to "newPendingCase" 
newPendingCase.save(RefreshMode.REFRESH, null, ModificationIntent.MODIFY); 

Я не работал с Case Manager, но работали с P8. Апи звонки очень похожи.

Номер USN может быть немного сложным. Если есть какой-либо период времени, в котором вы ожидаете внешнего вызова (например, для стороннего REST-интерфейса), вы можете сделать newPendingCase.Refresh() после вызова, а затем повторно заполнить все необходимые свойства этого случая.

+0

Спасибо. Причиной первого «save()» является получение идентификатора case - его не существует, прежде чем вы сохраните его. И да, я уверен, что услуга вызывается только один раз - я вручную щелкаю ссылку на странице .jsp. Иногда проблема возникает * в первый раз * после перезапуска сервлета. – paulsm4

+0

Есть ли конкретная причина, по которой вам нужно будет получить идентификатор в этой точке? Мне кажется, что вы создаете два объекта корпуса, когда есть только один случай. (Я искал образец кода IBM, но не смог найти его, поэтому я просто уйду, как работает большинство объектов FileNet). Несмотря на это, я думаю, что публикация большего количества вашего кода может помочь (вы ссылаетесь снова на объект newPendingCase?) У меня возникли аналогичные проблемы с FileNet, и обычно это результат того, что я делаю что-то 1, сделайте это другое. –

+0

Очень хорошие вопросы. 1) Да, мне нужен идентификатор раньше, 2) Нет, 'Case.fetchInstanceFromIdentifier()' не создает новый случай - он просто создает новую ссылку на (теперь существующий) случай. Также я не могу добавить документы * BEFORE * "case.save()": папка с папкой еще не существует. ВАЖНАЯ ТОЧКА. На Tomcat проблема НИКОГДА не возникает. В WebSphere моего коллеги (* идентичный * VM, другой ПК) он всегда появляется *. На моей WebSphere VM это прерывисто. Даже с * точно такими же тестовыми входами *. Q: 1) могу ли я как-то «заблокировать» ссылку на регистр во время моего обновления? Или 2) как-то «обновить» мою ссылку? – paulsm4