Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para utilizar as transações automáticas de forma eficaz, cada componente transacional deve indicar que concluiu o seu trabalho. Quando uma instância de objeto conclui a sua tarefa com êxito, ela deve definir os seus sinalizadores consistentes e concluídos como True chamando o método IObjectContext::SetComplete. Quando todos os objetos internos da transação tiverem chamado SetComplete, a transação pode ser encerrada por desativação explícita do objeto raiz ao chamar o seu método SetComplete. Ao indicar explicitamente que um objeto raiz concluiu seu trabalho, você pode reduzir o comprimento da transação.
Quando um método de objeto transacional falha, o objeto deve definir o seu sinalizador consistente como False e o seu sinalizador concluído como True, chamando o método IObjectContext::SetAbort. Ao chamar o SetAbort método, um objeto retorna o controle para seu chamador e garante que a transação seja finalmente anulada.
No entanto, a menos que o objeto que chama SetAbort seja a raiz da transação, a transação continua a ser executada mesmo que nada possa salvá-la de eventualmente abortar. Para acelerar o encerramento de uma transação com falha, você pode gerar um erro para alertar o objeto raiz para também chamar SetAbort. Para conclusão, o objeto raiz deve enviar uma mensagem de erro para seu cliente.
Embora existam muitas abordagens diferentes que você pode adotar para lidar com erros, sua abordagem deve coordenar claramente as comunicações entre objetos interiores e o objeto raiz.
Os seguintes fragmentos de código do Visual Basic mostram uma abordagem para o tratamento de erros. No primeiro fragmento, um objeto interno chama SetAbort, ocasiona um erro e gera uma mensagem de erro, da seguinte maneira:
Dim ObjCtx As ObjectContext
Dim ErrorCode As Long, Description As String
Set ObjCtx = GetObjectContext()
ObjCtx.SetAbort
ErrorCode = vbObjectError + 5
Description = "Some meaningful message"
Err.Raise ErrorCode, , Description
No segundo fragmento, o objeto raiz manipula o erro e passa a mensagem para seu cliente, da seguinte maneira:
Sub MyObjMethod1()
On Error GoTo MyObjMethod1_err
Dim ObjCtx As ObjectContext
Dim InteriorObj1 As Cinterior ' Cinterior is a user-defined object.
Set ObjCtx = GetObjectContext()
Set InteriorObj1 = CreateObject ("MyDll.Cinterior")
InteriorObj1.Method1
' If the call completed successfully, then...
ObjCtx.SetComplete
Exit Sub
MyObjMethod1_err:
' Doom the transaction and exit.
ObjCtx.SetAbort
' Pass the message back to client.
Err.Raise Err.Number, , Err.Description
End Sub
Tópicos relacionados