Um modelo de bloqueio explícito (pessimista) evita a perda inesperada das atualizações de dados e controla o fluxo de trabalho quando as atualizações simultâneas de mais de um usuário ocorrem.
O modelo de bloqueio otimista permite que vários usuários visualizem e tentem modificar um registro ao mesmo tempo, mas impede que todos, exceto o primeiro, confirmem suas alterações. Os usuários não são informados que também há outros tentando atualizar o registro.
As alterações do registro são validadas quando o registro é confirmado. Se outro usuário já tiver atualizado o registro com êxito, outras atualizações simultâneas serão informadas de que existe um conflito quando esses outros usuários tentarem enviar suas atualizações simultâneas.
Por padrão, os registros não são bloqueados enquanto são exibidos em um aplicativo cliente ClearQuest. Como conseqüência, todo design de esquema que utilizar um único site ou um ambiente replicado deverá considerar esse fato.
A integridade de dados será garantida pela verificação, no momento em que um usuário clicar no botão Aplicar, se outro usuário tiver atualizado o registro e consolidado sua alteração enquanto ainda estiver no processo de execução de alterações. Se isso ocorrer, as atualizações do usuário não poderão ser consolidadas no banco de dados porque isso poderá resultar na perda de algumas das alterações do outro usuário. O usuário que estiver tentando confirmar suas alterações após a atualização do registro por outro usuário receberá uma mensagem de erro informando que suas alterações não foram confirmadas no banco de dados.
Em cenários complicados envolvendo atualizações coordenadas para vários registros relacionados, é preciso muito cuidado para garantir que esse comportamento não cause problemas. Como o bloqueio otimista é efetivo em cada registro individualmente, seu aplicativo deverá assegurar que os registros sejam atualizados na ordem correta e deverá tratar das falhas para atualização de um registro subordinado se outro usuário o tiver atualizado entre o início de sua ação e a consolidação de suas alterações. Seu design de esquema poderá tentar a operação novamente ou confirmar a falha e reverter a atualização do registro-pai, ou poderá consolidar a atualização do registro-pai, embora a atualização do registro subordinado tenha falhado.
O bloqueio pessimista fornece um mecanismo para evitar situações em que vários usuários editem simultaneamente um registro. O modelo de bloqueio pessimista aplica a modificação seqüencial de registros e evita as atualizações simultâneas dos registros. Assim que um usuário começa a atualizar o registro, esse modelo coloca um bloqueio no registro. Outros usuários que tentarem iniciar a atualização desse registro serão informados de que outro usuário já está com uma atualização em andamento e serão impedidos de modificá-lo. Os usuários que desejam atualizar simultaneamente o registro devem aguardar até que o primeiro usuário tenha concluído a validação do registro, e depois o outro usuário recebe o bloqueio e pode fazer alterações após as alterações do usuário anterior. Esse modelo evita o problema de resolução de conflitos impedindo os conflitos. As atualizações são serializadas e cada atualização subseqüente é iniciada com o registro já atualizado com as alterações dos usuários anteriores.
Para utilizar o bloqueio de registro pessimista, é necessário incluir código de gancho nos tipos de registros que desejam utilizá-lo. O código do gancho deve ser incluído como a nova ação de tipo BASE para cada tipo de registro. A remoção manual dos bloqueios pode ser realizada com código de gancho que seja implementado como um alias de script de registro. Você pode utilizar uma consulta do ClearQuest para localizar os registros bloqueados procurando registros com o campo locked_by igual a valores não-nulos. A coluna de banco de dados do usuário locked_by é uma coluna de inteiros que registra o id de login do usuário quando um registro é bloqueado.
O bloqueio pessimista é um modelo útil quando atualizações simultâneas reais não são necessárias e atualizações subseqüentes podem ser atrasadas até que uma atualização anterior tenha sido concluída. Geralmente, isso sugere que as atualizações ocorrem em um intervalo de tempo muito curto. Atualizações que retêm o bloqueio por longos períodos impedem que outros usuários atualizem o registro.