Você está na página 1de 4

Conexo aplicao multicamadas DELPHI 2010 com DATASNAP

OBJETIVO: Como feito a conexo usando DATASNAP SERVER na aplicao


servidora e utilizando VCL FORMS APPLICATION na aplicao cliente com protocolo
de comunicao TCP/IP. Isso tudo nesta grande e maravilhoso ferramenta DELPHI
2010.

Servidor de Aplicao: Rodando uma aplicao servidora DATASNAP, podendo


tambm rodar nesta mesma mquina o banco de dados, porm o banco de dados pode
utilizar outra mquina sendo acessada por este servidor.
Servidor de Bando de Dados: Rodando um banco de dados, pode ser FIRBERID,
INTERBASE, POSTGRE, MYSQL, ORACLE, SQLSERVER e etc. A comunicao
tambm via TCP/IP. Vale resaltar que a Estao Cliente no tem acesso ao Servidor
Bando de Dados diretamente, somente atravs do Servidor de Aplicao, garantido
assim a segurana das informaes. No vamos abordar o banco neste estudo.
Estaes Clientes: Os usurios utilizando uma aplicao cliente (VCL FORMS)
acessando o Servidor de Aplicao atrves da internet conectado via TCP/IP. Aqui vale
ressaltar que pode criptografar o contedo transmitido, para que um interceptador
qualquer no consiga decodificar os dados, at compresso de dados pode utilzar, mas
este assunto em outra oportunidade.
Vamos na prtica:

1)Acessar o DELPHI 2010.


2)Criar Aplicao Servidora:
a)Opo FILE --> NEW --> Other --> Datasnap Server --> OK.

b)Selecione as seguintes opes:

VLC Forms Application (Aplicao normal visvel pelo form. Console


Application roda sem a interface grfica do Windows e Service Application
como servio do Windows e no executvel, nada visual);
TCP/IP (vamos utilizar este protocolo de comunicao e no HTTP autenticado
ou no);

ADD SERVER METHODS CLASS (Seleciona este item para criar uma classe
contendo mtodos que seram invocados pela Aplicao Cliente l na Estao
Cliente). Esta classe pode ser herdada das seguintes classes TDSServerModule,
TDataModule ou TPersistent, no nosso caso Ancestor : TDSServerModule;

INCLUDE SAMPLE METHODS (Inclui mtodo exemplo para efetuarmos


nossos testes);

OK.

c)O Delphi 2010 cria 3 Units que so as seguintes:


o i)UNIT1.PAS: Nada especial, serve apenas para visualizarmos a aplicao
podendo colocar o nmero de conexo que sero feitas no Servidor Aplicao;
o ii)SERVERMETHODSUNIT1.PAS: Classe herdada do TDSERVERMODULO,
expe os mtodos (criado somente um neste caso) que sero acessados pela
Aplicao Cliente. O mtodo exemplo criado no nosso caso foi EchoString que
simplesmente retorna uma String recebida. Um exemplo simplrrimo mas que
mostra a integrao entre a Aplicao Servidora com a Aplicao Cliente. Faa o
seguinte, onde tem o cdigo Result := Value; coloque Result:= Value+' Hlio
Marques.'; seu nome.
o

iii)SERVERCONTAINER1.PAS: Herdada do TDATAMODULE, contm 3


importantes componentes que efetuaro o gerenciamento da Aplicao
Servidora. So eles:
TDSERVER: Controla nosso servidor;
TDSTCPSERVER: Responsvel pelo transporte via protocolo de comunicao
TCP/IP atravs de uma porta definida, cuja porta tem que ser a mesma utilizada
na construo da Aplicao Cliente futura;
TDSSERVERCLASS: Classe que tem os mtodos, podendo ter vrias classes,
dependendo de como foi modelado o Sistema. Aqui tem uma propriedade
chamada LIFECYDE que muito importante sua definio, pois a mesma que
vai definir o comportamento da Classe em questo. Trs opes:

INVOCATION: Quando a classe chamada, cria a instncia, atende e


depois destruda.
SESSION: Quando a classe chamada pela 1 vez, instanciada e
permanece na sesso, caso esta mesma sesso necessite, utiliza a mesma
instncia. Quando a sesso for encerrada a instncia destruda. Esta
opo que utilizaremos.

