Artigo Clube Delphi 66 - DataSnap e COM+

Nesta etapa, concluiremos nosso curso de DataSnap e COM+ continuando a aplicação de movimentações financeiras iniciada na edição anterior.

Esse artigo faz parte da revista Clube Delphi Edição 66. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler esse artigo em PDF.

DataSnap e COM+

Parte III - Obtendo um melhor desempenho da aplicação multicamadas

 

Mesmo com a evolução de arquiteturas como Java e .NET, devemos sempre tentar conhecer ambientes que servem de base para um mundo no qual componentes e objetos se relacionam e se comunicam. A poderosa arquitetura COM+ da Microsoft ainda está viva e pode ser observada em muitos sistemas já existentes, especialmente no mundo Win32. Um melhor entendimento dessa, certamente nos trará diversos benefícios na hora de projetar um sistema em qualquer ambiente.

Nesta etapa, concluiremos nosso curso de DataSnap e COM+ continuando a aplicação de movimentações financeiras iniciada na edição anterior. A aplicação permitirá a transferência de valores monetários entre diferentes contas de um banco, fazendo uso efetivo de técnicas avançadas do COM+, como transações em nível de objeto. Além disso, vamos apresentar técnicas sempre com foco em um melhor desempenho, abrindo margem para modificações em sistemas legados ou novos projetos.

 

MTS Transactions

Antes de começar, recupere seus projetos do servidor BancoServer e da aplicação Gerentes. Certifique-se que tudo está funcionando corretamente e mãos à obra! Como você deve estar imaginando, a operação de movimentação entre contas deve possuir caráter “atômico”. Isso significa que não podemos debitar uma conta sem creditar em outra.

O COM+/MTS (com o MSDTC) permite executar facilmente esse tipo de operação em nossos objetos (lembre-se que escolhemos a opção Requires a transaction no momento da criação do servidor). Se você olhar a implementação da classe TMTSDataModule, vai perceber uma propriedade protegida: ObjectContext.

Essa propriedade é do tipo IObjectContext e aponta, em tempo de execução, para o objeto de contexto criado pelo COM+ para o nosso servidor. Veja os métodos dessa interface na Listagem 1. Veja no box Métodos de IObjectContext para Transações para saber mais sobre cada método.

 

Listagem 1. Métodos da IObjectContext

IObjectContext = interface(IUnknown)

  ['{51372AE0-CAE7-11CF-BE81-00AA00A2FA25}']

  function CreateInstance(const cid, rid: TGUID;

out pv): HResult; stdcall;

  procedure SetComplete; safecall;

  procedure SetAbort; safecall;

  procedure EnableCommit; safecall;

  procedure DisableCommit; safecall;

  function IsInTransaction: Bool; stdcall;

  function IsSecurityEnabled: Bool; stdcall;

  function IsCallerInRole(

const bstrRole: WideString): Bool; safecall;

end;

 

Métodos de IObjectContext para Transações

- SetComplete: o objeto terminou sua operação e as informações podem ser efetivadas;

- SetAbort: o objeto terminou sua operação mas as informações devem ser revertidas ao contexto original (rollback);

- EnableCommit: as informações podem ser efetivadas;

- DisableCommit: as informações não podem ser efetivadas;

- IsInTransaction: retorna True se o objeto atual faz parte de uma transação.

 

No RDMMain, coloque um ADOQuery (“aqrMovimenta”) e digite na propriedade SQL o seguinte código:

 

update CONTA

set saldo = saldo + :valor" [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados