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.