SERVER: Quando a classe chamada pela 1 vez, cria-se uma instncia


que atender a todas as sesses. Somente ser destruda quando desligar
o equipamento.

Na criao das Units observe em PROJECT/OPTIONS/FORMS na opo AutoCreate forms tem o FORM1 e SERVERCONTAINER1, este fica de prontido
aguardando uma requisio da Aplicao Cliente pra atender.
d)Para efeito de teste Salve o projeto adotando os mesmos nomes sugeridos em uma
pasta ..\SERVER.
e)Efetue a gerao do executvel do projeto (PROJECT\BUILD), fecha o projeto,
depois manda executar por fora do DELPHI em uma mquina que tenha IP FIXO, isto
, que possa ser acessado via internet, no nosso caso agora deixe rodando na sua
mquina desenvolvedora. Lembrando que quando for levar aplicao para rodar em
outra maquina tem que levar tambm o midas.dll (biblioteca que permite a utilizao
da tecnologia DATASNAP). Vamos agora para Aplicao Cliente.

3)Criar Aplicao Cliente:


a)Opo FILE --> NEW --> VCL Forms Application Delphi: Applicao normal
VCL Form.
b)Form1 criado coloca o componente de conexo TSQLCONNECTION do
DBEXPRESS e adote nas seguintes propriedades:
o

i)DRIVER: Datasnap (no oracle, nem firebird, nem outro driver de banco de
dados mas o Datasnap, pois este que far a conexo Aplicao Servidora e
esta com o Banco de Dados, se tiver). Depois dentro do DRIVER tem:
HOSTNAME: IP fixo ou Domnio do Servidor Aplicao (como a
Aplicao Servidora j est rodando na sua mquina mesmo, o
HOSTNAME localhost ou 127.0.0.1);

PORTA: Aqui tem que ser a mesma porta que a Aplicao Servidora
adotou no componente TDSTCPSERVER da unit
SERVERCONTAINER1. No caso 211;

ii)LOGINPRONTO: False (no precisa de login neste exemplo).

c)Pronto, quase pronto! Vamos conectar o SQLCONNECTION (propriedade


Connected=true), isso aplicao Servidora j rodando (no Ar) e com o boto direito
vamos escolher GENERATE DATASNAP CLIENT CLASSES. Muito bem! Neste
momento o Delphi cria uma unit (UNIT2.PAS) com todas as classes disponveis na
Aplicao Servidora juntamente com todos os mtodos acessiveis para a Aplicao
Cliente, no nosso caso, somente o Mtodo EchoString.
d)Abra o FORM1 e clique em FILE --> USE UNIT e use a UNIT2 criada, coloca um
boto e no evento onClink coloca o seguinte cdigo:

procedure TForm1.BitBtn1Click(Sender: TObject);


var ClasseDisponivelnoServidor : TserverMethods1Client;//varivel tipo a classe disponvel
Mensagem_Retornado_pelo_Servidor: String; //varivel tipo string normal
begin
//aqui instncia a classe passando o como parmetro a conexo do SQLCONNECTION
ClasseDisponivelnoServidor := TserverMethods1Client.Create(SQLConnection1.DBXConnection);
//invoca o nico, neste caso, mtodo disponvel na classa l na Aplicao Servidora
Mensagem_Retornado_pelo_Servidor := ClasseDisponivelnoServidor.EchoString('MENSAGEM,
VAI L NO SERVIDOR E RETORNE MEU NOME:');
//aqui apenas disponibiliza na tela a mensagem
ShowMessage(Mensagem_Retornado_pelo_Servidor);
end;

e)Salve tudo com os nomes sugeridos em uma pasta ..\Cliente e faa um BUILD no
projeto (PROJECT\BUILD). Efetue a execuo e pode testar clicando no boto (com a
Aplicao Servidora rodando) e veja o resultado.

CONCLUSO: Vejam como simples criar uma aplicao multicamadas, lgico que
tem que aprofundar os conceitos, tem muito mais recursos a serem analisados, mas este
estudo mostra a base, abre as portas para o entendimento, pois o mistrio de aplicao
multicamada est cada vez mais sendo faclitado pela esta grande ferramenta chamada
DELPHI, principalmente com esta nova verso 2010.
Espero ter contribudo em algo.
Atenciosamente.