Executar a recuperação

Um Gerenciador de recursos facilita a resolução de inscrições duráveis em uma transação, reenlisting o participante de transação após falha de recurso.

O processo de recuperação

Para inscrever permanentemente um recurso (descrito por uma implementação do IEnlistmentNotification interface) que podem ser mais tarde qualificadas para a recuperação, você deve chamar o EnlistDurable método. Além disso, você deve fornecer o EnlistDurable método com um identificador de Gerenciador de recursos (um Guid) que é usado para rotular consistentemente o participante da transação em caso de falha de recurso. Por esse motivo, o Guid que é fornecido para a inscrição inicial chamada deve ser idêntica do parâmetro resourceManagerIdentifier na chamada Reenlist durante a recuperação. Caso contrário, TransactionException é lançada. Para obter mais informações sobre alistamentos duráveis, consulte Como inscrever recursos como participantes de uma transação.

Na fase de preparação (fase 1) do protocolo 2PC, quando sua implementação de um Gerenciador de recursos duráveis recebe o Prepare notificação, ele deve registrar seu registro de preparação durante essa fase. O registro deve conter todas as informações necessárias concluir a transação na confirmação. O registro de preparação mais tarde pode ser acessado durante a recuperação, recuperando a propriedade RecoveryInformation do retorno de chamada preparingEnlistment. O log de registro não precisa ser executada dentro do Prepare método como o Gerenciador de recursos pode fazer isso em um thread de trabalho.

O processo de recuperação consiste em duas etapas a seguir:

Etapa 1 - ReEnlist

O Gerenciador de recursos examina o registro de informações de preparação para cada inscrição está em dúvida. Isso é feito examinando o RecoveryInformation propriedade do PreparingEnlistment retorno de chamada, que é passado para o Gerenciador de recursos do Prepare notificação durante a fase 1.

Para cada essa inscrição examina, ele chama Reenlist no Gerenciador de transações. Esse método passa exclusivo Guid que identifica o Gerenciador de recursos, bem como informações da inscrição em uma matriz de bytes. Um novo Enlistment objeto é retornado. Se na nova inscrição falhará com uma exceção, o Gerenciador de recursos será necessário tentar novamente mais tarde.

Você só deve chamar o Reenlist método quando reinicia um Gerenciador de recursos de falha. Além disso, você só deve reinscrevê registradas por um Gerenciador de recursos durante a fase de preparação inicial de protocolo 2PC de transações não resolvidas. Qualquer tentativa de chamar esse método em momentos inválidos pode produzir resultados incorretos.

Quando um participante é reenlisted usando esse método, os métodos de fase 2 da IEnlistmentNotification que correspondam ao resultado da transação (isto é, Commit , Rollback ou InDoubt ) são chamados conforme apropriado.

Etapa 2: concluir a recuperação

Quando todas as reenlistments forem concluídos, o Gerenciador de recursos chama o RecoveryComplete método. Esse método conclui a recuperação e informa o Gerenciador de transações que o Gerenciador de recursos tem não mais transações em dúvida. Fazendo isso, o Gerenciador de recursos garante que ele não chamará o Reenlist método novamente.

Um Gerenciador de recursos não é necessário para resolver todas as transações em dúvida antes de inscrever-se em novas transações. A primeira etapa pode ser executada a qualquer momento depois que o Gerenciador de recursos estabelece uma relação com o Gerenciador de transações, mas após RecoveryComplete foi invocada (etapa 2); Etapa 1 não pode ser executada novamente. Etapa 2 pode ser repetida várias vezes sem afetar o resultado das transações.