Sei sulla pagina 1di 13

Delphi 7: Criando Servidor de Aplicação COM+ e

Utilizando o Serviço em uma Aplicação Cliente - parte 1


Por Laercio Guerço Rodrigues

Objetivando seguir uma linha baseada na simplicidade, iremos na sequência, criar


um Componente de Acesso e Manipulação de Dados, implementado em Delphi 7
adotando tecnologia COM+. Este propósito será seguido, em função de estarmos
direcionando o artigo aos profissionais que ainda não tem conhecimento prévio
sobre “Desenvolvimento Baseado em Componentes”.

Não é propósito deste artigo, conceituar amplamente a tecnologia COM+, sobre


tudo, esgotar esclarecimento sobre seus efeitos e consequências no
desenvolvimento de sistemas.

De toda forma, segue uma pequena mas importante lista de benefícios que a
adoção de COM+ traz aos aplicativos:

1 - Quando devidamente registrado no COM+ (Utilitário Serviços de componentes),


possibilita o controle de pooled de conexão com o Banco de Dados. Isto por si só já
valeria o empenho em adotar esta tecnologia.

2 - Implementa um dos paradigmas da Orientação a Objeto, que é, centralização


da lógica de negócio em um serviço reutilizável, de manutenção centralizada entre
outraos.

3 - Aponta para uma solução onde esclabilidade é alvejada.

4 - No caso particular do Delphi, implementar COM+ em nossos aplicativos, não


agrega complexidade, muito pelo contrário, como poderá ser observado, facilita em
muito a manutenção e distribuição de aplicativos.

Como última obseração, tenha em mente uma aplicação convencional baseado no


modelo Client/Server, onde extrairemos o DataModele que acomoda os controles de
acesso a dados, bem como, possíveis procedimentos ali implementados.

Esse DataModule, será compilado a parte (em uma aplicação COM+), separando a
lógica de acesso a dados e de negóciodo restante da aplicação.

O restante da aplicação, que corresponde aos possíveis formulários com seus


controles de dados (DataControls) serã compilados em uma aplicação a parte.

Detalhando melhor as tecnologias envolvidas, teremos na aplicação convencionada


como AppServer, o uso de uma middleware (no nosso caso dbExpress) para acesso
a dodos, expondo os DataSets por intermédio da tecnologia DataSnap (Midas) se
utilizando do componente DataSetProvider. Na aplicação cliente, denominada
AppClient, utilizaremos os DataControls já citados, apoiados por um componente
DCOMConnection, que possibilitará o acesso aos recursos da aplicação servidora.

Complementando o quadro, ainda na aplicação Cliente, adotaremos ClientDataSet


como mecanismo de acesso aos serviços de dados do lado servidor do aplicativo.

Finalizando, teremos um peque tutorial de como registrar os serviços (AppServer)


no utilitário Serviços de Compónetes do Windows.
Criando a aplicação AppServer

1 - Menu New|Other|Multitier – Ver figura 01

Figura 01

2 - Em seguida, observer a figura 02, para a qual definiremos nosso datamodulo


remoto.

Figura 02

3 - Salve o projeto exemplo em um diretório denominado ServerComPlus,


nomeando a unidade referente ao datamodule como Dados e o projeto como
AppSever.
4 - Aplique os componentes conforme imagem da figura 03, definindo a lista de
propriedade que se segue:

Componete / Propriedade / Valor

