Pomona supports optimistic concurrency control by using a combination of
ETags and the If-Match
header.
For this to work we need to specify what property to use as the ETag.
public void Map(ITypeMappingConfigurator<EtaggedEntity> map)
{
map.Include(x => x.ETag, o => o.AsEtag());
}
Every time a PATCH
request is made to this resource with the If-Match
header set to the previously seen ETag
header it will compare the header value
with the current ETag value. If the ETag has changed Pomona will abort the
request with a 412
Precondition Failed
status code.
When using a data layer with optimistic concurrency
control we should also throw a ResourcePreconditionFailedException
if a conflict is detected during update.