Curso de dbExpress e DataSnap

Parte XXIII – Introdução ao COM+

Como víamos, um dos problemas do DCOM é a sua escalabilidade. Isto é, ele não apresenta os mesmo resultados quando há um aumento do número de conexões, perdendo desempenho. Objetos DCOM mantém informações persistentes sobre cada cliente que instancia um objeto do seu tipo, e só irá liberar tais recursos quando a variável sair do escopo no programa cliente. Devido aos objetos DCOM permanecerem ativos com informações sobre o cliente e sua ativação, são conhecidos como objetos com estado.

O sucessor do DCOM foi o MTS (Microsoft Transaction Server). Ele incorporou diversos recursos a essa tecnologia. O MTS é instalado como parte do Windows NT 4 Server (Option Pack). Diferente do DCOM que não possui um gerenciador próprio (a não ser o pequeno DCOMCNFG.EXE), o MTS utiliza o MMC (Microsoft Management Console) para configurar e gerenciar objetos. O COM + é o sucessor do MTS (mais o MSMQ – Microsoft Message Queue), e herda deles inúmeros recursos: gerenciamento centralizado, pooling de objetos, suporte a transação e escalabilidade.

O COM+ acompanha o Windows 2000/XP, formando a chamada camada lógica de negócio em um sistema Distribuído (Multicamadas).

 

image001.png 

Figura. COM + atuando na camada lógica de negócio em uma arquitetura distribuída

Criando componentes COM+

Clique em File|New|Active X|Transactional Object.

 

 image003.png

Figura. Criando um objeto COM+

Na caixa de diálogo que aparece digite “Soma” para CoClas Name.

 

 image005.png

Figura. Opções de criação de um objeto COM+

Pressione File|Save All e salve a unit como “uSoma.pas” e o projeto como “LibSoma.dpr”. Da mesma forma que fizemos para o objeto COM criado neste mesmo módulo, crie um método chamado Somar que aceite dois parâmetros do tipo Single.

 

 image007.png

Figura. Editor da Type Library

Implemente a função na unit da seguinte forma:

 

function TSoma.Somar(x, y: Single): Single;

begin

  result:=x+y;

end;

 

Clique em Project|Build LibSoma.

TMtsAutoObject

A classe TMtsAutoObject encapsula objetos e interfaces de um servidor de aplicação MTS.

 

TSoma = class(TMtsAutoObject, ISoma)

protected

  function Somar(x, y: Single): Single; safecall;

end;

 

TMtsAutoObject = class(TAutoObject, IObjectControl)

private

  FObjectContext: IObjectContext;

  FCanBePooled: Boolean;

protected

  { IObjectControl }

  procedure Activate; safecall;

  procedure Deactivate; stdcall;

  function CanBePooled: Bool; virtual; stdcall;

 

  procedure OnActivate; virtual;

  procedure OnDeactivate; virtual;

  property ObjectContext: IObjectContext read FObjectContext;

public

  procedure SetComplete;

  procedure SetAbort;

  procedure EnableCommit;

  procedure DisableCommit;

  function IsInTransaction: Bool;

  function IsSecurityEnabled: Bool;

  function IsCallerInRole(const Role: WideString): Bool;

  property Pooled: Boolean read FCanBePooled write FCanBePooled;

end;

Instalando o servidor COM+

Você pode instalar o objeto COM+ de duas formas:

·         Usando o gerenciador MMC chamado Serviços de Componente

·         Usando a opção Install COM+ Objects disponível na IDE do Delphi.

Usaremos a segunda opção. Clique em Run|Install COM+ Objects.

 

image009.png 

Figura. Instalando um servidor COM+

Preencha as opções como mostra a figura a seguir.

 

image011.png 

Figura. Instalando um servidor COM+

Atenção: Quando você instala a aplicação no catálogo do COM+ ela estará automaticamente registrada.

Criando o cliente

Clique em File|New|Application. Clique em File|Save All e salve a unit como “uCliSoma.pas” e a aplicação como “CliSoma.dpr”. Clique em Project|Add to Project e adicione o arquivo LibSoma_TLB.pas, que é a Type Library do servidor criado anteriormente. No formulário principal aperte ALT+F11 e adicione a TLB à cláusula uses. No evento OnClick do botão digite:

 

Edit3.text:=FloatToStr(CoSoma.Create.Somar(

  StrToInt(Edit1.Text),StrToInt(Edit2.Text)));

 

image013.png 

Figura. Cliente para um servidor COM+

 

Download

Leia todos artigos da série