SQLConn / Params /*Definir acesso ao banco de dados de sua escolha

SQLProdutos / SQLConnection / SQLConn

SQLProdutos / CommandText / Select * from Produtos

DSPProdutos / DataSet / SQLProdutos

Figura 03

Considerações:

a) A tabela produto tem como estrutura: id_produto(Numérico),


Descricao(Varchar), Preco(Numérico) e saldo(Numérico).

b) Não estamos utilizando parâmetros na instrução Commandtext do DataSet, para


simplificar o exemplo.

5 - Compile a aplicação, e observe no diretório do projeto um arquivo denominado


AppServer.dll

Bom, só nos resta agora, registrar nosso componente no COM+ (Serviços de


Componentes) para podermos utilizar na aplicação cliente.

Registrando AppServer.dll no COM+

1 - Execute o aplicativo “Serviço de componentes” - Iniciar | Painel de Controle |


Ferramentas Administrativas | Serviço de Componentes – ver figura 04.
Figura 04

2 - Clicando com o botão direito do mouse sobre o nó COM+ Applications,escolha


New | Application. Na figura 05 clique em Next.

Figura 05

3 - Clique em Create an empty application – Figura 06


Figura 06

4 - Clique em Next, mas antes defina como na imagem Figura 07

Figura 07

5 - Não cosidere a imagem da figura 08, clicando em Next


Figura 08

6 - Finalize a útima tela (Finish), e observe como se apresenta o diretório de nosso


aplicativo na figura 09.

Figura 09
7 - Para finalizar o processo, clique com o botão direito do mouse sobre o nó
AppServerTeste, indicando New|Component e vá avançando até alcançar a imagem
da figura 10.

Figura 10

8 - Agora, clicando em Install new component(s), escolhendo o arquivo


AppServer.dll conforme imagens das figuras 11 e 12

Figura 11
Figura 12

Pronto atingimos o ponto em que disponibilizamos o uso destes serviços a


aplicativos clientes, sobre tudo, na fase de desenvolvimento dos mesmos.

Para completar este ecercício, procure em “Artigos” neste site, o complemento


deste, sob o mesmo titulo, porém denominado “Parte II”.

Existe neste mesmo site, outros artigos correlatos, e é bastante frequente em


outros sites, artigos do mesmo gênero. A saber, artigos de meu amigo Bruno Lichot
e do Sr. Guinter Poali.

Esta é uma forma revolucionária de desenvolvimento, porém, muito pouco


divulgada e adotada. Creio eu em minha humilde visão, de se tratar de falta de
coragem, seguido da falta de literatura específica, com um certo acomodamento no
desenvolvimento do já fadado modelo cliente servidor.

Dando continuidade ao artigo anterior, construiremos agora, um aplicativo que


representará a camada cliente do modelo de objetos distribuidos.

Algumas características diferem este aplicativo, devido ao modelo a que está


incutido, dos aplicativos convencionais. A saber, considere a lista que segue:

1 - A principal característica, é que não há acesso a banco de dados, ainda, que


nosso exemplo manipule dados oriundos de um servidor de aplicação que cumpre
este papel.

2 - Não acomoda regras, exceto é claro aquelas inerentes a lógica de interface


como: Tratamento de data, mascaras, etc...
3 - Tem requerimento de hard inferior aos aplicativos Cliente Servidor, devido ao
fato de não implementar conexão a SGBD.

4 - No nosso exemplo, o ambiente de execução é Windows, devido ao fato de o


Servidor de Aplicação ter sido desenvolvido em COM+. Porém, caso tivessemos
desenvolvido o Servidor usando tecnologia de WebServices, por exemplo, devido ao
protocolo http, teríamos um cliente independente do protocolo proprietário. Isto é
assunto para uma outra série de artigos, que complementarão este.

Aqui será omitido um procedimento que diz respeito a exportação dos registros do
Servidor COM+, para que máquinas da rede possam utilizar os serviços expostos
pelo mesmo. O registro em si foi amplamente abordado, com um tutorial passo-a-
passo no artigo inicial. Procederemos assim, para focarmos a tecnologia e seu uso
de forma mais simples possível. Em outra ocasião, prometemos um artigo
específico a esta necessidade.

Criando a aplicação Client

1 - Menu File|New|Application

2 - Aplique os componentes conforme imagem da figura 01

Figura 01

3 - Em seguida, observe a figura 02, onde deverá ser incluido os componentes


DCOMConnection, da paleta DataSnap, um ClientDataSet da paleta DataAccess e
por útimo um DataSource também da paleta DataAccess.

Obs: Não utilizamos DataModule aqui para incurtar conversa. Não deixe de utilizar
em projetos do mundo real.
Figura 02

4 - As imagens que se seguem (figuras 03, 04 e 05) definem as propriedades a


serém manipuladas para os objetos em questão.

Obs: Visando melhor orientar o leitor, abaixo de cada imagem,são comentadas as


propriedades que devem ser manipuladas.

Figura 03

- Para a figura 03, observe a propriedade ServerName, para qual escolhemos


AppServer.ClasseDados. Isto foi possível devido ao registro no Serviço de
Componentes (COM+) do artigo inicial. Assim procedendo, temos acesso a todos os
serviços(em nosso caso DataSetProvider) ali contidos.
Figura 04

- Na figura 04, observamos a implementação do ClientDataSet, que é o objetivo


maior, simplesmente, nesta ordem, manipulando as propriedades RemoteServer,
que representa o acesso ao serviço, e a propriedade ProviderName, que permite a
escolha do serviço desejado.

Figura 05
- Finalizando, indique na propriedade DataSet (figura 05) CDSProdutos, e não se
esqueça também, de completar a tarefa, indicando na propriedade DataSource do
DBGrid, o DataSource em questão.

Abaixo, observe o código resultante, com destaque (negrito) para os procedimentos


criados.

==============Fontes da Unit do Projeto==============================

program Pcliente;

uses

Forms,

complus in 'complus.pas' {Frmcomplus};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TFrmcomplus, Frmcomplus);

Application.Run;

end.

==============Fim dos Fontes da Unit do Projeto=========================

==============Fontes da Unit do Formulário=============================

unit complus;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, DBClient, MConnect, Grids, DBGrids, StdCtrls, Buttons;

type

TFrmcomplus = class(TForm)

BTAbrir: TBitBtn;

BTAtualizar: TBitBtn;

BTFechar: TBitBtn;

DBGrid1: TDBGrid;

DCOMConn: TDCOMConnection;

CDSProdutos: TClientDataSet;

DSProdutos: TDataSource;

procedure BTAbrirClick(Sender: TObject);

procedure BTAtualizarClick(Sender: TObject);

procedure BTFecharClick(Sender: TObject);

private

{ Private declarations }
public

{ Public declarations }

end;

var

Frmcomplus: TFrmcomplus;

implementation

{$R *.dfm}

procedure TFrmcomplus.BTAbrirClick(Sender: TObject);

begin

CDSProdutos.Close;

CDSProdutos.Open;

//Abre o DataSet

end;

procedure TFrmcomplus.BTAtualizarClick(Sender: TObject);

begin

CDSProdutos.ApplyUpdates(0);

//Aplica possíveis inclusões, alterações e exclusões procedidas no lado cliente junto ao Servidor.

end;

procedure TFrmcomplus.BTFecharClick(Sender: TObject);

begin

Frmcomplus.Close;

//Fecha o formulário.

end;

end.

==============Fim dos Fontes da Unit do Formulário======================

Como podemos ver, e foi prometido, o projeto de exemplo, inclusive a parte


servidora da aplicação, seguiu uma linha orientada pela simplicidade. Isto de
maneira nehuma anula o aprendizado, ficando aqui um desafio para o leitor
avançar nesta forma de programação. De nossa parte fica a promeça de outros
artigos que oriente o leitor neste sentido.

Uma última consideração, é para que o leitor não se esqueça de criar a tabela e por
dados na mesma, objetivando ter uma resposta ao exercício.

Potrebbero piacerti anche