Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O RegDB (banco de dados de registro COM+) é um gerenciador de recursos transacionado que pode participar de transações COM+. Isso permite que você execute operações de administração em uma transação e tenha todas as alterações de configuração confirmadas ou anuladas como uma operação atômica, mesmo em vários computadores. Em algumas circunstâncias, pode ser muito benéfico fazer isso, embora haja um comportamento de isolamento e bloqueio que você deve levar em conta e executar tarefas de administração dentro de transações envolve pequenas alterações no modelo de programação de administração normal.
Benefícios de fazer operações de administração dentro de transações
- **Consistência de dados— **As operações de administração executadas em uma transação são confirmadas ou anuladas como um todo, embora haja alguns recursos de catálogo COM+ não transacionais para os quais esse pode não ser o caso. (Consulte os recursos de catálogo COM+ não transacionais abaixo.)
- **Implantação consistente em vários computadores— **Se você estiver implantando aplicativos COM+ em vários servidores, poderá garantir que todos os servidores fiquem com configurações idênticas.
- **Dimensionamento e desempenho—**Quando você faz várias operações dentro de uma transação, todas as gravações no RegDB são executadas de uma só vez. Gravações persistentes no RegDB são uma operação relativamente cara; se você estiver fazendo muitas gravações no RegDB, poderá obter um grande benefício de desempenho ao fazer tudo de uma vez, em vez de sempre que chamar SaveChanges.
Comportamento de isolamento do RegDB
Para garantir a consistência de dados adequada e transações serializáveis, o RegDB impõe um comportamento específico de bloqueio e isolamento quando operações de administração estão sendo executadas dentro de transações.
Sempre que um componente que está fazendo trabalho em uma transação chama qualquer método que causará uma gravação no catálogo COM+, como SaveChanges, InstallApplicationou InstallComponent, um bloqueio de gravador é feito no código do servidor de catálogo COM+ que impedirá que outros gravadores entrem até que a transação atual seja confirmada ou anulada. Ou seja, os gravadores só poderão entrar se tiverem a afinidade de transação correta e estiverem participando da transação atual.
Os leitores não estão bloqueados. No entanto, os dados que os leitores veem não refletem nenhuma alteração provisória feita dentro da transação até que essa transação seja confirmada de fato. Todos os componentes que participam dessa transação veem estados de dados provisórios quando leem dados, mas todos os componentes fora da transação veem essas alterações somente após a conclusão da transação.
Comportamento de SaveChanges
Para obter o comportamento de isolamento descrito acima, o RegDB fornece efetivamente um cache que é atuado por componentes dentro da transação. Isso altera o comportamento do métodoSaveChanges.
Normalmente, sem a presença de uma transação, as alterações pendentes são gravadas no catálogo quando você chama SaveChangese SaveChanges não retorna até que todas as gravações sejam concluídas. Isso garante que, se uma chamada para SaveChanges retornar com êxito, você poderá chamar StartApplication e ativará o aplicativo com novos dados.
No entanto, dentro de uma transação, SaveChanges afeta apenas o cache, não o Próprio RegDB e SaveChanges retorna imediatamente se todas as alterações foram confirmadas transacionalmente no RegDB. Não há garantia de que StartApplication esteja usando novos dados subsequentes ao retorno de SaveChanges. Se você precisar chamar StartApplication neste contexto, é aconselhável aguardar algum período antes de fazer isso.
Período de Time-Out de transação
Se você estiver fazendo várias operações de administração dentro de uma transação, pode ser uma transação de execução prolongada. Nesse caso, o valor de tempo limite da transação pode ser um problema. Isso é determinado pelo valor de tempo limite da transação definido para o componente que inicia a transação ou pela configuração de tempo limite de todo o computador para o computador em que esse componente está em execução. Se você estiver fazendo várias operações dentro de uma transação, é aconselhável definir o período de tempo limite de transação apropriado para um valor suficientemente longo e, se necessário, restaurar a configuração original quando terminar.
Recursos de catálogo com+ não transacionais
O Registro, o sistema de arquivos e o MSI (Windows Installer) são recursos de catálogo COM+ que não são transacionais.
Nota
Se houver um erro que anule uma transação, as alterações nesses recursos poderão não ser revertidas.
Se houver um erro ao instalar um aplicativo COM+ existente de um arquivo .msi, o aplicativo não aparecerá no snap-in dos Serviços de Componentes, mas poderá aparecer nos programas Adicionar/Remover, nesse caso, você precisará removê-lo manualmente.
Recuperando no caso de travamentos do sistema
Se um componente que executa operações de administração dentro de uma transação fosse travado enquanto ele mantém um bloqueio de gravador no código do servidor de catálogo, ele bloquearia todos os outros de fazer quaisquer alterações no catálogo. Se isso acontecer, você poderá limpar o bloqueio no catálogo desligando e reiniciando o aplicativo System.
Script com um objeto TransactionContext
Uma maneira simples de fazer operações de administração dentro de transações é usar um objeto TransactionContext para controlar a transação. Por exemplo, o script do Visual Basic a seguir demonstra como adicionar transacionalmente dois novos aplicativos para que ambos os aplicativos ou nenhum aplicativo seja criado:
Dim txctx
Dim cat
Dim apps
Dim app1
Dim app2
WScript.Echo "Starting"
Set txctx = CreateObject("TxCtx.TransactionContext")
Set cat = txctx.CreateInstance("COMAdmin.COMAdminCatalog")
Set apps = cat.GetCollection("Applications")
Set app1 = apps.Add
app1.Value("Name") = "Test App #1"
apps.SaveChanges
Set app2 = apps.Add
app2.Value("Name") = "Test App #2"
apps.SaveChanges
WScript.Echo "Ending"
txctx.Commit
Tópicos relacionados
-
exemplo introdutório usando o catálogo de administração com+
-
visão geral dos objetos COMAdmin
-
definindo propriedades e salvando alterações no catálogo com+