2014-07-19 1 views
0

랠리 wsapi를 사용하여 원자 트랜잭션을 수행 할 수있는 방법이 있습니까? 나는 트랜잭션이 연속 된 요청들 사이에서 상태를 암시한다는 것을 안다. 그러나 REST는 분명히 상태 비 저장 프로토콜이다. 그래서 그것은 문제가 될 수 있습니다.랠리 레스 API 트랜잭션

portfolioitem/feature을 가져 와서 가장 최신 버전이 있으면 즉시 다시 쓸 수 있어야합니다. portfolioitem/feature에 여러 사용자가 동시에 편집 할 수있는 사용자 지정 필드가 있는데, 각 업데이트가 올바른 순서로 이루어 지도록해야합니다.

나는 Rally의 서버에 액세스 할 수 없기 때문에 모든 클라이언트 측을 처리해야하며이 작업을 수행하는 방법을 알 수 없다. 나는 Rally SDK도 할 것이다.

답변

1

WS API가 원자 트랜잭션을 지원한다고 생각하지 않습니다. 업데이트가 하나의 원자 트랜잭션으로 발생하여 예를 들어 업데이트 중 하나가 실패하면 모두 롤백되는 시나리오가 지원되지 않는 시나리오입니다. 위의 예에서 언급 한 각 업데이트는 별개의 트랜잭션이 될 것이며, 동일한 인공물이 다른 사용자에 의해 업데이트되는 공중 충돌의 경우 사용자 중 한 명에게 동시성 오류가 발생합니다.

0

나는 OP와 동일한 보트에 있지만, 유일한 차이점은 읽기와 후속 쓰기 사이에 시간이 지나갈 수 있다는 점입니다. 흥미롭게도, 나는 레코드를 업데이트하려고 시도 할 때 동시성 에러를 얻는 것만 같다. 나는 오래된 버전을 사용하여 레코드를 업데이트 할 때 예외가 발생하지 않는다. 즉, 다른 누군가가 내 밑에서 변경된 레코드를 업데이트 할 때 예외가 발생하지 않는다.

문제가되고있는대로 곧 수정하려고합니다. 선택한 방법은 모든 POST 전에 강제로 GET을 연결하고, 내가 얻은 레코드의 VersionID가 메모리에 저장된 것과 일치하지 않으면 예외를 throw합니다. 불일치가 발생하면 로컬 레코드 (보기)를 새로 고치고 사용자에게 변경 사항을 다시 제출하라는 메시지를 표시합니다. 예, 이것은 사용자에게는 불편할 것입니다. 그러나 앱에서 변경 사항은 클릭 한 번으로 합리적입니다.

이 문제에 대한 더 나은 접근 방법이 있는지 알고 싶습니다. 모든 레코드가 VersionID를 가지면 클라이언트 쪽에서 WsapiProxy의 적절한 지원을 받아 서버 측에서 처리 될 것이라고 가정합니다. 아마도 VersionID를 명시 적으로 가져 오는 것과 같은 명백한 것이 빠졌을 것입니다.